第三讲 面向对象理论及设计方法.ppt_第1页
第三讲 面向对象理论及设计方法.ppt_第2页
第三讲 面向对象理论及设计方法.ppt_第3页
第三讲 面向对象理论及设计方法.ppt_第4页
第三讲 面向对象理论及设计方法.ppt_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三讲 面向对象的理论及设计方法,3.1 面向对象方法导论,3.1 面向对象方法导论,一 面向对象的方法由来与发展 面向对象的概念首先是由挪威人Dahl和Nygaard于二十世纪60年代中期提出面向对象的的设计方法被誉为研究高技术的好方法(Object-Oriented Paradigm,简称 O-O方法),一 面向对象的方法由来与发展,19891991,Sally Shlaer和Steve Mellor出了两本关于OO分析与设计的书; 1987年,David Harel引入了状态图,用以描述系统或子系统有限状态的变化过程;,一 面向对象的方法由来与发展,1990年Smalltalk协会开发出

2、了一种称为CRC(Class Responsibility Collaboration)卡的工具用于对象模型的分析过程; 19911995,Peter Coad和Ed Yourdon经过研究,开发出了较为简捷的面向原型的分析方法;,1991年Jim Rumbaugh小组对象的OMT(Object Modeling Technique)模型,后经Grady Booch作了进一步的完善(主要是符号体系和术语)成为目前公认的最实用化的OO模型; 几乎在同一年,Ivar Jacobson(为OMT引入了Use Case的概念,成为了后来的UML的基础;,一 面向对象的方法由来与发展,一 面向对象的方法

3、由来与发展,与之对应的编程语言的支撑: Simula-67(早期) 80年 Smalltalk-80 成为第一个商业化的面向对象语言.在Smalltalk-80中建立的概念,如模块化,信息封装与隐蔽性,抽象性,继承性,多形性等,为解决大型软件的管理,提高软件的可靠性,可重用性,可扩充性和可维护性提供了有效的手段.,一 面向对象的方法由来与发展,80年代后期,在C语言的基础上,引入类等面向对象的概念,形成了C+的面向对象语言,同时其他常见的高级语言也引入了该方法。 今后 (新), 智能体(AGENT)的概念将称为新一代编程方法, 除了面向对象的内容外,还增加了环境对个体的影响和个体对环境的影响,

4、有程序的自组织功能等。,Coad/Yourdon方法,发现类及对象 识别结构 定义主题 定义属性 定义服务,Coad/Yourdon方法,面向对象分析阶段,经过五个层次的活动后的结果是一个分成五个层次的问题域模型,包括主题、类及对象、结构、属性和服务五个层次,由类及对象图表示,二 面向对象的基本概念,1 对象(Object) 对象是人们研究的任何事务 1 表现自身所处状态、位置、品质的数据描述; 2 能够改变自身所处状态、位置、品质的所有的动作行为描述;,二 面向对象的基本概念,对象的构成实行了数据与操作的结合 对象具有状态 用数据进行描述 电子宠物的年龄,每次能喝多少水 将对象的状态进行改变

5、是通过操作实现的 时间到,给宠物喝水 操作可视为对象的行为 数据和操作都封装在对象的统一体内,二 面向对象的基本概念,对象应具有唯一的识别能力 对象必须有唯一的标识符(Object Identify) XX的电子宠物 对象必须参与一个或一个以上的对象类 对象类 对象的抽象电子宠物 对象 对象的实体XX买的特定的电子宠物,二 面向对象的基本概念,2 对象类(Object Class) 是对象的抽象(由具体到抽象) 对象类的定义 将具有相同结构,操作并遵守同样约束规则的对象聚合成到一起,二 面向对象的基本概念,2 对象类(Object Class) 类的特点; 一个类是同一类对象的抽象存在形式,包

6、含全部的属性数据结构及其相应方法的描述但不包含具体的属性数值; 用一个类可以生成多个含具体属性数值的同类的对象; 类的属性成员的值将随对象的不同而不同,而所有的同类对象却只引用一套方法。,2 对象类,类定义(或说明)的最低限度应包括的内容 1. 类名 电子宠物 2. 外部接口 给电子宠物喝水 3. 内部表示 年龄,最大肚容量, 已喝了多少水,2 对象类,B 类说明(Class Specification) 一般称为外部特征或外部接口,以一组操作表示 让外部了解对象类是什么和能做什么事 1 是什么叫什么名字,由那里制造,最多能喝多少水 肚里已有多少水 2 做什么喝水, 吃东西等,2 对象类,类实

7、现(Class Implementation) 类内部表示及类说明的具体实现 电子宠物喝水后的处理方法 将已喝的水与新喝的水相加 结果 死亡无反应喝的较多 对使用者来说 不必了解具体实现 实现信息的隐蔽,二 面向对象的基本概念,3 类的实例及实例变量 由类所描述的对象称为类实例小张的电子宠物 实例变量 类的内部表示,二 面向对象的基本概念,4 方法和消息 进行某种操作的过程称为方法 包括 目标对象操作名 操作变量 小张的电子宠物.喝水(5公升) 让具体对象做某事是通过向该对象发消息实现的 对象间的通讯是通过消息来实现的 给小张的电子宠物喝5公升水,消息(Message)促使对象动作的来自外界的

8、触发信息的总和被称为消息。 当具体对象接受到消息后,激活与之匹配的方法 消息包含四个基本要素: 接收消息的对象标识; 接收消息的对象方法的标识; 可能含有接收消息对象的方法所需的参数; 可能含有由接收消息对象的方法提供的返回信息;,消息的三种性质 同一对象可接受不同的消息,产生不同的响应; 相同的消息发给不同对象,响应可能不同 消息的发送可不考虑具体的接受者,对象可以响应或不响应该消息,二 面向对象的基本概念,5 属性和方法(类的具体分析途径) 对象内凡是可以描述自身状态、性质的数据名称的总和称为属性 对象在外部作用下而产生的可以改变其部分或全部属性值的动作行为的总和称为方法 6 类层次与类格

9、 现实世界的描述很难采用一个类表示 对象类之间可能具有层次结构,层次的建立是在继承性的基础上实现的,6 类层次与类格,越在上层的类越具有普遍性和共性,越下层越细化,越专门化 上层的为基类(超类)下层为导出类(子类) 类的层次结构可分树状结构和有向图结构 树状结构 每个导出类只有一个基类 有向图结构每个导出类可有多个基类(语言是否提供该结构的支持),二 面向对象的基本概念,7 类(Class)和类型(Type) 类和具体实例 类型是数据的抽象 即值的集合 静态和动态 new 和 delete 生成和删除类的实例,3.2 面向对象的基本特性,抽象性 封装性 继承性 多形性,一 抽象性,抽象是对复杂

10、的现实的世界简明表示 强调所关心(感兴趣)的信息(要害和实质), 将不重要的信息忽略 对象具有抽象的表达能力 对象不仅可以表示结构化的数,还可以表示非结构的数据(图形,声音,动态图像等),一 抽象性,对象类实现了抽象的数据类型 对象类实现了更高级的抽象 将语义相同的对象构成对象类 语义特性 结构特性 操作特性 约束特性 过程的抽象 完成明确定义的操作,一 抽象性,数据的抽象 是O-O方法的核心 构成思考与说明的基本组织结构的基础 首先定义对象的属性,然后定义围绕着这些属性进行操纵的不同方法(服务) O-O方法的抽象性表现在于强调 对象 属性 和 方法,二 封装性(Encapsulation),

11、是一种信息隐蔽技术 黑匣子结构 当对象含有完整的属性和与之相对应的方法时,则称为封装 软件工程 对模块的基本要求 模块的独立性模块内的高内聚性和模块间的低藕合性 封装性 是具有良好的模块性的基础 加强了软件的可重用性 提高了软件的开发效率,质量和可靠性。,二封装性(Encapsulation),封装具有下述的三个特点: 1 封装将发生关联的所有属性与方法捆绑到一起,形成了具有明确边界的对象布局; 2 属性内容的改变只受到对象内部方法的作用,与对象边界以外的任何因素的变化无直接关系。 3 每个对象的方法都不能自主动作,而是由来自对象外的信号或者由来自本对象中另外方法的信号才能触发。,二封装性(E

12、ncapsulation),封装性目的: 将 使用者 和 设计者 分开 使用者只关心类能做什么 而不关心如何实现 设计者只关心如何做 而不关心谁使用,二封装性(Encapsulation),封装性说明 1 明确的范围和清楚的外部边界 对象的范围 私有变量,过程等限制在此范围内 2 部件间(软件)有良好的接口 对象间的相互作用 通过 请求 响应 和 消息 3 完全保护的内部实现 包括内部不影响外部同时外部也不影响内部,具良好的模块性基础。,二封装性(Encapsulation),O-O方法提供的手段 将作用域分成三类 私有段 保护(局部)段 公有(全局)段 私有段private 只供对象内部使用

13、(不能被外部直接访问) 保护(局部)段protected 只提供给部分外界使用(只对其派生类使用) 在层次结构中体现 (本身及派生类访问),二封装性(Encapsulation),公有(全局)段public 提供给所有外界使用 class 类名 public: protected: private: ,例 class 电子宠物 public: 电子宠物();构造函数 电子宠物( Cstring 姓名, int 最大年龄, int 最大肚容量, .) 电子宠物();析构函数 void 设置(Cstring *, int 最大年龄, int 最大肚容量, .) void 显示(); Cstring

14、 问姓名(); float 问肚里有多少水(); 效果 喝水( float 水的重量); 效果 时间到(); Cstring m_chname ;/ 姓名 protected: int 问年龄(); private: int m_最大年龄; float m_水的最大容量; int m_实际年龄; float m_实际喝水 ; ,二封装性(Encapsulation),对象是封装的基本单位 对象类在 实例化 时,需将各事例的私有变量(初始属性)进行量化,建立起实例 O-O方法的封装性优于结构化方法的封装性,三 继承性(Inheritance),在创建一个新类时,只有声明参与的类,那么新创建的类就

15、自动继承了其所有声明参与的类(称为超类)的全部特性。 继承还具有传递作用,类的继承性还包括多重继承。,三 继承性(Inheritance),1 继承性的含义 继承性是建立了O-O方法的共享机制 对象共享它所在类的结构,操作与约束语义特性 继承可分为 取代继承 包含继承 受限继承 和 特化继承 在创建时只要申明参与的类,即能自动地继承该类的全部语义性质,三 继承性(Inheritance),多层次的继承具有传递性 垂直地多层共享该类的全部语义性质 类格的继承性 横向的共享机制 (多重继承),三 继承性(Inheritance),继承性具有的特征 类间具有供享特征(数据,过程) 类间具有存在微细差

16、别或增加部分 例如:基于MFC(OWL等)编写的Windows下的程序就是基于在软件商提供的软件基础上编制的。如MFC中的CDialog类 提供了对话窗口的基本功能。 类间存在层次结构 例 圆类 基类点 - 圆 (分析) 点: 属性 x,y 坐标 颜色 圆: 继承的点为圆心 半径,三 继承性(Inheritance),继承性的作用 采用继承性使所建立的软件系统具有开放性 类层次或类格的继承性是信息组织于分类的行之有效的方法 类层次或类格的结构反映了现实世界普遍存在的规律,即一般和特殊的语义关系 越上层 越普遍 概括 越下层 越专门 细化 具体,三 继承性(Inheritance),继承性的作用

17、 显著地简化了对象,对象类和创建工作量 通过声明,可以非常方便地(自动地)由超类继承所有的功能,大为减少了新编类的工作量,同时,继承性提高了系统的可扩充性。 继承性进一步增强了代码的可重用率,提高了软件系统的可靠性,三 继承性(Inheritance),继承的分类 结构上的继承和行为上的继承 结构上的继承性 通过类的属性特征实现(变量) 1 从超类继承的变量必须类型相同 2 子类对继承的变量有可见性和可操纵性 (访问权限决定),三 继承性(Inheritance),行为上的继承 通过类的方法特征实现,(方法是对变量进行操纵) 子类和超类方法继承的说明 由子类向(方法必须符合访问权限),最底层优

18、先 若采用超类的方法,可使用下列语句 voidCMyRect:Show() CMyPoint:Show(); 调用超类的方法 . ; 增加的功能 ;,三 继承性(Inheritance),多重继承 当一个子类不只有一个超类时,出现多重继承。(语言是否提供支持) 避免冲突 当超类出现相同名的方法时如何选择.(语言提供优先选择方法),三 继承性(Inheritance),继承性的声明方法 class CA ; class CB : public CA ; class CC: public CA ; class CD:public CB,public CC ;,四 多形性(Polymorphism)

19、,一个打印程序的例子: for ( int i = 0 ; i 100; i+) print( Sti); for( int i = 0; i 100; i + ) switch Sti.type ( case Integer:printInteger(Sti.Obect); break; case Float: printFloat(Sti.Object); break; case String: printString(Sti.Object); break; case Boolean: printBoolean(Sti.Object);break; ); ;,四 多形性(Polymorph

20、ism),多形性(多态性)源于O-O语言,使 O-O方法增加了其灵活性和可理解性 多形性的含义 强调O-O方法的行为,相同的操作(对使用者)作用于不同的数据类型,产生相应的结果。 1 运算符重载 运算符:+-*/ 等作用作用不同数据(或类)实现与理解相关的操作,四 多形性(Polymorphism),2 函数名重载 相同的函数名作用于不同类型数据产生相应的结果 例:说明: 效果 电子宠物:吃东西(水); 效果 电子宠物:吃东西(饭); 效果 电子宠物:吃东西(菜); 效果 电子宠物:吃东西(冰激凌); 使用者: 效果 us效果; us效果 = MY_电子宠物.吃东西(所吃东西);,四 多形性(

21、Polymorphism),虚函数和动态连接 虚函数 virtual: 动态连接: 函数的调用是当运行时(而不是编译时)根据具体参数选择合适的一个函数运行 动态连接的结果是让对象自己去解决究竟选择那种方法。,四 多形性(Polymorphism),机 器 1 传统方法: 机 器 2 机 器 3 动态连接方法: 1 机 2 器 3,四 多形性(Polymorphism),多型性的作用 1 允许每个对象以合适自身的方式相应共同的消息 增强了操作的透明性 2 多型性增强了软件的灵活性和重用性 多型性存在的问题(或不是问题) 增加了系统的开销(简单的运行时间的增加),3.3 面向对象分析(OOA),使

22、用 O-OA方法的理由,明确表示的共性,使O-OA的功能得到很大的增强 提供与其一致的,功能很强的表示方法用于O-OA和O-OD O-OA既适用于系统序列,也适用于正在进行的实际分析,分析阶段与设计阶段的区别 分析阶段 设计阶段 对象是什么 对象如何做 类的抽象 软件技术的使用 取得问题空间 取得解题空间 确定系统边界 系统实现 获得分析模型(OAM) 获得设计模型(ODM) 得到分析脚本(CRC) 得到对象作用(ODI) 存在包容关系 求得集合类 存在关联关系 求得独立性,O-OA 方法应用的步骤与层次,1 O-OA 方法应用的步骤 识别对象 识别结构 确定主题 定义属性(与实例相关联) 定

23、义服务(与消息相关联),一 对作为侯选的对象要求具备下述条件: 是真实存在的(可被感知的)物体; 在思维中有清晰概念的实体; 具可封装的属性与行为; 可被拟人化;,识别对象,二确定问题空间中的对象 从侯选对象中再进一步选出将构成系统的对象来组成问题空间。 可以被感知的物体 充当某一职业的人 集合体 一个事件的全过程 交互过程,识别对象,三对象的来源 侯选对象可以通过下述手段获得: 需求分析文档; 需求分析脚本; 讨论; 业已存在的系统,识别对象,四选择约束条件 一般条件下,所选对象都是名词或过程名词。在选择时要将下述类型的名词排除在外: 重复、多余的; 与系统不相干的; 含糊不清的; 属于某个

24、对象内的属性或动作行为的 解题空间中的名词;,识别对象,五对选出的对象做一般的定性描述 经过上述步骤选出的名词便可配以适当的类名及其一组属性和动作。要考虑下列的因素: 1 在某个对象的生存周期内,其属性成员并非都是变量,部分属性可能是恒久的常量。如汽车的品牌、人的血型等。 2 有些类的属性不一定是为一个类所拥有,可能会出现在同一系统的其它类中,如合同。 3 每个类的方法具体体现动作必须要负责对自身属性数据进行输入、输出、修改等操作。这是封装的具体体现。,五对选出的对象做一般的定性描述 经过上述步骤选出的名词便可配以适当的类名及其一组属性和动作。要考虑下列的因素: 除了上一条的因素之外,其它的动

25、作就如同选取名词做对象一样,在问题空间中选取所有的动词,并将其中多余的、无关的、含糊的排除掉,从而构成全部的动作集合。这部分动作大多都是关联动作,即向其它对象传送消息的动作。,对象标记 用矩形框表示对象, 识别对象的策略 实际上归结为类的概念 对象的命名方法 单数名词 或 形容词+名词,识别对象,识别结构,标记 分类结构和装配结构的标记 分类结构 标记结构的策略 结构表示较为复杂的问题空间 分类结构 概括于分类细化的关系 装配结构 整体与局部的关系,识别主题,标记 采用直角矩形表示 识别主题的策略 为设计者提供一次能考虑的模块量控制机理,一般应少于七个模块 以使用者思维可充分发挥为佳,识别属性

26、,1 按属性的定义来识别属性 对象的实例或分类结构的实例的数据元素。反映对象的实质 2 将属性安排在合适的位置 共性 和 个性 3 识别与确定对象的实例间的连接,识别属性,4 细化属性说明 名称 描述 允许取值范围 限制 测量单位 进一步说明 描述型 定义型 可导出型 或 偶尔导出型,识别服务,识别服务的方法 基本服务 选择 增加 更改 删除 计算 监控 增加服务 分两类 1 对象生命周期 定义基本顺序 2 状态-事件 - 响应 定义系统主要状态,列出外部事件及其所有响应,扩充服务及消息连接 识别消息连接 为实例加入消息连接 服务说明,O-OA 方法应用的层次,主题层:控制一次分析所考虑范围

27、对象层:在分析范围内找出其全部对象 结构层:主要是反映分类结构与装配结构 属性层:描述每个对象的结构特征 服务层:描述每个对象应具有的操作,3.4 面向对象的系统设计Object-Oriented Design, 简称(O-OD),分析阶段与设计阶段的区别 分析阶段 设计阶段 对象是什么 对象如何做 类的抽象 软件技术的使用 取得问题空间 取得解题空间 确定系统边界 系统实现 获得分析模型(OAM) 获得设计模型(ODM) 得到分析脚本(CRC) 得到对象作用(ODI) 存在包容关系 求得集合类 存在关联关系 求得独立性,面向对象的系统设计(OOD),按照软件设计过程, 在系统分析后是系统设计

28、阶段 软件开发(软件系统设计)过程分为五个阶段 分析 设计 编码 测试 维护 (即所谓瀑布模型),O-OD 的基本原理,O-OD的核心概念是对象 在现实世界中寻找,识别出影响用户解决问题,必须进行操纵的对象,如何编写计算机软件进行仿真 O-OD基本原理的出发点是充分重视人工系统的作用 要解决的问题是如何使用计算机仿真人工系统,对客观问题计算机化,O-OD 的基本原理,构成O-OD的重要基础是抽象性和信息隐蔽性 以类为核心,体现抽象和隐蔽 O-OD的定义 面向对象的设计是以抽象数据类型实现的结构化集合的软件系统 注重抽象数据类型的实现, 集合隐含了类是作为构件组成软件系统,而且可以独立于系统定义

29、,O-OD 的方法与步骤,分别对实际存在的两种系统进行分析,分别提出不同的步骤; 已有人工系统实现计算机化 尚未建立的系统建立计算机化,系统结构方面的设计,类提供了系统结构的机理 充分考虑类的可重用性要求, 所有类对应用系统具有平等的使用权 不要过早地确定类与类之间的次序, 以避免由于次序的变化导致引起的麻烦, O-OD 的次序约束是通过声明加以说明,系统结构方面的设计,以类为核心,尽可能完善其自身功能 明确的好的定义而且逻辑上又与抽象有关,应将其包含在该类中 考虑到语言, 以一页面为佳( 50100行),自顶向下与自低向上相结合的设计,O-OD 应将自顶向下与自低向上方法密切结合, 自顶向下

30、 类比其子类描述的更具有共性的特性 自低向上 底层类建立在其上层类所提供的特性基础上,识别与寻找类,通过寻找外部对象来识别与寻找类 以运行状况识别系统的类(由外部世界观察) 通过存在的类来识别类 通过O-O环境,充分利用已有的类 从以前开发的类中寻找类 分析已有的类,考虑其可重用性 通过继承来改编类 利用类继承来重新定义类,识别与寻找类,注意避免各种识别类的错误 类应有一组感兴趣的操作以及有意义的属性所描述,类模块之间的接口,通过继承机理实现的类之间的接口 定义多层,通过继承实现, 描述接口的通用类以及提供实现的子类 如 通用类 列表 导出类(实现子类) 队列、堆栈等 使类具有人工智能的状态机理和自动的数据结构 定义类时将其设计为主动方式, 即由变动的信息集合,变为主动方式,充分发挥类继承的优点,要仔细划分类, 将具有共性的类置为上层, 特殊的、需要补充的类置于下层, 发挥类继承的特点 同时要了解类的继承需要系统开销,所以对系统响应要求高的使用,可建立独立的类来实现,新系统及不断变化发展的系统,快速原形法的设计机理 建立一个模型,动员用户共同参与软件的研制全过程 快速原形法于 O-OD相结合的新型设计方法,五 面向对象的编程语言( O-OPL),五 面向对象的编程语言( O-OPL),由结构化语言到面向对象语言 结构化语言 结构化程序设计语

温馨提示

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

评论

0/150

提交评论