第四部分面向对象设计二.ppt

上传人:本田雅阁 文档编号:3136426 上传时间:2019-07-15 格式:PPT 页数:95 大小:3.91MB
返回 下载 相关 举报
第四部分面向对象设计二.ppt_第1页
第1页 / 共95页
第四部分面向对象设计二.ppt_第2页
第2页 / 共95页
第四部分面向对象设计二.ppt_第3页
第3页 / 共95页
第四部分面向对象设计二.ppt_第4页
第4页 / 共95页
第四部分面向对象设计二.ppt_第5页
第5页 / 共95页
点击查看更多>>
资源描述

《第四部分面向对象设计二.ppt》由会员分享,可在线阅读,更多相关《第四部分面向对象设计二.ppt(95页珍藏版)》请在三一文库上搜索。

1、面向对象开发方法 杨 潇 成都理工大学信息管理学院,第三部分 面向对象设计(二),2019年7月15日,2,第四部分 面向对象的设计(OOD),1控制驱动部分的设计 一、什么是控制驱动部分 控制流进程(process)或线程(thread)的别称 有多个任务(控制流)并发执行的系统,称作 多任 务系统 或 并发系统。 控制流部分 是OOD模型的组成部分之一,用来定义和表示并发系 统中的每个控制流。 用主动对象表示每个控制流(进程、线程) 所有的主动类构成控制流管理部分,2019年7月15日,3,并发行为是现实中固有的 并发行为是现实中固有的 当前大量的系统都是并发系统(多任务系统),例如: 负

2、责几台设备的数据采集及控制的系统 多用户系统 有多个子系统并发工作的系统 单或多处理机系统上运行的多个进程或线程 网上的各计算机中运行的多进程 设置多控制流部分的原因: 描述问题域固有的并发行为; 为了隔离硬件、操作系统、网络的变化对整个系统的影响; 表达实现所需的设计决策;,2019年7月15日,4,二、 控制流,1、进程 进程是一个具有一定独立功能的程序,在一个数据集合上的一次动态 执行的过程。 在大多数操作系统中(如Windows和Unix),每个程序都在它自己的 地址空间里作为一个进程运行。 一般情况下,一个节点上的所有进程是互相平等的,竞争这个节点上 提供的所有相同的资源。 如果在一

3、个节点上有多个处理器,那么在这个节点上实现真正地并发 是可能的。如果这个节点只有一个处理器,那么只是真正并发的错觉,是 由基础的操作系统来完成的。,2019年7月15日,5,2019年7月15日,6,线程与进程的区别: 进程既是处理机分配单位, 也是存储空间、设备等资源的分配单位; 线程只是处理机分配单位; 一个进程可以包含多个线程,也可以是单线程的。,2019年7月15日,7,在面向对象中,将每一个独立的控制流建模为一个主动对象,该对象代表 一个能启动控制活动的进程或线程。 在顺序系统中,只有一个控制流。这意味着在一个时间点有且仅有一件事情在发生。当一个顺序程序开始时,控制处于程序的开头,操

4、作一个接一个地被执行。即使在系统外的参与者之间有并发的事情发生,顺序程序在一个时间点上也只执行一个事件,任何并发的外部事件都要排队或者被丢弃。 在并发系统中,存在多个控制流。也就是说,在一个时间点上有多于一件的事情发生。在一个并发系统中,有多个同时发生的控制流,每个都以一个表示独立的进程或线程的主动对象为根。这种表示法意味着,控制流的创建与撤消的时机分别为: 当创建一个主动对象时,就开始相关的控制流; 当撤消这个主动对象时,就终止相关的控制流; 多控制流的语义仍可以用类图和交互图来描述。 用包括主动类(对象)的类图(对象图)捕捉控制流的静态语义,用顺序图或协作 图捕捉控制流的动态语义。,201

5、9年7月15日,8,2019年7月15日,9,2019年7月15日,10,三、 如何进行控制驱动部分的设计,1、识别每个控制流 1)OOA定义的主动对象 主动对象类的每个对象实例都是一个控制流 2)系统的并发需求所要求的多控制流 要求多项工作同时进行,则每一项工作就是一个控制流。 例如,销售与统计。 3)系统分布方案所要求的多控制流 每一个分布站点至少有一个控制流 4)为提高性能而增设的控制流 高优先控制流,低优先控制流,紧急控制流; 5)为实现方便设立的控制流 例如:负责处理机之间通讯的控制流,时钟驱动的控制流,1,2019年7月15日,11,2019年7月15日,12,2、 审查与筛选 去

