第6章 面向对象设计 软件工程课件.ppt

  1. 1、本文档共106页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 面向对象设计 软件工程课件

第10章 面向对象设计 面向对象设计过程与准则 体系结构模块及依赖性 系统分解 问题域部分的设计 人机交互部分的设计 任务管理部分的设计 数据管理部分的设计 对象设计 第10章 面向对象设计 系统设计是一个描述、组织、构造系统部件的过程。 这个过程分为两个层次:结构设计与细节设计。 设计同样也是一个建模过程:由需求模型转换为系统解决方案的模型。 面向对象的设计模型,同样用 UML 来进行描述。 10.1 面向对象设计过程与准则 面向对象设计过程 (1) 建立系统环境模型。在设计的初始阶段,系统设计师用系统环境图对软件与外部实体交互的方式进行建模。下图给出了系统环境图的一般的结构。 10.1 面向对象设计过程与准则 (2) 设计系统体系结构。体系结构设计可以自底向上进行,如将关系紧密的对象组织成子系统或层;也可以自顶向下进行。 (3) 对各个子系统进行设计。 (4) 对象设计及优化。对象设计以问题领域的对象设计为核心,其结果是一个详细的对象模型。对象设计过程包括使用模式设计对象、接口规格说明、对象模型重构、对象模型优化4组活动。 10.1 面向对象设计过程与准则 面向对象设计准则 模块化 传统的面向过程方法中的模块通常是函数、过程及子程序等,而面向对象方法中的模块则是类、对象、接口、构件等。 在面向过程的方法中,数据及在数据上的处理是分离的;而在面向对象方法中,数据及其上的处理是封装在一起的,具有更好的独立性,也能够更好地支持复用。 10.1 面向对象设计过程与准则 (2) 抽象 面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上就是一种抽象数据类型。可以将类的抽象分为规格说明抽象及参数化抽象。 规格说明抽象:类对外开放的公共接口构成了类的规格说明,即协议。这种接口规定了外部可以使用的服务,使用者无需知道这些服务的具体实现算法。 参数化抽象:是指当描述类的规格说明时并不具体指定所要操作的数据类型,而是将数据类型作为参数。 10.1 面向对象设计过程与准则 (3) 信息隐藏 在面向对象方法中,信息隐藏通过对象的封装性实现。对于类的用户来说,属性的表示方法和操作的实现算法都应该隐藏。 (4) 弱耦合 耦合是指一个软件结构内不同模块之间互连的紧密程度。在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。 10.1 面向对象设计过程与准则 (5) 强内聚 内聚衡量一个模块内各个元素彼此结合的紧密程度。在面向对象设计中存在以下3种内聚: (1) 服务内聚:一个服务应该完成一个且仅完成一个功能。 (2) 类内聚:一个类应该只有一个用途,它的属性和服务应该是高内聚的。类的属性和服务应该全都是完成该类对象的任务所必需的,其中不包含无用的属性或服务。 (3) 一般—特殊内聚:类的结构,应该符合多数人的概念,更准确地说,这种结构应该是对相应的领域知识的正确抽取。 10.1 面向对象设计过程与准则 (6) 可重用 软件重用是提高软件开发生产率和目标系统质量的重要途径。 重用基本上从设计阶段开始,重用有两方面的含义: 一是尽量使用已有的类:包括开发环境提供的类库,及以往开发类似系统时创建的类。 二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重用性。 体系结构设计描述了系统所需的数据结构和程序构件。一个好的体系结构设计要求软件模块的分层及编程标准的执行。 在面向对象软件中,常见的软件模块有类、接口、包和构件。 在设计阶段我们往往关注类、接口和包,在实现阶段关注构件,而在部署阶段则关注构件的部署,也就是将构件部署在哪些结点上。 依赖性 依赖关系的模块间最常见的一类关系。 UML 中对依赖定义为:两个事物之间的语义关系,其中一个事物发生变化会影响到另一个事物的语义。 显然,较强的依赖将导致耦合度的增加,但是很多时候依赖又是无法回避、普遍存在的问题,如继承关系。 为此,我们有必要对依赖性进行深入的探讨。 (1)多态继承 根据为请求提供服务的对象不同可以得到不同的行为,这种现象称为(类)多态。 在运行时对类进行实例化,并调用与实例化对象相应的方法,称为动态绑定、后期绑定或运行时绑定。 如果方法的调用是在编译时确定的,则称为是静态绑定、前期绑定或编译时绑定。 (1)多态继承 多态并不总是伴随着继承而出现。 如果在子类中不覆盖父类中的任何方法,就不会产生多态行为。 很明显,继承会带来类和方法之间的依赖性。继承带来的依赖性有编译时继承依赖性和运行时继承依赖性。 ① 编译时继承依赖性 右图所示的例子说明了一棵树中类之间的编译时依赖性。 B继承A,但没有覆盖A中的方法do1( )。因此,B和A之间没有运行时继承依赖性。也就是说,由于编译时依赖性的存在,A中do1( )方法的任何变化,都会被

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档