第八章 面向对象程序设计(1)
- 格式:ppt
- 大小:1.04 MB
- 文档页数:17
面向对象程序设计⏹结构化程序设计的基本内容:1.结构的类型:顺序、分支、循环2.结构化程序设计思想:利用过程或函数来抽象和模拟客观现实。
3.结构化程序设计方法:1)重点放在如何实现细节过程方面,将数据与函数分开。
2)形式:主模块+若干个子模块(如C:main()+子函数)。
4.特点:自顶向下,逐步求精——功能分解。
5.缺点:效率低,是手工作坊式的编程。
6.结构化程序的问题——数据与算法分离,程序数据和操作数据的函数是分离的。
⏹面向对象程序设计观点:1.自然界是由各种各样的实体(对象)所组成,每种对象都有自己的内部状态和运动规律,不同对象之间的相互联系和相互作用就构成了各种不同的系统,进而构成整个客观世界。
2.程序设计方法:使用面向对象的观点来描述模仿并处理现实问题。
3.要求:高度概括、分类和抽象。
4.目的:实现软件设计的产业化。
5.基本概念:1)对象:用来描述客观事物的一个实体,它是构成系统的一个基本单元。
一个对象具有一组属性和行为。
实体对象*一台计算机抽象对象*一项计划2)对象构成要素:对象标识符:是对象的名称,用来区别于其他对象。
属性:是用来描述对象静态特征的一个数据项。
行为:是用来描述对象动态特征和行为的操作。
3)消息(Message)用于描述事件发生的信息。
消息是对象之间发出的行为请求。
多个消息构成一个事件(Event)。
对象之间通过传递消息相互影响。
对象示例:一个“学生”对象的例子对象名:学生属性:学号:123456姓名:令狐冲年龄:18专业:信管行为:修改学号、姓名、专业、年龄等等对象示例:一个“课程”对象的例子:对象名:课程属性:课程号:123456课程名:程序设计任课教师:莫名选课要求:学时:48行为:获取并修改课程名、课程号、学时数、选课要求、任课教师等4)类:是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供统一的抽象描述,是对象集合的再抽象。
5)类和对象的关系:类(抽象定义)<->对象(实例)6)类<->对象举例学生<->学生王强课程<->C++程序设计类型<->变量,如C语言中的int和int x;7)类的实例——用类定义的类变量,即对象。
面向对象程序设计试题(1)一、单项选择(每小题1分,12小题,共12分)1. 由C++源程序文件编译而成的目标文件的缺省扩展名为( )。
A. cppB. exeC. objD. lik2.设x和y均为bool量,则x && y为真的条件是( )。
A. 它们均为真B. 其中一个为真C. 它们均为假D. 其中一个为假3. 在下面的二维数组定义中,正确的是( )。
A. int a[5][];B. int a[][5];C. int a[][3]={{1,3,5},{2}};D. int a[](10);4. 以下正确的说法是()。
A. 用户调用标准库函数前,必须重新定义B. 用户可以重新定义标准库函数,若如此,该函数将失去原有含义C. 系统不允许用户重新定义标准库函数D. 用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中5. 文件包含命令中被包含的文件的扩展名()。
A. 必须是.hB. 不能是.hC. 可以是.h或.cppD. 必须是.cpp6. 要使语句“p=new int[10][20];”能够正常执行,p应定义为()。
A. int *p;B. int **p;C. int *p[20];D. int(*p)[20];7. 软件产品准确执行软件需求规格说明书中所规定的任务的能力叫做软件的()。
A. 可维护性B. 可复用性C. 兼容性D. 正确性8. 假定AA为一个类,a为该类私有的数据成员,若要在该类的一个成员函数中访问它,则书写格式最好为()。
A. aB. AA::aC. a()D. AA::a()9. 队列具有()的操作特性。
A. 先进先出B. 先进后出C. 进出无序D. 仅进不出10. 当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储( )个整数。
A. nB. n+1C. n-1D. 111. 假定AB为一个类,则执行“AB a, b(3), *p;”语句时共调用该类构造函数的次数为( )。
Object- Oriented ProgrammingC++主讲成长生东华大学计算机科学与技术学院第一章概述§1.1 面向对象程序设计的基本思想C++是基于C语言发展的, 又冲破C语言局限的面向对象的程序设计语言。
它与Java语言都作为当前计算机科学的主流语言, 越来越受到用户的欢迎。
要弄清楚什么是面向对象的程序设计, 首先了解和回顾传统的( Pascal( 或C) ) 结构化程序设计方法及其设计思想、程序结构及特点。
SP(Structure Programming)是60年代诞生的针对当时爆发的所谓”软件危机”, 为此发展形成了现代软件工程学的基础。
SP的总的设计思想是:.自顶向下、层次化.逐步求精、精细化程序结构是按功能划分基本模块的树型结构, 使模块间的关系尽可能简单独立。
因此SP的程序的基本特点是:.按层次组织模块( 战略上划分战役).每一模块只有一个入口, 一个出口.代码和数据分离( 程序=数据结构+算法)归纳得到: SP把数据和过程( 代码、函数) 分离为相互独立的实体, 用数据代表问题空间中的客体借以表示实际问题中的信息; 程序代码则用来处理加工这些数据。
程序员在编程时, 必须时刻考虑所要处理的数据结构和类型。
对不同的数据格式即使要作同样的处理计算, 或者要对相同的数据格式作不同的处理都必须编写不同的程序( 如两个整型数和两个浮点数相加) 。
这样的编程方法, 即传统的SP方法设计出来的程序或系统其可重用的成分很少。
其次把数据和代码作为不同的分离实体时, 总存在着用错误的数据调用正确的程序模块, 或用正确的数据调用错误的程序模块的危险, 从而使数据与程序始终保持兼容, 已成为程序员的一个沉重的负担。
在开发一个大型软件课题中, 当工程进入到后期若用户改变了方案要求, 很容易使技术人员的前期工作受到摧毁性的打击, 使其前功尽弃。
为克服以上的弊端或者该SP方法难以控制处理的矛盾而产生了面向对象程序设计方法, 即Object -Oriented Programming――OOP。
1.什么是结构化程序设计方法?这种方法有哪些优点和缺点?【解答】结构化程序设计方法是指20世纪60年代开始出现的高级语言程序设计方法,由于采用了数据结构化、语句结构化、数据抽象和过程抽象等概念,使程序设计在符合客观事物与逻辑的基础上更进了一步。
结构化程序设计的思路是:自顶向下、逐步求精。
程序结构由具有一定功能的若干独立的基本模块(单元)组成,各模块之间形成一个树状结构,模块之间的关系比较简单,其功能相对独立,模块化通过子程序的方式实现。
结构化程序设计方法使高级语言程序设计开始变得普及,并促进了计算机技术的深入应用。
虽然结构化程序设计方法采用了功能抽象、模块分解与组合,以及自顶向下、逐步求精的方法,能有效地将各种复杂的任务分解为一系列相对容易实现的子任务,有利于软件开发和维护;但与面向对象程序设计方法相比,结构化程序设计存在的主要问题是,程序的数据和对数据的操作相互分离,若数据结构改变,程序的大部分甚至所有相关的处理过程都要进行修改。
因此,对于开发大型程序具有一定的难度,软件的可重用性差,维护工作量大,不完全符合人类认识世界的客观规律。
2.面向对象程序设计有哪些重要特点?【解答】软件设计的目的是为了解决日常生活中存在的各种实际问题,面向对象程序设计与以往各种程序设计方法的根本区别是程序设计的思维方法的不同。
它主要具有如下重要特点:(1)面向对象程序设计实现了较直接地描述客观世界中存在的事物(即对象)及事物之间的相互关系,它所强调的基本原则是直接面对客观事物本身进行抽象,并在此基础上进行软件开发,将人类的思维方式与表达方式直接应用在软件设计中。
(2)面向对象的程序设计将客观事物看作具有属性和行为的对象,通过对客观事物进行抽象来寻找同一类对象的共同属性(静态特征)和行为(动态特征),并在此基础上形成类。
(3)面向对象的程序设计将数据和对数据的操作封装在一起,提高了数据的安全性和隐蔽性。
第1章面向对象程序设计概述3(4)面向对象的程序设计通过类的继承与派生机制以及多态性特性,提高了软件代码的可重用性,因而大大缩减了软件开发的相关费用及软件开发周期,并有效地提高了软件产品的质量。
面向对象程序设计面向对象程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它使用“对象”来设计软件。
对象可以包含数据(通常称为属性)和代码(通常称为方法或函数)。
面向对象程序设计的核心概念包括封装、继承、多态和抽象。
封装封装是将数据(属性)和操作这些数据的方法(行为)绑定在一起的过程。
封装的目的是隐藏对象的内部状态和实现细节,只暴露出一个可以被外界访问的接口。
这样,对象的使用者不需要了解对象内部的复杂性,只需要通过公共接口与对象交互。
继承继承是一种机制,允许新创建的类(子类)继承现有类(父类)的属性和方法。
这使得代码重用变得可能,同时也支持层次结构的创建。
子类可以扩展或修改父类的行为,但通常保持父类的大部分功能。
多态多态性是指允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。
在面向对象编程中,多态性通常是通过方法重载(同一个类中多个同名方法,参数不同)和方法重写(子类重写父类的方法)实现的。
抽象抽象是简化复杂的现实世界问题的过程,只关注对于当前目标重要的方面,忽略不相关的细节。
在面向对象编程中,抽象通常是通过创建抽象类和接口来实现的。
抽象类可以包含抽象方法,这些方法没有具体的实现,必须由子类提供。
类和对象类是创建对象的蓝图或模板,定义了对象的结构和行为。
对象是根据类创建的实例,具有类定义的属性和方法。
每个对象都是唯一的,即使它们是同一个类的实例。
面向对象设计原则在面向对象设计中,有几个关键的设计原则,如单一职责原则、开放-封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则等。
这些原则帮助开发者创建灵活、可维护和可扩展的系统。
面向对象的优势- 代码重用:通过继承和多态性,可以减少代码重复。
- 易于维护:封装和抽象使得修改系统的一部分不会影响其他部分。
- 模块化:系统被分解为独立的模块,每个模块负责特定的功能。
- 可扩展性:系统可以容易地扩展新功能,而不需要重写现有代码。
面向对象程序设计万物皆对象冯君,李永,李群,薛红芳编1面向对象的特性-封装性学习目标:1.理解封装的概念2.掌握private 关键字3.掌握构造方法4.掌握方法重载 重点与难点:封装性的理解,构造方法的使用,方法重载的定义✍理解为什么需要封装封装的定义1.封装,就是隐藏实现细节2.将属性私有化,提供公有方法访问私有属性3.通过这些公有方法访问私有属性,这样做的好处是防止外界直接对属性进行不合理的更改。
✪理解为什么需要构造方法构造方法的定义:构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值。
构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型构造方法的调用:创建对象时自动调用。
这好比是人刚出生父母就给他起好了名字。
带参构造方法:通过调用带参数的构造方法,简化对象初始化的代码。
特殊的this:this 表示当前对象,为了区分成员变量和参数,如果不同名,可以不加this 。
✍方法重载的定义:1.方法名相同。
2.方法的参数类型、个数、顺序至少有一项不相同。
3.方法的返回类型可以不相同。
4.方法的修饰符可以不相同。
思考:构造方法可以重载吗?(可以)public class Teacher{private String name; // 姓名// 返回姓名public String getName() {return name;}// 设定姓名public void setName(String name) { = name;}}public class Teacher {private String name; //姓名// 构造方法public Teacher() {name = "张三";}}//存在问题,每个教师在new 出来时的名字都一样,最简单的解决办法——带参构造方法public Teacher(String name){=name;}Math.max(1,2);Math.max(1.0F,2.0F);Math.max(1.0,2);运行时,Java 虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法☺使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?☺在Java程序中,代码封装带给我们的好处是什么?☺请通过代码封装,实现如下需求:编写一个类Book,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200为各属性设置赋值和取值方法具有方法:detail,用来在控制台输出每本教材的名称和页数编写测试类BookTest进行测试:为Book对象的属性赋予初始值,并调用Book对象的detail方法,看看输出是否正确☺编写一个类Book2,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200具有方法:Sdetail,用来在控制台输出每本教材的名称和页数具有带参数的构造方法:用来完成对象的初始化工作,并在构造方法中完成对页数的最小值限制编写测试类Book2Test进行测试:初始化一个Book2对象,并调用该Book2对象的detail方法,看看输出是否正确☺编写一个类Book3,代表教材:具有属性:名称(title)、页数(pageNum)、类型(type)具有方法:detail,用来在控制台输出每本教材的名称、页数、类型具有两个带参构造方法:第一个构造方法中,设置教材类型为“计算机”(固定),其余属性的值由参数给定;第二个构造方法中,所有属性的值都由参数给定编写测试类Book3Test进行测试:分别以两种方式完成对两个Book3对象的初始化工作,并分别调用它们的detail方法,看看输出是否正确改进上学期所编写的宠物猫程序:运用封装、构造方法及构造方法的重载编写一个宠物猫类,能吃,能喝,能睡,能运动,能捉老鼠。
C/C++测试题面向对象选择题:C++概述1、以下C++新增的关键字为。
A breakB continueC stuctD inline//答案:D2、面向对象程序设计将数据与______放在一起,作为相互依存、不可分割的整体来处理。
A对数据的操作B信息C数据隐藏D数据抽象//答案:A3、面向对象程序设计优于传统的结构化程序设计,其优越性主要表现在,它有希望解决软件工程的两个主要问题:软件复杂性和______。
A 软件生产率的提高B 精化已有的代码C 共享代码D 编写可重用代码//答案:A4、面向对象系统的______是一种信息隐藏技术,目的在与将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需用设计者提供的协议命令对象去做即可。
A多态性B封装性C继承性D复用性//答案:B5、______不是面向对象系统所包含的要素A重载B对象C类D继承//答案:A6、关于C++与C语言的关系的描述中,______是错误的。
A C语言是C++的一个子集B C++与C语言是兼容的C C++对C语言进行了一些改进D C++与C语言都是面向对象的//答案:D7、下面关于对象概念的表述中,______是错误的。
A 对象就是C语言中的结构变量B 对象代表着正在创建的系统中的一个实体C 对象是一个状态和操作(或方法)的封装体D 对象之间的信息传递是通过信息进行的//答案:A8、下面关于类概念的表述中,______是错误的。
A 类是抽象数据类型的实现B 类是具有共同行为的若干对象的统一描述体C 类是创建对象的样板D 类就是C语言中的结构类型9、下列关于C++类的描述中错误的是______。
A 类与类之间可以通过一些手段进行通信和联络B 类用于描述事物的属性和对事物的操作C 类与类之间必须是平等关系,而不能组成层次关系D 类与类之间可以通过封装而具有明确的独立性//答案:C10、下列关键字中,_______既在C语言中使用,又在C++语言中使用A inlineB breakC privateD public//答案:B11、C++对C语言做了很多改进。
一.选择题1.对类的构造函数和析构函数描述正确的是().A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载2.继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A)规律性 B。
传递性 C.重复性 D.多样性3.假设OneClass为一个类,则该类的复制初始化构造函数的声明语句为()。
A.OneClass(OneClass p);B。
OneClass& (OneClass p );C. OneClass(OneClass &p);D。
OneClass (OneClass *p);4.对于结构中定义的成员,其默认的访问权限为()。
A。
public B. protected C。
private D。
static5.下面对静态数据成员的描述中,不正确的是( )。
A.静态数据成员可以在类体内进行初始化B。
静态数据成员不可以在类体内进行初始化C.静态数据成员能受private控制符的作用D.静态数据成员调用前必须初始6。
C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B。
继承C。
封装 D.引用7。
假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为().A. x(a) B。
x[a] C。
x-〉a D。
x.a9. 对于一个类的构造函数,其函数名与类名( )。
A。
完全相同 B。
基本相同 C。
不相同 D. 无关系10。
一个类的构造函数通常被定义为该类的( )成员。
A. 公有 B。
保护 C。
私有 D。
友元11. 一个类的析构函数通常被定义为该类的( )成员。
A. 私有B. 保护C。
公有 D. 友元12。
一个类的静态数据成员所表示属性()。
A。
是类的或对象的属性 B。
一章测试1【单选题】(2分)()是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
A.封装性B.多态性C.继承性D.抽象性2【单选题】(2分)编译时的多态性是通过()来实现的。
A.多态B.重载C.组合D.继承3【单选题】(2分)运行时的多态性是通过()来实现的。
A.静态函数B.虚函数C.纯虚函数D.友元函数4【单选题】(2分)()是对一组具有共同属性特征和行为特征的对象的抽象。
A.静态函数B.成员函数C.类D.对象5【单选题】(2分)()是一个类所描述的一个具体的对象。
A.实例B.对象C.成员函数D.类6【单选题】(2分)()就是从众多的事物中抽取出共同的、本质性的特征,舍弃其非本质的特征。
A.继承B.抽象C.封装D.多态7【单选题】(2分)子类继承了多个父类的数据结构和方法,则称为()。
A.封装B.抽象C.多重继承D.单继承8【单选题】(2分)面向对象设计中,对象就是(),它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。
A.操作B.模块C.方法D.抽象9【单选题】(2分)把面向对象思想应用于软件开发过程中,指导开发活动的系统方法,简称()方法。
A.其它都不对B.面向对象C.面向过程D.面向应用10【多选题】(2分)面向对象程序设计所涉及的术语有类、对象、方法、()和重载。
A.消息B.属性C.数据D.实例第二章测试1【单选题】(2分)大多数C++程序通常包含()头文件,它包含了所有输入/输出操作所需要的信息。
A.string.hB.ostream.hC.iostream.hD.istream.h2【单选题】(2分)运算符<<左边的操作数是()类的一个对象,右边可以是C++的合法表达式。
A.ostreamB.istreamC.ifstreamD.ofstream3【单选题】(2分)()表示标准输出(非缓冲方式)导出程序信息。
A.cerrB.clogC.cinD.cout4【单选题】(2分)()表示标准输出(缓冲方式),导出程序信息。