1、CH 14 对象的设计,如何设计系统 编码 绘图、而后编码 只绘图不编码敏捷模型和轻量级UML图形 CASE工具 对象的思考,CH15 UML的交互图的表示法,交互图是进行设计的主要描述语言 描述对象之间如何通过消息进行交互 从交互图的设计中表现出对象的职责(功能)、操作的顺序(流程) 设计过程就是对交互的优化过程 UML的交互图: 协作图 顺序图,协作图实例,以图和网格的形式表示对象的交互 makePayment的协作图:,顺序图实例,以栅栏的形式表示对象的交互 makePayment的顺序图:设计交互图的过程实际上是OOD中具有创造性的实践过程,UML图的表示,类和实例的表示,协作图的表示
2、,链接消息发送到自己的消息,协作图的表示,创建迭代,协作图的表示,多对象遍历迭代 消息编号,协作图的表示,条件消息互斥条件消息,顺序图的表示,创建销毁,顺序图的表示,条件消息互斥条件,顺序图的表示,表示迭代,CH16 UML类图,类图 静态对象模型类的概要 关联,类图的表示,类图的表达形式,设计类图,领域模型中的概念类 设计模型中的设计类不同的语境下的表示方式: 方法,角色,导航,类的属性和关联,类图和交互图的关系,建立设计类图(1),寻找软件类并画出它们 从交互图中寻找软件类 在概念模型中寻找已经定义好的属性,建立设计类图(2),从顺序图中找出类的方法最后找出的带有方法的类:,建立设计类图(
3、3),关于方法的考虑: UML中的Create: Create表示一个实例的创建 在具体的编程语言中并没有Create,对应的是其是实例创建或构造函数。 在设计类图中就省略表示与实例创建有关的方法或构造函数。 访问方法: 对私有属性的访问,通常使用访问方法。 public class A private int quantity; public int get_quantity() return quantity; public put_quantity(int qty) quantity=qty; ,建立设计类图(4),关于方法的考虑: 多对象: 发送给多对象的消息并非发送给对象本身,而是发
4、送给对象容器或对象集合的消息。表示方法的独立性: 对于一些使用与UML不同的表示方法的程序设计语言,应该在设计阶段保持UML的表示方法。 语法格式的转换应该在编码阶段进行。,建立设计类图(5),类型信息的详细描述 如果设计类图是用于生成代码的,则设计类图必须尽可能的详细。,关联和导航,导航:说明了从源对象到目的对象沿着关联有一个单向的连接。 一个带箭头的关联常被解释成一个从源到目的的属性可见性。即:使用源类中定义的一个属性来实现。,关联和导航,关联产生的依据: 从顺序图中根据对象的可见性寻找关联如何发现关联和导航: A向B发送一个消息 A创建了B的一个实例 A需要和B维持一个连接,关联和导航的
5、发现,依赖关系,依赖关系用来表示一个元素了解另一个元素。 依赖关系在类图中表示非属性的可见性。,CH 17 GRASP,GRASP :通用职责分配软件模式 非常非常基本的对象设计基本原理 职责: 对象的义务、对象的功能 行为型:为自己或者其他对象提供的功能(创建、协调、控制) 了解型:了解自己私有的数据(属性)、相关对象。 模式: 有经验的软件开发者总结出来的一套具有通用性的软件设计的惯用方案。,Responsibility-Driven Design,职责驱动的软件设计:,职责驱动的软件设计,什么对象接收这个消息? 对象如何接收处理这个消息? 对象的职责是什么? 谁和它交互?职责是抽象的.
6、持久化的职责.职责的实现可能是多样的 1 method in 1 object 5 methods in 1 object 50 methods across 10 objects,GRASP Patterns,Expert 专家 Creator 创建者 Controller 控制者 Low Coupling 低耦合 High Cohesion 高聚合 Polymorphism 多态 Pure Fabrication 纯虚构 Indirection 中介者 Dont Talk to Strangers 不要和陌生人说话,最基本的对象化设计原理,信息专家(Expert),职责分配的最基本原则 将
7、职责赋予拥有和掌握信息的对象 “谁有信息,谁做事.”例如,哪一个对象来计算一笔销售的总额? 做这件事需要什么信息? 哪一个对象有这些信息的主要部分?,信息专家,概念模型,将职责分配给Sale,Sale需要SalesLineItem求子项合计,信息专家,SalesLineItem需要价格,创建者(Creator),谁(对象)来创建对象X?选择对象C, 它具有: C 包含或者聚集了 X C 密切使用了 X C 初始化了X的数据也可能同时拥有很多上述特征,创建者,控制者模式(Controller),把接收处理系统事件的职责分配给一个类, 这个类:有时候叫外观控制器、会话控制器、处理器。下例: 什么对
8、象接收 来自用户界面的请求呢?,控制者,表现层和领域层的耦合,表现层直接作为控制者,低耦合(Low Coupling),赋予职责,使耦合降为最低.低耦合意味着什么? 变化的影响更小 单独的理解 重用性,高聚合(High Cohesion),赋予职责,使聚合保持最高高聚合意味着什么? 更好的可理解性 更好的重用性 更好的可维护性,CH 18 用GRASP实现用况,从系统的顺序图开始,设计实现每一个系统操作的交互过程,顺序图的表示方法,对象设计:makeNewSale,寻找控制者Regester并不能完成该操作,它需要与其他的类协同工作,makeNewSale,enterltem,endSale,由于需求中表示在结束一笔销售后,要显示总额。 显示的操作是在表示层中的,但领域层应当提供计算总额的职责 ,应当考虑一个getTotal,getTotal 算法注释和约束的表示,makePayment,销售的记录: 作为付款之后的操作 由于Store类对历史销售更关心,可以将这个职责分配给Store,makePayment(完整的),计算余额: 付款后,需要显示余额。显示是在表现层进行的,但领域层需要提供计算余额。,对象设计:StartUp,I层与领域层的连接,I层与领域层的连接,