当前位置:文档之家› 第八章面向对象设计工作流

第八章面向对象设计工作流

来的。
❖ 除了确定操作之外,还需要确定把每种操作分配 给哪个类。
1、操作的格式
[可见性] 操作名[‘(‘参数列表’)’][‘:’返回类型] (特征标记 ) ❖ 可见性的取值为+(公有的)、#(受保护的) 、-(私有的)或~( 包) 。 ❖ 对象的操作可分为内部操作和外部操作 ▪ 内部操作:只供对象内部的操作使用,不对外提供。 ▪ 外部操作:当其他对象用消息请求它时,它进行响应。 ❖ 类操作(静态操作)是用来创造实例或者操纵静态属性的 操作。 ▪ 例如C++中的前面冠以static的成员函数,就是类操作。
系统可以尽快交付。
体系结构师的工作
❖ 把组件分配给子系统。 ❖ 体系结构师需要知道如何折中选择系统的功能性需
求与非功能性需求,并帮助客户做出正确决策。
▪ 如一组符合新的安全性标准的安全性需求将需要另外3个 月的时间和350000美元的钱来合并进信息系统中。
▪ 如推迟一项特殊的需求直到信息系统交货时,并且现在维 护可能节省150000美元,但是往后加入该需求将花费 300000美元。
MSG基金会案例中Estimate Funds Available for Week用例的方案
Mortgage Class具有职责 Compute Estimated grants and payment for week
Manage an Asset用例方案1实现
Manage an Asset用例方案2实现
❖ 例:如果MSG基金会的工作人员把基金会的资金投资到通 用汽车公司的股票上,那么信息系统就会创建一个对象,并 且调用操作setAssetNumber把相关的资产编号分配给那个对 象,该对象表示新的投资。
❖ 当工作人员想打印MSG基金会的所有资产清单时,将以此 考虑信息系统中的每个对象,并发送一条消息来调用操作 GetAssetNumber,以获得由那个对象表示的资产编号。
❖ 在面向对象范型中子类的每个实例可以继承父 类的实例的属性,父类具有的操作也同时应用 到子类的实例上。
6、操作分配:Osbert 案例研究
(1)职责驱动型设计
❖ 在购买油画时,为了计算精品或名品的最大价格,信息系 统需要执行一种操作来获得一幅拍卖油画的价格,即需要 一种操作getAuctionPrice。类Auctioned PaintingClass负责 确定相关的拍卖价格,所以操作getAuctionPrice应该分配 给Auctioned PaintingClass。
(4)用动词识别操作 (5)查看每一个属性,因为要用对象的操作来对其进行操纵。 (6)追踪操作的执行路线
模拟操作的执行,并在整个系统中跟踪 。
3、审查与调整Байду номын сангаас
(1)审查每个操作是否真正有用 是否直接提供系统责任所要求的某项功能?或者响应其 它操作的请求,间接地完成某种功能的某些局部操作?
调整——取消无用的操作
(3)有不同的侧重点和不同的策略
OOA主要针对问题域,识别有关的对象以及它们之 间的关系,产生一个映射问题域,满足用户需求,独立 于实现的OOA模型。
OOD主要解决与实现有关的问题,基于OOA模型, 针对具体的软、硬件条件(如机器、网络、OS、GUI、 DBMS等)产生一个可实现的OOD模型。
两种不同的观点
2、识别操作
❖对象行为分类
(1)系统行为 例:创建、删除、复制、转存
(2)对象自身的行为——算法简单的操作 例:读、写属性值
(3)对象自身的行为——算法复杂的操作 计算或监控
识别操作的启发策略
(1)考虑系统责任 有哪些功能要求在本对象提供?
(2)考虑问题域 对象在问题域对应的事物有哪些行为?
(3)分析对象状态 在每种状态下对象可能发生什么行为? 对象状态的转换,是由哪些操作引起的?--状态图讲述
与实现有关的因素有:图形用户界面系统、硬件、操 作系统、网络、数据管理系统和编程语言等。
OOD模型
——从两个侧面来描述
从另一侧面观察 OOD模型每个部分
用OO概念表达 ——采用OOA的概念 及模型组织方式
从一个侧面观察 OOD模型包括几个主 要部分 ——一个核心部分加 几个外围部分
在辅助模型中要增加分别 用于描述构件模型和部署 模型的构件图和部署图
2、识别属性
❖ 启发性策略
▪ 按一般常识这个对象应该有哪些属性? ▪ 在当前的问题域中这个对象应该有哪些属性? ▪ 根据系统责任的要求,这个对象应具有哪些属性? ▪ 建立这个对象是为了保存和管理哪些信息? ▪ 为了在对象的操作中实现特定功能,需要增设哪些属性? ▪ 对象有哪些需要区别的状态?是否需要增加一个属性来记
Mortgage Class具有职责 Intilialize,update,and delete mortgages
Produce a Report用例方案1实现
Mortgage Class具有职责 Generate list of mortgage
❖ MSG系统的类图
❖ CRC图中列出某个类 的协作者,但并不是 和每个协作者都有相 关的职责。
❖ 尽可能晚的把信息添加进行模块中是有意义的。
1、属性
❖ 属性是用来描述对象的静态特征的一个数据项。 ❖ 属性的基本格式:
[可见性]属性名[:类型][=初始值](可选) ▪ 可见性:
• 公共的:该属性可由拥有它的对象和其他对象访问; • 受保护的:可由拥有它的对象以及该对象所属于的类的子类
所产生的对象访问; • 私有的:该属性仅能由拥有它的对象访问; • 包范围的:只有在同一个包中声名的元素才能使用。
人(通信地址) ❖ 若不使用多态机制,凡是在一般类中定义了的属性不要在
特殊类中重复出现。 ❖ 如果一个属性的值明显可以从另一个属性值直接导出,则
应考虑是否去掉这个属性。
4、属性的定位
❖ 把属性放置到由它直接描述的那个对象所属的类的符号中。 ❖ 在继承结构中把通用的属性放在一般类中,把专用的属性放
在特殊类中。 ❖ 总的原则:一个类的属性必须适合这个类和它的全部特殊类
操作getAuctionPrice的分配
(2)继承
❖ PaintingClass具有一个属性title。
❖ 使用操作setTitle把油画的名称分配给油画对象。 ▪ 如果Osbert购买一幅新油画,系统会创建一个新对象,并 且调用操作setTitle把新油画的名称分配给那个对象。
❖ 使用操作GetTitle获得油画对象的名称。 ▪ 如果Osbert希望打印他所购买的所有油画的一份清单,那 就依次检查信息系统中的每个对象,并且发送一条消息 给操作GetTitle,以获得那个对象表示的油画的名称。
❖把操作setTitle 和操作GetTitle分配给Painting Class。
操作
7、 CRC卡
❖ CRC卡:类-职责-协作(class-responsibilitycollaboration)
❖ 对于每个类,信息系统开发团队都会填充在一张卡 中,以显示类名、那个类的功能以及它为了实现那 种功能而调用的一份其他类的列表。
❖问题域部分设计
▪ 按照实现条件对OOA模型进行补充与调整。
❖人机交互部分设计
▪ 设计人机界面
❖控制驱动部分设计
▪ 定义和协调各个并发的控制流
❖数据管理部分设计
▪ 对永久对象的存取建模
❖构件及部署部分设计
▪ 构件模型用于描述构件及构件之间的关系,部署模型 用于描述节点、节点之间的关系以及构件在节点上的 分布。
2、OOA与OOD的关系:
(1)从OOA到OOD不是转换,是调整和增补
将OOA模型搬到OOD; 进行必要的调整, 作为OOD模型的问题域 部分;
增补其它四个部分,成 为完整的OOD模型。
OOA 模型
构件部署


