面向对象技术及应用复习

上传人:d**** 文档编号:131400331 上传时间:2022-08-06 格式:DOCX 页数:9 大小:23.86KB
收藏 版权申诉 举报 下载
面向对象技术及应用复习_第1页
第1页 / 共9页
面向对象技术及应用复习_第2页
第2页 / 共9页
面向对象技术及应用复习_第3页
第3页 / 共9页
资源描述:

《面向对象技术及应用复习》由会员分享,可在线阅读,更多相关《面向对象技术及应用复习(9页珍藏版)》请在装配图网上搜索。

1、2013 复习要点1. 面向对象方法有哪些特点? 模块性:对象是一个功能和数据独立的单元,相互之间只能通过对象认 可的途径进行通信。互相没有预料不到的影响,也可以较为自由地为各 个不同的软件系统所重用: 封装功能:为信息隐蔽提供具体的实现手段,用户不必清楚对象的内 部细节,只要了解其功能描述就可以使用: 代码共享:继承性提供了一种代码共享的手段,可以避免重复的代码设 计,使得面向对象的方法确实有效; 灵活性:对象的功能执行是在接收到消息时确定的,使得对象可以根据 自身的特点进行功能实现,提高了程序设计的灵活性: 易维护性:对象实现了抽象和封装,使其中可能出现的错误限制在自身, 传播,易于检错和

2、修改: 不会向外传播,易于检错和修改。 增量型设计:面向对象系统可以通过继承机制不断扩充功能,而不影响 原有软件的运行;局部存储与分布处理:每个对象通过数据抽象和数据隐蔽将其内容和状态置 于自身独立的存储结构中。对象的处理也是自治的,由对象构成的整个系统 的运行和处理是分布式的.2. 面向对象程序设计与大型程序设计有哪些关系?面向对象方法提供了一种有效的分解方法,它进一步发展了基于数据抽 象的模块化设计,在数据抽象和抽象数据类型之上又引入了动态连接和继承 性等机制,这样不但支持了大型程序设计,同时支持了小型程序设计。面向对象的设计方法包括两大过程:第一是战略性过程,我们称之为面 向对象设计,它

3、是脱离具体程序系统可以独立存在的一种设计方法;第二是 战术性过程,我们称之为面向对象程序设计,它具体解决程序设计中各项操 作的实现,这一过程是要与一种具体的程字语言相联系的。如果写出一个公 式,就是 软件系统设计=面向对象设汁+面向对象程序设计 从这个公式可以 看出,面向对象设计的前后两个过程,恰恰分别支持了大型程序设计与小型 程序设计。3. 有哪些面向对象语言?Smalltalk c+ objective-c Eiffel Ctalk java c#4. 面向对象设计方法与其它设计方法的比较?横向比较从横向来看,当前程序设计领域中研究的重点,根据对计算过程的不同认识可分 为三种:第一,函数式

4、程序设计(FP)将计算过程看作函数作用过程,即将某一系列函数作 用于输入得到输出的过程,其中强调等值替换,逻辑程序设计则无法做到这一点; 第二,逻辑程序设计(LP)将计算过程看作推演过程,即将具有初始状态的输入在 一系列条件的约束下,采用推理算法和搜索手段进行匹配、演算的过程,有利于 启发式;第三,面向对象的程序设计(OOP)则将计算过程看作分类过程加状态变换过程,即系统逐步划分为相互关联的多个对象并建立这些对象的联系,以引发状态变 换,最终完成计算。面向对象方法模拟了人类认识问题的较高、较广层次的过程,即分类过程,属 于战略性方法;函数和逻辑方法则更适合于模拟人的逻辑思维,处于人类认识问 题

