软件工程-第七版-chapter-9构件级设计

上传人:cjc****537 文档编号:53449277 上传时间:2018-08-31 格式:PPT 页数:45 大小:332KB
返回 下载 相关 举报
软件工程-第七版-chapter-9构件级设计_第1页
第1页 / 共45页
软件工程-第七版-chapter-9构件级设计_第2页
第2页 / 共45页
软件工程-第七版-chapter-9构件级设计_第3页
第3页 / 共45页
软件工程-第七版-chapter-9构件级设计_第4页
第4页 / 共45页
软件工程-第七版-chapter-9构件级设计_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《软件工程-第七版-chapter-9构件级设计》由会员分享,可在线阅读,更多相关《软件工程-第七版-chapter-9构件级设计(45页珍藏版)》请在金锄头文库上搜索。

1、1,第9章 构件级设计,什么是构件? OMG 统一建模语言规范OMG01 是这样定义构件的: “系统模块化的、可部署的和可替换的部件,该部件封装了实现并暴露一组接口。” OO 观点:构件包含一组协作的类 传统观点:一个构件包含处理逻辑,实现处理逻辑所需的内部数据结构以及能保证构件被调用和实现数据传递的接口。,2,OO 构件,细化后的设计类,分析类,设计构件,3,模块,传统控件也称为模块,作为软件体系结构的一部分,承担以下的3个角色之一:控制构件,协调问题域中所有其他控件的调用: 问题域构件,实现客户需要的全部或者部分功能 基础设施构件,负责完成问题域中所需支持处理的功能,4,传统构件,设计构件

2、,细化后的模块,5,基本设计原则,开闭原则(OCP)。“模块构件应该对外延具有开放性,对修改具有封闭性”。 Liskov 替换原则(LSP)。“子类可以替换它们的基类”。 依赖倒置原则(DIP)。“依赖于抽象,而非具体实现”。 接口分离原则(ISP)。“多个客户专用接口比一个通用接口要好”。 发布复用等价性原则(REP)。“复用的粒度就是发布的粒度”。 共同封装原则(CCP)。“一同变更的类应该合在一起”。 共同复用原则(CRP).。“不能一起复用的类不能被分到一组”。,来源: Martin, R., “设计原则和设计模式”下载:http:, 2000.,6,设计指导方针,构件 对那些已经被确

3、定为体系结构模型一部分的构件应该建立命名约定,并对其做进一步的细化和精华,使其成为构件级模型的一部分。 接口接口提供关于通信和协作的重要信息(也可以帮助我们实现OPC原则)。 依赖与继承 这种方法很好,模型依赖关系是自左向右,继承关系是自底向上(基类)。,7,内聚性,传统观点: 模块的专一性 OO 观点:: 内聚性意味着构件或者类只封装相互关联密切,以及与构件或类自身有密切关系的属性和操作。 内聚分类 功能的,当一个模块只完成某一组特定操作并返回结果时 分层的,由包、构件和类来实现。高可以访问低,反之不可 通信的,访问相同数据的所有操作在一个类中 有序的 过程的 暂时的 实用的,8,耦合性,传

4、统观点 构件之间彼此联系、构件和外部世界联系程度的一种度量 OO观点: 类之间彼此联系程度的一种定性度量 耦合分类 内容,一个构件暗中修改其他构件的内部结构 共用,当大量的构件都要使用同一个全局变量时 控制,当操作A调用操作B,并且向B传递控制标记时 标记,当类B被声明为类A某一操作中的一个参数类型时 数据,当操作需要传递长串的数据参数时 历程调用,当一个操作调用另外一个操作时 类型使用,当构件A使用了在构件B定义的一个数据类型时 包含或者导入,当构件A引入或者包含一个构件B的包或者内容时 外部,当一个构件和基础设施构件进行通信和协作时,9,构件级设计-I,步骤1:标识出所有与问题域相对应的设