6、掉不必要的控制流 多余的并发性意味着执行效率的损失 每个控制流应该有以上列举的理由之一 不要人为地增加控制流 例如,杂技的抛球,每增加一个新球,演员处理球的控制的复杂性会以指数级增长。,2019年7月15日,13,3、 定义各控制流,描述说明控制流 对控制流命名,并进行简单说明。 对设计部分的每个操作指定它属于哪个控制流。要保证每个操作属于一个控制流。 定义各控制流的细节若控制流由事件驱动,则要描述触发控制流的条件。 例如,若控制流由时钟驱动,则可能要描述触发之前所经历的时间间隔。 考虑描述控制流从那里取数据和往那里送数据之类的情况 。 定义控制流协调情况 控制流的表示 用主动对象表示每个控制

7、流 用主动类描述每一类控制流 原有的主动对象 原有的普通对象标为主动对象 新定义的主动对象 考虑用主动对象的主动操作描述控制流的功能 说明各线程是属于哪个进程。,2019年7月15日,14,2019年7月15日,15,4、进程间和线程间的通信,控制流间常用的通信机制主要有: 操作调用 一个控制流中的对象调用另一个控制流中的对象的操作,是通过发送了一条同步消息来实现的。同步的含义为:(1)调用者调用操作,(2)调用者等待接收者接收这个调用,(3)接收者的操作被唤醒,(4)计算结果返回给调用者,(5)然后两者分别继续它们各自的执行。 邮箱 一个控制流的对象异步地向另一个控制流中的对象发送一个信号,

8、其异步的含义为:请求者发送信号,然后就继续它自己的执行;而接收者只有在准备好时或在适当的时候,才到指定的邮箱去接收信号并进行处理,完成后可以向请求者发信号来回传处理结果,接着向下执行。这样的信号也可以是同步的,但收发信号的双方事先要做好约定。,2019年7月15日,16,共享存储器 两个或几个控制流中的对象利用一块公共的存储器,作为通信区域。通常传输具有较复杂和较大的数据结构的数据时,才使用共享存储器方式。使用此方式,要注意同步问题。 远程过程调用 用于在不同计算机中的并发进程。调用进程标示它想要请求的一个对象的操作,然后把它放在远程过程调用库中;远程过程调用机制在网络上寻找该对象,找到后将请

9、求打包发送给目标对象;目标方接到后将请求转换成本地格式,执行所请求的操作;执行完毕后,将结果以同样的方式返回给发送方。,2019年7月15日,17,2019年7月15日,18,2019年7月15日,19,5、 控制流间的同步,在一个操作中可以有多个控制流 在不同的操作中可以有不同的控制流 当一个对象在同一时刻有多于一个控制流时,就可能要出现问题。即可能导致对象的状态混乱。这是典型的互斥问题。对这个问题处理不当,会导致并发系统失败。,2019年7月15日,20,在面向对象系统中,解决这种问题的关键是把一个对象当作临界资源。有 三种供选择的方法,每一种都包含对在类中定义的操作附加一定的同步特征。

10、可以用三种方法建模: (1)顺序的 Sequential 调用者必须在对象外部协调,使得在一个时刻这个对象内仅有一个流。否 则当有多个控制流出现这个对象内时,就无法保证该对象的语义和完整性。 (2)监护的 Guarded 当有多个控制流出现时,该对象的语义和完整性是通过把对该对象的监护 操作的所有调用顺序化来保证的。 (3)并发的 Concurrent 当有多个控制流出现时,该对象的语义和完整性得到保证是因为多个控制 流存取不相交的数据集合,或者只读取数据。 声明一个操作的并发性意味着可以并发地执行这个操作而无危险。声明一 个对象的并发性意味着对其不同的操作调用可以同时进行而无危险。 问题:一

