哈工大软工课件构件级设计_第1页
哈工大软工课件构件级设计_第2页
哈工大软工课件构件级设计_第3页
哈工大软工课件构件级设计_第4页
哈工大软工课件构件级设计_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

什么是什么是构2第20方系统中某一系统中某一定型化的、可配置的和可替换的部件,该部件封装了实一个构件就是程序的一个功能要素,程序有处理逻辑及实现处理3第20方管理上:将大的任务分割成小的子任务,并行开发提高效率维护上:通过系统间解耦,使得一部分发生变化不会波及到其他方面理解上:将复杂问题分解成小问题,每个构件关注一个问题,降低开发难度。设计的目标就是根据设计原则和设计模式将职责分配给恰当的类管理上:将大的任务分割成小的子任务,并行开发提高效率维护上:通过系统间解耦,使得一部分发生变化不会波及到其他方面理解上:将复杂问题分解成小问题,每个构件关注一个问题,降低开发难度。设计的目标就是根据设计原则和设计模式将职责分配给恰当的类4第1方design传统构elaboratedout:design传统构elaboratedout:pagein:color=1,2,3,in:pageSize=A,B,C,out:sides,color,pageSize,pageCost)accessCostsDB(jobSize,color,pageSize,BPC,SF)computePageCost(5第20方numberPages*numberDolookupbasepagecost(BPC)-->accessCostsDB(JS,color);lookupsizefactor(SF)--accessCostDB(JS,color,size)jobcomplexityfactor(JCF)=1+[(sides-1)*sideCost+SF]pagecost=BPC*analysiscPrintJo面向对象构numberOfPagesnumberOfSidespaperTypemagnificatproductionFeatdesigncomcomputeJobCost(passJobtoPrinter(computePrintanalysiscPrintJo面向对象构numberOfPagesnumberOfSidespaperTypemagnificatproductionFeatdesigncomcomputeJobCost(passJobtoPrinter(computePrintinitiateelaborateddesign6第10方 PrintpaperTypepaperWeightpaperSizepaperColorproductionFeaturcollationOptbindingOptprioritcomputeProdCost()buildWorkOrder()checkPriority()相当于相当于详细设计(即设计对象内部的具体实现在系统所需的应用对象与可复用的商业构件之间建立关联给出每个子系统/7第1方OOP/设计模式OOP/设计模式8第1方enterpasswordanduservalidateattributesaccessPaperDB(weightvalidpasswords/invalidpasswords/baseCostselectmajorpromptforreentpaperCostenterpasswordanduservalidateattributesaccessPaperDB(weightvalidpasswords/invalidpasswords/baseCostselectmajorpromptforreentpaperCostperPagemayalsoselectinputtriesremselectsize=nopaperCostperPageti分配给类paperCostperPage*1.size=paperCostperPage=paperCostperPage*1.4selectaspecificcamerselectspecificcamera-thumbnailssize=paperCostperPage=paperCostperPage*1.6selectcameracoloriscustpaperCostperPage=paperCostperPage*1.14viewcamerainlabelledcolorispromptforanotherviewret(paperCostperPageseeanothercamer9第1方OOD——分析顺序OOD——分析顺序第1方OODesign—设计顺序OODesign—设计顺序第1方第1第1方为每个实体为每个实体建立一张表为每个表确定主键(primarykey)、外键(foreignkey);增加外部码表示一对多(1:n)关检查数据字数据库安全第1方什么是构构件设计什么是构构件设计原––内聚性与耦合构件设计原构件设计步设计规格说第20方构件的专构件的专诚第20方高高低第1方(1)构件中各个部分都是为完成(1)构件中各个部分都是为完成一项单一的功能而–––例如“集中精力做一件第20方(2)第1方(2)第1方(3)第10(3)第10方(4)第1(4)第1方(5)一个模块中同时含有几个操作,这些操作之间既无顺序关系,也无数据共享关系;它们的执行与否由外面传进来的控制标志所决之所以称之为过程内聚,是因为这些操作仅仅是因为控制流,或者说在同一过程内的原因才联系到一起的,它们都被包括在一个很大的或者e语句中,彼此之间并没有任何其它逻辑上的联系。(5)一个模块中同时含有几个操作,这些操作之间既无顺序关系,也无数据共享关系;它们的执行与否由外面传进来的控制标志所决之所以称之为过程内聚,是因为这些操作仅仅是因为控制流,或者说在同一过程内的原因才联系到一起的,它们都被包括在一个很大的或者e语句中,彼此之间并没有任何其它逻辑上的联系。第1方DGBEACF(6)模块的各个成分必须在同一时间段执行,但各个成分之间无必然的联系(6)模块的各个成分必须在同一时间段执行,但各个成分之间无必然的联系第20方(7)通常用于库函数管理,将多个相互无关但比较功能类似的模块放置在同一个模块内。(7)通常用于库函数管理,将多个相互无关但比较功能类似的模块放置在同一个模块内。第20方数功能功能功能分层内高层访问低层的服功能内完备的、相关的功BC顺数功能功能功能分层内高层访问低层的服功能内完备的、相关的功BC顺序内按功能的顺序相类似的功按时间相尽量采用前三种内0方功能功能功能功能功能时间时间时间功能功能功能A功能功能功能功能A-部分功能B-部分功能C-部分传统观面传统观面向对象观第1方第1第1方第第1方弱耦中耦强耦第20方(1)第10(1)第10方Lee,Lee,Kum,+call+call(2)l第10(2)l第10方Lee,+Operation2(e,f,g,+callOperation1(a,b,c,+callOperation2(e,f,g,Lee,+Operation1(a,b,c,(3)当类B被声明为类A类B作为类A定义的一部分,类B的修改影响到类第(3)当类B被声明为类A类B作为类A定义的一部分,类B的修改影响到类第1方AB+save(B(4)类型使用耦当构件使用了在构件中定义的一个数据类型时会发生此种耦合(4)类型使用耦当构件使用了在构件中定义的一个数据类型时会发生此种耦合第20方AB控制耦合(过程内聚当操作调用操作,并向控制耦合(过程内聚当操作调用操作,并向传递了一个控制标记时,就会发生此种耦合。控制标记会指引B第20方(6)外部耦当一个构件和基础设施构件(如操作系统功能,数据库功能、网络通信功能等)进行通信和协作时会发生此种耦合ALMBCDE(6)外部耦当一个构件和基础设施构件(如操作系统功能,数据库功能、网络通信功能等)进行通信和协作时会发生此种耦合ALMBCDEFNOP第20方(7)共用耦若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局变量、共享的通信区、内存的公共覆盖区等。紧密的公共(7)共用耦若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局变量、共享的通信区、内存的公共覆盖区等。紧密的公共耦松散的公共耦第20方(8)内容耦一个类暗中修改(8)内容耦一个类暗中修改另一个类的内部数据内容耦合违反了“信息隐藏”的原则第4A耦合是影响软件复杂程度和设计质量的重要因素,应建立模块间耦合度尽可能松散的系统;降低模块间–––耦合是影响软件复杂程度和设计质量的重要因素,应建立模块间耦合度尽可能松散的系统;降低模块间––––––第20方什么是构构件设计什么是构构件设计原––内聚性与耦合构件设计原构件设计步设计规格说第20方1.(SingleResponsibility第10方1.(SingleResponsibility第10方2.开闭原则(TheOpen-Close对于扩展是开放的:适应需求的变化对于更改是封闭的:不影响已2.开闭原则(TheOpen-Close对于扩展是开放的:适应需求的变化对于更改是封闭的:不影响已有的程关键是抽第10方3.Liskov替换原(LiskovSubstitution遵循LSP第13.Liskov替换原(LiskovSubstitution遵循LSP第10方4.(DependencyInversion第10方4.(DependencyInversion第10方5.(InterfaceSegregation5.(InterfaceSegregation多个用户专用接口比一个通用接第1方PrincipleREP)共同封装原则PrincipleREP)共同封装原则共同复用原则(CommonReuse–第20方设计建设计建第20方步骤1:标识所有步骤1:标识所有与概念类相对应的设计类步骤2:确定所有与基础设施域相对应的步骤3:细化所有不能作为复用构件的设––––步骤3a:在类或构件的协作时说明消息步骤3b:为每一个构件确定适当的接步骤4:说明持久数据源(数据库和文件)并确定管理数据源所需要的类步骤6:细化部署图以提供额外的实现细节步骤7:考虑每一个构件级设计表示,并且时刻考虑其他选第20方分析设计多对多映第10方分析设计多对多映第10方如果一个“分析类”比较简单,代表着单一的逻辑抽象,那么可以将其一对一的映射为“设计类”;–通常,主动参与者对应的边界类、控制类和一般的实体类都可以直接映射成如果“分析类”的职责比较复杂,很难由单个“设计类”承担,则应该将其如果一个“分析类”比较简单,代表着单一的逻辑抽象,那么可以将其一对一的映射为“设计类”;–通常,主动参与者对应的边界类、控制类和一般的实体类都可以直接映射成如果“分析类”的职责比较复杂,很难由单个“设计类”承担,则应该将其分解为多个“设计类”,并映射成“包”或“子系统”;将设计类分配到相应的“包”或“子系统”当中–第20方―设计―设计―设计类―设计类―设计类―设计第1方步骤1:标识所有步骤1:标识所有与问题类相对应的设计类步骤2:确定所有与基础设施域相对应的步骤3:细化所有不能作为复用构件的设––––步骤3a:在类或构件的协作时说明消息步骤3b:为每一个构件确定适当的接步骤4:说明持久数据源(数据库和文件)并确定管理数据源所需要的类步骤6:细化部署图以提供额外的实现细节步骤7:考虑每一个构件级设计表示,并且时刻考虑其他选第20方GUI(图形用户接口)与硬件通信构件(网络、读写设备等GUI(图形用户接口)与硬件通信构件(网络、读写设备等第1方步骤1:标识所有步骤1:标识所有与问题类相对应的设计类步骤2:确定所有与基础设施域相对应的步骤3:细化所有不能作为复用构件的设––––步骤3a:为每一个构件确定适当的接步骤3b:细化属性并且定义相应的数据类型和步骤4:说明持久数据源(数据库和文件)并确定管理数据源所需要的类步骤6:细化部署图以提供额外的实现细节步骤7:考虑每一个构件级设计表示,并且时刻考虑其他选第20方––––––细化操细化关联关细化泛第1方简单构件的方第简单构件的方第1方细化–具体说明属性的名称、类型细化–具体说明属性的名称、类型、缺省值、可见visibilityattributeName:Type=Private:‘-’–––属性––––类所代表的现实实体的基本信描述状态的信描述该类与其他类之间关联的派生属性(derivedattribute):该类属性的值需要通过计算其他属性的值才能得到•/numStudents:第1方属性命名命名符合规范(名词组合,首字母小写属性命名命名符合规范(名词组合,首字母小写尽可能将所有属性的可见性设置为仅通过set仅通过get第20方3.找出满足基本逻辑要求的操作:针对不同的t哪些操作;补充必3.找出满足基本逻辑要求的操作:针对不同的t哪些操作;补充必要的辅助操–––––––验证两个实例是否等同——复制对象实例——细化操作时,要充分考虑类的“属性”与“状态”是否被充分利用起来:–对属性进行–第1方应该遵从程序设计语言的命名规则(动词+应该遵从程序设计语言的命名规则(动词+名词,首字母小写–将各个操作中公共部分提取出来,形成独立的新操作第20方操作visibilityopName(param:操作visibilityopName(param:type=default,…):一个例子:–<<class>>new(SetsetCourseID(courseID:String)setStartTime(startTime:Time)setEndTime(endTime:Time)setDays(days:Enum)addProfessor(theProfessor:Professor)removeProfessor(theProfessor:Professor)offeringStillOpen():BooleangetNumberOfStudents():int第10方––一个例子:BorrowerInfo–<<class>>一个例子:BorrowerInfo–<<class>>+new(+setName(+setAddress(+addLoan(+removeLoan(+isAllowed():––第20方new(new(numStudents:=0;addProfessor(theProfessor:ProfessorifofferingStatus={offeringStatus:=assigned;}elseerrorState(removeProfessor(theProfessor:ifofferingStatus={offeringStatus:=unassigned;courseInstructor:=NULL;}elseerrorState(closeOffering(switch(offeringStatus{caseunassigned:cancelOffering();if(numStudentsminStudentscancelOffering(default:errorState();}第20方“继承”关系很清在对象设计阶段,需要进一步确定详细的关联关系、依赖关系和聚合关系等。不同对象之间的可“继承”关系很清在对象设计阶段,需要进一步确定详细的关联关系、依赖关系和聚合关系等。不同对象之间的可能连接:四种情况––––全局域第20Field第Field第20方根据“多重性”进行设计(multiplicity-情况1:Multiplicity=1或Multiplicity=–根据“多重性”进行设计(multiplicity-情况1:Multiplicity=1或Multiplicity=––••Department类中有一个属性Manager类中有一个属性–•只在关联关系发出的类中增加关联属性1第1方根据“多重性”进行设计情况2:Multiplicity>–根据“多重性”进行设计情况2:Multiplicity>–将1:n转化为若干个1:1–第2方情况:有些情况下,关联关系本身也可能具有属性,可以使用“关联类”将这种关系建模。举例:选情况:有些情况下,关联关系本身也可能具有属性,可以使用“关联类”将这种关系建模。举例:选课表Schedule与开设课程Design第1方1*1*第20方供应1*1*第20方供应**交买1*1*1111第10方供应**交1*1*1111第10方供应**交买步骤1:标识所有步骤1:标识所有与问题类相对应的设计类步骤2:确定所有与基础设施域相对应的步骤3:细化所有不能作为复用构件的设––––步骤3a:在类或构件的协作时说明消息步骤3b:为每一个构件确定适当的接步骤4:说明持久数据源(数据库和文件)并确定管理数据源所需要的类步骤6:细化部署图以提供额外的实现细节步骤7:考虑每一个构件级设计表示,并且时刻考虑其他选第20方1对象”只是存储在内存当中,而某些对象则需要永久性的存储起来;——持久性数据(persistent1对象”只是存储在内存当中,而某些对象则需要永久性的存储起来;——持久性数据(persistent关系数据库:数据是以表的形式存储在预先定义好的成为的类型面向对象数据库:存储策略的选择:第20方何时选择文何时何时选择文何时选择数何时选择关系数据––第1方如果使用关系数据库,那么需要一个子系统来完成应用系统中的对象和数据库中数据的映射与转换。第1如果使用关系数据库,那么需要一个子系统来完成应用系统中的对象和数据库中数据的映射与转换。第1方2OO核心问题:对那些需要永久性存储的数据,如何将类图映射为数据库模型。本质2OO核心问题:对那些需要永久性存储的数据,如何将类图映射为数据库模型。本质:把每一个类、类之间的关系分别映射到一张表或多张表;UMLclassdiagram→RationalDataBase两个方面将类(class)映射到表将关联关系(association)映射到表第1方最简单的映射策略——“一类一表”:表中的字段对应于最简单的映射策略——“一类一表”:表中的字段对应于类的属性,第20方Attribute不管是1:1、1:还是n的关联关系,均可以采用以下途径映射为关系数据表:–第不管是1:1、1:还是n的关联关系,均可以采用以下途径映射为关系数据表:–第20方Class Class将关联映射到关系数据库(1:1和m:n的关联关系Implementing1toForeignkeycanbeoneitherImplementing第1将关联映射到关系数据库(1:1和m:n的关联关系Implementing1toForeignkeycanbeoneitherImplementing第1方Class ClassA-B-Class Class将关联映射到关系数据库(1:n的关联关系Implementing第20方A-B-Class将关联映射到关系数据库(1:n的关联关系Implementing第20方A-B-Class ClassB-A-Class Class第10方Class Class第10方Class ClassClassA-B-Link-Person_Table第10方1Works-forPersonnameJobAttributeJobtitleAttributePerson_Table第10方1Works-forPersonnameJobAttributeJobtitleAttributeAttributeJobyAttributeAttribute实现方法:类似于1:n––“整体”“部分”第20实现方法:类似于1:n––“整体”“部分”第20方A-B-xy::::ClassA-XY:::Class为以下类图设计关系数据11第2为以下类图设计关系数据11第2方策略1:分别建立父类和子类的三张数据表Requiresajointo策略1:分别建立父类和子类的三张数据表Requiresajointogetthe策略:将子类的属性上移到父类所对应的数据表中,该表包括父类的属性、各子类的全部属性;策略3:将父类的属性下移到各个子类所对应的数据表中第1方SubSub???第10???第10方Example:第Example:第1方对象关系映射(ObjectRelationalMapping,对象关系映射(ObjectRelationalMapping,目前流行的ORM––––ApacheOJBJPA(JavaPersistence…第1方步骤1:标识所有步骤1:标识所有与问题类相对应的设计类步骤2:确定所有与基础设施域相对应的步骤3:细化所有不能作为复用构件的设––––步骤3a:在类或构件的协作时说明消息步骤3b:为每一个构件确定适当的接步骤4:说明持久数据源(数据库和文件)并确定管理数据源所需要的类步骤6:细化部署图以提供额外的实现细节步骤7:考虑每一个构件级设计表示,并且时刻考虑其他选第20方算法设计(程序算法设计(程序流程图第1方步骤1:标识所有步骤1:标识所有与问题类相对应的设计类步骤2:确定所有与基础设施域相对应的步骤3:细化所有不能作为复用构件的设––––步骤3a:在类或构件的协作时说明消息步骤3b:为每一个构件确定适当的接步骤4:说明持久数据源(数据库和文件)并确定管理数据源所需要的类步骤6:细化部署图以提供额外的实现细节步骤7:考虑每一个构件级设计表示,并且时刻考虑其他选第20方1为系统选择硬件配1为系统选择硬件配置和运将类、包、子系统分配到各个硬件节点上。系统通常使用分布式的多台硬件设备,通过UML的部署(deploymentdiagram)––第20方 第20方部署图(deployment–节点的命名:client、Application部署图(deployment–节点的命名:client、ApplicationServer、DatabaseServer、Mainframe等––部署图在两个层面––High-level:描述系统中各硬件之间的物理通讯第20方High-levelDeploymentHigh-levelDeploymentLow-levelDeploymentLow-levelDeployment第1方绘制部署图(deployment确定“节点–绘制部署图(deployment确定“节点–––对节点加上必要的“构造型使用UML确定“连接绘制配置图(deployment第1方Low-DiagramApplication设计类(design子系统构件<<web第20方Low-DiagramApplication设计类(design子系统构件<<web第20方步骤1:标识所有步骤1:标识所有与问题类相对应的设计类步骤2:确定所有与基础设施域相对应的步骤3:细化所有不能作为复用构件的设––––步骤3a:在类或构件的协作时说明消息步骤3b:为每一个构件确定适当的接步骤4:说明持久数据源(数据库和文件)并确定管理数据源所需要的类步骤6:细化部署图以提供额外的实现细节步骤7:考虑每一个构件级设计表示,并且时刻考虑其他选第20方迭代的设计过迭代的设计过考虑设计原应用设计模第1方检查“正确–––––检查“正确–––––检查“一致–––第20方检查“完整–––检查“完整––––检查“可行–––第20方设计建设计建第20方设计规格说明书(Software设计规格说明书(SoftwareDesignDescription,––第1方SDDSDD需求分析的产出详细设第20方SDD设计元素(Design–SDD设计元素(Design–––第10方设计元素(design设计元素是软件设计过程中被识别

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论