5、的较深层次过程,属于战术性方法,因此它们各有侧重点,如果能将它们结合 才是最完美的。纵向比较 结构化程序设计强调了功能抽象和模块性,它将解决问题的过程看作是一个处理 过程;而面向对象的程序设计则综合了功能抽象和数据抽象,它将解决问题看作 是一个分类演绎过程。第一, 模块与对象:结构化设计中模块是对功能的抽象,每个模块都是一 个处理单位,它有输入和输出。而对象是包括数据和操作的整体,是 对数据和功能的抽象和统一。可以说,对象包含了模块概念,但比模 块更强大;第二, 过程调用与消息传递:在结构化程序设计中,过程为一独立实体, 显式地为它的使用者所见;而在面向对象的程序设计中,方法是隶属 于对象的,

6、它不是独立存在的实体,而是对象的功能体现。消息传递 机制很自然地与分布式并行程序、多机系统和网络通讯模型取得了一 致。第三,类型与类:类型与类都是对数据和操作的抽象,即定义了一组具有共 同特征的数据和可以作用于其上的一组操作,但是类型仍然是偏重于 操作抽象的,而类是集成数据抽象和操作抽象的,二者缺一不可。同 时类引入了继承性质,实现了可扩充性。第三章将详细讨论这一问题。第四, 静态连接与动态连接:从程序设计发展来看,用户对灵活性和方便 性的要求不断增强,所以动态连接代替静态连接是必然趋势,计算 机硬件速度的提高弥补了动态连接的低效性,为此提供了基础。显 然,面向对象在这一方面与结构化设计相比占

7、有优势。5. 解释以下概念:对象;消息;封装;协议;类;继承;对象 是对于客观事物的一种表示,在计算机中表示为能对外通信的数据以 及对该数据施加的各种操作的封装体,在抽象计算概念-是具有输入和 输出的有限状态自动机。消息 就是对象之间相互请求或相互协作的途径。封装 就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整 体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”, 其中数据和函数都是类的成员。是为实现各式各样的数据传送,将被 传送的数据结构映射进另一种数据结构的处理方式。封装从字面上理 解,就是讲某件事物封装起来,外界不必知道其实际内容。封装是面 向对象技术基本原理的基

8、础,对象是类的实例,对象的所有数据及其 对于某些数据的操作全部封装在一起,外部对象要检索或改变这些数 据,只有通过向对象发出请求。对象接受请求后,如果请求的形式正 确合理,就执行请求动作。对象外部的代码从来不对对象中任何私有 数据进行直接操作,这种机制可以使产生偶然副作用的可能性大大减 少。协议 是一个对象对外服务的说明,告知外界对象它可以为外界做什么。外 界对象能够并且只能向该对象发送协议中所提供的消息,请求该对象 服务。因此,它是由一个对象能够接受并且并且愿意接受的所有消息 构成的对外接口。也就是说,请求对象进行操作的唯一途径就是通过 协议中提供的消息进行,即使一个对象可以完成某一功能,但

9、它没有 将该功能放入协议中去,外界对象依然不能请求它完成这一功能。从 私有消息和公有消息上看,协议是一个对象所能接受的所有公有消息 的集合。类 是对一组相似对象的共同抽象描述,它将该组对象所具有的共同特征 (包括操作特征和存储特征)集中起来,用于说明该组对象的能力和 性质。例如, “人类”这个词解释了所继承 是一种现实世界中对象之间独特的关系,它使得某类对象可以继承另外 一类对象的特征和能力。6. 对象的特点? 对象具有明显的特征,它们是自主性、封闭性、交互性、被动性和动态性。一、自主性 自主性是指对象具有处理能力。给定一个输入,经过消息接收、操作处理、变 换对象状态,最后对象产生输出,从而完

10、成消息所指定的处理任务。对象自身 状态的变化,完全取决于自身的操作,如何操作完全由对象自身决定,不同对 象对于同样的消息,可以做出不同的处理,既可以“以变制变”,也可以“以不 变应万变”,因而对象是自主的。二、封闭性 封闭性是指对象具有信息隐蔽能力。即外界不能直接修改对象的状态,只能通 过向该对象发送消息对它施加影响。对象隐蔽了其数据及操作的具体实现,对 外可见的只是对象提供的消息接口。三、交互性 交互性是指对象之间具有通信能力。对象既可以接收来自外部的消息并加以处 理,也可以向其它对象发送消息请其处理相应工作。对象间的交互推动了对象 的状态转换,最终使对象构成的系统不断演化和前进。四、被动性

