OO原则

在OO设计领域,我们知道前人总结了不少的经验,许多的经验在现代软件工程过程中已经被认为是原则来遵守。下面笔者摘抄几项下文涉及到的OO原则的定义。

OCP(开闭原则,Open-Closed
Principle):一个软件的实体应当对扩展开放,对修改关闭。我的理解是,对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进行。

DIP(依赖倒转原则,Dependence
Inversion
Principle):要针对接口编程,不要针对实现编程。我的理解是,对于不同层次的编程,高层次暴露给低层次的应当只是接口,而不是它的具体类。

A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象

B. 抽象不应该依赖于细节,细节应该依赖于抽象

LoD(迪米特法则,Law of
Demeter):只与你直接的朋友通信,而避免和陌生人通信。众所周知类(或模块)之间的通信越少,耦合度就越低,从而更有利于我们对软件的宏观管理。老子论“圣人之治”有相同的思想,《老子》云:“是以圣人之治,虚其心,实其腹,弱其志,常使民无知无欲。”,又云:“小国寡民,邻国相望,鸡犬之声相闻,民至老死,不相往来。”。佩服我们的老祖宗,N千年前就想到了西方N千年后才想到的东西,同时也佩服《java与模式》的作者阎宏,可以用中国传统哲学思想这么生动的说明这一软件设计原则。

LSP(里氏替换原则)所有引用基类的地方必须能透明地使用其子类的对象。

SRP(单一职责原则)只能让一个类有且仅有一个职责。

ISP(接口分离原则)接口的设计应该遵循最小接口原则,不要把用户不使用的方法塞进同一个接口里。

时间: 2024-10-07 06:02:45

OO原则的相关文章

《设计模式》- OO 原则

封装变化 (找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起) (把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分) (系统中的某部分改变不会影响其他部分) 针对接口编程,不针对实现编程 多用组合,少用继承 (使用组合建立的系统,具有很大的弹性,不仅可将算法簇封装成类,更可以“在运行时动态地改变行为”,只要组合的行为对象符合正确的接口标准即可.) 为了交互对象之间的松耦合设计而努力 (松耦合的设计之所以能让我们建立有弹性

OO原则与面向对象三大特性

OO五大原则: 一 单一职责原则:类的单一职责是说一个类应该只做一件事情,如果类中某个方法或属性与它所要完成的职责无关或是为了完成另外的职责那么这样的设计就不符合类的单一职责.而这样的设计的缺点是降低了类的内聚性增强了类的耦合性,另外一个很客观的问题是当我们使用这个类时把我们原本不需要的功能也带到了我们的代码中,从而是文件变大,增加内存开销.包括里面定义的变量越多越庸肿. 二 开闭原则根据开闭原则,在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关闭)的基础上,能扩展其

OO原则汇总

SOLID原则:http://www.cnblogs.com/lanxuezaipiao/archive/2013/06/09/3128665.html https://www.cnblogs.com/adam/category/85782.html https://www.cnblogs.com/zhenyulu/category/6930.html http://www.cnblogs.com/shaosks/category/351488.html 原文地址:https://www.cnb

OO设计基本原则

OO本身就是一种大的设计模式,它是随着软件规模越来越大产生出来帮助人们建模和开发的理念,生来就带着封装.继承.多态等可复用基因.为了充分发挥这些基因的功效,使用者需要遵守一定的原则,就是所谓的面向对象设计原则.然而正确地使用这些运用这些原则并不容易,只有把这些原则吸收成为身体一部分的经验丰富的工程师才能在遇到各种问题时,灵活地使用它们.一些OO大师为了方便新手更好地理解OO原则,就根据经验假象了一些软件设计过程中经常碰到的问题,并给出了遵循OO原则的解决这些问题的设计方案,就产生了设计模式,正如

模式和原则[转载]

设计模式介绍 模式:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心. 这是关于模式最经典的定义,作者是建筑大师Christopher Alexander.如果是第一次看到这句话,多数人会觉得有些抽象难懂.其实"模式"两个字只是一个代号,就像我叫Justin,如果我改叫Tom也没什么问题,只是我更喜欢Justin这个名字,所以从Christopher开始,有了"模式"这个词,人们也都把关于"重复发生的问题的描述和解决办法&quo

从设计原则到设计模式

说明:这些资料仅仅是对设计模式的一些总结,没有设计模式的相关知识,很难看懂.即使看懂了这些,也仅说明理解了模式的基本思想.想要学好设计模式,还是建议好好看文后所列的参考书籍和推荐书籍. 这些总结有不少是根据自己的理解写成的,或许并不正确.如果您有不同的看法,请告知作者,谢谢! 欢迎传阅,但是请勿随意修改或Copy. 设计模式简介 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心. -- Christopher Alexander 设计模式描述了软件设计过程中某一类常见

通过接口标准化ABAP OO开发

本文是对接口编程的讨论,希望能对年轻的开发者有所帮助. 要点: 通过接口对类方法进行更高层的抽象 接口使代码清晰易读 接口使你可以创建模拟对象(Mockup Object)以提高代码的可测试性 帮助实现SOLID原则 可以在不使用RTTS和类型转换的前提下使用多种类的不同实例. 因为在学习ABAP之前,我曾经学习过其它面向对象语言,因此我很纠结于ABAP中不存在的一个特性——重载方法(overload). 也许你会问,重载是什么? 重载就是函数或者方法有相同的名称,但是参数列表和实现不相同的情形

10招让你成为杰出的Java程序员(转)

如果你是一个热衷于技术的 Java 程序员, 那么下面的 10 个要点可以让你在众多 Java 开发人员中脱颖而出. 1. 拥有扎实的基础和深刻理解 OO 原则 对于 Java 程序员,深刻理解 Object Oriented Programming(面向对象编程)这一概念是必须的.没有 OOPS 的坚实基础,就领会不了像 Java 这些面向对象编程语言的美.光学习 OO 原则的定义用处不大,关键是要学会如何应用这些原则用一种 OO 的方式去设计解决方案.因此,我们应该对对象建模.继承.多态.设

第一章.良好应用程序基石(3)

客户又通知我们,他的Guitars库中有很多相同属性的吉他,但是可能售价上不同. 现在,我们要实现的是,怎样返回库中能匹配所有属性的Guitar,并列出来. 更新Inventory.java中的search()方法: 1 public List search(Guitar searchGuitar){ 2 List matchingGuitars = new LinkedList(); 3 for(Iterator i = guitars.iterator(); i.hasNext();){ 4