第九章:面向对象方法学引论
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.1面向对象方法学概述
9.1.2 面向对象方法学的优点
② 稳定性好 传统方法:结构依赖于功能,不稳定。 OOM:以object模拟实体,需求变化不会引起结构的整体变 化,因为实体相对稳定,故系统也相应稳定。 ③可重用性好 传统方法:通过建立标准函数库来重用软构件。但标准函数 缺少必要的“柔性”,难以适应不同场合的不同需要。 OOM:一个class所有的 实例 都可重用它的代码;由 继承 派生出的新的 class 可重用其父类的代码,并且可以修改、 扩充而不影响其父类的使用。
9.3. 对象建模技术OMT(Object Modeling Technique)
所谓模型,就是为了理解事物而对事物作出的一种抽象, 是对事物的一种无歧义的书面描述。通常,模型由一组图示符 号和组织这些符号的规则组成,利用它们来定义和描述问题域 中的术语和概念。更进一步讲,模型是一种思考工具,利用这 种工具可以把知识规范地表示出来。 用面向对象方法开发软件,通常需要建立3种形式的模型: ① 描述系统数据结构的对象模型(object model). ② 描述系统控制结构的动态模型(dynamic model). ③ 描述系统功能的功能模型(function model).
OOM = 对象+类+继承+消息传递
9.1面向对象方法学概述
9.1.2 面向对象方法学的优点
① 与人类习惯的思维方法一致 传统方法:面向过程设计,以计算为核心,数据与操作分离, 不易理解。 OOM:以object 为核心,强调对现实概念的模拟而不强调算 法。“面向对象方法学的基本原则,是按照人们习惯的思维 方式建立问题域的模型,开发出尽可能直观、自然地表现求 解方法的软件系统”。 Class:由特殊到一般的归纳(induction) Inheritance:由一般到特殊的演绎(deduction)
传统的软件工程方法学曾经给软件产业带来巨大进步, 部分地缓解了软件危机,使用这种方法学开发的许多中、小 规模软件项目都获得了成功。但是,人们也注意到当把这种 方法学应用于大型软件产品的开发时,似乎很少取得成功。 在20世纪60年代后期出现的面向对象编程语言Simula67中首次引入了类和对象的概念,自20世纪80年代中期起, 人们开始注重面向对象分析和设计的研究,逐步形成了面向 对象方法学。到了20世纪90年代,面向对象方法学已经成为 人们在开发软件时首选的范型。面向对象技术已成为当前最 好的软件开发技术。
9.1.3 喷泉模型
喷泉模型认为软件自下而上周期的各阶段是相互重叠和多 次反复的,就像水喷上去可以落下来,既可以落在中间,也可 以落在最底部,类似一个喷泉。 喷泉模型对软件复用和生存周期中多项开发活动的集成提 供了支持,主要支持面向对象的开发方法。系统某个部分常常 重复工作多次,相关功能在每次迭代中随之加入演进的系统。 在开发活动,即分析、设计和编码之间不存在明显的边界。
容易理解:符合人们习惯的思维方式 容易测试、调试:对面向对象的软件进行维护,主要通过从已 有类派生出一些新类来实现。
9.1面向对象方法学概述
9.1.2 面向对象方法学的优点
OOM并不是减少了开发时间,而是通过提高可重用性、可
维护性,进行扩充和修改的容易程度等,从长远角度改进了
软件的质量。
9.1面向对象方法学概述
9.2面向对象的概念
9.2.2 其他概念
7、继承(Inheritance):子类自动共享父类的attributes 和methods ,而不必重复定义。 例:
Class 中国人
中国人 Attributes 中国人 Methods Class 杭州人 (子类) Class 中国人
张山 (instance)
9.1面向对象方法学概述
9.1.1 面向对象方法学的要点 OOM的四要素:
③ 继承(inheritance):类可分层,下层子类与上层父类有 相同特征,称为继承。 按照子类(或称为派生类)与父类(或称为基类)的关系, 把若干个对象类组成一个层次结构的系统(也称为类等级)。 ④ 消息(message):对象间只能通过发送消息进行联系,外 界不能处理对象的内部数据,只能通过消息请求它进行处理 (如果它提供相应消息的话)。
9.1面向对象方法学概述
图9.1 喷泉模型
9.2面向对象的概念
9.2.1 对象
1.对象的形象表示:一个对象很像一台录音机。
9.2面向对象的概念
9.2.1 对象
2. 对象的定义 (1) 定义1: 对象是具有相同状态的一组操作的集合。 这个定义主要是从面向对象程序设计的角度看“对象”。 (2) 定义2: 对象是对问题域中某个东西的抽象,这种抽象反 映了系统保存有关这个东西的信息或与它交互的能力。也就是 说,对象是对属性值和操作的封装。 这个定义着重从信息模拟的角度看待“对象”。 (3) 定义3: 对象∷=〈ID,MS,DS,MI〉。其中,ID是对象的标 识或名字,MS是对象中的操作集合,DS是对象的数据结构,MI 是对象受理的消息名集合(即对外接口)。 这个定义是一个形式化的定义。
9.1面向对象方法学概述
9.1.1 面向对象方法学的要点
面向对象方法学的出发点和基本原则,是尽可能模拟人 类习惯的思维方式,使开发软件的方法与过程尽可能接近人 类认识世界解决问题的方法与过程,也就是使描述问题的问 题空间(也称为问题域)与实现解法的解空间(也称为求解域) 在结构上尽可能一致。 与传统方法相反,OOM以数据或信息为主线,把数据和 处理结合构成统一体 —— 对象。这时程序不再是一系列工 作在数据上的过程或函数集合,而是相互协作又彼此独立的 对象的集合。
9.1面向对象方法学概述
9.1.2 面向对象方法学的优点
⑤可维护性好 传统方法:可维护性是最令人头痛的问题。 OOM:从以下几方面改善了可维护性: 稳定性好:软件功能需求的变化不牵动全局,只需局部修改;
容易修改:只要修改不涉及class的对外接口,则内部修改完 全不影响外部调用;继承( Inheritance )和多态性 (polymorphism)使其很容易被修改和扩充;
第九章 面向对象方法学引论
(Object - Oriented Methodology)
9.1 9.2 9.3 9.4 9.5 9.6 9.7
面向对象方法学概述 面向对象的概念 面向对象建模 对象模型 动态模型 功能模型 3种模型之间的关系
第九章 面向对象方法学引论
(Object - Oriented Methodology)
Class 中国人 张山的 Attributes 李四 (instance) Class 杭州人
杭州人 Attributes
杭州人 Methods
中国人李四的 Attributes
杭州人李四的 Attributes
9.2面向对象的概念
9.2.2 其他概念
7、继承(Inheritance): 特点: ① 若杭州人的 methods中有与中国人的同名,则李四执行该 method 时以杭州人为准,不执行中国人中定义的同名 method。 ② 传递性(transitivity):AB、BC AC 一个 class 继承了上层全部 classes 的一切性质。 ③ 一个子类只 有 一 个父类称为单 继 承 (single inheritance), 一 个子类可有多个父类称为多重继承(multiple inheritance). ④ 修改与扩充可以很容易地通过派生子类来完成。
9.2面向对象的概念
9.2.2 其他概念
8、多态性(Polymorphism): 多态性是指子类对象可以像父类对象那样使用,同样的消 息既可以发送给父类对象也可以发送给子类对象。不同层次的 classes 可共享一个method名,但按各自的方式来实现这种 method。当对象接收到发送给它的消息时,根据该对象所属于 的类动态选用在该类中定义的实现算法。 C++ 中定义了虚函数(virtual function)来实现这一功能。 即:一个method有多个版本,运行时才决定执行哪一个。故亦 称为动态联编(dynamic binding)或滞后联编(late binding)。 多态性机制不仅增加了面向对象软件系统的灵活性,进一 步减少了信息冗余,而且显著提高了软件的可重用性和可扩充 性。
9.2面向对象的概念
9.2.1 对象
2. 对象的定义 总之,对象是封装了数据结构及可以施加在这些数据结构 上的操作的封装体,这个封装体有可以惟一地标识它的名字, 而且向外界提供一组服务(即公有的操作)。对象中的数据表示 对象的状态,一个对象的状态只能由该对象的操作来改变。每 当需要改变对象的状态时,只能由其他对象向该对象发送消息。 对象响应消息时,按照消息模式找出与之匹配的方法,并执行 该方法。 从动态角度或对象的实现机制来看,对象是一台自动机。
9.1面向对象方法学概述
9.1.1 面向对象方法学的要点 OOM的四要素: ①对象(object):世界由对象组成。 任何事物都是对象,复杂的对象可以由比较简单的对象 以某种方式组合而成。因此,面向对象的软件系统是由对象 组成的,软件中的任何元素都是对象,复杂的软件对象由比 较简单的对象组合而成。 由此可见,面向对象方法用对象分解取代了传统方法的 功能分解。 ② 类 (class) :对象可划分为类;单个对象可视为某一类 的实例 (instance)。 每个对象类都定义了一组数据和一组方法。数据用于表 示对象的静态属性,是对象的状态信息。
5、属性(Attribute):object 的固有数据; 6. 封装(ห้องสมุดไป่ตู้ncapsulation):数据和实现操作的代码集中起来放 在对象内部。
对象具有封装性的条件如下: (1)有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个 边界内,从外面看不见更不能直接访问。 (2)有确定的接口(即协议)。这些接口就是对象可以接受的消息,只能 通过向对象发送消息来使用它。 (3)受保护的内部实现。实现对象功能的细节(私有数据和代码)不能在 定义该对象的类的范围外访问。
9.2面向对象的概念
9.2.2 其他概念
9、重载( Overloading ): 有两种重载: 函数重载:是指在同一作用域内的若干个参数特征不同的 函数可以使用相同的函数名字; 运算符重载:是指同一个运算符可以施加于不同类型的操 作数上面。 当然,当参数特征不同或被操作数的类型不同时,实现函 数的算法或运算符的语义是不相同的。 在C++语言中函数重载是通过静态联编(也叫先前联编)实现 的,也就是在编译时根据函数变元的个数和类型,决定到底使 用函数的哪个实现代码;对于重载的运算符,同样是在编译时 根据被操作数的类型,决定使用该算符的哪种语义。
9.2面向对象的概念
9.2.2 其他概念
1、类(Class):具有相同数据和相同操作的一组对象; 2、实例(Instance):某个class描述的具体对象;
3、消息(Message):object_ID.method_ID(parameter(s));
4、方法(Method): object能做的操作,亦称为服务 (service)。在 class 中须定义相应的代码;
9.1面向对象方法学概述
9.1.2 面向对象方法学的优点
④较易开发大型软件产品 用面向对象方法学开发软件时,构成软件系统的每个对 象就像一个微型程序,有自己的数据、操作、功能和用途, 因此,可以把一个大型软件产品分解成一系列本质上相互独 立的小产品来处理,这就不仅降低了开发的技术难度,而且 也使得对开发工作的管理变得容易多了。
9.2面向对象的概念
9.2.1 对象
3. 对象的特点 ① 以数据为中心,不设与数据无关的操作; ② Object主动处理而不 被动地等待被处理,外部只能通过 message请求操作; ③ 具有黑盒性:外部操作时,无须知道该object内部的数据 结构及算法; ④ 具有并行性:不同object各自独立地处理自身数据,彼此 间仅通过传递message完成通信; ⑤ 模块独立性好:内聚强( ① )、耦合松( ③ ④ )