设计模式-01-设计模式与面向对象_第1页
设计模式-01-设计模式与面向对象_第2页
设计模式-01-设计模式与面向对象_第3页
设计模式-01-设计模式与面向对象_第4页
设计模式-01-设计模式与面向对象_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、设计模式与面向对象设计模式与面向对象面向对象的两个方向性思维面向对象的两个方向性思维l向下,如何深入把握机器底层,从微观理解对象构造底层思维l语言构造l编译转换l对象内存模型l运行时机制l向上,如何将我们的周围世界抽象为程序代码抽象思维l面向对象l组件封装l设计模式l架构模式深入理解面向对象深入理解面向对象l向下:深入理解三大面向对象机制l封装,隐藏内部实现l继承,复用现有代码l多态,改写对象行为l向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是“好的面向对象设计”软件设计固有的复杂性软件设计固有的复杂性l建筑商从来不会去想给一栋已建好的100层高的楼

2、房底下再新修一个小地下室这样做花费极大而且注定要失败。然而令人惊奇的是,软件系统的用户在要求作出类似改变时却不会仔细考虑,而且他们认为这只是需要简单编程的事。lObject-Oriented Analysis and Design with Applications复杂性的几个诱因复杂性的几个诱因l问题领域的复杂性l客户需求本身就很复杂,客户与开发人员互相不理解l管理开发过程的困难l开发是由人完成的,人的组织、潜能存在巨大复杂性l软件可能的灵活性l软件为开发人员提供了极大的灵活性,而开发人员也很容易滥用这种灵活性l表征离散系统行为的困难l软件系统本质上是一个离散系统,其复杂度要远远大于连续系统

3、。一个简单的外部事件可能破坏整个系统软件设计复杂的根本原因软件设计复杂的根本原因l软件设计复杂性的根本原因在于:变化l客户需求的变化l技术平台的变化l开发团队的变化l市场环境的变化l。如何解决复杂性?l分解l人们面对复杂性有一个常见的做法:即分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单问题。l抽象l更高层次来讲,人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。两种分解与抽象方法l结构化程序设计系统中的每个模块表示某个总体进程中的主要一步。l面向对象程序设计根据问题域中的关键抽象来分解系统。软件设计

4、的目标l什么是好的软件设计?l软件设计的金科玉律:复用!l面向对象设计,为什么?l变化是复用的天敌!l面向对象设计最大的优势在于:抵御变化重新认识面向对象l隔离变化l从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小l各司其职l从微观层面来看,面向对象的方式更强调各个类的“责任”,新增员工类型不会影响原来员工类型的实现代码这更符合真实的世界,也更能控制变化所影响的范围l对象是什么?l从概念层面讲,对象是某种拥有责任的抽象。l从规格层面讲,对象是一系列可被使用的公共接口。l从语言实现层面来看,对象封装了代码和数据。调整软件模块间耦合关系l耦合关系直接决定着软件面对

5、变化时的行为l模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改l模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其他模块保持不变面向对象设计准则l针对接口编程,而不是针对实现编程l客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。l优先使用对象组合,而不是类继承l类继承通常为“白箱复用”,对象组合通常为“黑箱复用”l继承在某种程度上破坏了封装性,子类父类耦合度高;l对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。l封装变化点l使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,

6、从而实现层次间的松耦合。经典面向对象设计原则l依赖倒置原则(DIP)l高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象。l抽象( 稳定) 不应该依赖于实现细节( 变化)l实现细节应该依赖于抽象l开放封闭原则(OCP)l类模块应该是可扩展的,但是不可修改;对扩展开放,对更改封闭经典面向对象设计原则l单一职责原则(SRP)l一个类应该仅有一个引起它变化的原因。lLiskov 替换原则(LSP)l子类必须能够替换它们的基类l接口隔离原则(ISP)l不应该强迫客户程序依赖于它们不用的方法设计模式简介l每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。lCh

7、ristopher Alexanderl人是一个经验性的动物l设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。l软件设计模式是软件领域设计经验的归纳与汇集。GoF 23 种设计模式l历史性著作设计模式:可复用面向对象软件的基础一书中描述了23种经典面向对象设计模式,创立了模式在软件设计中的地位。l由于设计模式一书确定了设计模式的地位,通常所说的设计模式隐含地表示“面向对象设计模式”。但这并不意味“设计模式”就等于“面向对象设计模式”。面向对象与设计模式l面向对象设计模式解决的是“类与相互通信的对象之间的组织关系,包括它们的角色、职责、协作方式几个方面。l面向对象设计模式是“好的面

8、向对象设计”,所谓“好的面向对象设计”是那些可以满足“应对变化,提高复用”的设计。l面向对象设计模式不像算法技巧,可以照搬照用,它是建立在对“面向对象”纯熟、深入的理解的基础上的经验性认识。掌握面向对象设计模式的前提是首先掌握“面向对象”!恰当使用设计模式l“什么时候、什么地点应用设计模式”比“理解设计模式结构本身”更为重要。设计模式的应用不宜先入为主,一上来就使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。l现代软件设计的特征是需求的频繁变 “化”。如果没有需求变化,便没有面向对象,更没有“面向对象设计模式”。设计模式的要点便是“寻找变化点,然后在变化点处应用设计模式,从而来更好低应对需求的变化”模式分类l从目的来看:l创建型(Creational)模式:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体类型实现引来的冲击。l结构型(Structural)模式:通过类继承或者对象组合

温馨提示

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

评论

0/150

提交评论