5、计类。 步骤2:确定所有与基础设施域相对应的设计类。 步骤3:细化所有不需要作为可复用构件的设计类。 步骤3a:在类或构件协作时说明消息的细节。 步骤3b:为每个构件确定适当的接口。,10,构件级设计-II,步骤3c: 细化属性,并且定义实现属性所需要的数据类型和数据结构。 步骤3d:详细描述每个操作的处理流。 步骤4:说明持久数据源(数据库和文件)并确定管理数据源所需要的类。 步骤5:开发并且细化类或构件的行为表示。 步骤6:细化部署图以提供额外的实现细节。 步骤7:考虑每个构件级设计表示,并且时刻考虑其他可选方案。,11,协作图,12,重构,13,活动图,14,状态图,15,WebApps

6、的构件设计,WebApp 构件是 (1) 定义良好的聚合功能,为最终用户处理内容,或提供计算或数据处理。 (2) 内容和功能的聚合包,提供最终用户所需的功能。 因此,WebApp构件级设计通常包括内容设计元素和功能设计元素。,16,WebApps内容设计,关注于内容对象,以及包装展示给WebApp最终用户的方式 以SafeHomeA的基于网络视频监控功能为例 可以为视频监控器功能定义很多潜在的内容构件: (1) 内容对象表示具有传感器与摄像头等特殊图标位置的空间布局(平面图) (2) 采集到的极小的视频缩略图(每个都是一个独立的数据对象) (3) 专用摄像头的视频流窗口 可以对每种构架单独命名

7、并作为一个包进行操作,17,WebApps功能设计,现代Web应用系统提供了更加成熟的处理功能: (1) 执行本地化处理,从而动态地产生内容和导航功能; (2) 提供适合于WebApp业务领域的计算或数据处理; (3) 提供高级的数据库查询和访问; (4) 建立与外部系统的数据接口。 为了实现这些(及许多其他)能力,Web工程师必须设计和创建WebApp功能构件,这些构件在形式上类似于传统的软件构件。,18,设计传统构件,处理逻辑的设计是由算法设计的基本原则和结构化编程支配 数据结构的设计由系统开发的数据模型定义 接口的设计是由协作支配的,协作受构件的影响,19,算法设计,最接近编码的设计活动

8、 方法: 审查构件的设计说明 使用逐步求精开发算法 使用结构化程序实现程序逻辑 使用“形式化方法”证明逻辑,20,逐步求精,开门,走向门;,伸向把手;,打开门;,走进门,关门,一直重复直至门打开,顺时针转动把手;,If 把手不能转动,拿出钥匙;,找到正确的钥匙;,插进锁孔;,endif,推/拉门移动脚步,end 重复,open,walk to door;,walk through;,close door.,repeat until door opens,if knob doesnt turn, then,take key out;,find correct key;,endif,pull/pu

9、sh door move out of way;,reach for knob;,open door;,turn knob clockwise;,insert in lock;,end repeat,21,算法设计模型,以细节的层次表示算法,它能对质量进行评审 选择: 图解 (例如:流程图、盒图) 伪代码(例如:PDL) . 很多选择 编程语言 决策表,22,结构化程序设计,使用一组有限的逻辑结构:,顺序,条件句, if-then-else, select-case,循环, do-while, repeat until,导致更高的可读性、可测试的代码,对实现高品质目标很重要,但是还不够,可以结

10、合“正确性证明”使用,23,结构化程序设计,增加一个条件Z,如果为真,退出程序,24,决策表,条件,普通会员,白金会员,黄金会员,特别折扣,动作,无折扣,8%折扣,15%折扣,额外的x%的优惠,规则,25,开发决策表的步骤,列出特定过程(或构件)相关的所有动作 列出执行该过程时的所有条件(或所做的决策) 将特定的条件组合与特定的动作相关联,消除不可能的条件组合;或者找出所有可能的条件排列 定义规则,指出一组条件应该对应哪个或哪些动作。,26,程序设计语言(PDL),机器可读,不需要图形输入,容易结合源代码,由PDL可以生成图形,允许数据及过程的声明,易于维护,if 条件 xthen 过程a;e

11、lse 过程b; endif,27,为什么要设计语言?,机器可读并可处理,能够派生出cho的HOL,例如:Ada PDL,可以嵌入源码,因此更易维护,如果设计师和程序员不同,可以详细表示,易于审查,28,基于构件的开发,当面对重用的可能,软件团队会问: 商业成品构件(COTS)对实现需求是可用的吗? 内部开发的可复用构件可实现需求吗? 可复用构件的接口兼容待建系统的体系结构吗? 与此同时,重用时他们会遇到以下障碍,29,重用困难,很少有企业和组织有任何甚至略微相似的一个全面的软件可重用计划。 虽然越来越多的软件厂商目前销售的工具或构件为软件重用提供直接援助,但大多软件开发者都不用他们。 相对较

