面向对象设计-第二节:启发规则和软件重用

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象设计-第二节:启发规则和软件重用相关的知识,希望对你有一定的参考价值。

文章目录

一:启发规则

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

保证设计结果应该清晰易懂的主要因素如下

  • 用词一致:应该使名字与它所代表的事物–致,而且应该尽量使用人们习惯的名字。不同类中相似服务的名字应该相同
  • 使用已有的协议:如果开发同一软件的其他设计人员已经建立了类的协议,或者在所使用的类库中已有相应的协议,则应该使用这些已有的协议
  • 减少消息模式的数目:如果已有标准的消息协议,设计人员应该遵守这些协议
  • 避免模糊的定义:一个类的用途应该是有限的,而且应该从类名可以较容易地推出它的用途

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

  • 使类等级中包含的层次数适当,类等级中包含的层次保持在7±2
  • 不能仅从方便编码的角度出发随意创建派生类,应该使一般一特殊结构与领域知识或常识保持一致

(3)设计简单的类

  • 避免包含过多属性:属性过多通常表明这个类过分复杂了,它所完成的功能可能太多了

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

  • 简化对象之间的合作关系:如果需要多个对象协同配合才能做好一件事,则破坏了类的简明性和清晰性

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

  • 划分“主题”

(4)使用简单的协议

(5)使用简单的服务

  • 避免使用复杂的服务
  • 需要在服务中使用CASE语句时,应用一般一特殊结构代替这个类

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

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

二:软件重用

(1)概述

A:重用

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

  • 知识重用;
  • 方法和标准的重用;
  • 软件成分的重用

B:软件成分重用的级别

①:代码重用

  • 源代码剪贴:是最原始的重用形式,复制或修改源代码时可能出错,且存在严重的配置管理问题
  • 源代码包含:配置管理问题有所缓解,所有包含它的程序都必须重新编译
  • 继承:无须修改已有的代码,就可扩充或具体化在库中找出的类。基本上不存在配置管理问题

②:设计结果重用

重用某个软件系统的设计模型(求解域模型),有助于把一个应用系统移植到完全不同的软硬件平台上

③:分析结果重用

是一种更高级别的重用,重用某个系统的分析模型。特别适用于用户需求未改变,但系统体系结构发生了根本变化的场合

C:典型的可重用软件成分

  • 项目计划:软件项目计划的基本结构和许多内容都是可以跨项目重用的
  • 成本估计:在只做极少修改或根本不做修改的情况下,重用对该功能的成本估计结果
  • 体系结构:创建一组类属的体系结构模板,并把那些模板作为可重用的设计框架
  • 需求模型和规格说明:类和对象的模型、规格说明、用传统软件工程方法开发的分析模型是重用的候选者
  • 设计:用传统方法开发的体系结构、数据、接口和过程设计结果,是重用的候选者
  • 源代码:用兼容的程序设计语言书写的、经过验证的程序构件,是重用的候选者
  • 用户文档和技术文档:即使针对的应用是不同的,也经常有可能重用用户文档和技术文档的大部分
  • 用户界面:这可能是最广泛被重用的软件成分,GUI (图形用户界面)软件经常被重用。因为它可占到一个应用程序的60%的代码量
  • 数据:被重用的数据包括:内部表、列表和记录结构,以及文件和完整的数据库
  • 测试用例:一旦设计或代码构件将被重用,相关的测试用例应该“附属于”它们也被重用

(2)类构件

A:可重用软件构件特点

  • 模块独立性强:具有单一、完整的功能,且经过反复测试被确认是正确的。它应该是一个不受或很少受外界干扰的封装体,其内部实现在外面是不可见的
  • 具有高度可塑性:可重用的软构件必须具有高度可裁剪性,即必须提供为适应特定需求而扩充或修改已有构件的机制,而且所提供的机制必须使用起来简单方便
  • 接口清晰、简明、可靠:软件构件应该提供清晰、简明、可靠的对外接口,而且还应该有详尽的文档说明,以方便用户使用

B:类构件的重用方式

类构件:面向对象技术中的“类”,是比较理想的可重用软构件

①:实例重用

除了用已有的类为样板直接创建该类的实例之外,还可以用几个简单的对象作为类的成员创建出一个更复的类

②:继承重用

当已有的类构件不能通过实例重用方式满足当前系统的需求时,利用继承机制从已有类派生出符合需要的子类,是安全修改已有的类构件并获得可在当前系统中使用的类构件的有效手段

③:多态重用

在设计类构件时应把注意力集中在下列这些可能妨碍重用的操作上:

  • 表示方法有关的操作
  • 数据结构、数据大小等因素有关的操作
  • 外部设备有关的操作
  • 实现算法在将来可能会改变的核心操作

(3)软件重用的效益

A:质量

随着每一次重用, 都会有一些错误被发现并被清除,构件的质量也会随之改善。随着时间的推移,构件将变成实质上无错误的。重用给软件产品的质量和可靠性带来实质性的提高

B:生产率

把可重用的软件成分应用于软件开发的全过程时,创建计划、模型、文档、代码和数据所花费的时间将减少,从而用较少的投入给客户提供相同级别的产品,故生产率得到了提高

C:成本

软件重用带来的净成本节省可以用下式估算:

C = C s − C r − C d C=C_s-C_r-C_d C=CsCrCd

  • C s C_s Cs:是项目从头开发时所需要的成本
  • C r C_r Cr:是与重用相关联的成本
  • C d C_d Cd:是交付给客户的软件的实际成本

与重用相关联的成本C,主要包括下述成本:

  • 领域分析与建模的成本
  • 设计领域体系结构的成本
  • 为方便重用而增加的文档的成本
  • 维护和完善可重用的软件成分的成本
  • 为从外部获取构件所付出的版税和许可证费用
  • 创建及运行重用库的费用
  • ⑦对设计和实现可重用构件的人员的培训费用

以上是关于面向对象设计-第二节:启发规则和软件重用的主要内容,如果未能解决你的问题,请参考以下文章

面向对象分析-第二节:面向对象分析之建立对象模型

python面向对象程序设计(类成员)第二节

第二节:面向对象

软件建模——第5章 总体设计

C#关键字详解第二节

JavaScript设计模式:面向对象编程(第二节)