资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计面向对象程序设计理论篇武汉大学资源与环境科学学院地理信息科学系武汉大学资源与环境科学学院地理信息科学系教材及参考资料:教材及参考资料:面向对象的理论与面向对象的理论与C+C+实践实践 王燕王燕 编著编著 清华大学出版社清华大学出版社ppBy: By: 任福任福 博士博士ppEmailEmail: : renfurenfuwhu.edu.cnwhu.edu.cnppRoomRoom: 7-501: 7-501面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计第三章:面向对象系统的特性第三章:面向对象系统的特性o 封封装装性性o 继承性继承性o 多态性多态性面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 封装性封装性3.3. .什么是封装什么是封装第三章:面向对象系统的特性第三章:面向对象系统的特性 封装就是将一个数据和与这个数据有关的操作集封装就是将一个数据和与这个数据有关的操作集合放在一起,形成一个能动的实体合放在一起,形成一个能动的实体对象,用户不对象,用户不必要知道对象行为的实现细节,只需要根据对象提供必要知道对象行为的实现细节,只需要根据对象提供的外部特性接口访问对象即可。因此,从用户的角度的外部特性接口访问对象即可。因此,从用户的角度看,就象一个看,就象一个“黑匣子黑匣子”。封装的封装的条件:条件:1. 具有一个清楚的边界;具有一个清楚的边界;2. 具有一个接口;具有一个接口;3. 保护内部代码不被其他对象直接修改;保护内部代码不被其他对象直接修改;面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 封装性封装性3.3.2.2什么是协议什么是协议第三章:面向对象系统的特性第三章:面向对象系统的特性 协议是一个对象对外服务的说明,是一个对协议是一个对象对外服务的说明,是一个对象所能接受的所有公有消息的集合。象所能接受的所有公有消息的集合。举例举例面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 封装性封装性3.3.3 .3 面向对象系统的封装性面向对象系统的封装性第三章:面向对象系统的特性第三章:面向对象系统的特性 面向对象的封装性是一种信息隐藏技术:面向对象的封装性是一种信息隐藏技术:q 目的:使用者与开发者分开目的:使用者与开发者分开 系统设计员系统设计员 表明所提供的服务界面表明所提供的服务界面 用户或应用程序员用户或应用程序员 对象提供一组服务,屏蔽内部对象提供一组服务,屏蔽内部 开发程序员开发程序员 对象实现、编码对象实现、编码q 涵义:主要是对象的封装,但涵义:主要是对象的封装,但封装的含义不仅仅是封装的含义不仅仅是数据隐藏,它意味着任何形式的隐藏,如类的封装。数据隐藏,它意味着任何形式的隐藏,如类的封装。面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 2 继承性继承性 3.2.1 3.2.1 继承的引入继承的引入第三章:面向对象系统的特性第三章:面向对象系统的特性q 继承表达了一种对象类的相交关系继承表达了一种对象类的相交关系q 继承的几个特征:继承的几个特征: 共享:数据和代码共享:数据和代码 细微差别与新增细微差别与新增 层次结构层次结构q 继承的作用:继承的作用:1. 减少代码冗余减少代码冗余2. 通过协调减少相互之间的接口和界面通过协调减少相互之间的接口和界面面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 2 继承性继承性 3.2.1 3.2.1 继承的分类继承的分类第三章:面向对象系统的特性第三章:面向对象系统的特性继承继承从继承源划分从继承源划分从继承内容划分从继承内容划分单单继承继承多继承多继承取代继承取代继承包含继承包含继承受限继承受限继承特化继承特化继承说明:继承关系存在与类与类之间说明:继承关系存在与类与类之间面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 2 继承性继承性 3.2.1 3.2.1 继承与封装的关系继承与封装的关系第三章:面向对象系统的特性第三章:面向对象系统的特性q 相似性:都是一种共享代码的手段相似性:都是一种共享代码的手段q 继承是一种静态共享代码的手段继承是一种静态共享代码的手段q 封装是一种动态共享代码的手段封装是一种动态共享代码的手段q 区别:针对的层次不同区别:针对的层次不同q 封装性主要是指对象的封装封装性主要是指对象的封装q 继承是类的机制,是一种静态机制继承是类的机制,是一种静态机制q 对象是类的实例,也许是派生类的实例对象是类的实例,也许是派生类的实例 也许是基类的实例也许是基类的实例面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 2 继承性继承性 3.2.1 3.2.1 继承与委托的关系继承与委托的关系第三章:面向对象系统的特性第三章:面向对象系统的特性q 相似性:节省代码相似性:节省代码q 派生类通过继承共享了基类的代码派生类通过继承共享了基类的代码q 委托是一个对象通过其他对象完成操作委托是一个对象通过其他对象完成操作q 区别:性质不同区别:性质不同q 继承是静态关系继承是静态关系q 委托既可以静态定义也可以动态定义委托既可以静态定义也可以动态定义面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 2 继承性继承性 3.2.1 3.2.1 类的层次类的层次第三章:面向对象系统的特性第三章:面向对象系统的特性 类类的的层次可以清楚层次可以清楚有效的表示现实世界中有效的表示现实世界中事物的分类问题。事物的分类问题。Class A/Class B : public A/Class C : public B/举例:举例:Visual C+中类的层次中类的层次面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 2 继承性继承性 3.2.1 3.2.1 单继承与多继承单继承与多继承第三章:面向对象系统的特性第三章:面向对象系统的特性ABCDEABCDEF面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 2 继承性继承性 3.2.1 3.2.1 面向对象系统的继承性面向对象系统的继承性第三章:面向对象系统的特性第三章:面向对象系统的特性继承机制的优点:继承机制的优点: 清晰体现类层次结构清晰体现类层次结构 代码共享以减少冗余代码共享以减少冗余 减少接口和界面,容易维护减少接口和界面,容易维护 代码传播的有效手段代码传播的有效手段 是构造、建立和扩充新类的有效手段是构造、建立和扩充新类的有效手段面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 3 多态性多态性 3.3.1 3.3.1 重载的概念重载的概念第三章:面向对象系统的特性第三章:面向对象系统的特性 重载的含义是指通过为函数和运算符创建附加重载的含义是指通过为函数和运算符创建附加定义而使他们的名字可以重载,即相同名字的函数定义而使他们的名字可以重载,即相同名字的函数或运算符在不同的场合可以表现出不同的行为。或运算符在不同的场合可以表现出不同的行为。q 函数重载函数重载q 运算符重载运算符重载面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 3 多态性多态性 3.3.2 3.3.2 虚函数的概念虚函数的概念第三章:面向对象系统的特性第三章:面向对象系统的特性 虚函数使用户在一个类等级中可以使用相同虚函数使用户在一个类等级中可以使用相同函数的多个版本,每一个版本均属于类等级中的函数的多个版本,每一个版本均属于类等级中的不同的类,究竟使用的是哪一个版本需要在运行不同的类,究竟使用的是哪一个版本需要在运行中决定。中决定。 注意:虚函数的各个版本中,其返回值、函注意:虚函数的各个版本中,其返回值、函数参数的个数和类型必须是一致的。数参数的个数和类型必须是一致的。面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 3 多态性多态性 3.3.3 3.3.3 抽象类的概念抽象类的概念第三章:面向对象系统的特性第三章:面向对象系统的特性q抽象类的作用在于将许多有关的类组织在一起,抽象类的作用在于将许多有关的类组织在一起,提供一个提供一个公共的基类公共的基类,而那些被它组织在一起的,而那些被它组织在一起的具体的类由它派生出来。它刻画了具体的类由它派生出来。它刻画了公有行为公有行为的特的特征,并通过继承机制传送给它的派生类。征,并通过继承机制传送给它的派生类。q抽象类只描述与这类对象有关的协议和协议消息抽象类只描述与这类对象有关的协议和协议消息的部分实现,完整的实现留给它的派生类来具体的部分实现,完整的实现留给它的派生类来具体完成。完成。q抽象类型是不能创建具体对象的类型,即不能产抽象类型是不能创建具体对象的类型,即不能产生实例,只能建立它的派生类的对象。生实例,只能建立它的派生类的对象。 举举 例例面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 3 多态性多态性 3.3.3 3.3.3 面向对象系统的多态性面向对象系统的多态性第三章:面向对象系统的特性第三章:面向对象系统的特性q 涵义:面向对象系统的多态性指的是,当不同涵义:面向对象系统的多态性指的是,当不同的对象收到相同的消息时产生不同的动作。的对象收到相同的消息时产生不同的动作。q C+语言支持两种多态:编译时的多态性和运语言支持两种多态:编译时的多态性和运行时的多态性。编译时的多态性是通过使用重载来行时的多态性。编译时的多态性是通过使用重载来实现的,是相对静止的多态性。运行时的多态性是实现的,是相对静止的多态性。运行时的多态性是通过虚函数来实现的,到底运行的哪个函数版本,通过虚函数来实现的,到底运行的哪个函数版本,需要在运行时找出发送消息的对象来确定。需要在运行时找出发送消息的对象来确定。举例举例面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 总结总结第三章:面向对象系统的特性第三章:面向对象系统的特性q概念:封装、协议、继承、委托、重载、多态、概念:封装、协议、继承、委托、重载、多态、 抽象类等。抽象类等。q 面向对象系统的多态性。面向对象系统的多态性。q 封装与继承的关系。封装与继承的关系。面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 封装性封装性3.3.2.2什么是协议什么是协议第三章:面向对象系统的特性第三章:面向对象系统的特性返回返回class studentprivate:char * name;int *major;void changmark();protect:int getmark();public:char * getname();char * getmajor();私有段:不向外界公开的私有段:不向外界公开的功能,只供对象自己使用。功能,只供对象自己使用。保护段:部分向外界宣保护段:部分向外界宣布的功能,只供自己及布的功能,只供自己及派生类对象使用。派生类对象使用。公有段:所有向外界宣公有段:所有向外界宣布的功能,可以响应外布的功能,可以响应外部的请求,是属于部的请求,是属于协议协议的内容。的内容。面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 2 继承性继承性第三章:面向对象系统的特性第三章:面向对象系统的特性返回返回面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3 . 3 多态性多态性 3.3.3 3.3.3 抽象类的概念抽象类的概念第三章:面向对象系统的特性第三章:面向对象系统的特性class shapeprivate:int x, y;/ public:void move( int int );virtual void rotate( int ) = 0; /定义纯虚函数定义纯虚函数Virtual void draw(); /定义虚函数定义虚函数class circle : public shapeprivate:int radius;public:void rotate( int );void Draw();返回返回面面面面向向向向对对对对象象象象程程程程序序序序设设设设计计计计 3.3 多态性多态性 3.3.3 3.3.3 面向对象系统的多态性面向对象系统的多态性第三章:面向对象系统的特性第三章:面向对象系统的特性返回返回目标超类目标超类点目标类点目标类线目标类线目标类面目标类面目标类弧段目标类弧段目标类路径目标类路径目标类
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号