计算机科学与工程系-模式与对象设计.ppt课件.ppt

上传人(卖家):三亚风情 文档编号:2872924 上传时间:2022-06-06 格式:PPT 页数:128 大小:1.67MB
下载 相关 举报
计算机科学与工程系-模式与对象设计.ppt课件.ppt_第1页
第1页 / 共128页
计算机科学与工程系-模式与对象设计.ppt课件.ppt_第2页
第2页 / 共128页
计算机科学与工程系-模式与对象设计.ppt课件.ppt_第3页
第3页 / 共128页
计算机科学与工程系-模式与对象设计.ppt课件.ppt_第4页
第4页 / 共128页
计算机科学与工程系-模式与对象设计.ppt课件.ppt_第5页
第5页 / 共128页
点击查看更多>>
资源描述

1、上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-172w责任分配责任分配w设计模式设计模式wGRASP模式模式w案例案例谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-173w我们已经创建了领域模型我们已经创建了领域模型w确定有什么样的方法,属于谁,对象之间如何交确定有什么样的方法,属于谁,对象之间如何交互,这是开发面向对象系统的核心互,这是开发面向对象系统的核心w但是如何做但是如何做?谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-174w

2、GRASP模式是帮助我们理解详细的原则和所需模式是帮助我们理解详细的原则和所需要的思考方法的学习工具要的思考方法的学习工具w这些模式与如何将责任分配给类相关这些模式与如何将责任分配给类相关谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-175w责任:分类器的契约和责任责任:分类器的契约和责任w对象具有责任意味着对象具有责任意味着:n自己做某些事情,例如创建一个对象或者进行一个计算自己做某些事情,例如创建一个对象或者进行一个计算n控制或者协调其它对象的活动控制或者协调其它对象的活动n“一个一个sale对象对象负责创建负责创建SalesLineItems( a d

3、oing)”w要想知道一个对象的责任要想知道一个对象的责任,需要需要:n知道私有的封装的数据知道私有的封装的数据n知道相关的对象知道相关的对象n知道可以派生或者计算的对象知道可以派生或者计算的对象n“一个一个sale对象对象需要负责需要负责knowing its total”谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-176w责任不等同于方法,但是方法是用来完成责任的责任不等同于方法,但是方法是用来完成责任的wSale 类可以定义一个或多个方法来计算总价类可以定义一个或多个方法来计算总价n被命名为被命名为 getTotal的方法的方法n或者发送或者发送ge

4、tSubTotal 消息给每一个消息给每一个SalesLineItem 对对象,来获取每一个类别的价格象,来获取每一个类别的价格谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-177w责任可以通过编程实现责任可以通过编程实现w或者可以用过创建交互图来进行分配或者可以用过创建交互图来进行分配: SalemakePayment(cashTendered): Paymentcreate(cashTendered)implies Sale objects have aresponsibility to create Payments谢谢观赏上海交通大学计算机科学与工程

5、系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-179w在我们人类社会中,许多方面的成功经验都可以在我们人类社会中,许多方面的成功经验都可以归结为模式归结为模式n事实上,教育的重要目标就是把学习的模式从一代传事实上,教育的重要目标就是把学习的模式从一代传向下一代向下一代w下面,我们将探索如何依据模式来学习下棋下面,我们将探索如何依据模式来学习下棋w学习开发高质量的软件与学习下棋非常类似学习开发高质量的软件与学习下棋非常类似n虽然失败的后果通常没有那么戏剧性虽然失败的后果通常没有那么戏剧性谢谢观赏上海交通大学计算机科学与工程系上海交通大学

6、计算机科学与工程系2019-8-1710w首先学习规则和物理需求首先学习规则和物理需求n例如,棋子的名字,合法的移动,棋盘的构成,等等例如,棋子的名字,合法的移动,棋盘的构成,等等w然后,学习原则然后,学习原则n例如,每一个棋子的大小,如何将,如何吃子等等例如,每一个棋子的大小,如何将,如何吃子等等w但是,要成为高手,还必须从其它人的棋谱中学但是,要成为高手,还必须从其它人的棋谱中学习习n这些棋谱包含了许多必须理解,记忆和不断运用的模这些棋谱包含了许多必须理解,记忆和不断运用的模式式w这种棋谱也是非常多的这种棋谱也是非常多的谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2

