计算机科学与工程系-模式与对象设计.ppt课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《计算机科学与工程系-模式与对象设计.ppt课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机科学 工程系 模式 对象 设计 ppt 课件
- 资源描述:
-
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
展开阅读全文