版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
UML建模语言及工具UML建模语言及工具面向对象的设计
Object-OrientedDesign面向对象的设计
Object-OrientedDesign学习线路图OOUMLOOAOOPDP…Case-Study………
……
……
……学习线路图3学习线路图OOUMLOOAOOPDP…Case-Study从需求到分析AnalysisworkflowAnalysisClass4从需求到分析AnalysisworkflowAnalysi从分析到设计DesignClassSubsystemAnalysisClassDesignworkflow5从分析到设计DesignClassSubsystemAna内容安排从分析到设计体系结构设计用例设计子系统设计类设计数据库设计6内容安排从分析到设计6分析VS.设计分析:做什么Analysisemphasizedthebusinessproblem设计:怎么做Designfocusesonthetechnicalorimplementationconcernsofthesystem分析模型虽然有效地确定了将要构建的内容,但是却没有包含足够的信息来定义如何构建系统,而面向对象的设计用来填补分析和实现之间的差距7分析VS.设计分析:做什么分析模型虽然有效地确定了将要构设计模型VS.分析模型-1需要维护两个模型吗?策略结果制作分析模型并精化成设计模型有了单独的设计模型,但失去了分析模型制作分析模型并精化成设计模型,然后用CASE工具重新获得分析模型有了单独的设计模型,但是用CASE工具重新获得的分析模型可能并不令人满意在细化阶段的某个点将分析模型冻结,然后把分析模型的一份拷贝精化成设计模型有了两个模型,但是它们步调不一致维护两个独立的模型—分析模型和设计模型有了两个模型,并且它们步调一致,但是这增加了维护的负担8设计模型VS.分析模型-1需要维护两个模型吗?策略结果制设计模型VS.分析模型-2需要保留分析模型吗?易于理解:分析模型提供系统的“大场景”,它可能只包括设计模型中的1%到10%的类价值:介绍新人加入项目在交付几个月或几年后重新理解系统理解系统是怎么满足客户需求以及提供可跟踪性计划维护和增强理解系统的逻辑架构外包系统的构造……9设计模型VS.分析模型-2需要保留分析模型吗?9设计模型VS.分析模型-3需要分别维护分析模型和设计模型的系统庞大的复杂的战略性的受经常变更所支配的期望长期运行的外包的10设计模型VS.分析模型-3需要分别维护分析模型和设计模型软件设计的定义IEEE1990:设计是体系结构、构件、接口、以及系统其它特征定义的过程11软件设计的定义IEEE1990:设计是体系结构、构件、接口更精确定义软件设计(的结果)必须描述系统的体系结构(architecture)系统如何分解(decompose)和组织(organize)构件描述构件间的接口(interface)描述构件(component):必须详细到可进一步构造的程度12更精确定义软件设计(的结果)必须12ISO/IEC12207按ISO/IEC12207软件开发生存周期过程,软件设计由两个活动组成软件体系结构设计-softwarearchitecturaldesign顶层设计(top-leveldesign)描述系统顶层的结构和组织标识各个构件软件详细设计-softwaredetaileddesign充分描述每个构件使之可以编码13ISO/IEC12207按ISO/IEC12207软件开软件设计的作用软件设计在软件系统开发过程中扮演重要角色开发者作出各种模型,形成实现时解决方案的蓝图对这些模型进行分析和评价,以判定是否满足各种需求便于考察备选方案和可行的替换措施设计模型也可用于规划后续的开发活动是编码和测试的输入连接需求和构造的桥梁14软件设计的作用软件设计在软件系统开发过程中扮演重要角色连接需RUP中的分析和设计工作流分析
Analysis设计
Design15RUP中的分析和设计工作流分析
Analysis设计
D内容安排从分析到设计体系结构设计用例设计子系统设计类设计数据库设计16内容安排从分析到设计16为什么需要体系结构我们所定义的类或者对象其关注的重点是定义了一个系统的核心概念和行为一个系统是由多个子系统组成,每个子系统中的领域对象都不只一个这些类如何组织、分布并协同完成所需的功能?因此系统应该要有一个总体的体系结构,它定义了各子系统之间的通信和耦合体系结构包图(architecturepackagediagram)17为什么需要体系结构我们所定义的类或者对象其关注的重点是定义了软件体系结构定义软件体系结构描述软件系统的子系统和构件及其相互关系UMLReferenceManual:体系结构是一个系统的组织结构,包括系统分解成的各个部分、它们的连接性、交互机制和通知系统设计的向导规则软件体系结构将多组类结合起来,形成一个有机的整体,并且展示各部分之间结构上的相互关系18软件体系结构定义软件体系结构描述软件系统的子系统和构件及其相软件体系结构风格体系结构风格style提供软件系统高层组织的元模型通用结构:分层、管道过滤器、黑板分布式系统:客户-服务器、三层、中介交互式系统:MVC、表示-抽象-控制可适配系统:微内核、反映式其它:批处理、解释器、进程控制、基于规则19软件体系结构风格体系结构风格style19UML和体系结构体系结构的全部内容就是复杂性管理:将解决方案划分成多个小的组成部分,再将这些小的部分结合起来,构成更大的、更加一致的结构包(package)包依赖关系图(packagedependencydiagram)子系统(subsystem)层(layer)20UML和体系结构体系结构的全部内容就是复杂性管理:将解决方案包-package包是一种将模型元素分组的机制包主要用于组织模型元素配置管理单元分包的原则职责相似:将一组职责相似、但以不同方式实现的类归为一组有意义的包;如java类库中的javax.swing.border协作关系:包含了各种不同类型的类,它们之间通过相互协作实现一个意义重大的职责21包-package包是一种将模型元素分组的机制21包依赖关系包之间存在着依赖关系如果Client包依赖于Supplier包:Supplier包的改变将影响到Client包Client包不能够独立的重用,因为它依赖于Supplier包22包依赖关系包之间存在着依赖关系22避免循环依赖循环依赖使得任何一个包都不能独立的重用,修改任何一个包都会引起所有的包的变化23避免循环依赖循环依赖使得任何一个包都不能独立的重用,修改任何体系结构设计过程1.确立目标2.将类分组3.展示技术4.抽取子系统5.针对准则和目标对体系结构进行评估24体系结构设计过程1.确立目标241.确立目标一个好的体系结构其实是不断权衡、妥协、折衷的产物可扩展性可维护性可靠性可伸缩性……251.确立目标一个好的体系结构其实是不断权衡、妥协、折衷的产2.将类分组并评估各个类将分析类划分成几个候选包,并对它们的内聚性进行评估目标是使每个包具有清晰的且严格定义的目的和职责结合体系结构模式,考虑分组方式实体类用户界面类控制类系统接口类……描述包之间的耦合度:包依赖关系图262.将类分组并评估各个类将分析类划分成几个候选包,并对它们考勤卡系统的体系结构包图27考勤卡系统的体系结构包图273.展示技术283.展示技术284.抽取子系统294.抽取子系统295.针对准则和目标进行评估305.针对准则和目标进行评估30内容安排从分析到设计体系结构设计用例设计子系统设计类设计数据库设计31内容安排从分析到设计31用例设计DesignworkflowUseCase32用例设计DesignworkflowUseCase32从分析类到设计元素33从分析类到设计元素33用例实现(设计)将设计应用于用例1.结合设计元素,定义设计对象间的交互(交互图)2.利用子系统简化交互图3.描述与持久化相关的行为4.检查用例事件流的实现5.评价类和子系统34用例实现(设计)将设计应用于用例34交互图的设计:职责分配利用设计元素,进行类的职责分配,完成用例实现的交互图职责分配模式:GRASP(GeneralResponsibilityAssignmentSoftwarePattern)模式专家模式、创建者模式(老板原则)、高内聚、低耦合、控制者多态、纯虚构、中介者、不要和陌生人讲话(可视原则)35交互图的设计:职责分配利用设计元素,进行类的职责分配,完成用GRASP:不要和陌生人讲话
(可视原则)解决方案分配职责给一个客户端的直接对象以使它与一个间接对象进行协作,这样客户端无需知道这个间接对象这个模式也被称为Demeter准则,在那些你需要在其上发送消息的对象上面放置一些限制条件,它表明在一个方法中,消息只能发往下面的对象:对象本身;方法的一个参数;对象本身的属性;对象本身的一个属性集合中的元素;该方法内创建的对象优点低耦合36GRASP:不要和陌生人讲话
(可视原则)解决方案36内容安排从分析到设计体系结构设计用例设计子系统设计类设计37内容安排从分析到设计37子系统与接口子系统是一种介于包和类之间的一种设计机制,它实现一个或多个接口所定义的行为具有包的语义:能够包含其它模型元素具有类的语义:具有行为38子系统与接口子系统是一种介于包和类之间的一种设计机制,它实现子系统的作用完全封装了行为利用清晰的接口代表所拥有的能力可以定义不同的实现39子系统的作用完全封装了行为39子系统VS.包子系统:提供行为完全封装实现细节容易替换包:不提供行为不完全封装实现细节难以替换关键在于封装40子系统VS.包子系统:包:关键在于封装40子系统的主要用途子系统可以将系统划分成独立的部分,以利于:开发,只要保持接口不变部署到不同分布的节点上变更,而不影响到其它系统在设计阶段,子系统还可用于打包遗留系统子系统代表了粗粒度的组件41子系统的主要用途子系统可以将系统划分成独立的部分,以利于:4子系统的设计原则目标松散耦合可替换的,plug-and-play隔离变更自身可独立的改进好的建议不要暴露细节,只有接口仅依赖于接口42子系统的设计原则目标42子系统的设计步骤将子系统的行为分发到各个子系统元素中:分发子系统的职责描述子系统中的元素描述子系统的依赖关系43子系统的设计步骤将子系统的行为分发到各个子系统元素中:分发子接口设计接口说明了一组操作,隐藏子系统的实现细节在GoF的23种设计模式中,Facade模式是一种很好的接口的设计模式确定系统的内聚部分将这些打包到一个<<subsystem>>为该子系统设计接口44接口设计接口说明了一组操作,隐藏子系统的实现细节44考勤卡系统中的子系统设计利用子系统来打包遗留系统45考勤卡系统中的子系统设计利用子系统来打包遗留系统45内容安排从分析到设计体系结构设计用例设计子系统设计类设计46内容安排从分析到设计46设计类设计类设计模型的构造块设计类是已经完成了规格说明并且达到能够被实现程度的类来源于问题域和解域通过分析类的精化得到的问题域—添加实现细节解域,提供了能够实现系统的技术工具47设计类设计类47设计类剖析在分析中,只要尽量捕获系统需要的行为,而完全不必考虑如何去实现这些行为在设计中,则必须准确地说明类是如何履行它们的职责完整的属性集合,包括详细说明的名称、类型、可视性和一些默认值将分析类指定的职责转化成一个或多个方法的完整集合48设计类剖析在分析中,只要尽量捕获系统需要的行为,而完全不必考良好的设计类类的公共方法定义它和类用户之间的契约通常要从类用户的角度去评估类的目的基本特征完整性和充分性原始性高内聚低耦合49良好的设计类类的公共方法定义它和类用户之间的契约49类设计的主要工作定义类的操作类的职责定义类的方法和状态方法:操作的实现状态:对象的状态如何影响它的行为(状态图)定义类的属性定义类之间的关系50类设计的主要工作定义类的操作50类之间的关系依赖关系关联关系聚合关系组合关系泛化关系低耦合度
高51类之间的关系依赖关系低51关联关系的表示方法关联具有:名称、多重性表达式、导航符号、角色名称名称:动词短语多重性表达式:*,1..*,1-40,5,3,5,8,…导航符号角色名称52关联关系的表示方法关联具有:名称、多重性表达式、导航符号、角聚合关系示例一台Computer可能连接到0..n台Printers
任何时候一台Printer连接到0..1台Computer随着时间推移,许多台Computers可以使用一台给定的Printer即使没有所连接的Computers,那台Printer也可以生存在非常客观的意义上,那台Printer是独立于那台Computer的聚合有时能够不依赖部分而存在,有时又不能部分可以独立于聚合而存在如果有一部分遗失,聚合会给人一种不完整的感觉部分的所有权可以由几个聚合共享53聚合关系示例一台Computer可能连接到0..n台Pri组合关系示例
Button离开Mouse对象则不能独立存在销毁Mouse则也销毁Mouse,因为它们是Mouse对象整体的一个部分每个Button只能仅仅属于一个Mouse(如树和树叶)部分在某一时刻仅仅只能属于一个组成组成唯一地负责处理它的所有部分—负责它们的创建和销毁倘若对于部分的职责有由其他的对象来承担的话,组合也可以放松这些职责如果一个组成销毁的话,它必须将它所有的部分销毁,或者把负责处理它们的权力交给其他的一些对象54组合关系示例Button离开Mouse对象则不能独立存在部泛化关系只有在两个设计类之间存在清晰明确的“isa”关系或为了复用代码才使用继承(但是注意不要因此引入耦合)缺点类间可能耦合的最强形式:派生类会继承基类的属性、方法、关系类层次中的封装是脆弱的,它会导致“脆弱基类”问题—基类的改动会直接波及底下的层次在大多数语言中,继承非常不易改变—关系是在编译时确定的,关系在运行时是固定的55泛化关系只有在两个设计类之间存在清晰明确的“isa”关系或可见性问题动机:对象A若要对对象B发送消息,那么对象B必须对对象A可见可见性(Visibility)是一个对象“看到”或者引用另一个对象的能力;更一般地讲,可见性与问题的范围有关:一个资源(如一个实例)是否在另一个资源的范围之内?从对象A到对象B通常有四种可见性:属性可见性(attribute):B是A的一个属性参数可见性(parameter):B是A中一个方法的参数局部声明可见性(local):B在A的一个方法中被声明为一个局部对象全局可见性(global):B在某种程度上全局可见56可见性问题动机:对象A若要对对象B发送消息,那么对象B必须对属性可见性
publicclassHost{privateDogdog;}57属性可见性publicclassHost57参数可见性从ShowMails到Mails的参数可见性publicclassShowMails{
staticintputMails(Mailsmail){ if(currentMails>=maxMails) { System.out.println("Mailboxoverwhelmed!"); return-1; } showList[currentMails]=mail; currentMails++; returncurrentMails; }}58参数可见性从ShowMails到Mails的参数可见性58局部声明可见性从Show到Mails的局部声明可见性publicclassShow{
publicstaticvoidmain(Stringargs[]) { Mailsnewmail;
………….}} 59局部声明可见性从Show到Mails的局部声明可见性59全局可见性60全局可见性60可见性问题示例//属性可见性classPOST{…privateProductCatalogprodCatalog;…publicvoidenterItem(intupc,intqty){…spec:=prodCatalog.getSpecification(upc);…}…}//参数可见性classSale{……publicvoidmakeLineItem(ProductSpecificationspec,intqty){………}…}//局部声明可见性classPOST{…publicvoidenterItem(intupc,intqty){…
ProductSpecificationspec=prodCatalog.getSpecification(upc);…}…}61可见性问题示例//属性可见性//参数可见性//局部声明可见性内容安排从分析到设计体系结构设计用例设计子系统设计类设计从设计模型到代码实现62内容安排从分析到设计62设计模型与代码实现编写代码形成软件软件最终需要代码来实现模型只是为代码实现提供支持目前尚未产生成熟的可执行模型正向工程(Forwardengineering)由设计类图导出框架代码由交互图创建方法实现逆向工程(Reverseengineering)由源代码导出设计模型63设计模型与代码实现编写代码形成软件63正向工程-生存框架代码什么是框架代码?代码在设计上的初步实现类的框架代码包括那些?属性值定义:名称、类型、缺省值等方法定义:名称、参数、返回类型等引用关系……根据设计类图产生框架代码用方法和简单属性定义一个类加入引用属性:角色名定义引用属性64正向工程-生存框架代码什么是框架代码?64从设计类图产生框架代码-11.用方法和简单属性定义一个类(属性、方法、构造函数)65从设计类图产生框架代码-11.用方法和简单属性定义一个类(从设计类图产生框架代码-22.加入引用属性(引用属性referenceattribute:关联和导航;角色名rolename)66从设计类图产生框架代码-22.加入引用属性(引用属性refRose支持框架代码的导出利用Rose由设计类图生成框架代码(Java)新建一个基于J2SE的应用程序选择缺省的语言为Java利用Rose建模开始导出工作:类的语法检查设置导出路径ClassPath导出框架代码主要问题:设计模型开发不够完善,无法导出代码67Rose支持框架代码的导出利用Rose由设计类图生成框架代码其它问题-一对多关系的实现68其它问题-一对多关系的实现68正向工程-创建方法实现一个交互图显示出了响应方法调用而产生的消息传递;这些消息序列可以被翻译成方法实现中的一系列语句由顺序图产生方法实现由协作图产生方法实现69正向工程-创建方法实现一个交互图显示出了响应方法调用而产生的示例-POST类enterItem方法实现//1.1创建Sale实例if(isNewSale()){sale=newSale();}//1.2获得ProductSpecificationProductSpecificationspec=productCatalog.getSpecification(upc);//1.3添加销售项sale.makeLineItem(spec,qty);publicvoidenterItem(intupc,intqty){if(isNewSale()){sale=newSale();}ProductSpecificationspec=productCatalog.getSpecification(upc);sale.makeLineItem(spec,qty);}由顺序图产生实现代码70示例-POST类enterItem方法实现//1.1创建SaUML建模语言及工具UML建模语言及工具面向对象的设计
Object-OrientedDesign面向对象的设计
Object-OrientedDesign学习线路图OOUMLOOAOOPDP…Case-Study………
……
……
……学习线路图73学习线路图OOUMLOOAOOPDP…Case-Study从需求到分析AnalysisworkflowAnalysisClass74从需求到分析AnalysisworkflowAnalysi从分析到设计DesignClassSubsystemAnalysisClassDesignworkflow75从分析到设计DesignClassSubsystemAna内容安排从分析到设计体系结构设计用例设计子系统设计类设计数据库设计76内容安排从分析到设计6分析VS.设计分析:做什么Analysisemphasizedthebusinessproblem设计:怎么做Designfocusesonthetechnicalorimplementationconcernsofthesystem分析模型虽然有效地确定了将要构建的内容,但是却没有包含足够的信息来定义如何构建系统,而面向对象的设计用来填补分析和实现之间的差距77分析VS.设计分析:做什么分析模型虽然有效地确定了将要构设计模型VS.分析模型-1需要维护两个模型吗?策略结果制作分析模型并精化成设计模型有了单独的设计模型,但失去了分析模型制作分析模型并精化成设计模型,然后用CASE工具重新获得分析模型有了单独的设计模型,但是用CASE工具重新获得的分析模型可能并不令人满意在细化阶段的某个点将分析模型冻结,然后把分析模型的一份拷贝精化成设计模型有了两个模型,但是它们步调不一致维护两个独立的模型—分析模型和设计模型有了两个模型,并且它们步调一致,但是这增加了维护的负担78设计模型VS.分析模型-1需要维护两个模型吗?策略结果制设计模型VS.分析模型-2需要保留分析模型吗?易于理解:分析模型提供系统的“大场景”,它可能只包括设计模型中的1%到10%的类价值:介绍新人加入项目在交付几个月或几年后重新理解系统理解系统是怎么满足客户需求以及提供可跟踪性计划维护和增强理解系统的逻辑架构外包系统的构造……79设计模型VS.分析模型-2需要保留分析模型吗?9设计模型VS.分析模型-3需要分别维护分析模型和设计模型的系统庞大的复杂的战略性的受经常变更所支配的期望长期运行的外包的80设计模型VS.分析模型-3需要分别维护分析模型和设计模型软件设计的定义IEEE1990:设计是体系结构、构件、接口、以及系统其它特征定义的过程81软件设计的定义IEEE1990:设计是体系结构、构件、接口更精确定义软件设计(的结果)必须描述系统的体系结构(architecture)系统如何分解(decompose)和组织(organize)构件描述构件间的接口(interface)描述构件(component):必须详细到可进一步构造的程度82更精确定义软件设计(的结果)必须12ISO/IEC12207按ISO/IEC12207软件开发生存周期过程,软件设计由两个活动组成软件体系结构设计-softwarearchitecturaldesign顶层设计(top-leveldesign)描述系统顶层的结构和组织标识各个构件软件详细设计-softwaredetaileddesign充分描述每个构件使之可以编码83ISO/IEC12207按ISO/IEC12207软件开软件设计的作用软件设计在软件系统开发过程中扮演重要角色开发者作出各种模型,形成实现时解决方案的蓝图对这些模型进行分析和评价,以判定是否满足各种需求便于考察备选方案和可行的替换措施设计模型也可用于规划后续的开发活动是编码和测试的输入连接需求和构造的桥梁84软件设计的作用软件设计在软件系统开发过程中扮演重要角色连接需RUP中的分析和设计工作流分析
Analysis设计
Design85RUP中的分析和设计工作流分析
Analysis设计
D内容安排从分析到设计体系结构设计用例设计子系统设计类设计数据库设计86内容安排从分析到设计16为什么需要体系结构我们所定义的类或者对象其关注的重点是定义了一个系统的核心概念和行为一个系统是由多个子系统组成,每个子系统中的领域对象都不只一个这些类如何组织、分布并协同完成所需的功能?因此系统应该要有一个总体的体系结构,它定义了各子系统之间的通信和耦合体系结构包图(architecturepackagediagram)87为什么需要体系结构我们所定义的类或者对象其关注的重点是定义了软件体系结构定义软件体系结构描述软件系统的子系统和构件及其相互关系UMLReferenceManual:体系结构是一个系统的组织结构,包括系统分解成的各个部分、它们的连接性、交互机制和通知系统设计的向导规则软件体系结构将多组类结合起来,形成一个有机的整体,并且展示各部分之间结构上的相互关系88软件体系结构定义软件体系结构描述软件系统的子系统和构件及其相软件体系结构风格体系结构风格style提供软件系统高层组织的元模型通用结构:分层、管道过滤器、黑板分布式系统:客户-服务器、三层、中介交互式系统:MVC、表示-抽象-控制可适配系统:微内核、反映式其它:批处理、解释器、进程控制、基于规则89软件体系结构风格体系结构风格style19UML和体系结构体系结构的全部内容就是复杂性管理:将解决方案划分成多个小的组成部分,再将这些小的部分结合起来,构成更大的、更加一致的结构包(package)包依赖关系图(packagedependencydiagram)子系统(subsystem)层(layer)90UML和体系结构体系结构的全部内容就是复杂性管理:将解决方案包-package包是一种将模型元素分组的机制包主要用于组织模型元素配置管理单元分包的原则职责相似:将一组职责相似、但以不同方式实现的类归为一组有意义的包;如java类库中的javax.swing.border协作关系:包含了各种不同类型的类,它们之间通过相互协作实现一个意义重大的职责91包-package包是一种将模型元素分组的机制21包依赖关系包之间存在着依赖关系如果Client包依赖于Supplier包:Supplier包的改变将影响到Client包Client包不能够独立的重用,因为它依赖于Supplier包92包依赖关系包之间存在着依赖关系22避免循环依赖循环依赖使得任何一个包都不能独立的重用,修改任何一个包都会引起所有的包的变化93避免循环依赖循环依赖使得任何一个包都不能独立的重用,修改任何体系结构设计过程1.确立目标2.将类分组3.展示技术4.抽取子系统5.针对准则和目标对体系结构进行评估94体系结构设计过程1.确立目标241.确立目标一个好的体系结构其实是不断权衡、妥协、折衷的产物可扩展性可维护性可靠性可伸缩性……951.确立目标一个好的体系结构其实是不断权衡、妥协、折衷的产2.将类分组并评估各个类将分析类划分成几个候选包,并对它们的内聚性进行评估目标是使每个包具有清晰的且严格定义的目的和职责结合体系结构模式,考虑分组方式实体类用户界面类控制类系统接口类……描述包之间的耦合度:包依赖关系图962.将类分组并评估各个类将分析类划分成几个候选包,并对它们考勤卡系统的体系结构包图97考勤卡系统的体系结构包图273.展示技术983.展示技术284.抽取子系统994.抽取子系统295.针对准则和目标进行评估1005.针对准则和目标进行评估30内容安排从分析到设计体系结构设计用例设计子系统设计类设计数据库设计101内容安排从分析到设计31用例设计DesignworkflowUseCase102用例设计DesignworkflowUseCase32从分析类到设计元素103从分析类到设计元素33用例实现(设计)将设计应用于用例1.结合设计元素,定义设计对象间的交互(交互图)2.利用子系统简化交互图3.描述与持久化相关的行为4.检查用例事件流的实现5.评价类和子系统104用例实现(设计)将设计应用于用例34交互图的设计:职责分配利用设计元素,进行类的职责分配,完成用例实现的交互图职责分配模式:GRASP(GeneralResponsibilityAssignmentSoftwarePattern)模式专家模式、创建者模式(老板原则)、高内聚、低耦合、控制者多态、纯虚构、中介者、不要和陌生人讲话(可视原则)105交互图的设计:职责分配利用设计元素,进行类的职责分配,完成用GRASP:不要和陌生人讲话
(可视原则)解决方案分配职责给一个客户端的直接对象以使它与一个间接对象进行协作,这样客户端无需知道这个间接对象这个模式也被称为Demeter准则,在那些你需要在其上发送消息的对象上面放置一些限制条件,它表明在一个方法中,消息只能发往下面的对象:对象本身;方法的一个参数;对象本身的属性;对象本身的一个属性集合中的元素;该方法内创建的对象优点低耦合106GRASP:不要和陌生人讲话
(可视原则)解决方案36内容安排从分析到设计体系结构设计用例设计子系统设计类设计107内容安排从分析到设计37子系统与接口子系统是一种介于包和类之间的一种设计机制,它实现一个或多个接口所定义的行为具有包的语义:能够包含其它模型元素具有类的语义:具有行为108子系统与接口子系统是一种介于包和类之间的一种设计机制,它实现子系统的作用完全封装了行为利用清晰的接口代表所拥有的能力可以定义不同的实现109子系统的作用完全封装了行为39子系统VS.包子系统:提供行为完全封装实现细节容易替换包:不提供行为不完全封装实现细节难以替换关键在于封装110子系统VS.包子系统:包:关键在于封装40子系统的主要用途子系统可以将系统划分成独立的部分,以利于:开发,只要保持接口不变部署到不同分布的节点上变更,而不影响到其它系统在设计阶段,子系统还可用于打包遗留系统子系统代表了粗粒度的组件111子系统的主要用途子系统可以将系统划分成独立的部分,以利于:4子系统的设计原则目标松散耦合可替换的,plug-and-play隔离变更自身可独立的改进好的建议不要暴露细节,只有接口仅依赖于接口112子系统的设计原则目标42子系统的设计步骤将子系统的行为分发到各个子系统元素中:分发子系统的职责描述子系统中的元素描述子系统的依赖关系113子系统的设计步骤将子系统的行为分发到各个子系统元素中:分发子接口设计接口说明了一组操作,隐藏子系统的实现细节在GoF的23种设计模式中,Facade模式是一种很好的接口的设计模式确定系统的内聚部分将这些打包到一个<<subsystem>>为该子系统设计接口114接口设计接口说明了一组操作,隐藏子系统的实现细节44考勤卡系统中的子系统设计利用子系统来打包遗留系统115考勤卡系统中的子系统设计利用子系统来打包遗留系统45内容安排从分析到设计体系结构设计用例设计子系统设计类设计116内容安排从分析到设计46设计类设计类设计模型的构造块设计类是已经完成了规格说明并且达到能够被实现程度的类来源于问题域和解域通过分析类的精化得到的问题域—添加实现细节解域,提供了能够实现系统的技术工具117设计类设计类47设计类剖析在分析中,只要尽量捕获系统需要的行为,而完全不必考虑如何去实现这些行为在设计中,则必须准确地说明类是如何履行它们的职责完整的属性集合,包括详细说明的名称、类型、可视性和一些默认值将分析类指定的职责转化成一个或多个方法的完整集合118设计类剖析在分析中,只要尽量捕获系统需要的行为,而完全不必考良好的设计类类的公共方法定义它和类用户之间的契约通常要从类用户的角度去评估类的目的基本特征完整性和充分性原始性高内聚低耦合119良好的设计类类的公共方法定义它和类用户之间的契约49类设计的主要工作定义类的操作类的职责定义类的方法和状态方法:操作的实现状态:对象的状态如何影响它的行为(状态图)定义类的属性定义类之间的关系120类设计的主要工作定义类的操作50类之间的关系依赖关系关联关系聚合关系组合关系泛化关系低耦合度
高121类之间的关系依赖关系低51关联关系的表示方法关联具有:名称、多重性表达式、导航符号、角色名称名称:动词短语多重性表达式:*,1..*,1-40,5,3,5,8,…导航符号角色名称122关联关系的表示方法关联具有:名称、多重性表达式、导航符号、角聚合关系示例一台Computer可能连接到0..n台Printers
任何时候一台Printer连接到0..1台Computer随着时间推移,许多台Computers可以使用一台给定的Printer即使没有所连接的Computers,那台Printer也可以生存在非常客观的意义上,那台Printer是独立于那台Computer的聚合有时能够不依赖部分而存在,有时又不能部分可以独立于聚合而存在如果有一部分遗失,聚合会给人一种不完整的感觉部分的所有权可以由几个聚合共享123聚合关系示例一台Computer可能连接到0..n台Pri组合关系示例
Button离开Mouse对象则不能独立存在销毁Mouse则也销毁Mouse,因为它们是Mouse对象整体的一个部分每个Button只能仅仅属于一个Mouse(如树和树叶)部分在某一时刻仅仅只能属于一个组成组成唯一地负责处理它的所有部分—负责它们的创建和销毁倘若对于部分的职责有由其他的对象来承担的话,组合也可以放松这些职责如果一个组成销毁的话,它必须将它所有的部分销毁,或者把负责处理它们的权力交给其他的一些对象124组合关系示例Button离开Mouse对象则不能独立存在部泛化关系只有在两个设计类之间存在清晰明确的“isa”关系或为了复用代码才使用继承(但是注意不要因此引入耦合)缺点类间可能耦合的最强形式:派生类会继承基类的属性、方法、关系类层次中的封装是脆弱的,它会导致“脆弱基类”问题—基类的改动会直接波及底下的层次在大多数语言中,继承非常不易改变—关系是在编译时确定的,关系在运行时是固定的125泛化关系只有在两个设计类之间存在清晰明确的“isa”关系或可见性问题动机:对象A若要对对象B发送消息,那么对象B必须对对象A可见可见性(Visibility)是一个对象“看到”或者引用另一个对象的能力;更一般地讲,可见性与问题的范围有关:一个资源(如一个实例)是否在另一个资源的范围之内?从对象A到对象B通常有四种可见性:属性可见性(attribute):B是A的一个属性参数可见性(parameter):B是A中一个方法的参数局部声明可见性(local):B在A的一个方法中被声明为一个局部对象全局可见性(global):B在某种程度上全局可见126可见性问题动机:对象A若要对对象B发送消息,那么对象B必须对属性可见性
publicclassHost{privateDogdog;}127属性可见性publicclassHost57参数可见性从ShowMails到Mails的参数可见性publicclassShowMails{
staticintputMails(Mailsmail){ if(currentMails>=maxMails) { System.out.println("Mailboxoverwhelmed!"); return-1; } showList[currentMails]=mail; currentMails++; returncurrentMails; }}128参数可见性从ShowMails到Mails的参数可见性58局部声明可见性从Show到Mails的局部声明可见性publicclassShow{
publicstaticvoidmain(Stringargs[]) { Mailsnewmail;
………….}} 129局部声明可见性从Sho
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年及未来5年市场数据中国健身工作室行业发展监测及发展趋势预测报告
- 音效设计工作室线下对接实施办法
- 某发动机厂固体火灾处置办法
- 某轮胎厂轮胎脱模操作细则
- 2026广东珠海香洲暨大幼教集团新城园区(新城幼儿园)合同制专任教师招聘1人备考题库及答案详解(名师系列)
- 2026山东中医药大学附属医院招聘高级岗位工作人员2人备考题库及答案详解(有一套)
- 2026四川省国投资产托管有限责任公司招聘1人备考题库及答案详解(各地真题)
- 2026上半年安徽事业单位联考铜陵市义安区招聘27人备考题库带答案详解(完整版)
- 2026广西国土规划集团招聘2人备考题库附参考答案详解(培优)
- 2026新疆双河市新赛股份公司招聘1人备考题库含答案详解(黄金题型)
- 3D打印技术及应用-课件 2.2 典型3D打印技术-熔融沉积成型(FDM)技术
- 初中道德与法治课开展议题式教学实践研究
- 交通运输类硕士毕业论文
- 压轴训练:全等三角形(多解、动点、新定义型压轴)(原卷版)
- 极兔快递合作合同协议书
- 加油站安全环保课件
- co中毒迟发性脑病诊断与治疗中国专家共识解读
- 新版预算管理制度
- 2024版人教版八年级上册英语单词表(含音标完整版)
- “转作风、换脑子、促管理”集中整顿工作心得体会
- 提高幕墙主龙骨安装合格率(QC)
评论
0/150
提交评论