您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 9.技术架构视图-设计原则与模式
技术架构视图技术架构视图--设计原则与模式设计原则与模式胡协刚软件架构师UML/RUP专家2¾¾面向对象设计原则面向对象设计原则¾¾对象集合视角下的开闭原则对象集合视角下的开闭原则¾¾正方形悖论与正方形悖论与LiskovLiskov替换原则替换原则¾¾GRASPGRASP模式模式内容提要内容提要面向对象设计原则面向对象设计原则499一个软件系统开始坏死时表现的症状有:一个软件系统开始坏死时表现的症状有:••硬化硬化RigidityRigidity————系统变得越来越难以变更,修复系统变得越来越难以变更,修复或增添新功能的代价高昂;或增添新功能的代价高昂;••脆弱脆弱FFragilityragility————对系统的任何哪怕是微小的变对系统的任何哪怕是微小的变更都可能造成四处(甚至是与变更处没有逻辑上的更都可能造成四处(甚至是与变更处没有逻辑上的关联之处)崩溃;关联之处)崩溃;••绑死绑死ImmobilityImmobility————抽取系统的任何部分用来复用抽取系统的任何部分用来复用都非常困难;都非常困难;••胶着胶着ViscosityViscosity————以与原有设计保持一致的方式以与原有设计保持一致的方式来对实施变更已经非常困难,诱使开发人员绕过它来对实施变更已经非常困难,诱使开发人员绕过它选择容易但有害的途径,其结果却使系统死的更选择容易但有害的途径,其结果却使系统死的更快。快。软件系统开始坏死的症状软件系统开始坏死的症状599软件系统最关键的质量特性有:软件系统最关键的质量特性有:••正确性正确性correctnesscorrectness••健壮性健壮性robustnessrobustness••可扩展性可扩展性extensibilityextensibility••可复用性可复用性reusabilityreusability99软件系统其它重要的质量特性有:软件系统其它重要的质量特性有:••兼容性兼容性compatibilitycompatibility••可移植性可移植性portabilityportability••易用性易用性easeofuseeaseofuse••高效性高效性efficiencyefficiency••timeliness,economyandfunctionalitytimeliness,economyandfunctionality软件质量软件质量699类的设计原则:类的设计原则:开闭原则、依赖倒置原则、开闭原则、依赖倒置原则、LiskovLiskov替换原则、单一替换原则、单一职责原则、接口分离原则、组合复用原则、所知最职责原则、接口分离原则、组合复用原则、所知最少原则少原则99包内聚原则:包内聚原则:发布与复用等价原则、共同封闭原则、共同复用原发布与复用等价原则、共同封闭原则、共同复用原则则99包耦合原则:包耦合原则:无循环的依赖原则、稳定的依赖原则、稳定的抽象无循环的依赖原则、稳定的依赖原则、稳定的抽象原则原则面向对象设计的基本原则面向对象设计的基本原则7zz开闭原则(开闭原则(OpenClosedPrincipleOpenClosedPrinciple))————对扩展对扩展开放而对变更封闭开放而对变更封闭openforextensionbutopenforextensionbutclosedformodificationclosedformodificationzz依赖倒置原则(依赖倒置原则(DependencyInversionDependencyInversionPrinciplePrinciple))————依赖于抽象类而非具体类依赖于抽象类而非具体类dependdependuponabstractionsbutconcretionsuponabstractionsbutconcretions(客户代码(客户代码依赖于具体类之上的基类的共性行为,相对于按顺依赖于具体类之上的基类的共性行为,相对于按顺序从下面依赖而言是一种倒置)序从下面依赖而言是一种倒置)zzLiskovLiskov替换原则(替换原则(LiskovLiskovSubstitutionSubstitutionPrinciplePrinciple))————子类应当能完全替代其基类(的子类应当能完全替代其基类(的行为)行为)subclassesshouldbesubstitutableforsubclassesshouldbesubstitutablefortheirbaseclassestheirbaseclasses类的设计原则类的设计原则8zz单一职责原则(单一职责原则(SingleResponsibilitySingleResponsibilityPrinciplePrinciple))————一个类只应当承担单一和集中的一个类只应当承担单一和集中的职责,这样引发类进行变更的原因只有一个职责,这样引发类进行变更的原因只有一个AAclassshouldhaveone,andonlyone,reasonclassshouldhaveone,andonlyone,reasontochangetochangezz接口分离原则(接口分离原则(InterfaceSegregationInterfaceSegregationPrinciplePrinciple))————为客户为客户clientclient提供多个特定的接提供多个特定的接口好过一个多种用途集于一身的接口,即客户不被口好过一个多种用途集于一身的接口,即客户不被强制依赖于其不需要(不使用)的操作强制依赖于其不需要(不使用)的操作manymanyclientspecificinterfacesarebetterthanclientspecificinterfacesarebetterthanonegeneralpurposeinterfaceonegeneralpurposeinterface类的设计原则类的设计原则9zz组合复用原则(组合复用原则(CompositeReusePrincipleCompositeReusePrinciple))————尽可能地使用对象的多态组合而非继承(来实现尽可能地使用对象的多态组合而非继承(来实现复用)复用)favorpolymorphiccompositionoffavorpolymorphiccompositionofobjectsoverinheritanceobjectsoverinheritancezz所知最少原则(所知最少原则(PrincipleofLeastPrincipleofLeastKnowledgeKnowledge))————一个类的操作实现中,只应调用一个类的操作实现中,只应调用下列对象的操作:它自己、作为参数传入的对象、下列对象的操作:它自己、作为参数传入的对象、它创建的对象、它包含的对象它创建的对象、它包含的对象foranoperationforanoperationonaclass,onlyoperationsonthefollowingonaclass,onlyoperationsonthefollowingobjectsshouldbecalled:itself,itsobjectsshouldbecalled:itself,itsparameters,objectitcreates,oritsparameters,objectitcreates,oritscontainedinstanceobjectscontainedinstanceobjects类的设计原则类的设计原则1099发布与复用等价原则(发布与复用等价原则(ReleaseReuseReleaseReuseEquivalencyPrincipleEquivalencyPrinciple))————软件复用的粒度与软件复用的粒度与发布包等价发布包等价thegranuleofreuseisthethegranuleofreuseisthegranuleofreleasegranuleofrelease99共同封闭原则(共同封闭原则(CommonClosurePrincipleCommonClosurePrinciple))————一道发生变更的类应当属于同一个包一道发生变更的类应当属于同一个包classesthatclassesthatchangetogether,belongtogetherchangetogether,belongtogether99共同复用原则(共同复用原则(CommonReusePrincipleCommonReusePrinciple))————那那些不被一起复用的类不应当分组到同一个包中些不被一起复用的类不应当分组到同一个包中classesthatarenclassesthataren’’treusedtogethershouldtreusedtogethershouldnotbegroupedtogethernotbegroupedtogether包内聚原则包内聚原则1199无循环的依赖原则(无循环的依赖原则(AcyclicDependenciesAcyclicDependenciesPrinciplePrinciple))————包与包之间的依赖关系不能造成包与包之间的依赖关系不能造成循环循环thedependenciesbetweenpackagesmustthedependenciesbetweenpackagesmustnotformcyclesnotformcycles99稳定依赖原则(稳定依赖原则(StableDependenciesStableDependenciesPrinciplePrinciple))————包依赖的方向应当指向其它更稳包依赖的方向应当指向其它更稳定的包定的包dependinthedirectionofstabilitydependinthedirectionofstability99稳定抽象原则(稳定抽象原则(StableAbstractionsStableAbstractionsPrinciplePrinciple))————系统中最稳定的包应当是抽象包系统中最稳定的包应当是抽象包stablepackageshouldbeabstractpackagesstablepackageshouldbeabstractpackages包耦合原则包耦合原则对象集合视角下的开对象集合视角下的开闭原则闭原则13zz利用依赖倒置原则来实现对变更封闭利用依赖倒置原则来实现对变更封闭————客户代码客户代码依赖于抽象类而非具体类,而抽象类代表了父集合依赖于抽象类而非具体类,而抽象类代表了父集合的共性,它通常是比较稳定的(不会变化),因而的共性,它通常是比较稳定的(不会变化),因而可以在具体子类变化时,保证客户代码不受影响,可以在具体子类变化时,保证客户代码不受影响,实现了对变更封闭实现了对变更封闭zz利用利用LiskovLiskov替换原则来保证对扩展开放替换原则来保证对扩展开放————只要能只要能做到子类可以完全替代其基类的行为,那么新增的做到子类可以完全替代其基类的行为,那么新增的具体子类在重载父类时,不会对客户代码带来任何具体子类在重载父类时,不会对客户代码带来任何不良影响(即保证原来的抽象类仍代表了父集合的不良影响(即保证原来的抽象类仍代表了父集合的共性),因而实现了对扩展开放共性),因而实现了对扩展开放实现开闭原实现开闭原则则14对象集合与对象集合与开闭原则开闭原则多边形Polygon三角形Triangle矩形Rectangle圆形Circle五边形Pentagon使用抽象类来表达父集合使用具体类来表达子集合15////多边形编辑类只依赖多边形抽象类,不依赖于三角形、矩形等具体类多边形编辑类只依赖多边形抽象类,不依赖于三角形、矩形等具体类publicclasspublicclassPolygonsEditorPolygonsEditor{
本文标题:9.技术架构视图-设计原则与模式
链接地址:https://www.777doc.com/doc-5894235 .html