11、 被动性是指对象的处理工作都是由外部对象发送消息来启动的。一般情况下, 对象不能自发启动操作。对象的存在也是由外界决定(可以是其它对象,最终 由程序员来决定)的,所以对象程序最终是需要由人来启动的。五、动态性 对象的动态性有两个含义,一是对象可以动态创建和取消,对象并非一开始就 存在,程序员开始并不能描述系统运行过程中创建的所有对象;二是对象的状 态是不断变化的,随着系统的运行和发展,许多对象的状态与初始状态具有很 大变化。 在上述五大特征中,前三项描述了对象的能力,被动性刻划了对象的活动特性,动态性指出了对象的生存特性。7. 什么是实例?类于实例的关系是什么?任何单个对象都是某个类的实例。一

12、个类的所有实例都具有共性,又具有个 性。对象的共性是它们所能接收的消息及其处理方法,即一个类的所有实例 都采用同样的方法处理消息;对象的个性反映在每个对象都有自己的私有存 储单元,每个对象的私有存储单元值可以不同。基于类可以重新定义对象(这里就是指实例),并且有了更简单的形式。对象 是一类的实例,它通过实例化操作产生 在面向对象程序中,关于类和实例,可以归纳如下两点: 个类的所有实例能够响应的消息模式相同,并且采用同样的方法完成消 息所要求的操作; 个类的所有实例具有相同的数据结构(如 Smalltalk 中的实例变量),并 且采用同样的名字来引用它8. 什么是继承?分为哪几种?继承是一种现实

13、世界中对象之间独特的关系,它使得某类对象可以继承另外一类 对象的特征和能力。按继承源来分类,可以分为单重继承和多重继承。按继承内 容分类,有全部继承和部分继承。public private Protected三种继承。9. 对象间的关系有哪几种?对象间的创建关系 对象之间的聚合关系 对象通讯(消息)关系10. 解释以下概念:多态;作用域;语景;深拷贝;浅拷贝;多态的本质就是指一名多用,如多条同名的消息传递给不同的对象,消息引发 的对象行为可以不同作用域通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定 这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提 高了程序逻辑的

14、局部性,增强程序的可靠性,减少名字冲突。语景 指在程序中某一处(可以是一条语句,也可以是一段程序)所有可访问对 象的集合(即这个集合中的对象的作用域都包含该处)。深拷贝是得到一个对象副本的操作,而浅拷贝则是得到一个对象指针的操作。也 就是说,深拷贝是指将一个对象完全复制一个,空间占用原来的两倍。 浅拷贝是指只给出对象的指针,对象还是一个11. 强类型与弱类型的区别在哪?它们的代表语言?系统的类型概念强烈影响到对象之间的交互。从根本上看,弱类型系统的目 标是让所有信息的语景尽可能的一般化,而强类型系统的目标是信息的语景 尽可能特殊化。可以这样从语言编译的角度看,弱类型系统对于源程序不做 变量的类

15、型检查,而直到程序运行时才进行类型的匹配的。强类型则相反, 在编译时,就要对于整个程序所用到的变量或表达式进行类型匹配的检查, 若不一致,则要报错。C+是强类型语言,其中,每个对象的类型是在程序源代码中明显陈述的。许 多面向对象语言,如 Smalltalk 和 Common Lisp Object System (CLOS),郡 是弱类型语言,在编译时不强调对象的特定类型。12. 面向对象分析的任务是什么?面向对象分析的基础是什么? 面向对象分析的任务是了解问题域内的相关对象及对象间的关系和作用,然 后构造该问题域的对象模型,力争使这个模型真实的反应出所要解决问题的 实质。在这一过程中,抽象是

