




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章面象对象的程序设计2.1、对象和类2.2、数据的抽象和封装2.3、继承性2.4、多态性2.1、对象和类1、为什么要引入对象和类面向对象程序设计方法(OOP)的出发点是弥补面向过程程序设计方法中的缺点数据的流动性→分离→不能直接反映客观引入对象和类:将数据与方法紧密结合数据不能流动直接反映客观世界保护数据不会被外界的函数意外的改变2.1、对象和类2、对象和类的概念对象是现实世界中一个实体类是对多个实体进行综合抽象的结果小红小明
实例对象
学生类
类2.1、对象和类3、对象的特征对象的名字:用于区分不同的对象对象的属性:是对实体某一方面的描述,反映了实体间的区别不同类的对象、同类的对象对象的操作:是对象能够进行的行为2.1、对象和类对象的例子对象名称:小明对象属性:学历:大学年龄:21
专业:历史系对象操作:上课吃饭2.1、对象和类4、对象的交互对象不是孤立的,他们之间存在着各种联系
对象之间的相互交互是通过消息传递来进行的例如银行帐户对象bankAccount、顾客对象:顾客对象发送一个取款的消息,要求取款:具体的做法是:
在BankAccount中定义一个公有的方法——取款来供顾客对象调用。这个取款的方法就是一个公有的消息2.1、对象和类5、对象之间的消息消息的性质:(1)同一对象可以接受不同形式的多个消息,作出不同的响应(2)不同对象可以接受相同的消息,所作出的响应可以是不同的(3)消息之间的发送可以不考虑具体的接受者,对象可以响应消息,也可以不响应多态2.1、对象和类5、对象之间的消息消息的分类:(1)公有消息:由其他对象向自己直接发送的消息(2)私有消息:由对象自己向自己发送的消息2.2、数据的抽象和封装1、数据的抽象抽象是对特定的实例抽取共同性形成概念的过程,它是面向对象程序设计的一种基本思想抽象是对象系统的简化描述和规范说明,它强调了系统中的一部分细节和特性,例如做什么;而忽略其他部分,例如如何做2.2、数据的抽象和封装举例:库房管理软件中对录音机进行抽象
属性:长、宽、高、生产厂家等
行为:放音、录音、停止、倒带、快进等其它对象无需关心录音机的放音是怎么实现的,这些是在类的实现中要考虑的。2.2、数据的抽象和封装2、数据的封装
就是将数据和对数据的操作组成一个实体,数据的表示方式和对数据的操作细节被隐藏起来,用户通过操作接口对数据进行操作MakeDeposit()WithDraw()Transfer()接口顾客BalanceOwnerMakeDeposit()WithDraw()Transfer()Account()实现细节(对用户不可见)数据方法2.3、继承性1、继承性的概念继承性是面向对象的基本特征,表达了对象类之间一般与特殊的关系,使类之间形成层次模型基类派生类2.3、继承性2、继承的好处
继承机制为程序员提供了一种组织,构造和重用类的基本手段
继承可以使基类的数据和操作可以被另一个类(派生类)重用,在派生类只需要描述基类中没有的数据和操作2.3、继承性3、继承的分类(1)单继承:每个派生类只直接继承了一个基类的特征
(2)多继承:多个基类派生出一
个派生类2.3、继承性举例:哺乳动物和猫两个对象猫属于哺乳动物,具有恒温,胎生等特性猫具有与其它哺乳动物不同的特性哺乳动物猫继承关系箭头表示猫继承了哺乳动物所有的属性,关系不能颠倒继承的特点:
(1)派生类获得了基类所有属性和方法
(2)派生类还要有自己独有的属性或方法2.3、继承性4、继承与封装的关系似乎存在矛盾:
封装性要求外部看不到对象内部的属性和操作
代码的共享似乎会暴露对象内部的代码实际上不矛盾:
系统内部,具有继承关系的两个类被当作两个独立封装好的类来处理1
继承和封装并不矛盾,在减少编程代码量这一点上是一致的22.4、多态性1、多态性的概念多态性就是特定功能有多种实现方法,表现为:(2)多态性就是不同函数使用同一个函数名,即同样的接口实现不同的操作(1)多态性就是不同对象收到相同消息后,执行不同动作包括成员函数、外部函数2.4、多态性例子:一段绘图功能代码——不使用多态性
Shape类:属性type
param
方法DrawCircle
DrawSquare
DrawMeCircle和Square类继承Shape类:2.4、多态性目标:无论Circle或Square类的一个对象,调用同
一个成员函数DrawMe
voidShape::DrawMe()
{
siwtch(Shape.Type){
case“Circle”shape.DrawCircle();
case“Square”shape.DrawSquare();
}}类方法//判别图形类型,调用各自对象的DrawMe方法//如果是圆形,调用圆的方法//如果是矩形//如果是直线?问题:如果增加了一个派生类Line,需要修改成员函数DrawMe,程序不易维护case“Line”shape.DrawLine();
2.4、多态性解释:ShapeCircleSquare其它对象发送消息函数名?只知道属于Shape类不知道调用哪个方法
Shape类:
属性type
方法DrawCircle
DrawSquare
所以定义DrawMeDrawMe2.4、多态性使用多态性(采用虚函数方法):
Shape类:属性type
方法DrawMe(虚函数)Circle类:
属性type
方法DrawMe:实现画圆:DrawCircleSquare类:属性type
方法DrawMe:实现画矩形:DrawSquare优点:在执行时,无论针对哪个类的对象,都通过调用函数DrawMe画出其图形,由系统选择恰当的成员函数来执行
增加类时也无需修改代码接口相同、无需修改代码2.4、多态性2、多态性的分类(1)编译多态性
编译时多态是通过重载来实现的。编译处理程序在编译的时侯根据函数的参数来确定不同的同名函数(2)运行多态性
运行时多态性是通过虚函数来实现的,程序运行时使用程序的那个函数版本,在运行的时侯通过对象发送的消息来确定(刚才的例子)结论:无论哪种类型都无需程序员参与,由系统实现本章小结本章介绍了面向对象的几个基本概念
面向对象最基础的概念就是对象,对象是对客观世界中实体的认识。
对象之间也是有联系的。
具有相同类型属性和操作的对象可以被抽象为类,类是对象的模板面向对象有三个特性封装性:对象中的属性和操作都被隐藏起来,只把接口暴露
给外界。
继承性:对象间的一种层次关系,某个对象继承了另一个对
象就具有了那个对象所有的属性和方法。
多态性:同一个操作作用在不同对象的时候表现出的不同行
为。思考与练习题1、什么是程序设计,什么是编程语言,二者是什么关系?2、结构化程序设计的思路是什么?3、什么是面向对象程序设计?4、为什么说
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论