11、个对象内既有标有Sequential的操作,又有标有Guarded的操 作,情况如何?,2019年7月15日,21,2019年7月15日,22,控制流间的同步,2019年7月15日,23,设置控制流协调者 为整个系统设置一个控制流协调者 为一个主动类设置一个控制流协调者 为一个用况设置一个控制流协调者。 ,2019年7月15日,24,2 数据管理部分的设计,一、 什么是数据管理部分 数据管理部分是负责在特定的数据管理系统中存储和检索对象的组成部分。 其目的是,存储问题域的持久对象、封装这些对象的查找和存储机制,以及为了隔离数据管理方案的影响。 不同的数据管理系统: 文件系统、R-DBMS、OO

12、DBMS 对数据管理部分的设计有不同的影响 问题范围: 对象在永久性存储介质上的存储 只存储对象的属性部分 可能只有一部分对象需要长久存储,2019年7月15日,25,2019年7月15日,26,二、 数据库系统 数据库系统是存储、管理、处理和维护数据的软件系统,由数据库、数据库管理系统和有关软件组成。 数据库是长期存在计算机内、有组织、可共享的数据的集合。 数据库管理系统是用于建立、使用和维护数据库的软件,它对数据库进行统一管理和控制,以保证数据库的完整性和安全性。,2019年7月15日,27,1、关系数据库系统 关系数据库是采用关系模型的数据库。 关系模型用二维表结构来表示各类实体及其间的

13、联系。 二维表由行和列组成。一个关系数据库由多张表组成,2019年7月15日,28,2019年7月15日,29,数据库中的表要满足一些范式,如下为三个范式的定义。 第一范式: 关系(表)的每个属性都应该是原子的。 第二范式: 如果一个关系的所有非关键字属性,都只依赖整个关键字,则 该关系满足第二范式。 (学号 学号,系名,住处,课程号 课程号,成绩) 第三范式: 如果一个关系满足第二范式,且没有传递依赖,则该关系满足 第三范式。 Boyce-Codd范式(BCNF) 等,2019年7月15日,30,2 、面向对象数据库系统,面向对象的数据库系统是OO设计和编程的之间扩展,是为了存储对象并与面

14、向对象程序设计语言交互而专门设计的。它是按对象存储数据的数据库管理系统。 面向对象数据库系统有两方面的特征: (1)是面向对象的,应支持对象、类、操作、属性、继承、聚合、关联等 面向对象的概念; (2)另一方面它具有数据库系统所应具有的特定和功能。 其产品大概分三类。 (1)在面向对象编程语言的基础上,增加数据库管理系统的功能,即长久地存储、管理和存取对象的功能。 (2)对关系数据库管理系统进行扩充,使之支持面向对象数据模型,在关系数据库模型基础上提供对象管理功能,并向用户提供面向对象的应用程序接口。 (3)第三种是按“全新的”面向对象数据模型进行的设计。,2019年7月15日,31,面向对象

15、的数据库系统与应用系统的逻辑模型都是一致的, 不需要再设计负责保存与恢复其他类的对象的类,因为每个类的对象都可以直接在OODBMS中保存。 面向对象的数据库系统相对来说还比较新,在理论上和技术上还不太完善,而且目前还没有被广泛接受的标准。由对象数据库管理组ODMG提出的一些数据库标准正在逐渐地得到广泛的接收,如对象定义语言(ODL)。ODL是一种描述对象数据库结构和内容的语言。在若干年后,ODBMS有望取代RDBMS。,2019年7月15日,32,三、 如何设计数据管理部分 首先要根据条件选择数据管理系统: 文件系统,R-DBMS,OO-DBMS (一)利用关系数据库系统进行数据存储设计 1、

16、面向对象、实体-关系以及关系数据库系统中的概念间的对应关系,2019年7月15日,33,2019年7月15日,34,2019年7月15日,35,2、对象标识 在程序运行时的对象标识是唯一的,对程序员来说 通常是不可以访问的,只是通过对象名来访问对象。 永久对象的标识在一个表中是唯一的。 由类导出的表用一个主关键字作为表中所存储的对 象的唯一标识。 由关联导出的表用相关联的表的主关键字组合作为 主关键字。 在应用中使用对象名,在表中使用主关键字。,2019年7月15日,36,3、永久类的存放设计 每个永久类使用一个数据库表 1)确定要存储对象的哪些属性值,据此列出一个永久类的相应属性。 2)按时