16、最重要、最基本的方法,对不同性质的问题, 可选取不同层次的抽象,过简过繁琐都会影响对问题本质属性的理解。面向对象的分析以模拟技术和面向对象技术为基础,它从模拟技术中吸取了 属性、关系、结构及问题域中实体表示的对象概念,从面向对象技术中吸取 了封装、分类结构等概念。面向对象的分析基于以下两点: 在分析和说明整体框架中贯穿结构化方法,如对象和属性,整体和部分, 以及类和成员等; 用消息进行用户和系统之间、系统中对象之间的相互通讯。13. 面向对象分析和设计方法有哪些,其优势是什么?面向对象分析及设计方法Coad/Yourdon方法工Booch法。面向对象软件开发方法则集中有关的数据和功能来直接模拟

17、问题世界中的 对象,并开发的各个阶段都围绕对象范型进行。这是一种摆脱冯氏体系结构对软 件开发的束缚、解决传统方法面临的许多问题的有效方法。面向对象的分析和设计方法的优势在于,其概念和特征直接与分析和设计工 作有着天然的联系(直接映射关系),可以从这样几点来分析: 面向对象方法包含了三种人类组织的基本结构:对象 +属性、分类结构 和组合结构; 面向对象方法侧重于对问题的理解: 面向对象方法中属性和服务为天生的一对; 面向对象方法中实现了有效的划分,系统成份之间最少依赖; 面向对象方法中具有最清晰的共性和一致性表示: 面向对象方法可以在实现效率和易理解性方面提供最恰当的权衡设 计。14. 什么是设

18、计模式?设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类 编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更 容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统 都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石 脉络,如同大厦的结构一样。一般而言,一个模式有四个基本要素:1.模式名称(patternname) 一个助记名,它用一两个词来描述模式的问 题、解决方案和效果。2问题(problem)描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。3.

19、解决方案(solution)描述了设计的组成成分,它们之间的相互关系及各 自的职责和协作方式。4. 效果(consequences)描述了模式应用的效果及使用模式应权衡的问题。15. SingletonSingleton (单子,对象创建型模式):保证一个类仅有一个实例,并提供一 个访问它的全局访问点。class Singletonpublic:static Singleton* Instance() ;protected:Singleton() private:static Singleton *_instance ;Singleton(const Singleton&) ;Singleto

20、n& operator=(const Singleton&) ; ;Singleton* Singleton:_instance = NULL ;Singleton* Singleton:Instance()(_instance = NULL) ? _instance = new Singleton() : 0 ; /lazy initialization return _instance ;16. 友元,运算符重载, 友元:类赋予其访问权限的一个实体。它可能是函数(友元函数)、其它类(友元类)或者其它类的成员函数。 重载运算符是对正常函数的语法美化。它没给语言增加任何基本的东西,但 改善了可

21、理解性并降低维护费用。不能重载的运算符: . 、 .* 、?: 、: 、sizeof 、typeid 重载运算符使用成员函数/友元函数的选择运算符建议使用所有一元运算符成员函数=0 -必须时成员函数+= = = *=卜=&= != %= = =成员函数所有其它二元运算符友元函数17. 函数重载和覆盖的定义和比较重载(overload):对于类的方法(包括从父类中继承的方法),方法名相同, 参数列表不同的方法之间就构成了重载关系。覆盖(override):也叫重写,就是在当父类中的某些方法不能满足要求时, 子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字, 否则就无法再调用