7、019-8-1711w首先学习规则首先学习规则n例如,算法,数据结构和软件语言例如,算法,数据结构和软件语言w然后学习原则然后学习原则n例如,结构化编码,模块化编码,面向对象编码,遗例如,结构化编码,模块化编码,面向对象编码,遗传编码等等传编码等等w但是,但是, 为了真正掌握软件设计,还必须学习其为了真正掌握软件设计,还必须学习其它大师的设计它大师的设计n 这些设计包含了必须理解,记忆和重复运用这些设计包含了必须理解,记忆和重复运用的模式的模式w这种模式也是非常多的这种模式也是非常多的谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1712w模式名字模式名字:

8、 信息专家(信息专家(Information Expert)w解决方案解决方案: 将责任分配给拥有信息完成责任的类将责任分配给拥有信息完成责任的类w解决的问题解决的问题: 将责任分配给对象的基本原则是什将责任分配给对象的基本原则是什么?么?最简单的,模式是一个命名的问题最简单的,模式是一个命名的问题/解决对,它可以解决对,它可以用在新的场景中,并包含了如何利用它解决新问题和用在新的场景中,并包含了如何利用它解决新问题和对它在不同情况下的权衡讨论对它在不同情况下的权衡讨论谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1713w模式对专家的知识和设计中的优缺点进

9、行了显示模式对专家的知识和设计中的优缺点进行了显示获取,并尽力使这种专家知识被广泛应用获取,并尽力使这种专家知识被广泛应用w模式可以改进开发者之间的沟通模式可以改进开发者之间的沟通n模式名字构成一个词汇集模式名字构成一个词汇集w模式有助于面向对象技术的推广模式有助于面向对象技术的推广谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1714w不要把所有的东西都作为一个模式不要把所有的东西都作为一个模式n 开发战略性的领域模式,并重用现存的战术型模式开发战略性的领域模式,并重用现存的战术型模式w模式作者,应用开发者和领域专家之间的密切合模式作者,应用开发者和领域专

10、家之间的密切合作作w在文档中清楚表明何时可以应用,何时不可以应在文档中清楚表明何时可以应用,何时不可以应用用谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系分配责任的通用原则模式分配责任的通用原则模式Patterns of General Principles in Assigning Responsibilities上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1716w为什么为什么n在对象设计中,对责任的合理分配非常重要在对象设计中,对责任的合理分配非常重要n对责任进行分配一般是在画交互图,在编码时创建对责任进行分配一般是在画交互图,在编码时

11、创建n模式是一个命名的问题模式是一个命名的问题/求解对,它包含了好的建议和求解对,它包含了好的建议和原则,这些与责任的分配相关原则,这些与责任的分配相关w是什么是什么n通用的责任分配软件模式(通用的责任分配软件模式(General Responsibility Assignment Software Patterns)谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1717w信息专家(信息专家(Information Expert)w创建者(创建者(Creator)w高度内聚(高度内聚(High Cohesion)w低耦合(低耦合(Low Coupling)w

12、控制器(控制器(Controller)谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1719w将责任分配给信息专家,所谓的信息专家是拥有将责任分配给信息专家,所谓的信息专家是拥有完成责任的信息的类完成责任的信息的类谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1720w设计模型可能定义成百上千个软件对象,一个应设计模型可能定义成百上千个软件对象,一个应用中也可能需要将成百上千项责任进行分配用中也可能需要将成百上千项责任进行分配w目的目的: 易于理解,维护,扩展和重

13、用易于理解,维护,扩展和重用谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1721wNextGEN POS 应用,某些类需要知道销售总额应用,某些类需要知道销售总额w谁负责知道销售总额谁负责知道销售总额?w拥有需要的信息的对象类确定总额拥有需要的信息的对象类确定总额w需要回答的问题需要回答的问题n我们已经有领域模型了,但是我们依然没有设计模型我们已经有领域模型了,但是我们依然没有设计模型谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1722w如果已经有设计模型,并且包含了相关的类,首如果已经有设计模型,并且包含了相关的类,

14、首先关注它们先关注它们w否则,在领域模型中,分析如何依据领域模型中否则,在领域模型中,分析如何依据领域模型中的表示来创建相应的设计类的表示来创建相应的设计类谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1723w部分领域模型部分领域模型SaledatetimeSalesLineItemquantityProductSpecificationdescriptionpriceitemIDDescribed-by*Contains1.*11谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1724SaledatetimegetTot

15、al():Salet := getTotal()New method谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1725SaledatetimegetTotal()SalesLineItemquantitygetSubtotal()New method1 *: st := getSubtotal(): Salet := getTotal()*:SalesLineItem:SalesLineItem谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1726SaledatetimegetTotal()SalesLineItemq

16、uantitygetSubtotal()ProductSpecificationdescriptionpriceitemIDgetPrice()New method:ProductSpecification1.1: p := getPrice()1 *: st := getSubtotal(): Salet := getTotal()*:SalesLineItem:SalesLineItem谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1727w这些责任在画交互图时被考虑和确定这些责任在画交互图时被考虑和确定设计类设计类责任责任SaleKnows sale

17、totalSalesLineItemKnows line item subtotalProductSpecificationKnows product price 谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1728w由于它们知道信息,所以对象必须做事情由于它们知道信息,所以对象必须做事情w当信息分布在不同的对象中,他们需要相互间通当信息分布在不同的对象中,他们需要相互间通过消息进行交互以分担工作过消息进行交互以分担工作w在真实的世界中,对象可能没有生命的,但是在在真实的世界中,对象可能没有生命的,但是在软件中,对象是软件中,对象是“活着的活着的”或者或者

18、“有生命的有生命的”,因为它们将承担责任因为它们将承担责任谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1729w没有万能药没有万能药w专家模式可能在某些情况中造成耦合和内聚专家模式可能在某些情况中造成耦合和内聚w例如,将例如,将Sale保存在数据库保存在数据库n我们需要将与数据库处理相关的逻辑作为我们需要将与数据库处理相关的逻辑作为Sale的责任的责任吗吗? n如果这样的话,我们将违反基本的结构原则:依据分如果这样的话,我们将违反基本的结构原则:依据分离的主要的系统关注点进行设计离的主要的系统关注点进行设计n将应用逻辑放在一个地方,将数据库逻辑放在另外一将

19、应用逻辑放在一个地方,将数据库逻辑放在另外一个地方个地方 (持久化服务子系统持久化服务子系统)谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1730w实现了信息封装,因为对象使用它们自己的信息实现了信息封装,因为对象使用它们自己的信息完成任务完成任务w行为分布在拥有所需要的信息的类上行为分布在拥有所需要的信息的类上谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1732w将创建类将创建类A的实例的责任分配给类的实例的责任分配给类B,如果一个,如果一个或多个下面的条件

20、为真或多个下面的条件为真:nB 聚合了(聚合了(aggregates) A 对象对象nB包含了(包含了(contains)A对象对象nB记录了(记录了(records)A对象的实例对象的实例nB密切使用(密切使用(closely uses)A对象对象nB拥有传递给创建拥有传递给创建A所需要的初始化数据所需要的初始化数据 ( 因此因此B是创是创建建A的专家的专家)wB是是A对象的创建者对象的创建者谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1733w谁来负责创建某些类的新实例谁来负责创建某些类的新实例?w在面向对象系统中对象的创建是一个最普通的活在面向对象系

21、统中对象的创建是一个最普通的活动动w我们需要一个分配创建责任的通用原则我们需要一个分配创建责任的通用原则谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1734w在在POS应用,谁需要负责创建应用,谁需要负责创建 SalesLineItem 实实例呢例呢?SaledatetimeSalesLineItemquantityProductSpecificationdescriptionpriceitemIDDescribed-by*Contains1.*11谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1735wsale包含了许

22、多包含了许多SalesLineItem 对象对象: Register: SalemakeLineItem(quantity): SalesLineItemcreate(quantity)谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1736w某些时候创建者是通过查找具有在创建时传递的某些时候创建者是通过查找具有在创建时传递的初始化数据的类而发现的初始化数据的类而发现的w例如,假设例如,假设Payment 的一个实例需要被初始化,的一个实例需要被初始化,在创建时,需要携带在创建时,需要携带 Sale 总额信息总额信息. 由于由于Sale 知知道总价道总价, S

23、ale 是是Payment的备选创建者对象的备选创建者对象谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1737w许多时候,创建过程有很强的复杂性,例如由于许多时候,创建过程有很强的复杂性,例如由于性能原因需要回收实例,依据外部属性值有条件性能原因需要回收实例,依据外部属性值有条件的创建一族相近似的类的一个实例的创建一族相近似的类的一个实例w建议采用建议采用Factory类类 谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1738w低耦合低耦合w因为通过该模式存在的关联得到了满足因为通过该模式存在的关联得到了满足谢谢观赏上

24、海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1740w分配责任使得耦合度比较低分配责任使得耦合度比较低谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1741w耦合是对一个元素与其他元素的连接,拥有知识,耦合是对一个元素与其他元素的连接,拥有知识,依赖等关系的强烈程度的度量依赖等关系的强烈程度的度量w高耦合造成高耦合造成:n相关的类的修改造成本地修改相关的类的修改造成本地修改n难以理解难以理解n难以重用难以重用谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工

25、程系2019-8-1742w我们需要创建一个我们需要创建一个Payment 实例并将其与实例并将其与Sale关关联联. PaymentRegisterSale谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1743w方案方案1 (From the creator pattern): Registerp : Payment:SalemakePayment()1: create()2: addPayment(p)谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1744w方案方案2: Register:Sale:Paymentmak

26、ePayment()1: makePayment()1.1. create()谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1745w低耦合是一个在设计中时时需要记住的原则;它低耦合是一个在设计中时时需要记住的原则;它也是需要一直考虑的目标。这是设计者用来评估也是需要一直考虑的目标。这是设计者用来评估设计决策时运用的一个评价准则设计决策时运用的一个评价准则.w但是我们知道但是我们知道O-O 软件是一个协同系统软件是一个协同系统. 这意味这意味着对象之间从某种程度上都是耦合的着对象之间从某种程度上都是耦合的.w因此,这是一个我们尽力去满足的原则,而不必因此,这

27、是一个我们尽力去满足的原则,而不必一定遵循一定遵循.谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1746w对稳定的元素和普遍的元素的高耦合一般不是一对稳定的元素和普遍的元素的高耦合一般不是一个问题个问题w例如,一个例如,一个Java J2EE应用对应用对 Java库库 (java.util, 等等)的耦合没有问题等等)的耦合没有问题, 因为它们是稳定的,并因为它们是稳定的,并被普遍使用被普遍使用谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1747w其他组件中的变更不会造成影响其他组件中的变更不会造成影响w由于分离,便于

28、理解由于分离,便于理解w方便重用方便重用谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1749w责任分配以保证高内聚责任分配以保证高内聚谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1750w内聚是对一个元素的责任之间的关系是否密切相内聚是对一个元素的责任之间的关系是否密切相关和集中的度量关和集中的度量w低内聚的类包含了很多无关的事情,或者承担了低内聚的类包含了很多无关的事情,或者承担了太多的工作。它们有下面这些的问题太多的工作。它们有下面这些的问题:n难以理解难

29、以理解n难以重用难以重用n难以维护难以维护n脆弱脆弱; 常常受修改影响常常受修改影响谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1751w我们需要创建我们需要创建(cash) Payment 的实例并将它与的实例并将它与Sale 关联关联w解决方案解决方案1: Register: SaleaddPayment( p )p : Paymentcreate()makePayment()谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1752w解决方案解决方案2: Register: SalemakePayment() : Pa

30、ymentcreate()makePayment()谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1753w这是一个需要放在心中的模式,就如同低耦合模这是一个需要放在心中的模式,就如同低耦合模式一样式一样w高度内聚的类一般具有较少的方法,具有高度相高度内聚的类一般具有较少的方法,具有高度相关的功能,而且不完成太多的工作关的功能,而且不完成太多的工作谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1754w一些老的原则依旧很重要一些老的原则依旧很重要n耦合耦合n内聚内聚n模块设计模块设计“模块化是系统的一个属性,该系统被分解成

31、一组内聚模块化是系统的一个属性,该系统被分解成一组内聚和松耦合的模块和松耦合的模块”谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1755w内聚和耦合内聚和耦合-:w软件工程的软件工程的“阴阴”和和“阳阳”谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1756w低耦合在某些情况下是可以接受的低耦合在某些情况下是可以接受的n将将SQL语句放入每一个类遵循了内聚模式语句放入每一个类遵循了内聚模式. 但是将但是将SQL语句分离出来并归并在一个类中更合理,因为它语句分离出来并归并在一个类中更合理,因为它需要特殊的技术需要特殊的技术

32、n在分布应用中,为了改进性能,我们可以设置一个远在分布应用中,为了改进性能,我们可以设置一个远程操作程操作 setData 而不是分别设置而不是分别设置 setName, setSalary 和和 setHireDate.谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1758w将接收和处理系统事件消息的责任分配给代表下将接收和处理系统事件消息的责任分配给代表下列方面的类列方面的类:n代表整个系统,设备或子系统代表整个系统,设备或子系统n代表一个与系统事件相对应的用例场景代表一个与系统事件相对应的用例

33、场景谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1759w谁应该为处理输入系统事件负责谁应该为处理输入系统事件负责?w一个控制器是一个没有用户界面的对象,负责接一个控制器是一个没有用户界面的对象,负责接收和处理系统事件。控制器定义了系统操作的方收和处理系统事件。控制器定义了系统操作的方法法谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1760w在在NextGen应用中,有下列几个系统操作应用中,有下列几个系统操作SystemendSale()enterItem()makeNewSale()makePayment(). .

34、 .谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1761actionPerformed( actionEvent ): ?: Cashier:SaleJFramepresses buttonenterItem(itemID, qty)InterfaceLayerDomainLayersystem event message哪一个类对象需要负责接收系统事件消息?有时被称为控制器或者协调器。它一般不工作而是将消息在分配给其他对象。控制器是一种从接口层到领域层的“方面”谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1762:R

35、egisterenterItem(id, quantity):ProcessSaleHandlerenterItem(id, quantity)谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1763w可以使用同一个控制类来处理一个用例中的所有可以使用同一个控制类来处理一个用例中的所有系统事件以维护控制器中有关用例状态的信息系统事件以维护控制器中有关用例状态的信息 w一般,控制器将需要完成的工作分配给其他对象;一般,控制器将需要完成的工作分配给其他对象;它负责协调或者控制活动,自己不做太多工作。它负责协调或者控制活动,自己不做太多工作。谢谢观赏上海交通大学计算

36、机科学与工程系上海交通大学计算机科学与工程系2019-8-1764w方面控制器(方面控制器(Facade Controller)n它代表了整个系统,设备或一个子系统它代表了整个系统,设备或一个子系统n它提供了从它提供了从UI层往其他层的服务调用的主要入口层往其他层的服务调用的主要入口 对整个物理单元的抽象,例如对整个物理单元的抽象,例如Register, TelecommSwitch, Phone 或或 Robot代表了整个软件系统的类,例如代表了整个软件系统的类,例如POSSystem设计者选择用来表示整个系统,子系统的其他概念,例如如设计者选择用来表示整个系统,子系统的其他概念,例如如果是

37、一个游戏软件,选择果是一个游戏软件,选择ChessGame谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1765w用例控制器用例控制器n对每一个用例设置一个单独的控制器对每一个用例设置一个单独的控制器n这是支持系统的人工结构这是支持系统的人工结构例如,在例如,在NextGen应用中,例如应用中,例如Process Sale 等用例可以等用例可以与与 ProcessSaleHandler 类关联类关联n什么时候我们选择用例控制器什么时候我们选择用例控制器?当有太多的系统事件并设计不同的过程,用例控制器是当有太多的系统事件并设计不同的过程,用例控制器是一个好的选

38、择。它将处理它们的任务分配给那些可管一个好的选择。它将处理它们的任务分配给那些可管理的单独的类,也提供了一个获知和推理目前进行中理的单独的类,也提供了一个获知和推理目前进行中的场景的当前状态的基础。的场景的当前状态的基础。谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1766Register.endSale()enterItem()makeNewSale()makePayment()makeNewReturn()enterReturnItem(). . .SystemendSale()enterItem()makeNewSale()makePayment()

39、makeNewReturn()enterReturnItem(). . .system operationsdiscovered during systembehavior analysisallocation of systemoperations during design,using one facade controllerProcessSaleHandler.endSale()enterItem()makeNewSale()makePayment()SystemendSale()enterItem()makeNewSale()makePayment()enterReturnItem(

40、)makeNewReturn(). . .allocation of systemoperations during design,using several use casecontrollersHandleReturnsHandler.enterReturnItem()makeNewReturn(). . .谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1767w在统一过程中:在统一过程中:n边界对象(边界对象(Boundary Objects) 是接口的抽象是接口的抽象n实体对象(实体对象(Entity Objects) 是独立于应用(经常是是独立于应

41、用(经常是持久性)领域软件对象持久性)领域软件对象n控制对象(控制对象(Control Objects) 是控制器模式中描述的是控制器模式中描述的用例处理器用例处理器谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1768w提高了重用的可能性,提供了可插拔的接口提高了重用的可能性,提供了可插拔的接口-它它保证了接口层不处理应用逻辑保证了接口层不处理应用逻辑w对用例的状态进行推理对用例的状态进行推理n保证系统操作以合法的顺序发生保证系统操作以合法的顺序发生谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1769w“浮肿的浮肿的”

42、控制器(控制器(Bloated Controllers)n如果设计得不合理,控制类内聚性不强如果设计得不合理,控制类内聚性不强-不聚焦并处不聚焦并处理了太多领域的责任理了太多领域的责任w症兆症兆n一个控制类接收所有的系统事件一个控制类接收所有的系统事件n控制类自己处理了完成系统事件所需要的太多任务控制类自己处理了完成系统事件所需要的太多任务n控制器有太多的属性并维持了系统或领域的信息控制器有太多的属性并维持了系统或领域的信息谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1770actionPerformed( actionEvent ):Register:

43、Cashier:SaleJFramepresses button1: enterItem(itemID, qty):Sale1.1: makeLineItem(itemID, qty)Interface LayerDomain Layersystem event messagecontroller谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1771Cashier:SaleJFrameactionPerformed( actionEvent ):Sale1: makeLineItem(itemID, qty)Interface LayerDomain Lay

44、er对于接口层的对象而言,例如Window参与决定如何处理领域过程业务逻辑是嵌入在表现层中的,而该层并不十分有用SaleJFrame 不能发送该消息presses button谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1773w设计用例的实现设计用例的实现w运用运用GRASP模式给类分配责任模式给类分配责任w使用使用UML交互图标记来表示对象设计交互图标记来表示对象设计w责任的分配和协作的设计是非常重要的,并且是责任的分配和协作的设计是非常重要的,并且是设计,画图或者编程中具有创新性的步骤设计,

45、画图或者编程中具有创新性的步骤w我们将试图说明软件设计是工程而不是艺术我们将试图说明软件设计是工程而不是艺术谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1774w用例实现用例实现 描述了一个特定的用例在设计模型中描述了一个特定的用例在设计模型中是如何通过协作的对象来实现的是如何通过协作的对象来实现的.wUML交互图交互图是一种表示用例实现的通用的语言是一种表示用例实现的通用的语言谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1775: SystementerItem(id, quantity)endSale()makeP

46、ayment(amount)Process Sale1. Customerarrives .2. Cashiermakes newsale.3. Cashierenters itemidentifier.4.Use CasesSystem Sequence DiagramsOperation: enterItemPost-conditions:- A SalesLineItem instancesli was created- . . .Operation: makeNewSalePost-conditions:- . . .ContractsmakeNewSale(): CashierSal

47、edate. . .SalesLineItemquantity1.*1. . . . .domain objectssystemeventssystemoperationsthe domain objects, attributes, andassociations that undergo state changesDomain ModelUse-Case Modelsome ideas and inspiration for the post-conditions derive from the use casesDesign Model: RegisterenterItem(itemID

48、, quantity): ProductCatalogspec := getSpecification( itemID )addLineItem( spec, quantity ): Sale. . .in addition to the usecases, requirements thatmust be satisfied by thedesign of the softwareuse-caserealizationconceptualclasses inthedomaininspire thenames ofsomesoftwareclasses inthe designmakeNewS

49、ale()create()endSale(). . . . .Sample UP Artifact Relationships for Use-Case Realization谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1776w协同图(协同图(Collaboration Diagrams) 可以用于显可以用于显示用例实现示用例实现:RegisterenterItem():RegisterendSale():RegistermakePayment()1: ?()1: ?()1: ?():RegistermakeNewSale()1: ?()谢谢观赏上海交通

50、大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1777w顺序图顺序图: RegisterenterItem(itemID, quantity): ProductCatalogspec := getProductSpec( itemID )addLineItem( spec, quantity ): Sale. . .makeNewSale()create()endSale(). . .makePayment(.). . .谢谢观赏上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2019-8-1778wor: Register: SalemakeNewSale()

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(计算机科学与工程系-模式与对象设计.ppt课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|