17、间与空间要求进行权衡,对这些属性进行规范化,规范化后的属性至少应满足第一范式。 3)定义数据库的表 列:规范化之后的一个属性 行:一个对象实例 把规范化之后类的一个属性作为表的一个列,要存储的每一个对象实例作为表中的一行。 若一个类的属性列表不满足第二范式或更高范式,有两种可选的策略: (1) 拆分类,这样要修改问题域模型; (2)不修改类,而是让一个类对应两个或多个表,让每个表满足范式要求,这样在存储和检索类时要进行一定的转换运算。,2019年7月15日,37,若要考虑存储效率,也可以把一个类映射到几个表,其方法为: 1)、水平划分 其中几个对象要经常被访问,2019年7月15日,38,2)

18、、垂直划分 以不同的模式访问,2019年7月15日,39,4、对关系的存储 (1)对关联的存储设计 在关系数据库中按下述方法对关联进行数据存放: 每个一对一的关联映射到一张独立的表;或在各类对应的表中用外键隐含;也可把两个对象和关联放在同一表中。 每个一对多的关联映射到一张独立的表;或在“多”的类对应的表中用外键隐含。 每个多对多的关联映射到一张独立的表,该表的主关键字是两个进行关联的表的主关键字的拼接;或者把它转化为一对多的关联,然后再按一对多的方式进行处理。,2019年7月15日,40,2019年7月15日,41,2019年7月15日,42,2019年7月15日,43,2019年7月15日

19、,44,2019年7月15日,45,(3)对泛化的存储设计 可采用下述方法之一,进行数据存放。 把一般类的各个子类的属性都集中到一般类中,创建一个表。 为一般类(非抽象类)创建一个表,并为它的各个特殊类各创建一个表。一般类的表与各子类的表要用同样的属性作为主关键字。 如果一般类为抽象类,则要把一般类的属性放到各子类中,为它的子类各建立一张表。若一般类不为抽象类,也可采用(2)的做法。 上述是对单继承的处理方法,对于多继承的处理与此类似。,2019年7月15日,46,2019年7月15日,47,2019年7月15日,48,当从子类对应的表开始检索时,根据提供的设备ID,用设备ID查找子类相应表中

20、的行,再在父类对应的表中,用设备ID和查找表中的行,即检索出该设备的所有信息。 当从父类对应的表开始检索时,根据提供的设备ID和设备类型,用设备ID查找父类相应表中的行,用设备类型确定查那个子类所对应的表,再在子类对应的表中,用设备ID查找表中的行,即检索出该设备的所有信息。,2019年7月15日,49,2019年7月15日,50,2019年7月15日,51,(1)(下推)为每一个子类定义一个单独的表。这种方法简 单,但存在一些问题,因为当增加新的子类或修改父类时,对 数据库的维护是麻烦的。 (2)(上拉)去掉继承的网格结构,使一个层次的任何一个 类的所有实例都拥有相同的状态。这种方法的缺点是

21、对许多实 例要存储大量的冗余信息。 (3)(分割表)将父类和子类的状态存储在不同的表中。这 种方法很好地反映了继承网格,但它的缺点是访问数据时需要 许多跨表连接。,2019年7月15日,52,2019年7月15日,53,2019年7月15日,54,不同的对象调用类“对象存储器”的对象的操作时,所使用的参数是不同的,也即作为参数的属性的个数和类型以及对象变量的类型是不确定的,而且对不同的表而言,主关键字所包含的属性名也往往是不同的。解决的方法可为:(1)在操作的方法中把对每个数据库表进行操纵的语句都预先编写出来;(2)使用具有动态功能的数据操纵语言,如动态SQL。 系统保存和恢复对象的时机: 系

22、统启动时,要恢复一些所需要的永久对象; 系统停止时,要保存在本次运行时使用过的但未曾保存过的永久对象; 系统自启动以来首次使用一个未曾恢复过的永久对象; 按照某种业务规则,需要保存某个(某些)永久对象; 在与其它系统共享对象数据的情况下,根据共享机制的数据一致性保证策略,要求时刻保存或恢复的对象。 如何存储/检索对象,形成了问题域部分和数据管理部分的桥梁。,2019年7月15日,55,(二)、 利于面向对象数据库系统进行数据存储设计 因为应用系统和数据库的数据模型是一致的。该种数据库管理系统本身提供了“存储自己”的功能,使每个对象能自己保存。只要把需要长期保存的对象标识出来即可,至于如何保存和

