第9章 面向对象方法学引论 9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型 第9章 面向对象方法学引论 9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型 9.6 功能模型 9.7 3种模型之间的关系
§1 面向对象方法学概述 面向对象的概念起源于20世纪60年代中期的Simula 67。80年代中期OOP模式进入主流。80年代中后期,面向对象分析与设计的研究开始发展。进入90年代,面向对象软件工程成了许多软件产品的开发模式。
面向对象方法学OOM(Object-Oriented Methodology)
Post_office.Send (request, payment) 例: 成都 北 京 Message Post-office Send by method 我想把邮局搬到 我家门口,多加几个 邮递员,24小时都开门 …… Attributes: location; employee; …… Object 唉,那就先送束花吧 —— Post_office.Send (request, payment) 对不起, 本邮局不提供 此类服务 Methods: send; sell; …… 对象Object = 属性Attribute + 操作Method 注意:对象内部的属性不允许外部用户直接改动,只有当它提供了相应的服务操作时,用户才能通过发送消息来提请它执行。 4
OOM = Object+Class+Inheritance+Communication with messages ② 类 (class) :具有相同属性和操作的对象可划分为类;单个对象可视为某一类的实例 (instance)。 ③ 继承(inheritance):类可分层,下层子类与上层父类有相同特征,称为继承。 ④ 消息(message):对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,只能通过消息请求它进行处理(如果它提供相应消息的话)。 5
OOM相比传统方法的优点: ① 传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解。 OOM:以object 为核心,强调对现实概念的模拟而不强调算法。“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。 Class:由特殊到一般的归纳 Inheritance:由一般到特殊的演绎
② 传统方法:结构依赖于功能,不稳定。 OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。 ③传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。 OOM:一个class所有的 instances 都可重用它的代码;由 inheritance 派生出的新的 class 可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。
④ 传统方法:可维护性是最令人头痛的问题。 OOM:从以下几方面改善了可维护性 —— 稳定性好:软件功能需求的变化不牵动全局,只需局部修改; Class 独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用; Inheritance和多态性(polymorphism)使其很容易被修改和扩充; 容易理解; 注:OOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。OOM与Prototyping结合使用效果好。
§2 面向对象的概念 1、对象 特点: ① 以数据为中心,不设与数据无关的操作; ② Object主动处理而不 被动地等待被处理,外部只能通过message请求操作; ③ 具有封装性:外部操作时,无须知道该object内部的数据结构及算法; ④ 具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信; ⑤ 模块独立性好:内聚强、耦合松
2、类:具有相同数据和相同操作的一组对象; 实例:某个class描述的具体对象; 3、消息: object_ID. method_ID (parameter(s)); 4、方法(操作): object能做的操作,亦称为service, 在 class 中须定义相应的代码; 5、属性 :object 的固有数据; 6、封装:把内部实现细节隐藏起来,使其他外部对象无法访问,仅仅提供某些功能。使对象形成接口部分和实现部分
7、继承:子类自动共享父类的attributes 和methods ,而不必重复定义。 Class 中国人 中国人 Attributes 中国人 Methods 张三 (instance) Class 中国人 张三的 Attributes 例: Class 成都人 (子类) 成都人 Attributes 成都人 Methods Class 中国人 李四 (instance) 中国人李四的 Attributes 成都人李四的 Attributes Class 成都人 特点:① 若成都人的 methods中有与中国人的同名,则李四执行该 method 时以成都人为准,不执行中国人中定义的同名 method。 ② 传递性:AB、BC AC 一个 class 继承了上层全部 classes 的一切性质。 11
③ 一个子类只 有 一 个父类称为单 继 承, 一个子类可有多个父类称为多重继承。 例: Female Chinese Scholar CardDeck GraphicalObject 例: Method: Draw := take a card from a deck Method: Draw := display a graphical object 注意:多重继承在定义中应避免二义性,即两二个父类中定义重名,但各具不同性质。 GraphicalDeck Method: Draw := ? ④ 修改与扩充可以很容易地通过派生子类来完成。
8、多态性与动态联编 多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。 不同层次的 classes 可共享一个method名,但按各自的方式来实现这种 method。 如虚函数机制能在一个类等级中使用相同函数的多个不同版本,在运行时刻才根据接收消息的对象所属于的类,决定到底执行哪个特定的版本,称为动态联编,也叫滞后联编。 9、重载 在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。 在C++语言中函数重载通过静态联编(也叫先前联编)实现。
§3 面向对象建模 模型:为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。 3种面向对象的模型: ① 描述系统数据结构的对象模型。 ② 描述系统控制结构的动态模型。 ③ 描述系统功能的功能模型。
几种面向对象开发方法: Booch方法 Booch是面向对象方法最早的提出者之一,提出了面向对象软件工程的概念。 Booch认为软件开发是一个螺旋上升的过程。 Coad-Yourdon方法 著名的OOA/OOD方法,也是最早的面向对象的分析与设计方法之一。简单、易学。 Rumbaugh方法(简称OMT-Object Modeling Technology) 该方法强调了三种模型,并将软件开发过程划分为系统分析、系统设计、对象设计等几个阶段。 Jacobson 方法(简称OOSE) 最大特点是强调使用用例(Use-Case),每一个用例就是一个使用系统的方式,用例的执行将引发执行一系列与行为相关的事务。
统一建模语言UML 由Rumbaugh、Booch、Jacobson提出的统一建模语言(Unified Modeing Language ) ,简称UML。 产生于90年代中期。它不仅统一了Booch、OMT和OOSE方法中的概念和表示法,而且对其作了进一步扩展,最终成为在面向对象技术领域占主导地位的、并被大众所接受的标准建模语言。UML不是一个开发过程,也不是一个方法,但允许任何一种开发过程和面向对象方法使用它。
§4 对象模型 对象模型表现了客观世界实体对象的相互关系。通常使用UML提供的类图来建立对象模型。 类图用来描述系统中的类及类和类之间的静态关系。 可访问性通常有3种: 公有的(public) 私有的(private) 保护的(protected), 分别用加号(+)、减号(-)和井号(#)表示。 类图的基本符号 类的表示: 类的完整表示 类名 类的简单表示 例如:
表示关系的符号 ---1、关联 关联表示两个类的对象之间存在某种语义上的联系。 类1 角色表示该类在这个关联中的作用。如果没有显式标出角色名,则意味着用类名作为角色名。 重数:该类有多少个对象与对方的一个对象连接。 角色 关联名 重数 角色 类2
默认关联名是has(有),省略重数默认1。 每一个董事会没有或者有3~8个董事会成员(有角色名,可以省略关联名) (1) 普通关联——最常见的关联关系。 例如: 公司 董事会 默认关联名是has(有),省略重数默认1。 人员 董事会成员 0,3..8 * 董事会 每一个董事会没有或者有3~8个董事会成员(有角色名,可以省略关联名)
(2)递归关联 即一个类与它本身有关联关系。 例如:
也叫受限关联,两个类及一个限定词组成,限定词是一种特定的属性,用来有效地减少关联的重数。在类图中把限定词放在关联关系末端的一个小方框内。 (3) 限定关联 也叫受限关联,两个类及一个限定词组成,限定词是一种特定的属性,用来有效地减少关联的重数。在类图中把限定词放在关联关系末端的一个小方框内。 例如:
一个多对多关联。“成绩”属性不能放在任何一方 与带有关联类的多对多关联等价的两个一对多关联的图 (4) 关联类 在一些情况下关联可能需要记录一些信息,但这些信息不能放在任何一个类中,可引入一个关联类记录这些信息。关联类通过一条虚线与关联连接。 学生 * 选修 * 课程 一个多对多关联。“成绩”属性不能放在任何一方 学生 * * 课程 选修成绩 创建一个关联类来保存成绩 学生 * 选修 * 成绩 课程 与带有关联类的多对多关联等价的两个一对多关联的图
表示关系的符号--- 2、聚集: 表示“整体-部分”的特殊关联 整体类 部分类 例如: 共享聚集 组合聚集 例如: 组合是一种强类型的聚集,整体类和部分类共存亡,如果整体类被撤销,部分类也不存在。
表示关系的符号--- 3、泛化 由一个超类和几个直接子类构成的结构通常称为泛化 。表示一般-特殊关系或继承关系。 (1)普通泛化 例如: 一般类 特殊类 人员 教师 学生
(2) 受限泛化 给泛化关系附加约束条件。预定义的约束有4种: 多重、不相交、完全和不完全。 多重继承指的是,一个子类可以同时多次继承同一个上层基类,要指定{多重}约束。如果图中没有指定{多重}约束,则是不相交继承。 例如: 完全继承指的是父类的所有子类都已在类图中穷举出来了,要指定{完全}约束。否则是不完全继承。
表示关系的符号--- 4、依赖和细化 (1) 依赖关系 描述两个模型元素(类、用例等)之间的语义连接关系: 其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素。 独立类 不独立 版类标签:说明依赖的种类 例如: 友元关系使得类B的操作可以使用A类中私有的或保护的成员。
当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。 如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。 (2) 细化关系 当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。 如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。 A B
也可对类和对象用有区别的画法: 表示属于该类 的对象 Class Name Attributes Methods Class-&-Object Class Name Attributes Methods Class
§5 动态模型 动态模型:表示系统瞬时的控制性质 状态图 三要素: ① 事件 :引发 object 状态改变的控制信息(瞬时)。 ② 状态:即 object 的 attributes 所处的情形(可持续)。 ③ 活动:Object 要达到某种 status 所做的操作(耗时)。 状态1 do/活动1 状态2 do/活动2 事件[条件] / 动作 其中:状态内部的“活动”不引起状态转移;箭头上的“动作”指状态转移时要执行的动作。 注:当描述循环运行过程时,通常不关心是怎样启动的。
闲 置 拨号音 do:响拨号音 超 时 do:响蜂鸣音 存储的信息 do:播放信息 拨 号 忙 音 do:响忙音 接通中 do:试接通 挂断电话 挂断电话 拿起听筒 例:电话的 状态图 拨号音 do:响拨号音 超 时 do:响蜂鸣音 超 时 超时 数字 数字 无效号码 存储的信息 do:播放信息 拨 号 有效号码 信息播完 忙 音 do:响忙音 接通中 do:试接通 占 线 已接通 振 铃 do:振 铃 受话人回话 通 话 受话人挂断电话 断 线
UML提供的用例图也是建立功能模型的强有力工具。在UML中把用用例图建立起来的系统模型称为用例模型,一个用例模型由若干幅用例图组成。 §6 功能模型 功能模型:表明系统应该做什么 通常的表示方法:数据流图(DFD) UML提供的用例图也是建立功能模型的强有力工具。在UML中把用用例图建立起来的系统模型称为用例模型,一个用例模型由若干幅用例图组成。 用例图仅仅从参与者使用系统的角度描述系统,不反映内部的处理方式。因此用例图定义的是系统的功能需求。 一幅用例图包含的模型元素有系统、行为者、用例及用例之间的关系。
例如:
又如: 签定一份 保险单 客户 保险销 售人员 销售统计 客户统计 某保险业务的用例图
可用的构造型元素: 当描述一般行为时有例外、任选或异常处理时,采用《extend》(或《扩展》 )。 当在两个或多个用例中出现重复描述(有共用行为)而又想避免重复时,采用《include》 (或《使用》 ) 。 例如: 34
又如: 某金融贸易系统用例图 设置边界 风险分析 交易估价 进行交易 超越边界 更新帐目 评价 交易 人员 经理 计帐 系统 销售员 《extend》 《include》 注:“设置边界”用例是指对某个特定用户规定最大贸易量
§7 三种模型之间的关系 这三种模型都涉及到数据、控制和操作等概念,只是每种模型描述的侧重点不同。它们各自从不同的侧面反映了系统的实质性内容,综合起来则全面反映了对目标系统的需求。 4)三者关系 OM:操作的实体How DM:何时做 When FM:做什么 What
对每个object (class) 建立DM; FM中的数据流对应OM中的attribute,或是整个 object; 建立顺序: OM DM FM Object DM Process Method Action Data storage Event Data flow Attribute 对每个object (class) 建立DM; FM中的数据流对应OM中的attribute,或是整个 object; Action对应DFD中的 process 以及OM中的 method; FM中的 process 产生DM中的 event; FM中的 process 对应OM中的method; OM描述了FM中的动作对象、数据存储及数据流的结构。 FM中的数据存储及数据的源/终点对应OM中的 object;