敏捷开发的面向对象的设计原则

原创 2004年10月18日 15:57:00
“开-闭”原则(OCP)对可变性封装
 
The Open The Open--Closed PrincipleClosed Principle
任何系统在其生命周期中都会发生变化。如果我们希望开发出的系统不会在第一版本后就被抛弃,那么我们就必须牢牢记住这一点。
软件组成实体(类,模块,函数,等等)应该是可扩展的,但是不可修改的。
OCP OCP特征 特征
可扩展(对扩展是开放的)
模块的行为功能可以被扩展,在应用需求改变或需要满足新的应用需求时,我们可以让模块以不同的方式工作
不可更改(对更改是封闭的)
这些模块的源代码是不可改动的。任何人都不许修改模块的源代码。
关键是抽象!
模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改(closed for modification)的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。
符合OCP原则的程序只通过增加代码来变化而不是通过更改现有代码来变化,因此这样的程序就不会引起象非开放―封闭(open-closed)的程序那样的连锁反应的变化。

对可变性的封装
考虑系统中什么可能会发生变化
一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里
正确理解继承
一种可变性不应当与另一个可变性混合在一起
选择性的封闭(Strategic Closure)没有任何一个大的程序能够做到100%的封闭。一般来讲,无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。既然不可能完全封闭,因此就必须选择性地对待这个问题。也就是说,设计者必须对于他(她)设计的模块应该对何种变化封闭做出选择。

里氏替换原则(LSP)如何进行继承

Liskov替换原则替换原则
LSP
LSP The The Liskov Substitution Principle
OCP原则背后的主要机制是抽象和多态。支持抽象和多态的关键机制是继承。
LSP LSP的定义 的定义
若对于每一个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,用o1替换o2后,程序P的行为功能不变,则S是T的子类型。
LSP原则清楚地指出,OOD中Is-A关系是就行为功能而言。行为功能(behavior)不是内在的、私有的,而是外在、公开的,是客户程序所依赖的。行为功能(behavior)才是软件所关注的问题!所有派生类的行为功能必须和客户程序对其基类所期望的保持一致。
LSP LSP和DBC DBC
DBC(Design by Contract)定义把类和其客户之间的关系看作是一个正式的协议,明确各方的权利和义务。DBC对类的要求类的方法声明为先决条件(precondition)和后续条件(postcondition)。为了让方法得以执行,先决条件必须为真。完成后,方法保证后续条件为真。DBC对派生类的要求当重新定义派生类中的例行程序时,我们只能用更弱的先决条件和更强的后续条件替换之。
LSP-结论
LSP原则是符合OCP原则应用程序的一项重要特性。仅当派生类能完全替换基类时,我们才能放心地重用那些使用基类的函数和修改派生类型。
 
依赖倒转原则(DIP)针对接口编程

高层模块不应该依赖于低层模块。二者都应该依赖于抽象。
抽象不应该依赖于细节。细节应该依赖于抽象。
实施重点
从问题的具体细节中分离出抽象,以抽象方式对类进行耦合
不足
导致生成大量的类
假定所有的具体类都是会变化的,这也不总是正确的
DIP与设计模式
DIP以LSP为基础,是实现OCP的主要手段,是设计模式研究和应用的主要指导原则

接口隔离原则(ISP)恰当的划分角色和接口
接口的污染(Interface Contamination)一个没有经验的设计师往往想节省接口的数目,将一些功能相近或功能相关的接口合并,并将这看成是代码优化的一部分。
定义:从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口上的。使用多个专门的接口比使用单一的总接口要好

合成/聚合复用原则(CARP)尽量使用合成/聚合、尽量不使用继承
定义:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用这些对象的目的

面向对象的5个设计原则

在面向对象中,类是基本单位,各种设计都是围绕着类来进行的。可以说,类与类之间的关系,构成了设计模式的大部分内容。经典的设计模式有23种,学习设计模式推荐GOF经典以及《敏捷软件开发——原则、方法与实践...
  • CollinPeng
  • CollinPeng
  • 2017年02月12日 23:07
  • 200

【JAVA】面向对象设计七个原则

程序是为需求服务的,需求无时无刻都有可能变更,最好一开始就依托一套优秀原则来设计程序,以下介绍面向对象设计的七个原则。...
  • u011704894
  • u011704894
  • 2016年01月20日 14:28
  • 1260

面向对象设计的五个基本原则

面向对象的3个基本要素:封装、继承、多态 面向对象的5个基本设计原则: 单一职责原则(Single-Resposibility Principle)     其核心思想为:一个类,最...
  • rankun1
  • rankun1
  • 2016年03月03日 16:32
  • 2668

面向对象设计原则总结

参考博文:http://www.cnblogs.com/shaosks/category/351488.html 面向对象设计的原则主要有:单一职责原则,开放封闭原则,里氏替换原则,依赖倒置原则,迪米...
  • hehewjt
  • hehewjt
  • 2016年11月02日 17:19
  • 645

简述SOLID的面向对象的设计原则

在这篇博文中,将给大家简要介绍一下SOLID的面向对象的设计与实现的基本原则。其实这个需要自己做项目和看代码的体会,个人经验觉得还是比较有用的。 什么是SOLID SOLID是面向对象设计与实现的...
  • leoleocs
  • leoleocs
  • 2015年04月29日 18:45
  • 1024

面向对象的设计原则(整理于敏捷开发)

“开-闭”原则(OCP)对可变性封装 The OpenThe Open--Closed PrincipleClosed Principle任何系统在其生命周期中都会发生变化。如果我们希望开发出的系统不...
  • lanbaibai
  • lanbaibai
  • 2004年09月06日 12:28
  • 5987

面向对象的设计原则(整理于敏捷开发)

“开-闭”原则(OCP)对可变性封装?The OpenThe Open--Closed PrincipleClosed Principle任何系统在其生命周期中都会发生变化。如果我们希望开发出的系统不...
  • ar7_top
  • ar7_top
  • 2004年09月08日 10:26
  • 869

unity开发程序设计原则(七大面向对象设计原则)

七大面向对象设计原则开闭原则:面对需求,对程序的改动是通过增加新代码进行的,而不是改变原来的标题 依赖倒转原则:高层模块不应该依赖底层模块,两个都应该依赖与抽象;抽象不应该依赖于细节,细节应该依赖于抽...
  • qq_34244317
  • qq_34244317
  • 2017年09月02日 15:57
  • 219

面向对象的五大设计原则

一:开——闭原则(OCP) 含义:一个软件实体应当对扩展开放,对修改关闭。 二:单一职责原则(SRP) 含义:就是对一个类而言,应该仅有一个引起变化的原因。 所以在构造对象时,应该将对象的不同职责分离...
  • li2327234939
  • li2327234939
  • 2016年12月28日 17:15
  • 566

面向对象的六大原则(推荐)收藏

  面向对象的六大原则(推荐)要把软件做得非常灵活又要便于维护是一个很困难的事情。灵活的软件他的结构就复杂,维护起来就困难。有得必有失,关键就在于如何处理这两者,使得大于失。软件的设计开发应遵循以下六...
  • wangjunkg
  • wangjunkg
  • 2009年01月12日 19:26
  • 8701
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:敏捷开发的面向对象的设计原则
举报原因:
原因补充:

(最多只允许输入30个字)