23、恢复,则由该种数据库管理系统自己去管。需要考虑的是,如何用OODBMS提供的数据定义语言(ODL)、数据操纵语言(DML)以及其他可能支持的普通编程语言来实现OOD模型。用ODL实现类和对象等概念的定义,用DML实现对象数据库的访问,这都属于实现阶段的工作。,2019年7月15日,56,利于文件实现数据存储 利于文件实现数据存储 针对文件系统的数据存储设计的具体方法与使用关系数据库系统进行设计类似。首先根据需要存储的对象的属性值,列出永久类的相应属性,使类的属性列表符合所需要的范式定义,再把每个符合范式定义的那些属性定义为一个文件。进而可以按文件的结构读写文件,或按串读写文件。 只是数据接口部

24、分的工作要麻烦一些。并发存取和进行记录更新期间的锁定和安全对文件进行检索等问题。,2019年7月15日,57,设计物理数据库时,必须对如何映射在逻辑数据库 模式中定义的操作做出决策。 面向对象数据库使得这种映射相当透明。 如果采用关系型数据库,就必须对如何实现这些逻辑操作做出一些决策: 1)对于简单的CRUD(创建、读取、更新、删除)操作,用标准SQL或ODBC调用来实现。 2)对于较复杂的行为(如业务规则),可将它们映射为触发器或被存储的过程,还可以将它们定义在问题域类的操作中。,2019年7月15日,58,3构件及其部署设计,当前的一种主流的做法是在面向对象的系统设计阶段的后期,考虑如何对

25、系统的构件进行描述、构造和组织,以及构件如何在节点上进行分布。 3.1 构件图 3.1.1 概念与表示法 1、构件 在计算机百科全书中,把构件定义为在构件软件系统中具有相对独立功能、可以明确辨识、接口由契约指定、语境有明显依赖关系、可独立部署且多由第三方提供的可组装软件实体。 按照UML2.0的定义,构件是系统中的可替换的模块化部分,它封装了自己的内容;构件利用提供接口和请求接口定义自身的行为;它起类型的作用。,2019年7月15日,59,上述定义有如下几方面的含义: 上述定义有如下几方面的含义: 1) 一个构件是系统的一个模块部分,而且是一个自包含的单元,它封装了其内部成分。 2)构件通过它

26、的提供接口和请求接口展现行为。 3)构件是可替换的单元,在设计时和运行时依据接口的兼容性,若一个构件能提供与另一个构件所具有的功能,则前者可替换后者。 4)构件起类型的作用,这意味着构件是可实例化的。 由于在UML2.0中,构件是一种类,故: 5)构件具有属性、操作和可见性。这些概念的含义与在类图中定义的是一 样的,只是在这里把这些概念应用在构件上。 UML2.0 UML2.0把构件分为基本构件和包装构件。 把构件分为基本构件和包装构件。 基本构件 基本构件注重于把构件定义为在系统中可执行的元素。 包装构件 包装构件扩展了基本构件的概念,它注重于把构件定义为一组相关的元素,这组元素为开发过程的

27、一部分。也即, 包装构件定义了构件的命名空间方面。在构件的命名空间中,可以包括类、接口、构件、包、用况、依赖(如映射)和制品。按照这种扩展,构件也具有如下的含义: 6)可以用构件来装配大粒度的构件,方法为把所复用的构件作为大粒度构 件的成分,并把它们的请求和提供接口连接在一起。,2019年7月15日,60,2019年7月15日,61,2 构件的接口 接口 (interface)接口由一组操作组成,它指定了一个契约,这个契约必须由实现和使用这个接口的构件的所遵循。除非用来表示常量,否则不需要属性。 可以按各种约束(如前置和后置条件)的形式把一个接口与 一个职责相关联,可以对通过这个接口的交互规定

28、次序。 接口分提供接口和请求接口。 把构件实现的接口称为提供接口 提供接口,这意味着构件的提供接口是给其它构件提供服务的。实现接口的构件支持由该接口所拥有的特征,包括接口拥有的约束。 构件使用的接口被称为请求接口 请求接口,即构件向其它构件请求服务时要遵循的接口。即构件向其它构件请求服务时要遵循的接口。,2019年7月15日,62,2019年7月15日,63,2019年7月15日,64,2019年7月15日,65,一个构件可以通过一个特定端口同另一个构件通讯,而且通讯完全是通过由端口支持的接口来描述的。提供接口说明了通过端口来提供服务,请求接口说明了通过端口需要从其它构件获得服务。使用端口能在

