(软件工程复习核心重点)第十章面向对象设计-第二节:启发规则和软件重用
文章目录
- 一:启发规则
- (1)设计结果应该清晰易懂
- (2)一般一特殊结构的深度适当
- (3)设计简单的类
- (4)使用简单的协议
- (5)使用简单的服务
- (6)把设计变动减至最小
- 二:软件重用
- (1)概述
- A:重用
- B:软件成分重用的级别
- ①:代码重用
- ②:设计结果重用
- ③:分析结果重用
- C:典型的可重用软件成分
- (2)类构件
- A:可重用软件构件特点
- B:类构件的重用方式
- ①:实例重用
- ②:继承重用
- ③:多态重用
- (3)软件重用的效益
- A:质量
- B:生产率
- C:成本
一:启发规则
(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=Cs−Cr−CdC=C_{s}-C_{r}-C_{d}C=Cs−Cr−Cd
- CsC_{s}Cs:是项目从头开发时所需要的成本
- CrC_{r}Cr:是与重用相关联的成本
- CdC_{d}Cd:是交付给客户的软件的实际成本
与重用相关联的成本C,主要包括下述成本:
- ①领域分析与建模的成本
- ②设计领域体系结构的成本
- ③为方便重用而增加的文档的成本
- ④维护和完善可重用的软件成分的成本
- ⑤为从外部获取构件所付出的版税和许可证费用
- ⑥创建及运行重用库的费用
- ⑦对设计和实现可重用构件的人员的培训费用
(软件工程复习核心重点)第十章面向对象设计-第二节:启发规则和软件重用相关推荐
- (软件工程复习核心重点)第十章面向对象设计-第五节:设计数据管理子系统和设计类中的服务
文章目录 一:设计数据管理子系统 (1)概念 (2)选择数据存储管理模式 A:文件管理系统 B:关系数据库管理系统 C:面向对象数据库管理系统 (3)设计数据管理子系统 A:设计数据格式 B:设计相应 ...
- (软件工程复习核心重点)第十章面向对象设计-第四节:设计人机交互子系统和设计任务管理子系统
文章目录 一:设计人机交互子系统 (1)概念 A:主要内容 B:重要性 (2)设计策略 A:分类用户 B:描述用户 C:设计命令层次 ①:研究现有的人机交互含义和准则 ②:确定初始的命令层次 ③:精化 ...
- (软件工程复习核心重点)第十章面向对象设计-第一节:面向对象设计的基本概念与准则
文章目录 一:面向对象设计概念 (1)定义 (2)设计与分析的关系 (3)分类 二:面向对象的设计准则 (1)模块化 (2)抽象 (3)信息隐藏 (4)低耦合 A:交互耦合 B:继承耦合 (5)高内聚 ...
- (软件工程复习核心重点)第六章实现和测试习题
文章目录 选择题 填空题 名词解释 简答题 画图/应用题 选择题 填空题 编码风格需要考虑的5个方面 程序内部的文档 数据说明 语句构造 输入输出 效率 单元测试的测试重点 模块结构 局部数据结构 重 ...
- (软件工程复习核心重点)第四章总体设计-第三节:启发规则
文章目录 (1)改进软件结构提高模块独立性 (2)模块规模应该适中 (3)深度.宽度.扇入和扇出应适当 (4)模块的作用域应该在控制域之内 A:定义 B:规则 C:修改方法(了解) (5)力争降低模块 ...
- (软件工程复习核心重点)第四章总体设计-第二节:设计原理
文章目录 一:模块化 (1)模块 (2)模块化 (3)优点或作用 二:抽象(了解) 三:逐步求精 (1)定义 (2)MIller法则:注意力集中在(7 ±\pm± 2) 四:信息隐藏和局部化(了解) ...
- (软件工程复习核心重点)第九章面向对象分析-第二节:面向对象分析之建立对象模型
文章目录 一: 基本概念 (1)对象模型 (2)先建立对象模型的原因 (3)信息来源 (4)典型的建模步骤 二:确定类与对象 (1)找出候选的类与对象 A:客观事物分类 B:非正式分析 C:提取隐含的 ...
- (软件工程复习核心重点)第五章详细设计-第三节:过程设计工具
文章目录 (1)程序流程图 A:符号 B:优缺点 (2)盒图(N-S) A:符号 B:优点(了解) (3)PAD图 A:符号 B:优点 (4)判定表 A:组成 B:优缺点 (5)判定树 (6)过程设计 ...
- (软件工程复习核心重点)第四章总体设计-第一节:总体设计基本概念和设计过程
文章目录 一:总体设计的概念 (1)定义 (2)主要任务 (3)步骤 (4)必要性(了解) 二:设计过程 (1)系统设计阶段 1:设想供选择的方案 2:选取合理的方案 3:推荐最佳方案 (2)结构设计 ...
最新文章
- 网站推广——网站推广专员浅析企业网站验收和交付要注意哪些问题
- Centos7常用命令[系统的关机、重启以及登出]
- sublime编译python文件提示can't find '__main__' module in ' '
- 火山小视频尼尔森:2019新线消费市场人群洞察报告(附下载)
- 数据库连接池和connection的理解
- hibernate中的id特殊属性hilo剖解(多用于继承关系)
- opensource项目_最佳Opensource.com:艺术与设计
- C++重载->和*运算符
- 苹果mac Dock窗口预览工具:DockView
- POJ分层练习题目列表
- java 自定义函数_Java自定义函数调用方法解析
- 数据结构与算法 -- 基础篇
- Pandas 报错 TypeError: ‘Series‘ objects are mutable, thus they cannot be hashed
- re python 引擎_转 python内置正则表达式(re)模块官方文档简要中文版
- Java IO框架之BIO、NIO、AIO
- H5 css引入方式 内联样式表
- item_get - VVIC根据ID取商品详情 API
- 爬虫:一种打破3000套限制爬取所有链家二手房源的方法
- Apache ECharts快速入门
- FindPic 找图
热门文章
- 经典面试题(20):以下代码将输出的结果是什么?
- 苦逼or高薪程序猿,你选谁?WEB前端这个行业普遍年薪20万+,吃鸡如开挂!
- 第十五节:有一种特殊的函数叫:Generator函数
- unittest测试框架_python接口自动化测试 - 4.unittest单元测试框架学习
- oracle varchar2转date_5分钟学会精算师常用Oracle语句
- 被高中生物骗了这么多年,原来人体内细胞的DNA是有不同的?
- java immutable系列_Java Immutable类代码示例
- 第69课 胡萝卜与骨头
- 1.3编程基础之算术表达式与顺序执行 20 计算2的幂
- Python | threading02 - 互斥锁解决多个线程之间随机调度,造成“线程不安全”的问题。