22、父类中的方法了。覆盖和重载具有以下相同点:都要求方法同名都可以用于抽象方法和非抽象方法之间覆盖和重载具有以下不同点:覆盖要求参数列表(参数签名)必须一致,而方法重载要求参数列表必须不 一致。覆盖要求返回类型必须一致,方法重载对此没有要求。覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法 (括从父类中继承而来的方法)覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没 有任何限制。父类的一个方法只能被子类覆盖一次,而一个方法可以在所有的类中可以被 重载多次。18.C+:初始话列表,合适继承,公有继承的含义(Liskov Substitution Pri nciple

23、) 虚函数,动态绑定,模板。初始话列表构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列 表以冒号开头,后跟一系列以逗号分隔的初始化字段。class foopublic:foo(string s, int i):name(s), id(i) ; / 初始化列表private:stri ng name ;int id ;构造函数初始化列表是初始化对象的最好方法。初始化列表在构造函数主体开始 执行前初始化成员对象。它的作用是改善程序的性能。而且类里的引用数据成员 必须在初始化列表里初始化。有些变元对象(如指针)可能要进行异常检查,这 样就不太方便放到初始化列表里。合适继承 合适

24、的继承:当派生类的成员函数说明和基类中对应的成员函数相比,前 者相对后者要求不多并且承诺不少时,我们就可以得到合适的继承和可替 代行为。合适继承可提供充分的可替代性和可扩充性。合适继承和子集以 及专门化(specilize )没有必然联系。 可替代性:合适的派生类的对象能自由且安全替代基类的对象。 可扩充性:即使合适的派生类在用户代码定义几个月乃至几年后出现,也 能自由且安全地用它代替基类。当增加包含新功能的合适派生类时,扩充 系统的非常容易。 不合适的继承会产生混乱的设计错误。在使用基类指针 /引用时可能要付 出很大的代价。公有继承的含义(Liskov Substitution Princi

25、ple)公有继承意味着“is a kind-of的关系,简称isa。class D : public B,这 就是告诉大家每个类型为D的对象也是一个类型为B的对象,反之不然。也就是 说“B对象派得上用场的任何对方,D对象也可以派上用场” (Liskov Substitution Principle)虚函数那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术 语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离; 用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。动态绑定动态绑定是指在执行期间(非编译期)判断所引用对象的实际

26、类型,根据其实际 的类型调用其相应的方法。程序运行过程中,把函数(或过程)调用与响应调用所需要的代码相结合的过程 称为动态绑定。模板模板的概念是从希望参数化容器类而来,在 C with class 曾经使用宏机制实现 过参数化容器类。但C语言的宏根本不遵守作用域规则和类型规则。在C+的原 始设计其实就考虑过带参数类型的问题,但没有时间做彻底的试验,去探究设计 和实现的问题,担心它们的复杂性,以及对性能的影响,还有加大系统移植的成 本等,所以这事被推迟。1989年Object Design公司将模板的机制(当s时只 支持类模板)实现集成到编译器中,以后几年其他人对此作了完善。“template”

27、这一关键字告诉编译器下面的类定义(函数定义)将操作一个或更 多的非特定类型。当声明类对象(或使用函数时),必须指定类型以使编译器做 相关的替代。用C+按面向对象的继承风格设计一组画图类 class CShapepublic:CShapevirtual CShape() virtual void Draw()=0;class CRectangle:public CShape() public:CRectangle();void CRectangle:Draw()/ 画矩形的代码class CEllipse:public CShape public:CEllipse();void CEllipse

28、:Draw()/画椭圆的代码class CCircle:public CShape public:Circle();void CCircle:Draw() /画圆的代码 虚函数实现动态绑定: class Basepublic:virtual void print()cout 基类打印函数被调用 !endl;class Derived:public Basevirtual void print()cout 派生类打印函数被调用 !print(); class Complexpublic:Complex( double real, double imaginary = 0 ): _real(rea

29、l), _imaginary(imaginary)void operator+ ( Complex other )_real = _real + other._real;_imaginary = _imaginary + other._imaginary;void operator( ostream os )os ( _real , _imaginary );Complex operator+()+_real;return *this;Complex operator+( int )Complex temp = *this;+_real; return temp;private:double _real, _imaginary;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!