《软件工程导论》(第6版)第11章 面向对象设计 复习笔记

第11章 面向对象设计

一、面向对象设计的概念

1.定义

设计是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。从面向对象分析到面向对象设计是一个逐渐扩充模型的过程,即面向对象设计就是用面向对象观点建立求解域模型的过程。

2.设计与分析的关系

(1)分析结果可以直接映射成设计结果,而在设计过程中又会加深和补充对系统需求的理解,进一步完善分析结果。

(2)分析和设计活动是一个多次反复迭代的过程。

(3)分析是提取和整理用户需求,并建立问题域精确模型的过程。设计则是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。

3.分类

(1)系统设计:确定实现系统的策略和目标系统的高层结构。

(2)对象设计:确定解空间中的类、关联、接口形式及实现服务的算法。

二、面向对象设计的准则

1.优秀设计的定义

优秀设计是权衡了各种因素,从而使得系统在其整个生命周期中的总开销最小的设计。优秀软件设计的一个主要特点就是容易维护。

2.准则

(1)模块化

面向对象软件开发模式支持了把系统分解成模块设计的原理,对象是面向对象软件系统中的模块,它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。

(2)抽象

面向对象的程序设计语言不仅支持过程抽象,而且支持数据抽象,对象类实际上是具有继承机制的抽象数据类型,它对外开放的公共接口构成了类的规格说明(协议),这种接口规定了外界可以使用的合法操作符,利用这些操作符可以对类实例中包含的数据进行操作。

①规格说明抽象

使用者无须知道操作符的实现算法和类中数据元素的具体表示方法,就可以通过这些操作符使用类中定义的数据,这种抽象称为规格说明抽象。

②参数化抽象

指当描述类的规格说明时并不具体指定所要操作的数据类型,而是把数据类型作为参数,使得类的抽象程度更高,应用范围更广,可重用性更高。

(3)信息隐藏

在面向对象的软件中,信息隐藏通过对象的封装来实现,即类结构分离了接口与实现,从而支持了信息隐藏。对于类,属性的表示方法和操作的实现算法都是隐藏的。

(4)弱耦合

耦合是指一个软件结构内不同模块之间互连的紧密程度。在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。弱耦合是优秀设计的一个重要标准。

①交互耦合

对象间的耦合通过消息连接来实现,则这种耦合是交互耦合。要使交互耦合尽可能松散,必须遵守下述准则。

a.尽量降低消息连接的复杂程度。应该尽量减少消息中包含的参数个数,降低参数的复杂程度。

b.减少对象发送或接收的消息数。

②继承耦合

继承是一般类与特殊类之间耦合的一种形式。通过继承关系结合起来的基类和派生类构成了系统中粒度更大的模块,因此,它们彼此之间应该结合得越紧密越好。

(5)强内聚

内聚衡量一个模块内各个元素彼此结合的紧密程度,在设计时应该力求做到高内聚。在面向对象设计中存在下述3种内聚:

①服务内聚

一个服务应该完成一个且仅完成一个功能。

②类内聚

设计类的准则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。如果某个类有多个用途,应该把它分解成多个专用的类。

③一般—特殊内聚

设计出的一般—特殊结构应该是对相应的领域知识的正确抽取。紧密的继承耦合与高度的一般—特殊内聚是一致的。

(6)可重用

软件重用是提高软件开发生产率和目标系统质量的重要途径。重用基本上从设计阶段开始。重用有两方面的含义:

①尽量使用已有的类。

②如果需要创建新类,则在设计这些新类的协议时应该考虑将来的可重复使用性。

三、启发规则

1.必要性

总结人类使用面向对象方法学开发软件的经验,可以得出几条启发规则,它们往往能帮助软件开发人员提高面向对象设计的质量。

2.具体规则

(1)设计结果应该清晰易懂

使设计结果清晰、易读、易懂是提高软件可维护性和可重用性的重要措施。保证设计结果清晰易懂的主要因素如下:

①用词一致

应该使名字与它所代表的事物一致,而且应该尽量使用人们习惯的名字。不同类中相似服务的名字应该相同。

②使用已有的协议

如果开发同一软件的其他设计人员已经建立了类的协议,或者在所使用的类库中已有相应的协议,则应该使用这些已有的协议。

③减少消息模式的数目

如果已有标准的消息协议,设计人员应该遵守这些协议。

④避免模糊的定义

一个类的用途应该是有限的,而且应该从类名可以较容易地推出它的用途。

(2)一般—特殊结构的深度应适当

①使类等级中包含的层次数适当,类等级中包含的层次保持在7±2。

②不能仅从方便编码的角度出发随意创建派生类,应该使一般—特殊结构与领域知识或常识保持一致。

(3)设计简单的类

应该尽量设计小而简单的类,以便开发和管理。为使类保持简单,应注意以下几点:

①避免包含过多的属性

属性过多通常表明这个类过分复杂了,它所完成的功能可能太多了。

②有明确的定义

为了使类的定义明确,分配给每个类的任务应该简单,最好能使用一两个简单语句描述它的任务。

③简化对象之间的合作关系

如果需要多个对象协同配合才能做好一件事,则破坏了类的简明性和清晰性。

④不要提供太多服务(公共服务不超过7个)

一个类提供的服务过多,同样表明这个类过分复杂。典型地,一个类提供的公共服务不超过7个。

⑤划分“主题”。

(4)使用简单的协议

一般来说,消息中的参数不要超过3个。通过复杂消息相互关联的对象是紧耦合的,对一个对象的修改往往导致其他对象的修改。

(5)使用简单的服务

①避免使用复杂的服务。

②需要在服务中使用CASE语句时,应用一般—特殊结构代替这个类。

(6)把设计变动减至最小

图11-1 理想的设计变动情况

理想的设计变动曲线如图11-1所示。即在设计的早期阶段,变动较大,随着时间推移,设计方案日趋成熟,改动也越来越小了。

四、软件重用

1.概述

(1)重用

重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用。软件重用可分为以下3个层次:

①知识重用;

②方法和标准的重用;

③软件成分的重用。

其中知识重用以及方法和标准的重用层次属于知识工程研究的范畴。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值