29、更大的程度上增加构件的封装性和可替代性。可以按端口把构件的接口分组,并独立使用。请求接口可以是构件的请求端口的类型,提供接口可以是构件的提供端口的类型构件内部的部件用端口名来识别要通过哪个端口接收和发送消息。构件名和端口名合在一起唯一地标识了一个被其他构件使用的特定构件的特定端口。,2019年7月15日,66,2019年7月15日,67,2019年7月15日,68,2019年7月15日,69,委托连接件把外部对构件端口的请求分发到构件内部的部件实例进行处理,或者通过构件端口把构件内部部件实例向构件外部的请求分发出去。 构件内部的一个部件可以是另一个构件或是一个类。注意,必须在两个提供端口间或两

30、个请求端口间定义委托连接件。 委托有这样的含义:具体的消息流将发生在所连接的端口之间,可能要跨越多个层次,最终到达要对消息进行处理的最终部件实例。这样,使用委托连接件可对构件行为的层次分解建模。,2019年7月15日,70,3.1.2 构件的内部结构组成结构图 构件由实现它的一个或多个部件组成,把这些部件以及其间的关称之为它的内部结构。 在构件的实例中,有相应的部件实例。 组合结构图、交互图、活动图:用于展示如何在内部实现外部行为。 构件与实现它的制品,2019年7月15日,71,2019年7月15日,72,2019年7月15日,73,3.1.3 对构件的动态行为的描述 可以在接口、端口上和构

31、件本身上附属诸如协议状态机这样的行为; 可以通过按调用操作的顺序显式地给出动态约束,以较精确地定义外部行为; 可以把其它的行为(如用况、活动或交互规约)与接口或连接件相关联,以定义协作间的“契约”。,2019年7月15日,74,2019年7月15日,75,2019年7月15日,76,2019年7月15日,77,3.1.4 对构件的实现建模 如何对具体的物理构件进行建模,直至能对所产生制品(artifact)进行部署。 利用构件对面向对象系统的物理实现方面建模,其中的一个主要建模元 素是制品(artifact)。可把制品分为两种: 1)工作产品制品 这类制品主要是开发过程的产物,包括实现构件的源

32、代码文件及数据文件 等。这些制品并不直接地参加系统的执行。 2)可执行的制品 这类制品用于构造可执行的系统,如动态连接库(DLL)和可执行程序 (EXE)都是可执行制品。 在图形上,把制品画成带有关键字artifact的矩形。,2019年7月15日,78,2019年7月15日,79,2019年7月15日,80,2019年7月15日,81,3.2 部署图 3.2.1 概念与表示法 节点是在运行时存在并代表一项计算资源的物理元素,一般拥有存储空间和执行代码能力。通常把节点是一个可以在其上部署构件的处理器或设备。 用一个立方体表示一个节点。,2019年7月15日,82,2019年7月15日,83,2

33、019年7月15日,84,2019年7月15日,85,2019年7月15日,86,3.2.2部署图 部署图通常包含节点、节点间的关联关系、以及构件和节点间的部署关系。在多数情况下,用于对系统运行于其上的硬件拓扑结构的建模。 1、对嵌入式系统建模 嵌入式系统是软件和硬件的协作体,其硬件与物理设备连接,软件包括控制设备(如马达、传动装置和显示器等)的软件和由传感器控制的软件等。 用部署图对组成嵌入式系统的处理器、设备以及构件在其上的分布情况建模。 2、对分布式系统建模 将在不同地点、具有不同功能或拥有不同数据的多个节点用通讯网络连接起来的,在控制系统的统一管理控制下,协作完成信息处理任务的系统,就

34、是通常所说的分布式系统。 这样的系统要求各节点之间用网络连接,系统中的构件要物理地分布在节点上。用部署图描述系统的网络拓扑结构以及构件在其上的分布情况。,2019年7月15日,87,4OOD评判标准,追求一个好的设计,以及设计完成后评价它是不是好的设计,不是一个笼统的概念 ,而是有一些具体的评判标准。 正确的设计是不唯一的; 大系统经常面临多种方案的选择,各种方案有 好坏之分 方法并没有提供全部细节和具体答案, 需要有一些准则来控制设计质量,2019年7月15日,88,4.1 耦合 这里指OOD片段之间的相互联系 考虑耦合问题的目的: 改动一部分,对其它部分影响最小 阅读一部分,查阅其它部分较

