- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 面向对象系统的特性
第3章 面向对象系统的特性
面向对象系统最突出的特性就是封装性、继承性和多态性。
3.1 封装性
封装的定义
将一个数据和与这些数据有关的操作集合放在一起,形成一个能动的实体——对象,用户不必知道对象行为的实现细节,只需根据对象提供的外部特性接口访问对象即可。
封装应该具有下面几个条件:
具有一个清楚的边界,对象的所有私有数据、内部程序(成员函数)细节都被固定在这个边界内。
具有一个接口,这个接口描述了对象之间的相互作用、请求和响应,它就是消息。
对象内部的实现代码受到封装壳的保护,其它对象不能直接修改本对象所拥有的数据和代码。
协议
?一个对象对外服务的说明
?由一个对象能够接受并且愿意接受的所有信息构成的对外接口
?请求对象进行操作的唯一途径
?外界能且只能根据该对象发送协议中所提供的消息,请求该对象服务
面向对象系统的封装性
?信息隐藏
?抽象数据类型
3.2 继承性
1、类间继承关系
继承表达对象之间的相交关系——某类对象可以继承另外一类对象的特征和能力,类间的关系:
整体和部分、一般和特殊
若类间具有继承关系,则它们之间应具有下列几个特性:
类间具有共享特征(数据和代码共享)
类间具有细微的差别和新增部分
类间具有层次结构
2、继承的作用
减少代码冗余
–通过协调性减少相互之间的接口和界面
c++中派生类的定义
class A {
//
}
class B :public A{
//….
}
class C :public B{
//….
}
3、继承的分类
从继承源上分:单继承与多继承
从继承内容上分:取代继承、包含继承、受限继承、特化继承
继承与委托的关系
委托:在面向对象系统中,每个操作元素都是一个对象,为了减少
一个操作的实现代码,尽量使用向其它对象发送消息而不再重写代码。
继承与委托的相同点:节省代码
继承与委托性质不同
继承是静态关系
委托既可以静态定义也可以动态定义
面向对象系统的继承性
(1)优点
清晰体现相关类间的层次结构关系
减小代码和数据冗余,提高程序可重用性
增强一致性,减少模块间的接口和界面
自动传播代码
在一般类的基础上构造、建立和扩充新类
()
对操作的继承——行为特性的继承
对数据内容的继承——结构特性的继承
3.3 多态性
多态性描述的是
1、重载的概念
(1) 函数重载: 函数名相同,参数不同。
class number{
int i; float x; char *s1;
public:
int max(int a) {return ai?a:i;}
float max(float b) {return bx?b:x;}
char *max(char *c)
{return strcmp(c,s1)0?c:s1;}//.. }
运算符重载
2、虚函数的概念
虚函数:virtual)
–在派生类中重新给出定义
运行时的多态性:
在运行时决定使用哪一个特定的版本(基类的/派生类的,取决于发送此消息的对象是属于哪一类的)
3、抽象类的概念
将许多有关类组织在一起,提供一个公共的基类——刻画公共行为的特征,通过继承机制传递给它的派生类。抽象类只描述与这类对象有关的协议和协议有关部分消息的部分实现,完整的实现留给它的派生类来实现。派生类是不能创建具体对象的类,不能参数实例,只能通过它的派生类来产生对象。
4、面向对象系统的多态性
不同的对象收到相同的消息时产生不同的动作
C++支持两种多态性
编译时的多态性:重载
运行时的多态性:虚函数
服务的具体实现
用户、应用程序员
协议/服务
对象
。。。
苍蝇
蝴蝶
蛾子
无翅类
有翅类
昆虫
具体地讲,若类B继承类A时,则居于B中的对象便具有类A的一切性质(数据属性)相功能(操作)。称被继承类A为基类或父类,或超类;而称继承类B为A的派生类或子类。因此,要构造一个新类B,只需去继承—个与之有共同特征的基类A.再描述与基类不同的少量特征(即增加一些新的数据成员和成员函数)。于是.类B便由继承来的和新添加的两部分组成。
文档评论(0)