软件工程第九章 面向对象方法学引论
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/6/12
15
9.2.2 其他概念
类
在问题空间中……
“人以类聚,物以群分” 类代表着具有类似性质的一组对象 类中的每一个对象即为类的不同实例 (instance)
在解空间 (计算机系统) 中……
类是对一组对象的抽象,集中了该组对象的共同特性。 在构造软件时,类实际上是具有特定功能的模块,其代码由该
2020/6/12
32
9.4 对象模型
统一建模语言UML
UML(Unified Modeling Language)产生于90年代中期。 它不仅统一了Booch、OMT和OOSE方法中的概念和表 示法,而且对其作了进一步扩展,最终成为在面向对象 技术领域占主导地位的、并被大众所接受的标准建模语 言。
面向对象就是既使用对象又使用类和继承等机制,而且 对象之间仅能通过传递消息实现彼此通信。
也可以说,只有同时使用对象、类、继承和消息的方法, 才是真正面向对象的方法。
2020/6/12
10
9.1.2 面向对象方法学的优点
• 1 与人类习惯的思维方法一致 • 2 稳定性好 • 3 可重用性好 • 4 较易开发大型软件产品 • 5 可维护性好
互
释
机
活
用
接协
组节
类
动
例
口作
件点
类
2020/6/12
用 对构实 类
例 象件施 图
图 图图图 顺协状活 序作态动 图图图图
35
9.4 对象模型
(1) 统一标准
UML统一了Booch、OMT和OOSE等方法中的基本概念,已成为 OMG的正式标准,提供了标准的面向对象的模型元素的定义和表示。
(2) 面向对象
UML1.0
1996
<documents> UML 0.9
精华相关
1995
<documents>
文档版类
2020/6/12 Unified Method 0.8
34
UML
事物
关系
图
结构 行为 组织 辅助 事物 事物 事物 事物
关联 依赖 泛化 实现 关系 关系 关系 关系
静态 动态 图图
状
交
注
态包
面向对象方法是一种新的思维方法,它是把程序看作是 相互协作而又彼此独立的对象的集合。
这样就减小了语义断层:系统中解空间对象可以直接模拟 问题空间的对象,解空间与问题空间的结构十分一致。
2020/6/12
8
9.1.1 面向对象方法学的要点
面向对象方法具有下述4个要点:
(1)认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象 可以由比较简单的对象以某种方式组合而成。因此,面向对象的软件系统 是由对象组成的。
<documents> UML 2.0
1999
<documents> UML 1.3
1998
<documents> UML 1.2
2001年 计划的重要修订
1997年9月最后 提交给OMG
<documents> UML 1.1
1997年1月最 <documents>
文字上的修改没有显 著的技术变化
初提交给 OMG
2020/6/12
11
9.2 面向对象的概念
对象 类 类间关系 消息与事件 多态性
2020/6/12
12
9.2.1 对象
对象
在解空间 (计算机系统) 中,对象的非严格记法: <对象> ::= <接口,数据,行为>
接口
数据
通信消息
2020/6/12
接口
行为
对象
13
9.2.1 对象
对象的基本特征
•面向对象方法学的要点
现实世界
领域知识 抽象
问题空间
2020/6/12
问题域
生成知识 设计知识
模拟
解空间 (计算机系统)
实现域
5
9.1.1 面向对象方法学的要点
语义断层 —— 不同的语言(/对象)来表达问题和解.
客观世界中的实体既具有静态的属性又具有动态的行为。 然而传统语言提供的解空间对象实质上却仅是描述实体 属性的数据,必须在程序中从外部对它施加操作,才能 模拟它的行为。
2020/6/12
7
9.1.1 面向对象方法学的要点
与传统方法相反,面向对象方法是一种以数据或信息为 主线,把数据和处理相结合的方法。
面向对象方法把对象作为由数据及可以施加在这些数据 上的操作所构成的统一体。
对象与传统的数据有本质区别,它不是被动地等待外界 对它施加操作,相反,它是进行处理的主体。
2020/6/12
27
9.2.2 其他概念
消息与对象
一个对象能接收不同形式不同内容的多个消息。 相同形式的消息可以送往不同的对象。 对于相同形式的消息,不同对象可以有 不同的解释,可以作出
不同的反映。
消息与方法
对象接收到有效消息后,总会以某种行为做出适当反映。期间, 对象行为复用了类操作的代码实现 (即类方法)。
1、UML概述
UML的发展历程(下图)
UML是一个通用的标准建模语言,可以对任何具有静态 结构和动态行为的系统进行可视化建模。UML不是一个 开发过程,也不是一个方法,但允许任何一种开发过程 和面向对象方法使用它。
2020/6/12
33
2000年 (计划的较小修订)
<documents> UML 1.4
24
9.2.2 其他概念
关联的含义
对象实例之间的物理或概念联结被称为链
关联是对一组语义与结构相似的链的抽象
链是关联的实例
项目 ◆ 语言
人员 雇用 公司
人
二元关联的例
三元关联的例
(人员) 雇用 (公司)
张涛
通大
链的例子
(项目)
◆
CAD系统
(人)
李波
(语言) C ++
(a) 二元关联
链的例子
(b)三元关联
子类 (sub-class) / 后裔类 (descendant class)
一般化 (generalization) 具体化 (specialization)
2020/6/12
20
9.2.2 其他概念
继承的分类
单继承 多继承
多继承使类层次复杂化 多继承容易产生配置控制方面的潜在问题
2020/6/12
31
9.3 面向对象建模
面向对象方法需要建立3种形式的模型: 1)描述系统数据结构的对象模型 2)描述系统控制结构的动态模型 3)描述系统功能的功能模型 在不同的应用问题中,这3种模型的相对重要程度会有 所不同,对象模型始终都是最重要、最基本、最核心的。 典型的软件系统组合了上述3方面内容: 使用数据结构(对象模型),执行操作(动态模型),并且 完成数据值的变化(功能模型)。 本课程介绍UML作为描述这些模型的语言.
种所有对象所共享。 类 vs. 对象:静 vs. 动。
2020/6/12
16
9.2.2 其他概念
类的两种图形记法:
类名 属性:
操作 属性:
操作:
2020/6/12
17
9.2.2 其他概念
对象
状态:张三,30岁,计算机系,讲师,1000元 行为:提职称,调工资
类 (教师)
属性:姓名,年龄,系别,职称,工资 操作:提职称,调工资 方法 (指操作的具体代码实现)
2020/6/12
22
9.2.2 其他概念
聚合的含义
聚合表示“部分——整体”关系
相关术语
组元类 (component class) 组合类 (assembly class)
注意,组合对象的存在依赖于组元对象!
2020/6/12
23
9.2.2 其他概念
聚合的图形记法
2020/6/12
继承的图形记法
一般化
2020/6/12
具体化
21
9.2.2 其他概念
一般化、具体化、继承等术语均是复用思想的体现 一般化和具体化是对同一个类间关系的不同角度审视 父类是子类的一般化 (从父类角度出发) 子类是父类的具体化 (从子类角度出发)
继承强调一般化 / 具体化关系中共享属性和操作的机 制
实际上,类是创建对象的模板!
2020/6/12
18
9.2.2 其他概念
类间关系
继承 (inheritance) 聚合 (aggregation) 关联 (relationship)
2020/6/12
19
9.2.2 其他概念
继承的含义
继承是一种“求同存异”的高度抽象方式
相关术语
超类 (super-class) / 父类 (parent class) / 祖先类 (ancestor class)
第九章 面向对象方法学引论
2020/6/12
本讲内容
9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型 9.6 功能模型 9.7 3种模型之间的关系
2020/6/12
2
9.1 面向对象方法学概述
2020/6/12
9.1 面向对象方法学概述
UML还吸取了面向对象技术领域中其他流派的长处。UML符号表 示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极 少使用的符号,也添加了一些新符号。
关联 2020/6/12 vs. 链:类 vs. 对象
25
9.2.2 其他概念
聚合 vs. 继承
聚合更强调对象实例之间的关系,本质上是“与关系” (is part of,ISP)
继承更关注对象类之间的关系,本质上是“或关系” (is a,ISA)
聚合树 vs. 继承树
聚合 vs. 关联
聚合是关联的一种特殊形式 聚合与关联之间的模糊差异无关紧要
在某种程度上,消息与方法可视为同义词。但是,必须牢记: 消息与代码无关,而方法是操作的代码实现。
2020/6/12
28
9.2.2 其他概念
多态性( polymorphism) --含义
同一个操作可以是多个不同类的行为。 不同对象接收到同一个消息后,可产生完全不同的
反映。 同一个消息可调用不同的方法。
-- 传统的软件工程方法学应用于大型软件产品 的开发时,似乎很少取得成功。
-- 源于20世纪60年代后期出现的面向对象编程 语言Simula-67(类和对象的概念),逐步形成了 面向对象方法学 。到了20世纪90年代,面向 对象方法学已经成为人们在开发软件时首选的 范型。
2020/6/12
4
9.1.1 面向对象方法学的要点
(4) 对象彼此之间仅能通过传递消息互相联系。一切局部于该对象的私有 信息,都被封装在该对象类的定义中,就好像装在一个不透明的黑盒子中 一样,在外界是看不见的,更不能直接使用,这就是“封装性”。
2020/6/12
9
9.1.1 面向对象方法学的要点
面向对象的方法学可以用下列方程来概括: OO=objects +classes +inheritance +communication with messages
(2)类(class)是对一组对象的抽象,集中了该组对象的共同特性(一组数 据和一组方法)。对象是类的实例。
(3) 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类 组成一个层次结构的系统(也称为类等级)。在这种结构中,下层的派生类 自动具有和上层的基类相同的特性,这种现象称为继承(inheritance)。
2020/6/12
26
9.2.2 其他概念
消息和事件(message & event) 消息是对象之间进行通信的构造或结构
消息分为请求消息和完成消息两种 (由消息模式描述) 消息模式:发送对象、接收对象、内容
事件指对象之间一次消息的传递
多个事件按照时间顺序可构成事件序列
消息 vs. 事件:静 vs. 动
2020/6/12
6
9.1.1 面向对象方法学的要点
对象?(面向对象语言)
在问题空间中,对象是…… • 现实世界中存在的实体
• 应用所关心的抽象概念、规则、事件、或者具有明确边界和意 义的具体事物
在解空间 (计算机系统) 中,对象是…… • 问题空间中的对象在计算机系统中的表示
• 封装 (encapsulation) 了数据和行为的通信单位
--意义
允许每个对象以自己最合适的方式去响应共同的消 息,从而增强软件的灵活性和可复用性。
2020/6/12
Байду номын сангаас29
9.2.2 其他概念
多态性的示例
海尔
长虹
TCL
2020/6/12
30
9.3 面向对象建模
•建立问题模型是人们理解表达问题的方法之一。 •模型是对事物作出的一种抽象,是对事物的一种形式 化的描述。 •模型常由专门的语言 (一组图示符号和规则)来描述. •面向对象建模就是根据面向对象观点(模拟人类习惯的 思维方式)建立问题的解模式. 面向对象的实现能将此 模式在计算机上实施.
➢ 每个对象均有自己的惟一标识,从而区别于其他对象。 ➢ 对象之间通过消息进行通信。 ➢ 对象总是处于一定的状态。 ➢ 对象有若干种行为。 ➢ 对象的行为分为三类:创建新对象、与其他对象通信、
改变自身状态。 ➢ 对象的状态只能被自身的行为所改变。
2020/6/12
14
9.2.1 对象
对象的特点
➢ 以数据为中心。 ➢ 对象是主动的。 ➢ 实现数据的封装。 ➢ 本质上具有并行性。 ➢ 模块独立性好。