系统分析与设计IBM-43面向对象设计的原则课件_第1页
系统分析与设计IBM-43面向对象设计的原则课件_第2页
系统分析与设计IBM-43面向对象设计的原则课件_第3页
系统分析与设计IBM-43面向对象设计的原则课件_第4页
系统分析与设计IBM-43面向对象设计的原则课件_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

关于对象设计你愿或者不愿,需求就在那里,日新月异你想或者不想,设计创新就在那里,始终持续你测或者不测,Bug都在那里,多多少少结束或者不结束,干系人在那里,决策终不由己来,面向对象的阵营里,或者,让对象思想驻进你的心里,默然,领会。由衷,欢喜 ……关于对象设计你愿或者不愿,需求就在那里,日新月异1关于对象设计其实,真相是:面向对象方法本身并不能保证你的设计成为优秀的设计YoucancreateaverybadOOdesignjustaseasilyasyoucancreateaverybadnon-­‐OOdesign...关于对象设计其实,真相是:2面向对象设计过程进行适当的领域分析撰写问题描述,确定系统的开发任务基于问题描述抽取需求开发用户界面原型识别对象类定义每个类的职责确定类之间的交互关系建立系统的设计模型面向对象设计过程进行适当的领域分析3面向对象建模核心理念区分接口与实现从具体到抽象最小接口原则面向对象建模核心理念区分接口与实现4区分接口与实现接口的标准化

vs.

实现的演化publicvoidopen(stringname)

{/*someapplication-specificprocessing

*//*calltheOracleAPItoopentheDB*//*moreapplicationspecificprocessing

*/}publicvoidopen(stringname)

{/*someapplication-specificprocessing

*//*calltheSQLAnywheretoopentheDB*//*moreapplicationspecificprocessing*/}区分接口与实现接口的标准化vs.实现的演化5接口

用户代码接口OracleDB2SQLAny用户代码接口用户代码接口OracleDB2SQLAny用户代码6UsingAbstractThinkingWhenDesigning

Interfaces设计抽象的接口UsingAbstractThinkingWhenD7抽象的接口抽

口师傅,请送我去机场抽象的接口抽象的接口师傅,请送我去机场8不太抽象的接口不

口右转右转左转左转左转不太抽象的接口不够抽象的接口9抽象的接口:向

节让用户知道的关于类的内部实现细节越少越好:只给看必须的只看公开的只为用户的业务需求考虑最

则抽象的接口:向用户暴露10确

户用户是谁 ? 重要程度高达50%面向服务的原则

(Services

Principle)提供服务:只要能赚钱就好使

务:不要太贵喔确定用户用户是谁 ? 重要程度高达50%提供服11识别环境约束环境对对象的行为施加约束限制条件前置条件/后置条件/例外条件…识别环境约束环境对对象的行为施加约束限制条件前置条件/后置12公共接口的识别用户

使

候,需

要以下功

告知司机终点付钱下

车用户

的时候:有出

行地点召唤

出租

车付钱公共接口的识别用户使用出租车对象的13确定实现细节公共接口以外的内容都可以看做是实现相关的用户永远无需关注实现细节方法的命名和参数定义

(nameandparameterlist)编码实现对实现的修改无须牵涉接⼝实现为用户的期望提供解决⽅方案接口从用户的角度看待对象,实现则是对象的果核和果肉实现中包含有描述对象状态的代码确定实现细节公共接口以外的内容都可以看做是实现相关的14开闭原则(Open/Closed

Principle,

OCP)最初由Bertrand

Meyer提出软件实体在扩展性⽅方⾯面应该是开放的,而在更改性方面应该是

封闭

的。例:打印输出设计设计1设计2开闭原则(Open/ClosedPrinciple,OC15Liskov替换原则

(Liskov

Substitution

Principle,

LSP)最早由Liskov于1987年在OOPSLA会议上提出子类可以替换父类出现在父类能出现的任何地方Liskov替换原则(LiskovSubstitutio16违反LSP的例子publicclassRectangle

{privateinttopLe5X;privateinttopLe5Y;intwidth;int

height;publicvoidsetWidth(intwidth){this.width=width;}publicvoidsetHeight(intheight){this.height=

height;}publicintgetWidth(){return

width;}publicintgetHeight(){returnheight;}}问题:如果将Square作为Rectangle的子类,则如何定义Square类的setWidth和setHeight方法??违反LSP的例子publicclassRectangle17解决方法:publicclassSquareextendsRectangle{publicvoidsetWidth(intwidth){super.setWidth(width);super.setHeight(width);}publicvoidsetHeight(intheight){super.setHeight(height);super.setWidth(height);}}这种解决方法是否可行??解决方法:publicclassSquareexten18考

码:publicclassTest

{publicstaGcvoidmain(String[]args){Testt=new

Test();Rectangler=new

Rectangle();Squares=newSquare();t.g(r);// t.g(s);}}privatevoidg(Rectangler)

{r.setWidth(10);r.setHeight(20);assert(r.getWidth()*r.getHeight()==

200);如果传给方法g的参数是Rectangle类型的对象,则没有问题,如果是Square类型的对象,则出错。}?考虑下面的代码:publicclassTes19思考题:如

求?契约式设计

(DesignbyContract)为了满足Liskov替换原则,设计时要求:子类中方法的前置条件不能强于父类中相应方法的前置条件。子类中方法的后置条件不能弱于父类中相应方法的后置条件。Liskov

替换原则要求子类宽

入严出!思考题:如何知道子类的行为符合父20依赖倒置原则

(DependencyInversionPrinciple,

DIP)依赖倒置原则指的是依赖关系应该是尽量依赖接口(或抽象类),而不是依赖于具体类。✗结构化设计中模块间的依赖关系依赖倒置原则(DependencyInversionP21面向对象设计中的依赖关系OOD中的依赖关系面向对象设计中的依赖关系OOD中的依赖关系22接口分离原则(InterfaceSegrega:on

Principle,

ISP)在设计时采用多个和特定客户类(client)有关的接口要比采用一个通用的接口要好。使用通用接口的设计使用分离接口的设计接口分离原则(InterfaceSegrega:onPr23好的系统设计的特征用户友好易理解可靠可扩展可移植可伸缩可重用…简单性:实现简单,使

用简单,理解简单,维护简单软件老化的特征修改难很脆弱移植难重

用难粘性强

(设计+环境)需求变更好的系统设计的特征用户友好简单性

温馨提示

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

最新文档

评论

0/150

提交评论