当前位置:
文档之家› 第三讲 面向对象理论及设计方法
第三讲 面向对象理论及设计方法
一 面向对象的方法由来与发展
与之对应的编程语言的支撑: Simula-67 (早期) 80年 Smalltalk-80 成为第一个 商业化的面向对象语言.在Smalltalk-80中 建立的概念,如模块化,信息封装与隐 蔽性,抽象性,继承性,多形性等,为 解决大型软件的管理,提高软件的可靠性, 可重用性,可扩充性和可维护性提供了有 效的手段.
一 面向对象的方法由来与发展
1990年Smalltalk协会开发出了一种称 1990年Smalltalk协会开发出了一种称 为 CRC ( Class Responsibility Collaboration) Collaboration ) 卡的工具用于对象模 型的分析过程; 型的分析过程; 1991~ 1991~1995 , Peter Coad 和 Ed Yourdon经过研究, Yourdon经过研究,开发出了较为简 捷的面向原型的分析方法;
一 面向对象的方法由来与发展
80年代后期,在C语言的基础上,引入类等 面向对象的概念,形成了C++的面向对象 语言,同时其他常见的高级语言也引入 了该方法。 今后 (新), 智能体(AGENT)的概念将称 为新一代编程方法, 除了面向对象的内容 外,还增加了环境对个体的影响和个体对 环境的影响,有程序的自组织功能等。
6 类层次与类格
越在上层的类越具有普遍性和共性,越下 层越细化,越专门化 上层的为基类(超类)下层为导出类 基类( 导出类(子类) 基类 导出类 类的层次结构可分树状结构 有向图结构 树状结构和有向图结构 树状结构 树状结构 每个导出类只有一个基类 有向图结构 每个导出类可有多个基类 (语言是否提供该结构的支持)
二封装性(Encapsulation)
封装性目的: 将 使用者 和 设计者 分开 使用者只关心类能做什么 而不关心如何实现 设计者只关心如何做 而不关心谁使用
二封装性(Encapsulation)
封装性说明 1 明确的范围和清楚的外部边界
对象的范围 私有变量,过程等限制在此范围内
2 部件间 软件 有良好的接口 部件间(软件 软件)有良好的接口
二 面向对象的基本概念
7 类(Class)和类型(Type) )和类型( ) 类和具体实例 类型是数据的抽象 即值的 集合 静态和动态 new 和 delete 生成和删除 类的实例
3.2 面向对象的基本特性
抽象性 封装性 继承性 多形性
一 抽象性
抽象是对复杂的现实的世界简明表示 强调所关心(感兴趣)的信息(要害和实 质), 将不重要的信息忽略 • 对象具有抽象的表达能力 –对象不仅可以表示结构化的数,还可 以表示非结构的数据(图形,声音,动态 图像等)
消息的三种性质
同一对象可接受不同的消息,产生 不同的响应; 相同的消息发给不同对象,响应可 能不同 消息的发送可不考虑具体的接受 者,对象可以响应或不响应该消息
二 面向对象的基本概念
5 属性和方法(类的具体分析途径) 属性和方法( 对象内凡是可以描述自身状态、 对象内凡是可以描述自身状态、性质的数据名称 的总和称为属性 对象在外部作用下而产生的可以改变其部分或全 部属性值的动作行为的总和称为方法 6 类层次与类格 现实世界的描述很难采用一个类表示 对象类之间可能具有层次结构,层次的建立是在 继承性的基础上实现的 继承性
一 面向对象的方法由来与发展
1989~ 1989~1991 , Sally Shlaer 和 Steve Mellor出了两本关于 OO分析与设计 Mellor 出了两本关于OO 分析与设计 的书; 1987年 1987 年 , David Harel引入了状态图 , Harel 引入了状态图, 用以描述系统或子系统有限状态的 变化过程;
一 抽象性
对象类实现了抽象的数据类型 –对象类实现了更高级的抽象 将语义 相同的对象构成对象类 –语义特性 结构特性 操作特性 约束 特性 过程的抽象 完成明确定义的操作
一 抽象性
数据的抽象 是O-O方法的核心 构成思考与说明 的基本组织结构的基础
– 首先定义对象的属性,然后定义围绕着这 些属性进行操纵的不同方法(服务)
二 面向对象的基本概念
2 对象类 对象类(Object Class) 类的特点; 1. 一个类是同一类对象的抽象存在形式,包含 全部的属性数据结构及其相应方法的描述但 不包含具体的属性数值; 2. 用一个类可以生成多个含具体属性数值的同 类的对象; 3. 类的属性成员的值将随对象的不同而不同, 而所有的同类对象却只引用一套方法。
二封装性(Encapsulation)
封装具有下述的三个特点: 1 封装将发生关联的所有属性与方法捆绑 到一起, 到一起 , 形成了具有明确边界的对象布局; 2 属性内容的改变只受到对象内部方法的 作用, 作用 , 与对象边界以外的任何因素的变化 无直接关系。 无直接关系。 3 每个对象的方法都不能自主动作,而是 每个对象的方法都不能自主动作, 由来自对象外的信号或者由来自本对象中 另外方法的信号才能触发。 另外方法的信号才能触发。
多层次的继承具有传递性 垂直地多层共享该类的全部语义性质 类格的继承性 横向的共享机制 (多重继承)
二 面向对象的基本概念
1 对象 对象(Object) 对象是人们研究的任何事务 1. 1 表现自身所处状态、位置、品质的数据描 述; 2 能够改变自身所处状态、位置、品质的所 有的动作行为描述;
二 面向对象的基本概念
对象的构成实行了数据与操作的结合
对象具有状态 用数据进行描述 电子宠 物的年龄,每次能喝多少水 • 将对象的状态进行改变是通过操作实现的 时间到,给宠物喝水 • 操作可视为对象的行为 • 数据和操作都封装在对象的统一体内 •
第三讲 面向对象的理论及设计方法
3.1 面向对象方法 导论
3.1 面向对象方法导论 一 面向对象的方法由来与发展 面向对象的概念首先是由挪威人Dahl 和Nygaard于二十世纪60年代中期提 出面向对象的的设计方法被誉为’ 研 究 高 技 术 的 好 方 法 ’ ( ObjectOriented Paradigm,简称 O-O方法)
三 继承性(Inheritance) 继承性(
1 继承性的含义
• 继承性是建立了O-O方法的共享机制 • 对象共享它所在类的结构,操作与约束语义 特性
继承可分为 取代继承 包含继承 受限继 承 和 特化继承 在创建时只要申明参与的类,即能自动 地继承该类的全部语义性质
三 继承性(Inheritance) 继承性(
2 对象类
类实现(Class Implementation) 类内部表示及类说明的具体实现 电子宠物喝水后的处理方法 将已喝的水与新喝的水相加 结果 死亡 无反应 喝的较多 对使用者来说 不必了解具体实现 实现信息的隐蔽
二 面向对象的基本概念
3 类的实例及实例变量
由类所描述的对象称为类实例 小张的电子宠物 实例变量 类的内部表示
二封装性(Encapsulation)
对象是封装的基本单位 对象类在 实例化 时,需将各事例的私有 变量(初始属性)进行量化,建立起实 例 O-O方法的封装性优于结构化方法的封装 性
三 继承性(Inheritance) 继承性(
在创建一个新类时,只有声明参与的类, 那么新创建的类就自动继承了其所有声 明参与的类(称为超类)的全部特性。 继承还具有传递作用,类的继承性还包括 多重继承。
二 面向对象的基本概念
对象应具有唯一的识别能力 对象必须有唯一的标识符(Object Identify) XX的电子宠物 对象必须参与一个或一个以上的对象类 对象类 对象的抽象 电子宠物 对象 对象的实体 XX买的特定的电子宠 物
二 面向对象的基本概念
2 对象类 对象类(Object Class) 是对象的抽象(由具体到抽象) 对象类的定义 将具有相同结构,操作并遵守同样约束规 则的对象聚合成到一起
二封装性(Encapsulation)
公有(全局)段public class 类名 { public: protected: private: } 提供给所有外界使用
例 class 电子宠物 { public: 电子宠物(); 构造函数 电子宠物( Cstring 姓名, int 最大年龄, int 最大肚容量, ....) ~电子宠物(); 析构函数 void 设置(Cstring *, int 最大年龄, int 最大肚容量, ....) void 显示(); Cstring 问姓名(); float 问肚里有多少水(); 效果 喝水( float 水的重量); 效果 时间到(); Cstring m_chname ; // 姓名 protected: int 问年龄(); private: int m_最大年龄; float m_水的最大容量; int m_实际年龄; float m_实际喝水 ; }
二 面向对象的基本概念
4 方法和消息 进行某种操作的过程称为方法 包括 目标对象 操作名 操作变量 小张的电子宠物.喝水(5公升) 让具体对象做某事是通过向该对象发消息实现 的 对象间的通讯是通过消息来实现的 给 小 张的电子宠物喝5公升水
消息(Message)促使对象动作的来自外 界的触发信息的总和被称为消息。 当具体对象接受到消息后,激活与之匹配的 方法 消息包含四个基本要素: 1. 接收消息的对象标识; 2. 接收消息的对象方法的标识; 3. 可能含有接收消息对象的方法所需的参数; 4. 可能含有由接收消息对象的方法提供的返 回信息;
O-O方法的抽象性表现在于强调 对象 属性 和 方法
二 封装性(Encapsulation)
是一种信息隐蔽技术 ‘黑匣子结构’ 当对象含有完整的属性和与之相对应的方法时, 则称为封装 软件工程 对模块的基本要求 模块的独立性 模块内的高内聚性和模块间的低藕合性 封装性 是具有良好的模块性的基础 加强了软件 的可重用性 提高了软件的开发效率,质量和可 靠性。