35、小 耦合强度的衡量 成分之间的信息传输量 成分之间的信息复杂程度,2019年7月15日,89,2019年7月15日,90,2.继承耦合 (强耦合为好) 继承耦合泛化关系 继承耦合是OOA和OOD努力追求的目标 避免以下两种低耦合 (1)特殊类拒绝一般类的许多属性和操作 (2)继承而不使用 拒绝的情况可通过OOD模型看出; 不使用的情况要通过类定义模板审查出来。 修改: 重新组织类,调整结构,2019年7月15日,91,4.2 内聚 Cohesion (高内聚为好) 人:一个组织内部,人与人之间关系紧密程度 OOD:一个OOD成分内部元素的关系紧密程度 1、操作内聚 高内聚:一个操作完成一个功能

36、 低内聚: 一个操作实现多项功能,或者只实现功能的一部分 判断方法: 操作的方法中若分支语句过多 嵌套层次过深 操作的大小,用简单的句子描述 2、类内聚 指属性和操作应该是高内聚的 没有多余的属性和操作都是描述对象本身责任的 3.一般-特殊内聚 特殊类应该真正地描述了一般类的特化 概念上要讲得通(包括命名) 确实继承了一般类的许多属性和操作,2019年7月15日,92,43 复用 因为可复用的软件制品都应该是已经经过实际检验的,复用已有的软件制品,能节省成本,提高质量。 从复用的级别上看,可对可执行代码、源代码复用、分析结果、设计结果或框进行复用,也可以通过继承的方式对一些建模元素进行复用。实

37、际象各种可行性研究报告、测试用例这样的文档,都可以拿来进行复用。 对于面向对象方法而言,应该充分利用已有的类库或构件库,复用其中的类、模式或构件。,2019年7月15日,93,44 其它评判标准 1、设计的清晰度 使设计能看得懂,读得通象读一篇陈述文 对实现、维护十分重要 主要因素: 使用一致的词汇表 遵循已有的协议 消息模板要少 明确定义类的职责由类名确切地表达出来 把策略方法与实现方法分开 策略方法是指负责做出决策、提供变元和管理全局资源那样的方 法,如检查系统的运行状态、处理出错情况、管理资源等。具体 的策略与具体应用紧密相关。 实现方法是指仅针对具体数据完成特定的处理,常用于实现复杂

38、的算法。如发现错误,实现算法只返回执行状态而不对错误采取 行动。这样的算法是自含式的,相对独立于具体应用,有可能对 其进行复用。应该从策略算法中提取具体参数,作为调用实现方 法的变元。,2019年7月15日,94,2、一般-特殊结构的深度 中等规模的系统(100个类)不超过72层 不要搞得继承层次太深 不要为提炼而提炼 3.保持对象和类的简单性 在任何方法中,简单性都是一种美德! 保持对象和类的简单 保持消息协议简单 保持操作简单 有以下的准则 避免太多的属性 无用的绝对不设运用抽象原则 有用但太多寻找结构 保持操作的简单性和一致性 每个操作的代码不要太多,要保证操作的高内聚性。 功能相似的操

39、作应该有一致的特征标记 避免模糊的类定义:判断:用一两句话描述这个类,不能用“有 时”、“有点”、“如同”等词汇 对象之间的协作最小化 3-5个协作者为了保持简单、清晰 避免一个对象中太多的操作 公共操作少于72个;私有若干,2019年7月15日,95,4、所有需要的属性和方法都能被适当地使用 一是都被用 二是正确地使用。例如,用属性作为操作的参数,要保证在调用之 前,这个属性具有有效的值。 5、设计易变性的最小化 观察改动(如需求变动)时影响范圆有多大。 应该有随时间下降的曲线 6.系统总体规模最小化 追求小规模 大小取决于问题,也取决于人 笨的方法是使系统规模膨胀的根源 数据结构与算法相比,前者影响更大 7.尽量地提炼与使用设计模式 公认的优雅( 公认的优雅(Elegance Elegance)风格 )风格 优雅一词,最难把握,各见仁智 但也有些公认的东西 反复出现的模式 反映专门知识的设计成分 设计中的“块”与问题域中的“块”对应得好,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1