软件构造5.1

第5章:面向可重用性的软件构建方法5.1可重用性的度量,形态和外部观察
5.1可重用性的度量,形态和外部观察
大纲
?什么是软件重用?如何衡量“可重用性”?可重用组件的级别和形态 – 源代码级别重用 – 模块级重用:类/接口 – 库级:API /包 – 系统级重用:框架?可重用性的外部观察 – 类型变化 – 例程分组 – 实现变化 – 代表独立 – 考虑共同行为?摘要
5.1可重用性的度量,形态和外部观察本讲座的目标
?讨论软件重用的优缺点?描述构造以便重用?讨论通用可重用组件的特性?描述开发便携式应用系统的方法
软件构建
1什么是软件重用br> 5.1可重用性的度量,形态和外部观察
软件重用
?软件重用是使用现有软件组件实现或更新软件系统的过程。 ?软件重用的两个视角 – 创建:以系统方式创建可重用资源(重用编程) – 使用:将资源重新用作创建新系统的构建块(重用编程)?为什么要重用- “创造可重复使用而非暂时性文物的动力具有审美,智力和经济动机,是人类对永生的渴望的一部分。它将人与其他生物区别开来,文明与原始 会区别开来“(Wegner,1989)。
5.1可重用性的度量,形态和外部观察
为何重用br> ?重复使用具有成本效益和及时性 – 通过缩短软件生产周期时间(软件开发速度更快,人员更少)提高软件生产率 – 不会浪费资源来不必要地“重新发明轮子” – 降低维护成本(提高质量) ,可以生成更可靠,更高效的软件)?重用产生可靠的软件 – 重用已经存在一段时间并被调试的功能是构建稳定子系统的基础?重用产生标准化 – 重用GUI库产生共同的外观和 – 申请中的感受。 – 与常规,连贯的设计保持一致。
5.1可重用性的度量,形态和外部观察
重复使用费用
?可重复使用的组件应以明确定义的开放式方式设计和构建,具有简洁的接口规范,可理解的文档以及对未来使用的关注。 ?重用成本很高:它涉及组织,技术和流程变更,以及支持这些变更的工具成本,以及培训人员使用新工具和变更的成本。
5.1可重用性开发的度量,形态和外部观察以便重用
可重复使用组件的开发成本高于特定等效组件的开发成本。这种额外的可重用性增强成本应该是组织而不是项目成本。 ?通用组件的空间效率可能较低,并且执行时间可能比特定组件的执行时间长。
名称概括
操作概括
异常概括
组件认证
可重复使用的组件
初始组件
5.1重用可重用性开发的度量,形态和外部观察
?必须开发和维护用于体系结构,设计,文档和代码的组件管理工具,例如存储库。
?关键问题:可重用组件的调整 – 可能必须将额外功能添加到组件中。添加完成后,可以使新组件可以重复使用。 – 可以从组件中删除不需要的功能以提高其性能或减少其空间需求 – 可能必须修改某些组件操作的实现。
设计系统架构
指定组件
搜索可重用的组件
合并已发现的组件
软件构建
2如何衡量“可重用性”br> 5.1可重用性度量可恢复性的度量,形态和外部观察
?软件资产在不同应用场景中重复使用的频率如何- 资产使用的可能性越大,其可重用性就越高。 – 写一次,重复使用多次。
?重新使用此资产需要支付多少费用- 购买资产和其他强制性库的成本 – 调整成本 – 实例化成本 – 更改与之交互的系统其他部分的成本
5.1可重用性的度量,形态和外部观察
可重用性
?可重用性意味着对构建,打包,分发,安装,配置,部署,维护和升级问题进行一些明确的管理。 ?具有高可重用性的软件资产应该: – 简短(小尺寸)和简单(低复杂性) – 可移植和标准合规 – 适应性和灵活性 – 可扩展性 – 通用和参数化 – 模块化 – 易变(可变)设计假设的本地化 – 改变要求
软件构建
3可重复使用组件的级别和形态
5.1可重用性的度量,形态和外部观察
重复使用水平
?可重用的组件可能是代码 – 最普遍的:大多数程序员与重用有关的东西?但是,可以重用的内容的更广泛和更高级别的视图可以带来好处: – 要求 – 设计和规范 – 数据 – 测试用例 – 文档
5.1可重用性的度量,形态和外部观察重用度
设计模式
基于组件的开发
组件框架
面向服务的系统
COTS整合
应用产品系列
遗留系统包装
Prog ram库
Prog ram发电机
面向方面的软件开发
可配置的真实应用程序
5.1可重用性重用形态的度量,形态和外部观察
设计模式跨应用程序发生的泛型抽象表示为显示抽象和具体对象和交互的设计模式。基于组件的开发系统是通过集成符合组件模型标准的组件(对象集合)开发的。应用程序框架可以调整和扩展以创建应用程序系统的抽象和具体类的集合。传统系统包装传统系统可以通过定义一组接口并通过这些接口提供对这些传统系统的访问来“包装”。面向服务的系统通过链接可能在外部提供的共享服务来开发系统。
重用形态
应用产品系列
应用程序类型围绕通用体系结构进行概括,以便可以针对不同客户以不同方式进行调整。 COTS集成系统是通过集成现有应用程序系统开发的。可配置的垂直应用程序通用系统的设计使其可以根据特定系统客户的需求进行配置。程序库实现常用抽象的类和函数库可供重用。程序生成器生成器系统嵌入特定类型的应用程序的知识,并且可以在该域中生成系统或系统片段。面向方面的软件开发在编译程序时,共享组件被编织到不同位置的应用程序中。
5.1可重用性的度量,形态和外部观察我们在本讲中关注的内容
?源代码级别:方法,语句等?模块级别:类和接口?库级:API – Java库 – Maven?系统级:框架
5.1代码重用的可重用性类型的度量,形态和外部观察
?白盒重用 – 代码本身可用时重用代码。通常需要进行某种修改或改编?黑盒重用 – 通过提供一些“粘合剂”以组合现有代码的形式重用,但无需更改代码本身 – 通常是因为您无法访问代码
5.1可重用组件分发的可重用性格式的度量,形态和外部观察
?源代码?包括.jar
软件构建
(1)源代码重用
5.1可重用性重用代码的度量,形态和外部观察 – 最低级别
?将部件/全部复制/粘贴到您的程序中
?维护问题 – 需要在多个位置更正代码 – 使用太多代码(许多版本)?流程中出现高风险?可能需要了解所使用软件的工作原理?需要访问源代码
软件构建
(2)模块级重用:类/接口
继承使用组合/聚合委派/关联
5.1可重用性的度量,形态和外部观察
重用课程
?类是代码重用的原子单元?不需要源代码,类文件或jar /zip?只需要包含在类路径中?可以使用javap工具获取类的公共方法头?文档非常重要(Java API) ?封装有助于重用?更少的代码来管理?版本控制,向后兼容仍然存在问题?需要将相关的类打包在一起
5.1可重用性的度量,形态和外部观察重用类的方法:继承
?Java提供了一种名为继承的代码重用方式?在继承中,类扩展了现有类的属性/行为?此外,它们可能会覆盖/重新定义现有行为
?不需要放置仅仅转发或委派工作的虚拟方法?更好地捕获现实世界?通常需要在实现之前设计继承层次结构?无法取消属性或方法,因此必须注意不要过度使用它
5.1可重用性的度量,形态和外部观察重用类的方法:委派
?委托只是当一个对象依赖于另一个对象的某个功能子集(一个实体将某些东西传递给另一个实体)时 – 例如在这里,分拣机将功能委托给某些比较器?明智的委托使代码重用 – 分拣机可以重复使用任意排序顺序 – 比较器可以与需要比较整数的任意客户端代码一起重复使用?显式委托:将发送对象传递给接收对象?隐式委托:由该语言的成员查找规则
?委托可以被描述为在实体之间共享代码和数据的低级机制。
使用委托来扩展功能
?考虑java.util.List
?假设我们需要一个将其操作记录到控制台的列表… – LoggingList由List组成,并将该(不记录)功能委托给该List。
5.1可重用性的度量,形态和外部观察授权类型
?使用(A使用B)?成分/聚合(A拥有B)?关联(A有B)
代表来
使用Composition Aggregation Association
客户端接收器委派呼叫
5.1可重用性的度量,形态和外部观察重用类的方法:使用
?使用类的最简单形式是调用它的方法; ?两个类之间的这种形式的关系称为“uses-a”关系?使用(其中一个类使用另一个类而不实际将其作为属性合并。)例如,可以是参数或在本地使用方法)
依赖
5.1可重用性的度量,形态和外部观察重用类的方法:关联
?一种更接近的重用形式是关联?关联(或has_a,其中一个类具有另一个类作为属性/实例变量)
老师学生1 0 … * – 学生 – 老师
学生课程5 … * – 选择课程
5.1可重用性的度量,形态和外部观察重用类的方法:组合
?另一种更接近的重用形式是组合?组合(或owns_a,其中一个类将另一个类作为属性/实例变量)
公司
员工0 … * – 员工
CourseClass
学生
15 … *
-学生们
订购
餐饮
+客户
顾客
1 1 … * +食物
软件构建
(3)库级重用:API /包
5.1可重用性的度量,形态和外部观察
图书馆
?库:一组提供可重用功能的类和方法(API)
5.1可重用性的度量,形态和外部观察
骨架
?框架:可以自定义到应用程序中的可重用骨架代码?框架回调客户端代码 – 好莱坞原则:“不要打电话给我们。我们会打电话给你。“
5.1可重用性的度量,形态和外部观察一般区别:库与框架
5.1可重用性的度量,形态和外部观察良好API的特征
?易于学习?易于使用,即使没有文档?难以滥用?易于阅读和维护使用它的代码?足以满足要求的功能?易于发展?适合受众
(4)系统级重用:框架
5.1可重用性应用框架的度量,形态和外部观察
?框架是子系统设计,包含抽象和具体类的集合以及每个类之间的接口?通过添加组件来填充缺少的设计元素并通过实例化抽象类来实现子系统?框架是可重用的实体
5.1可重用性的度量,形态和外部观察
构架
?框架是可重用的部分应用程序,可专门用于生成自定义应用程序。 – 框架针对特定技术,例如数据处理或蜂窝通信,或应用领域,例如用户界面或实时航空电子设备。 ?框架的主要优点是可重用性和可扩展性。 – 可重用性利用应用程序领域知识和经验丰富的开发人员的先前工作 – 可扩展性由钩子方法提供,钩子方法被应用程序覆盖以扩展框架。 ?Hook方法系统地将应用程序域的接口和行为与特定上下文中的应用程序所需的变体分离。
5.1可重用性扩展框架的度量,形态和外部观察
?通用框架需要扩展以创建特定的应用程序或子系统?框架可以扩展 – 定义从抽象类祖先继承操作的具体类 – 添加将响应框架识别的事件而调用的方法?框架是非常复杂,学习使用它们需要时间(例如DirectX或MFC)
5.1可重用性面向对象框架的度量,形态和外部观察
?通过一组类及其协作实现的系统或子系统的可重用设计。 ?用户通过添加或自定义特定于应用程序的组件来完成或扩展框架,以生成应用程序。
骨架
应用组件
5.1可重用性用户和框架开发人员的度量,形态和外部观察
?框架有三个主要角色: – 框架设计者,也称框架开发人员或框架构建者,开发原始框架 – 框架用户,也称为框架客户端或应用程序开发人员,使用框架开发应用程序。 – 框架维护者改进和重新开发框架以适应新的需求。
5.1可重用性框架设计的度量,形态和外部观察
?框架与应用程序不同 – 抽象级别不同,因为框架为一系列相关问题提供了解决方案,而不是单一问题。 – 为了适应一系列问题,框架是不完整的,包含热点和钩子以允许定制?框架必须设计灵活性,可扩展性,完整性和易用性。
5.1框架可重用性分类的度量,形态和外部观测
?框架可以根据它们在软件开发过程中的位置进行分类。
?框架也可以通过扩展它们的技术进行分类。 – Whitebox框架 – Blackbox框架
5.1可重用性白盒和黑盒框架的度量,形态和外部观察
?Whitebox框架: – 通过继承和动态绑定实现的可扩展性。 – 通过子类化框架基类和覆盖预定义的钩子方法来扩展现有功能 – 通常使用诸如模板方法模式之类的设计模式来覆盖钩子方法。 ?Blackbox框架 – 通过为可以插入框架的组件定义接口来实现可扩展性。 – 通过定义符合特定接口的组件来重用现有功能 – 这些组件通过委托与框架集成。
5.1可重用性类库和框架的度量,形态和外部观察
?类库: – 更少域特定 – 提供较小的重用范围。 – 类库是被动的;对控制流没有约束。 ?框架: – 类为一系列相关应用程序进行合作。 – 框架是活跃的;影响控制流程。 ?在实践中,开发人员经常使用两者: – 框架内部通常使用类库来简化框架的开发。 – 框架事件处理程序使用类库来执行基本任务(例如字符串处理,文件管理,数值分析…)
组件和框架
?组件 – 类的自包含实例 – 连接在一起形成完整的应用程序。 – 定义一组内聚操作的Blackbox, – 可以根据接口的语法和语义使用。 – 组件甚至可以在二进制代码级别上重用。 ?优点是组件更改时不必总是重新编译应用程序。 ?框架: – 经常用于开发组件 – 组件通常插入到黑盒框架中。
软件构建
4可重用性的外部观察
5.1可重用性的度量,形态和外部观察可重用性的外部观察
?类型变化?例行分组?实施变化?表示独立性?考虑常见行为
5.1可重用性的度量,形态和外部观察
类型变化
?可重用组件应进行类型参数化,以便它们能够适应不同的数据类型(输入,计算和输出);
?通用性:可重用组件应该是通用的。
5.1可重用性实现变化的度量,形态和外部观察
?实践中有各种适用的数据结构和算法。 ?确实如此多样化,以至于我们不能期望单个模块能够处理所有可能性;这将是巨大的。 ?我们需要一系列模块来涵盖所有不同的实现。
5.1可重用性例程分组的度量,形态和外部观察
?一个自给自足的可重用模块需要包含一组例程,每个例程对应一个例程。
?完整性
?包装
5.1可重用性表示独立性的度量,形态和外部观察
?可重用模块的一般形式应该使客户端能够在不知道如何实现的情况下指定操作。
?表示独立作为信息隐藏规则的延伸,对于大型系统的顺利开发至关重要:实施决策通常会发生变化,客户应受到保护。
?表示独立性反映了客户对可重用性的看法 – 忽略内部实现细节和变体的能力
5.1可重用性的度量,形态和外部观察因素分解常见行为
?考虑常见行为,反映了供应商的观点,更一般地说,反映了可重用类的开发人员的观点。他们的目标是利用家庭或子系列实施中可能存在的任何共性。 ?如上所述,某些问题领域中可用的各种实现通常需要基于一系列模块的解决方案。这个家庭通常很大,以至于寻找亚科是很自然的。 ?这些类别中的每一个都涵盖了许多变体,但通常可以找到这些变体之间的重要共性。
软件构建
结束
2018年3月30日

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月28日
下一篇 2019年7月28日

相关推荐