机 交 互
问题域 部分
据 口 部



任务管理部分
(2)采用一致的概念和表示法
——不存在分析与设计之间的鸿沟
(2)是不是高内聚的 一个操作应该只完成一项单一的、相对完整的功能。
调整——拆分 或 合并
4、职责驱动型设计
❖ 设计原则:
如果Class A发送消息给 Class B以告诉它做某些事 情,那么执行请求的操作就 是Class B的职责。
如:MSG基金会案例研究的 Estimate Funds Available for Week用例
❖前4项不强调次序 ❖每个部分均采用与OOA一致的概念、表示法及活动,但具有 自己独特的策略。 ❖进行构件部署设计要在其前面四个部分完成后进行。
4、本书主要讲述内容
❖ 设置属性的格式 ❖ 标识操作,分配给合适的类 ❖ 选择用于实现信息系统的编程语言 ❖ 可移植性 ❖ 把每种软件组件分配给在其上运行的硬件组件(软
件体系结构师)
❖ 统一过程提供一种可用于开发大型信息系统的方法 学。
▪ 分析工作流的一个重要部分是把信息系统分割成分析程 序包。每个分析程序包都包含一组相关的类,它可以实 现成一个单一的单元。
▪ 设计工作流目标是把即将到来的实现工作流分解成可管 理的部分,将其称为子系统。
• 实现较小的子系统比实现大系统更容易些。 • 编程团队可以并行工作实现各个相对独立的子系统,
8.2 传统的与面向对象设计
8.3 问题域部分的设计
8.3.1 属性
❖ 设计工作流期间,必须指定类图的每个属性的精确格式。 ❖ 为什么不在分析工作流期间确定格式呢?
▪ 面向对象范型是迭代式的,每次迭代都会改变已经完成 的工作的一部分。如果更早的确定属性,将不得不修改 这些属性,并把它们从一个类移动到另一个类。
第二种观点
分析

问题域与

系统责任
种 观
相关主题