软件工程讲义-第10章-构件级设计建模要点课件.ppt
《软件工程讲义-第10章-构件级设计建模要点课件.ppt》由会员分享,可在线阅读,更多相关《软件工程讲义-第10章-构件级设计建模要点课件.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、现代软件工程第10章 构件级设计建模主要内容v什么是构件什么是构件v设计基于基于类的构件的构件v实施构件施构件级设计v对象象约束束语言言v设计传统构件构件v小小结构件级设计建模v一套完整的一套完整的软件构件是在体系件构件是在体系结构构设计过程中定程中定义的。但是没有在接近代的。但是没有在接近代码的抽的抽象象级上表示内部数据上表示内部数据结构和每个构件的构和每个构件的处理理细节。构件。构件级设计定定义了数据了数据结构、算构、算法、接口特征和分配法、接口特征和分配给每个每个软件构件的通件构件的通信机制。信机制。构件级设计建模v必必须能能够在建造在建造软件之前就确定件之前就确定该软件件是否可以工作。
2、是否可以工作。为了保了保证设计的正确性,的正确性,以及与早期以及与早期设计表示(即数据、体系表示(即数据、体系结构构和接口和接口设计)的一致性,构件)的一致性,构件级设计需要需要以一种可以以一种可以评审设计细节的方式来表示的方式来表示软件。它提供了一种件。它提供了一种评估数据估数据结构、接口和构、接口和算法是否能算法是否能够工作的方法。工作的方法。构件级设计建模v 数据、体系数据、体系结构和接口的构和接口的设计表示构成表示构成了构件了构件级设计的基的基础。每个构件的。每个构件的类定定义或者或者处理叙述都理叙述都转化化为一种一种详细设计,该设计采用采用图形或基于文本的形式来形或基于文本的形式来详
3、细说明内部的数据明内部的数据结构、局部接口构、局部接口细节和和处理理逻辑。设计符号包括符号包括UML图和一些和一些辅助表助表示。通示。通过使用一系列使用一系列结构化构化编程程结构来构来说明程序的明程序的设计。构件级设计建模v每个每个软件的件的设计都以都以图形的、形的、图表的或表的或基于文本的方式表示,基于文本的方式表示,这是构件是构件级设计阶段段产生的主要工作生的主要工作产品。品。v采用采用设计走走查或或审查机制。机制。对设计执行行检查以确定数据以确定数据结构、接口、构、接口、处理理顺序和序和逻辑条件等是否都正确,并且条件等是否都正确,并且给出早期出早期设计中与构件相关的数据或控制中与构件相关
4、的数据或控制变换。构件级设计建模v体系体系结构构设计第一次迭代完成之后,就第一次迭代完成之后,就应该开始构件开始构件级设计。在。在这个个阶段,全部段,全部的数据和的数据和软件的程序件的程序结构都已构都已经建立起来,建立起来,其目的是把其目的是把设计模型模型转化化为运行运行软件。但件。但是是现有有设计模型的抽象模型的抽象层次相次相对较高,而高,而可运行程序的抽象可运行程序的抽象层次相次相对较低。低。这种种转化具有挑化具有挑战性,因性,因为可能会在可能会在软件件过程后程后期期阶段引入段引入难于于发现和改正的微小和改正的微小错误。构件级设计建模v用用编程程语言表示构件言表示构件级设计是可以的。是可以
5、的。其其实,程序的,程序的创建是以体系建是以体系结构构设计模型模型作作为指南的。一种可供考指南的。一种可供考虑的方法是使用的方法是使用某些能某些能够容易容易转化化为代代码的中的中间表示来表表示来表示构件示构件级设计。无。无论采用何种机制来表示采用何种机制来表示构件构件级设计,定,定义的数据的数据结构、接口和算构、接口和算法法应该遵守各种已遵守各种已经精心精心规定好的定好的设计指指导准准则,以避免在,以避免在过程程设计演化中犯演化中犯错误。什么是构件v通常来通常来讲,构件是,构件是计算机算机软件中的一个件中的一个模模块化的构造化的构造块。OMG UML规范将构件范将构件定定义为“系系统中某一定型
6、化的、可配置的中某一定型化的、可配置的和可替和可替换的部件,的部件,该部件封装了部件封装了实现并暴并暴露一系列接口露一系列接口”。v构件存在于构件存在于软件体系件体系结构中,因而构件构中,因而构件在完成所建系在完成所建系统的需求和目的需求和目标中起重要作中起重要作用。由于构件用。由于构件驻留于留于软件体系件体系结构的内部,构的内部,它它们必必须与其他的构件和存在于与其他的构件和存在于软件件边界界以外的以外的实体体进行通信和合作。行通信和合作。面向对象的观点v在面向在面向对象象软件工程件工程环境中,构件包括一境中,构件包括一个个协作作类集合。构件中的每一个集合。构件中的每一个类都被都被详细阐述,
7、包括所有的属性和与其述,包括所有的属性和与其实现相关的操相关的操作。作作。作为细节设计的一部分,所有与其他的一部分,所有与其他设计类相互通信相互通信协作的接口必作的接口必须予以定予以定义。为了完成了完成这些,些,设计师从分析模型开始,从分析模型开始,详细描述分析描述分析类和基和基础类。面向对象的观点v考考虑为一个高一个高级印刷印刷车间构建构建软件。件。软件的目的是件的目的是为了收集前台的客了收集前台的客户需求,需求,对印刷印刷业务进行定价,然后把印刷任行定价,然后把印刷任务交交给自自动生生产设备。在需求工程中得到了一个。在需求工程中得到了一个被称被称为PrintJob的分析的分析类,如,如图1
8、0-1所所示。示。PrintJob有两个接口:有两个接口:computeJob具有具有对任任务进行定价的功能,行定价的功能,initiateJob能能够把任把任务传给生生产设备。面向对象的观点图10-1设计构件的细化面向对象的观点v构件构件级设计将由此开始。必将由此开始。必须对PrintJob构件构件的的细节进行行细化,以提供指化,以提供指导实现的充分信息。的充分信息。通通过不断不断补充作充作为构件构件PrintJob的的类的全部属的全部属性和操作,来逐步性和操作,来逐步细化最初的分析化最初的分析类。v定定义为体系体系结构构设计组成部分的每一个构件都成部分的每一个构件都要要实施施细化。化。细化
9、一旦完成,要化一旦完成,要对每一个属性、每一个属性、每一个操作和每一个接口每一个操作和每一个接口进行更行更进一步的一步的细化。化。适合每个属性的数据适合每个属性的数据结构必构必须予以予以详细说明。另明。另外外还要要说明明实现与操作相关的与操作相关的处理理逻辑的算法的算法细节。最后是。最后是实现接口所需机制的接口所需机制的设计。对于面向于面向对象象软件,件,还包含包含对实现系系统内部内部对象象间消息通消息通信机制的描述。信机制的描述。传统观点v在在传统软件工程件工程环境中,一个构件就是程序的境中,一个构件就是程序的一个功能要素,程序由一个功能要素,程序由处理理逻辑及及实现处理理逻辑所需的内部数据
10、所需的内部数据结构以及能构以及能够保保证构件被构件被调用和用和实现数据数据传递的接口构成。的接口构成。传统构件也被称构件也被称为模模块,作,作为软件体系件体系结构的一部分,它承担如下三构的一部分,它承担如下三个重要角色之一:个重要角色之一:(1)控制构件,控制构件,协调问题域中域中所有其他构件的所有其他构件的调用用;(2)问题域构件,完成部分域构件,完成部分或全部用或全部用户的需求的需求;(3)基基础设施构件,施构件,负责完成完成问题域中所需相关域中所需相关处理的功能。理的功能。传统观点v与面向与面向对象的构件相象的构件相类似,似,传统的的软件构件也件构件也来自于分析模型。不同的是在来自于分析
11、模型。不同的是在该种情况下,是以种情况下,是以分析模型中的数据流要素作分析模型中的数据流要素作为导出构件的基出构件的基础。数据流数据流图最低最低层的每个的每个变换都被映射都被映射为某一某一层次次上的模上的模块。一般来。一般来讲,控制构件位于,控制构件位于层次次结构构顶层附近,而附近,而问题域构件域构件则倾向位于向位于层次次结构的底构的底层。为了了获得有效的模得有效的模块化,在构件化,在构件细化化过程中程中采用了功能独立性的采用了功能独立性的设计概念。概念。传统观点再来考再来考虑为一个高一个高级影印中心构建影印中心构建软件。件。在分析模型建立在分析模型建立过程中程中导出一出一组数据流数据流图。假
12、假设这些数据流些数据流图已已经被映射到被映射到图10-2中中所所显示的体系示的体系结构中。构中。图中每个方框都表中每个方框都表示一个示一个软件构件。件构件。传统观点图10-2 一个传统系统的结构图传统观点v考考虑ComputePageCost模模块。该模模块的目的在的目的在于根据用于根据用户提供的提供的规格格说明来明来计算每算每页的印刷的印刷费用。用。为了了实现该功能需要以下数据:文档的功能需要以下数据:文档的页数,文档数,文档的印刷份数,的印刷份数,单面或者双面印刷,面或者双面印刷,颜色,色,纸张大小。大小。这些数据通些数据通过该模模块的接口的接口传递给ComputePageCost。Com
13、putePageCost根据任根据任务量和复量和复杂度,使用度,使用这些数据来决定一些数据来决定一页的的费用用这是一个通是一个通过接口将所有数据接口将所有数据传递给模模块的功能。的功能。每一每一页的的费用与任用与任务的大小成反比,与任的大小成反比,与任务的复的复杂度成正比。度成正比。传统观点v图10-3给出了使用出了使用UML建模符号描述的构件建模符号描述的构件级设计。其中。其中ComputePageCost模模块通通过调用用getJobData模模块和数据和数据库接口接口accessCostDB来来访问数据。接着,数据。接着,对ComputePageCost模模块进一步一步细化,化,给出算出
14、算法和接口的法和接口的细节描述。其中算法的描述。其中算法的细节可以由可以由图中中显示的示的伪代代码或者或者UML活活动图来表示。接口来表示。接口被表示被表示为一一组输入和入和输出的数据出的数据对象或者数据象或者数据项的集合。的集合。设计细化的化的过程需要一直程需要一直进行到行到获得构得构件的件的导向向结构构为止。止。传统观点图10-3 ComputePageCost的构件级设计过程相关的观点v上面提及的关于构件上面提及的关于构件级设计的面向的面向对象象观点和点和传统观点,都假定从点,都假定从头开始开始设计构件。即构件。即设计者必者必须根据从分析模型中根据从分析模型中导出的出的规格格说明明创建新
15、构件。当建新构件。当然,然,还存在另外一种方法。存在另外一种方法。v在在过去的去的10年年间,软件工程已件工程已经开始开始强调使用已使用已有构件来构造系有构件来构造系统的必要性。的必要性。实际上,上,软件工程件工程师在在设计过程中可以使用已程中可以使用已经过验证的的设计或代或代码构构件的目件的目录。当。当软件体系件体系结构构设计完后,就可以从目完后,就可以从目录中中选出构件或者出构件或者设计模式,并用于模式,并用于组装体系装体系结构。构。由于由于这些构件是根据复用思想来些构件是根据复用思想来创建的,所以其接建的,所以其接口的完整描述、要口的完整描述、要实现的功能和需要的通信与的功能和需要的通信
16、与协作作等等对于于设计者来者来说都是可以得到的。都是可以得到的。设计基于类的构件v构件构件级设计利用了分析模型开利用了分析模型开发的信息的信息和体系和体系结构模型表示的信息。当构模型表示的信息。当选择了面了面向向对象象软件工程方法后,构件件工程方法后,构件级设计主要主要关注分析关注分析类的的细化和基化和基础类的定的定义和精化。和精化。这些些类的属性、操作和接口的的属性、操作和接口的详细描述是描述是开始构建活开始构建活动之前所需的之前所需的设计细节。基本设计原则v有四种适用于构件有四种适用于构件级设计的基本的基本设计原原则,这些原些原则在使用面向在使用面向对象象软件工程方法件工程方法时被广泛采被
17、广泛采用。使用用。使用这些原些原则的根本的根本动机在于,使得机在于,使得产生的生的设计在在发生生变更更时能能够适适应变更并且减少副作用更并且减少副作用的的传播。播。v开关原开关原则(OCP):模:模块应该对外延具有开放性,外延具有开放性,对修改具有封修改具有封闭性。性。简单地地说,设计者者应该采用采用一种无需一种无需对构件自身内部做修改就可以构件自身内部做修改就可以进行行扩展展的方式来的方式来说明构件。明构件。SAFEHOME实例500SAFEHOME实例51图10-4 遵循OCP原则基本设计原则vLiskov替替换原原则(LSP):“子子类可以替可以替换它它们的基的基类”。最早提出。最早提出
18、该原原则的的LIS88建建议,将子,将子类传递给构件来代替构件来代替基基类时,使用基,使用基类的构件的构件应该仍然能仍然能够正正确完成其功能。确完成其功能。LSP原原则要求源自基要求源自基类的的任何子任何子类必必须遵守基遵守基类与使用与使用该基基类的构的构件之件之间的的隐含含约定。定。基本设计原则v依依赖倒置原倒置原则(DIP):“依依赖于抽象,而非具于抽象,而非具体体实现”。抽象可以比。抽象可以比较容易地容易地对设计进行行扩展,展,又不会又不会导致大的混乱。构件依致大的混乱。构件依赖的具体构件越多,的具体构件越多,其其扩展起来就越困展起来就越困难。v接口分离原接口分离原则(ISP):“多个用
19、多个用户专用接口比用接口比一个通用接口要好一个通用接口要好”。多个客。多个客户构件使用一个服构件使用一个服务器器类提供的操作的提供的操作的实例很多。例很多。ISP原原则建建议设计者者应该为每一个主要的客每一个主要的客户类型都型都设计一个特一个特定的接口。只有那些与特定客定的接口。只有那些与特定客户类型相关的操作,型相关的操作,才才应该出出现在在该客客户的接口的接口说明中。如果多个客明中。如果多个客户要求相同的操作,要求相同的操作,则这些操作些操作应该在每一个特在每一个特定的接口中都加以定的接口中都加以说明。明。基本设计原则v发布复用等价性原布复用等价性原则:”复用的粒度就是复用的粒度就是发布的
20、粒度布的粒度”。当。当类或构件被或构件被设计用以复用以复用用时,在可复用,在可复用实体的开体的开发者和使用者之者和使用者之间就建立了一种就建立了一种隐含的含的约定关系。开定关系。开发者者承承诺建立一个建立一个发布控制系布控制系统,用来支持和,用来支持和维护实体的各种老版本,同体的各种老版本,同时用用户缓慢地慢地将其升将其升级到最新版本。明智的方法是将可到最新版本。明智的方法是将可复用的复用的类分分组打包成能打包成能够管理和控制的包管理和控制的包作作为一个更新的版本,而不是一个更新的版本,而不是对每个每个类分分别进行升行升级。基本设计原则v共同封装原共同封装原则:”一同一同变更的更的类应该合在合
21、在一起一起”。类应该根据其内聚性根据其内聚性进行打包。行打包。即当即当类被打包成被打包成设计的一部分的一部分时,它,它们应该处理相同的功能或者行理相同的功能或者行为域。当域的一域。当域的一些特征必些特征必须变更更时,只有那些包中的,只有那些包中的类才才有可能需要修改。有可能需要修改。这样可以可以进行更加有效行更加有效的的变更控制和更控制和发布管理。布管理。基本设计原则v共同复用原共同复用原则:”不能一起复用的不能一起复用的类不能不能被分到一被分到一组”。当包中的一个或者多个。当包中的一个或者多个类变更更时,包的,包的发布版本数量也会布版本数量也会发生。所生。所有那些依有那些依赖于已于已经发生生
22、变更的包的更的包的类或者或者包,都必包,都必须升升级到最新的版本,并且都需到最新的版本,并且都需要要进行行测试以保以保证新新发布的版本能布的版本能够无故无故障运障运转。如果。如果类没有根据内聚性没有根据内聚性进行分行分组,那么那么这个包中与其他个包中与其他类无关无关联的的类有可能有可能会会发生生变更,而更,而这往往会往往会导致致进行没有必行没有必要的集成和要的集成和测试。因此,只有那些一起被。因此,只有那些一起被复用的复用的类才才应该包含在一个包中。包含在一个包中。构件级设计指导方针v构件构件。对那些已那些已经被确定被确定为体系体系结构模型一部构模型一部分的构件分的构件应该建立命名建立命名约定
23、,并定,并对其做其做进一步的一步的细化和精化,使其成化和精化,使其成为构件构件级模型的一部分。体模型的一部分。体系系结构构件的名字来源于构构件的名字来源于问题域,并且域,并且应该能能够被被查看体系看体系结构模型的所有共利益者理解。构模型的所有共利益者理解。v在在详细设计层面使用构造型帮助面使用构造型帮助识别构件的特构件的特性也很有价性也很有价值。构件级设计指导方针v接口接口。接口提供关于通信和。接口提供关于通信和协作的重要信息。作的重要信息。然而接口表示的随意性会使构件然而接口表示的随意性会使构件图趋于复于复杂化。化。AMB02建建议:(1)当构件当构件图变得复得复杂时,在,在较正式的正式的U
24、ML框和虚箭框和虚箭头记号方法中使用接口的棒号方法中使用接口的棒棒糖式棒糖式记号;号;(2)为了保持一致,接口都放在构了保持一致,接口都放在构件框的左件框的左边;(3)即使其他的接口也适用,也只即使其他的接口也适用,也只表示出那些与构件相关的接口。表示出那些与构件相关的接口。v依依赖与与继承承。为了提高可了提高可读性,依性,依赖关系是自关系是自左向右,左向右,继承关系是自下而上。另外,构件之承关系是自下而上。另外,构件之间的依的依赖关系通关系通过接口来表示,而不是采用接口来表示,而不是采用“构件构件到构件到构件”的方法来表示。遵照的方法来表示。遵照OCP的思想,的思想,这种种方法使得系方法使得
25、系统更易于更易于维护。内聚性v内聚性意味着构件或者内聚性意味着构件或者类只封装那些相只封装那些相互关互关联密切,以及与构件或密切,以及与构件或类自身有密切自身有密切关系的属性和操作。关系的属性和操作。LET01定定义了了许多多不同不同类型的内聚性。型的内聚性。内聚性v功能内聚功能内聚v分分层内聚内聚v通信内聚通信内聚v顺序内聚序内聚v过程内聚程内聚v暂时内聚内聚v实用内聚用内聚耦合性v耦合性是耦合性是类之之间彼此彼此联系程度的一种定系程度的一种定性度量。随着性度量。随着类相互依相互依赖越来越多。越来越多。类之之间的耦合程度亦会增加。在构件的耦合程度亦会增加。在构件级设计中,中,一个重要的目一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 讲义 10 构件 设计 建模 要点 课件
限制150内