您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第8章-构件级设计建模
第八章构件级设计建模王美红软件工程主要内容•什么是构件•设计基于类的构件•内聚性•耦合性•实施构件级设计•对象约束语言•设计传统构件软件工程概述•程序体系结构设计类似于设计一栋房子的全貌,有多少件屋子,每间屋子之间的连接等等。•构件级设计类似于设计房子的每个较大的组成部件的内部结构,比如卧室该怎样布置,卫生间该如何安排等等•构件级设计比体系结构设计更细,但还细不到编码的程度,比如,设计卧室里边用拼木地板,但不会强调该地板是横着,还是竖着安,这些是具体编码时要考虑的事情。软件工程概述(续)•目的:避免高层次的抽象模型向低层次的程序之间转换时容易引入错误的问题。•构件级设计建模时机:在体系结构设计第一次迭代后完成软件工程概述(续)•构件级设计形式:–用编程语言表示–用能够容易转化为代码的中间表示(如图形的、表格的或基于文本的)软件工程8.1什么是构件•通俗地讲,构件是一段程序,该程序能完成一个相对独立的功能,并有一定的通用性。•正式定义:系统中某一定型化的、可配置的和可替换的部件,该部件封装并暴露一系列接口。软件工程8.1什么是构件(续)•针对不同的系统设计体系,构件所指的对象不一样。软件工程8.1.1面向对象观点•在面向对象的设计中,构件指一个协作类的集合。•一般来讲,构件的规模比类大,但有时一个构件也可以对应一个类。•在构件级设计时,应设计出类的所有属性以及和其它类之间的相关操作,通信接口必须明确定义。软件工程印刷任务构件设计细化:•属性(数据结构)•操作(算法细节)•接口(接口中可能隐含与其它的协作)软件工程8.1.2传统观点•传统构件也称为模块–程序的一个功能要素,程序由处理逻辑及实现处理逻辑所需的内部数据结构以及能够保证构件被调用和实现数据传递的接口构成。软件工程8.1.2传统观点(续)•构件(模块)的分类:–控制构件----协调不同模块之间的调用–问题域构件-----完成部分或全部用户的需求–基础设施构件----负责完成问题域中的相关处理的功能软件工程模块的导出是以数据流图的方式进行的控制构件位于顶层,问题域构件位于低层软件工程每个模块都要被细化软件工程8.1.3过程相关的观点•前面两种都是假设从头开始设计构件•在实际工作中,往往借鉴他人或自己前期的工作成果,直接引用或做一定的改进后引用已有的一些构件,基本原理是所从事的项目之间有内在的联系或相关性。软件工程8.2设计基于类的构件•当选择了面向对象软件工程方法后,构件级设计主要关注分析类的细化和基础类的定义和精化软件工程8.2.1基本设计原则•开关原则(TheOpen-ClosedPrinciple,OCP)–模块应该对外延有开放性,对修改具有封闭性。–即设计者应该采用一种无需对构件自身内部(代码或者内部逻辑)做修改就可以进行扩展(在构件所确定的功能域内)的方式来说明构件。软件工程•SafeHome针对不同的传感器,接口都向Dector构件呈现一致的视图。软件工程8.2.1基本设计原则(续)•Liskov替换原则(LiskovSubsitutionPrinciple,LSP)–子类可以替换它们的基类–源自基类的任何子类必须遵守基类与使用该基类的构件之间的隐含约定(前置条件、后置条件)。软件工程8.2.1基本设计原则(续)•依赖倒置原则(Dependencyinversionprinciple,DIP)–依赖于抽象,而非具体实现–构件依赖的其它构件(不是依赖抽象类,如接口)愈多,扩展起来就愈困难–抽象可以比较容易地对设计进行扩展软件工程8.2.1基本设计原则(续)•接口分离原则(InterfaceSegregationprinciple,ISP)–多个用户专用接口比一个通用接口要好–设计者应该为每一个主要的客户类型都设计一个特定的接口。–如SafeHome中FloorPlan类用于安全和监督功能,两处操作有些不同,监督功能多关于摄像头的操作,定义两个接口。软件工程8.2.1基本设计原则(续)•将多个构件组织起来的原则:–发布复用等价性原则---对类打包管理,同时升级。–共同封装原则----一同变更的类应该和在一起。–共同复用原则----可能一起被复用的类才能打包到一块。软件工程8.2.2构件级设计指导方针•一些实用的设计指导方针可以应用于构件、构件的接口,以及对于最终设计有着重要影响的依赖和集成特征等方面。软件工程8.2.2构件级设计指导方针(续)•构件–构件的名称来源于问题域,应能体现该构件的主要功能,并且为所有共利益者理解。–使用构造型帮助识别构件的特性•《infrastructure》,《table》,《database》软件工程8.2.2构件级设计指导方针(续)•接口–表示必须的接口(棒棒糖标记),放在构件框的左边。•依赖与继承–为提高可读性,依赖自左向右,继承自下(导出类)而上(基类);构件的依赖关系通过接口表示,而非“构件到构件”。软件工程8.2.3内聚性•功能内聚—一个模块完成一种且只一种运算并返回结果时发生这个级别上的内聚•分层内聚—由包、构件和类来实现,高层能访问低层,但底层不能访问高层•通信内聚—访问相同数据的所有操作被定义在一个类中•顺序内聚—将构件或者操作按照前者为后者提供输入的方式组合软件工程8.2.3内聚性(续)•过程内聚—构件或者操作的组合方式是,允许在调用前面的构件或操作之前,马上调用后面的构件或操作,及时没有数据传递•暂时内聚—操作的执行是为了反映某一特定的行为或状态。•实时内聚—在一类中,但是在其他方面不相关的构件、类或操作被分为一组。软件工程8.2.4耦合性•内容耦合—当一个构件“暗中修改其他构件内部数据”时•共用耦合—大量构件使用同一全局变量时•控制耦合—操作A调用操作B,且传递控制标记•印记耦合—类B被声明为类A某一操作中的一个参数中的一个参数类型时软件工程8.2.4耦合性(续)•数据耦合—当操作需要传递较长的数据参数时•例程调用耦合—当一个操作调用另一个操作时•类型使用耦合—构件A使用在构件B中定义的一个数据类型时软件工程8.2.4耦合性(续)•包含或导入耦合—当构件A引入或者包含一个构件B的包或者内容时•外部耦合—当一个构件通信和协作时发生软件工程构件的UML表示图带接口的构件构件具有它们支持的接口和需要从其他构件得到的接口软件工程构件图表示了构件之间的依赖关系。每个构件实现(支持)一些接口,并使用另一些接口。如果构件间的依赖关系与接口有关,那么构件可以被具有同样接口的其他构件替代。图构件图软件工程构件图举例软件工程8.3实施构件级设计一个典型的构件级设计步骤:1.标识出所有与问题域相对应的类2.确定所有与基础设施域相对应的类–GUI构件、操作系统构件、对象和数据管理构件软件工程3.细化所有不能作为复用构件的类(1)说明消息的细节流软件工程•(2)为每个构件确定适当的接口–UML接口是“一组外部课件的(即公共的)操作,接口不包含内部结构、没有属性,没有关联……”–为设计类定义的接口可以归结为一个或者更多的抽象类–抽象类中的每个操作接口应该是内聚的软件工程内聚性差!建立工作单检查任务的优先级将任务传递给生产线软件工程小圆圈代表接口从构件到接口的实线表明该构件提供的列在接口旁的服务从构件到接口的虚线箭头说明这个构件要求接口提供的服务软件工程8.3实施构件级设计(续)(3)细化属性并定义数据类型和结构–UML用下面的语法来定义属性的数据类型举例:软件工程8.3实施构件级设计(续)•(4)描述每个操作中的处理–采用如下方式进行扩展:软件工程•若算法比较复杂或者难于理解,需要设计细化软件工程8.3实施构件级设计(续)4.说明持久数据源(数据库或文件)等相关类5.开发并细化类的行为表示表示状态图中的事件软件工程软件工程8.3实施构件级设计(续)6.细化部署图–表示主要构件包的位置–某些情况下,部署图在这个时候被细化为实例形式7.反省和检查现有的设计软件工程8.4对象约束语言•对象约束语言(ObjectConstraintLanguage,OCL),一种形式化语言•四个组成部分:–语境—定义了哪些情况语句是正确的–特征—描述语境的一些特征–操作—用来操纵和限制一个特性–关键字—用于说明条件表达式(if,then,else,and,or,not,implies)软件工程8.4对象约束语言(续)•OCL的语法和结构:–UML和其他建模语言建模描述系统特征是通过OCL表达式来实现,因此表达式是OCL的核心,它携带了关于它所约束对象的相关信息–作为OCL的核心,表达式可以被用于多种不同的场合,以不同的形式规约被描述的对象。软件工程8.4对象约束语言(续)•举例:Customerself.authorizationAuthority=‘yes’用于表示PrintJob状态图中jobCostAccept事件的警戒条件软件工程用OCL说明前置条件和后置条件软件工程8.5设计传统构件•由各种逻辑结构组成:–顺序型–条件型–重复型软件工程常用方法1.图形工具•程序流程图•盒图(N-S图)•问题分析图(PAD)2.表格工具•判定表3.语言工具•过程设计语言(PDL)(伪码)软件工程8.5.1图形化设计表示一、流程图软件工程流程图举例软件工程程序流程图•任何复杂的程序流程图都应由以上五种基本结构组合而成。•优点:–容易掌握,且历史“悠久”,使用广泛。•缺点:–本质上不具备逐步求精的特点–对于提高大型系统的可理解性作用甚微–不易表示数据结构–转移控制不太方便软件工程二、盒图,也叫N-S图软件工程盒图举例软件工程盒图的嵌套定义形式软件工程x4TFDo-Untilx5ighfkx1TFbDo-Untilx6ajx21cDo-Whilex323dek:软件工程盒图•特点:–没有箭头,不允许随意转移控制;–每个矩形框(Case中条件取值例外)都是一个功能域(即一个特定结构的作用域),结构表示明确;–局部及全程数据的作用域易见;–易表现嵌套关系(embeddedstructure)以及模块的层次结构。软件工程三.问题分析图(PAD)PAD(ProblemAnalysisDiagram):日立公司,1973软件工程PAD描述的示例软件工程开始结束ajUntilx5iUntilx6bx1kfx4ghdefkx2de123Whilex3c软件工程例:N-S图与PAD的转换x21cDo-Whilex323dek:x4TFDo-Untilx5ighfkx1TFbDo-Untilx6aj软件工程PAD•PAD特点:–结构清晰,层次分明,易读;–支持逐步求精的设计思想;–容易将PAD自动转换为高级语言源程序。软件工程8.5.2表格式设计方式:•决策表---将事件、事件的发生条件、发生的具体模式等信息填写在一张表里。软件工程软件工程8.5.3程序设计语言也成结构化英语或伪代码/*计算运费*/count();{输入x;输入y;if条件1{公式1;callsub;}elseif条件2{公式2;callsub;}elseif条件3{公式3;callsub;}else{公式4;callsub;}}sub();{for(I=1,3)do{记帐;输出;}}软件工程PDL的特点•优点:易于实现由PDL到源代码的自动转换•缺点:不够直观。软件工程作业•逐步求精和重构是一回事吗?如果不是,他们有什么区别?
本文标题:第8章-构件级设计建模
链接地址:https://www.777doc.com/doc-4980774 .html