软件工程技术与设计第二讲学生.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件工程技术与设计第二讲学生.ppt

* * * * * * * * * * * * * * * * * * * * * * * * 优点: 对象只能由其接口访问,不破坏封装。 对象的实现根据接口编写,依赖性减少。 有助于类的封装,使每个类集中于一个任务。 缺点: 系统的行为不是在类中定义,而依赖于对象的相互关系。 采用对象合成优于采用类继承(合成/聚合复用原则)。 委托(delegation):对象合成的特例。 一个控制请求的执行: 继承方法:子类将请求交给父类执行。 委托方法: 接收操作的对象把操作委托给它的代理对象。 接收操作的对象把自己本身也传给委托者,以使被委托操作指向接收对象。 [例] 窗口类的实现 继承方法:使窗口类成为矩形的子类,继承其操作。窗口类将请求交给矩形父类执行 代理方法: 产生一个矩形实例,并代理复用矩形的行为 窗口将请求传给此矩形实例 把操作委托给矩形实例 把自己本身也传给矩形实例,以使被委托操作指向接收对象 让窗口好像是一个矩形 在运行中用圆实例代替矩形实例就适用圆形窗口 窗口 矩形 窗口 矩形 窗口类对矩型类实例的引用 优点:容易组合运行时的行为,改变行为组合的方式。 缺点:难理解、运行效率低。 依赖具体情况及设计者经验。在标准模式中使用效果较好。 参数化类型。 定义类时不规定它所用的数据元素类型。这些类型在使用时作为参数提供。 [例]:列表类——将元素的类型提供给列表的类型参数,实现时为列表类建立每种元素的可定制形式。 整数列表——把类型“整数”作为参数。 字符串列表——类型“字符串” 作为参数。 设计模式:更高的层次上的可复用性(宏观逻辑的抽象层次复用) 解决: 1.合适的对象(类)的寻找 2.对象(类)粒度的确定:如何分解粒度合适的类 3. 对象(类)接口的确定:如何定义类接口和继承体系 4.对象(类)实现的确定 5. 复用机制的处理:如何建立类(类)的关键联系 6.运行结构和编译结构的处理 7.设计中变动的处理 1.寻找合适的对象 系统分解为对象的困难: 多种矛盾因素兼顾:封装、粒度、依赖性、灵活性、性能、发展、可重用性。 多种分解对象方法优劣的确定: (1)问题陈述→找出名词和动词→构造相应的对象和操作; (2)集中考虑系统中的协作和职责; (3)构造现实世界模型,把分析得到的对象转换到设计中。 现实世界+非现实世界的类,如数组、抽象类等。 解决办法:用设计模式帮助确定设计抽象和相应的对象。 2.确定对象的粒度 设计模式帮助确定在存在大小和数量差别的事物 3.确定对象的接口 设计模式帮助确定: (1)接口定义。识别关键元素和由接口取得的数据的类型。 (2)规定接口间的关系和接口限制。 4.确定对象实现 对象的实现由它的类来定义。 a.类的表示 抽象类/具体类/混合类 b.类的实现 类继承/接口继承 5.处理复用机制 理想情况下,应该只通过对象合成来得到所需的功能。 但限于可用部件的集合不够丰富。继承和对象合成可以互相补充。 一个设计可以用三种组合行为技术中的任一种来实现。 区别: 继承——允许提供操作的缺省实现并允许子类超越父类操作。 对象合成——允许运行时改变被组合的行为,但间接完成,效率不高。 参数化类型——允许改变一个类可用的类型。但不能在运行中改变。 哪种方法最好取决于设计和实现约束。 6.运行结构和编译结构 编译结构(代码结构)——编译时即被冻结,由具有固定继承关系的类组成。编译结构代码不能显示出一个系统工作的全部情况。 运行结构——由迅速变化的通信对象网组成。 系统运行结构的优劣主要由设计者设计的对象及其类型之间的关系来决定,而不是由语言来决定的。 [例]:运行结构和编译结构不同 聚集(aggregation)和关联(acquaintance)关系。 聚集——对象包含另一个对象或对另一对象负责,或为另一个对象的一部分,具有相同生命期。 关联——一个对象只知道另一个对象。关联对象之间可互相请求操作,但不对对方负责。是比聚集弱的联系,提供了对象间的松耦合。 ——运行结构不同 聚集和关联常用相同的方法编译实现: 在Smalltalk中:都是其他对象的引用。聚集和关联没有区别。 在C++中:都用指针和引用来实现。 ——编译结构相同 由此可见: 关联和聚集关系主要由设计含义决定,而不是由语言机制决定。 在编译结构中,关联和聚集之间的差别小,在源代码中难以辨认。 差别:聚集关系往往会比关联关系少而更稳定。关联关系出现频繁,有时只在一个操作持续的时间中存在。动态性更强。 7.处理设计中的变动 达到最大复用程度的关键:设计中预先考虑生命期内新需求和现有需求的变化。包括: 类的重定义和重新实现、 客户修改和重新测试。 设计模式的作用: 确保系统只用特定的方式发生改变。

文档评论(0)

xinshengwencai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档