12、少的训练是可以帮助软件工程师和管理者理解并应用重用。 许多软件从业者仍然认为,“相比其价值,重用的麻烦更多。” 许多公司继续鼓励软件开发方法,而不促进重用。 很少有公司提供生产可重用的程序组件的激励措施。,30,CBSE 过程,领域工程,领域分析,软件体系结构开发,重用构件开发,存储库可重用构件/组件,结构模型,领域模型,软件工程,用户需求,系统分析,规格说明和设计,构建,应用系统软件,分析和设计模型,系统规格说明,31,领域工程,1. 定义待研究的领域。 2. 把从领域中提取的项进行分类。 收集领域中有代表性的应用系统样本。 4. 分析样本中的每个应用系统。 5. 为这些对象开发需求模型。,

13、32,确定可复用构件, 组件功能需要在未来实现吗? 领域内组件的功能有多普遍? 领域内组件功能有重复的吗? 组件依赖于硬件吗? 在实现时,硬件保持不变吗? 硬件细节能被远离另一个组件吗? 最优设计对接下来的实现足够吗? 我们能参数化一个不可重用的组件使其变为可重用的吗? 在许多仅有一点改变的实现中,组件可重用吗? 通过修改使重用可行吗? 一个不可重用的组件能被分解生成可重用的组件吗? 组件如何被有效分解成可重用的?,33,基于构件的 SE,库中的构件必须是可供使用的 构件应该有一致的结构 存在标准,例如: OMG/CORBA Microsoft COM Sun JavaBeans,34,CBS

14、E 活动,构件合格检验 构件适应性修改 构件组装 构件更新,35,合格检验,在使用构件之前,必须考虑到:, 应用系统的编程接口(API) 构件所需的开发工具与集成工具 运行时需求,包括资源使用(例如:内存或外存储器)、时间或速度以及网络协议 服务需求,包括操作系统接口和其他构件的支持 安全特性,包括访问控制和身份验证协议 嵌入式设计假定,包括特定的数值或非数值算法的使用 异常处理,36,适应性修改,“容易集成”的含义是: (1) 对于库中的所有构件,都已经实现了一致的资源管理方法; (2) 所有的构件都存在诸如数据管理等公共活动 (3) 已经以一致的方式实现了体系结构的内部接口与外部环境的接口

15、,37,组装,必须建立一个基础设施以将构件绑定到一起 体系结构组装成分包括: 数据交换模型 自动化 结构存储 基础对象模型,38,OMG/ CORBA,对象管理组织发布了公共对象请求代理体系结构(OMG/CORBA)。 对象请求代理(ORB)提供了多种服务,使得可复用构件(对象)可以与其他构件通信,而不管这些构件在系统中的位置如何。 如果为每一个构件创建一个接口定义语言(IDL)接口,系统内CORBA构件集成(没有修正)得以保证。 在客户应用端,对象从ORB服务器请求一个或更多服务。请求通过IDL或在动态运行时得到响应。 一个接口库包含所有关于服务的请求和响应格式的必要信息。,39,ORB 体

16、系架构,接口库,客户端,ORB接口,客户端IDL存根,动态调用,ORB核,服务器对象,接口库,对象适配器,服务器IDL存根,ORB接口,40,Microsoft COM,构件对象模型(COM) 提供了在Windows操作系统上运行的单个应用系统内使用构件的规格说明,这些构件可以是不同厂商生产的。 COM 包含两个元素: COM 接口(作为COM 对象实现) 为在COM接口间注册并传递消息的一组机制,41,Sun JavaBeans,JavaBeans 构件系统是一个可移植的、平台独立的CBSE基础设施,是使用Java程序设计语言开发的。 JavaBeans 构件系统包括一组工具,称为Bean开发工具箱(BDK), 它允许开发者做以下工作:分析现有的Bean(构件)如何工作 定制它们的行为和外观 建立协作及通信机制 开发在特定应用中使用的定制Bean 测试和评估Bean的行为。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 计算机应用/办公自动化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号