1. 单一职责原则(SRP)

    一个类应该最多只能有一个因素能够给导致其变化,类中的方法应该都是相关性很高的,即“高内聚”
 
2. 开放-封闭原则(OC)
     - 扩展开放:某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。
     - 修改关闭:某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关闭的。
 
3. 里氏代换原则(LSP)

利用多态特性,父类作用的地方可以使用其任意子类替代,反之不行

     也就是“子类型必须能够替换掉它们的父类型”。一个软件实体如果运用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。在程序中,把父类都替换成它的子类,程序的行为没有变化.(正方形不是长方形),最有难度的约束设计. 
 
4. 依赖倒转原则(DIP)
      (1)高层模块不应该依赖底层模块。两个都应该依赖抽象。

(2)抽象不应该依赖细节,细节应该依赖于抽象.

确保程序“低耦合”

5. 迪米特法则(LoD).又叫最少知识原则(Least Knowledge Principle 简写LKP

一个对象应当对其它对象有尽可能少的了解.如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类须要调用另一个类的某一个要领的话,可以通过第三者转发这个调用。

它强调我们在封装类的时候,在类的设计结构上,每一个类都应当降低成员的访问权限。类与类之间的耦合度越低越好,因为一个类被修改,不会对有关联的其他类也执行 修改。(发布-订阅模式),低耦合.

OO基本原则的更多相关文章

  1. 设计模式-观察者模式(上)<转>

    本文参考Head First设计模式一书,感觉书中的例子实在很好,很贴切.对模式的知识点进行总结,并对书的源码做了一定注释.   观察者模式要点有二:主题和观察者. 最贴切的案例是:杂志订阅,杂志是主 ...

  2. OO设计基本原则

    OO本身就是一种大的设计模式,它是随着软件规模越来越大产生出来帮助人们建模和开发的理念,生来就带着封装.继承.多态等可复用基因.为了充分发挥这些基因的功效,使用者需要遵守一定的原则,就是所谓的面向对象 ...

  3. OO的五大原则是指SRP、OCP、LSP、DIP、ISP。

    OO的高层原则,面向对象设计的基本原则 设计模式之六大原则--开闭原则(OCP) 设计模式之六大原则--迪米特法则(LoD,LKP) 设计模式之六大原则--接口隔离原则(ISP) 设计模式之六大原则- ...

  4. 第二章 OO大原则

    昨天忙了一天,晚上加班到了12点,虽然工作有时候比较累,但是整体来讲还是比较轻松的,国企加上我是今年才毕业的应届生,导致了现在这种情况.工资也真的不算高...但我觉得最开始还是要踏踏实实一点比较好.学 ...

  5. 【作业2.0】HansBug的5-7次OO作业分析与小结,以及一些个人体会

    不知不觉又做了三次作业,容我在本文胡言乱语几句2333. 第五次作业 第五次作业是前面的电梯作业的多线程版本,难度也有了一些提升.(点击就送指导书) 类图 程序的类图结构如下: UML时序图 程序的逻 ...

  6. OO开发思想:面向对象的开发方法(Object oriented,OO)

    面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会: ...

  7. 面向对象之七大基本原则(javaScript)

    1. 前言 2. 单一职责 3. 开闭原则 4. 里氏替换 5. 依赖倒置 6. 接口隔离 7. 迪米特法则 8. 组合聚合复用原则 9. 总结 1. 前言 面向对象编程有自己的特性与原则,如果对于面 ...

  8. oo原则

    基本原则: 封装变化Encapsulate what varies. 面向接口编程而非实现 Code to an interface rather than to an implementation. ...

  9. OO思想举例,控制翻转,依赖注入

    (转自kumaws,原帖地址:http://www.cnblogs.com/kumaws/archive/2009/04/06/from_interface_to_DependencyInjectio ...

随机推荐

  1. mac下有道词典用不了

    有道词典           对于Chrome取词,通过安装插件就可以解决 Chrome 下取词的问题,这个插件就放在有道词典程序目录中.最简便的安装方法如下: 首先确保你已经安装好了有道词典.然后复 ...

  2. 为什么要使用Mac系统?

    1.键盘手感,电脑外形设计轻薄,舒适,金属感比较舒服: 2.Mac炫酷方便的手势操作: 3.Mission Control的多桌面操作,方便切换工作: 4.软件安装卸载方便(相比Windows): 5 ...

  3. 利用Flex组件birdeye绘制拓扑关系图

    birdeye绘制拓扑关系图 1.flex简单介绍 Flex 是一个高效.免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AI ...

  4. java后台调用url无协议

    url格式不正确,可能有"www.baidu.com"    "这个不能有 // 下载pdf public void downpdf(String URL, String ...

  5. ASP.NET MVC 中将FormCollection与实体间转换方法

    将Action动作中传递的FormCollection转变成对应的实体,可以使用Controller的TryUpdateModel()方法. public ActionResult Create(Fo ...

  6. Ubuntu ssh 服务

    安装ssh-serversudo apt-get install openssh-server安装ssh-clientsudo apt-get install openssh-client 修改ssh ...

  7. java做的比较完善的FTP上传下载文件服务器源码

    Filename: ftp.java Author: leetsing(elove) Create date: 2004-08-30 Use: connect to FTP server,then u ...

  8. linux 下 TeXmacs 作 Maple 18 的前端

    TeXmacs的maple 插件比较老,默认条件下无法运行maple 18.且默认情况下maple18不在系统的搜索目录中,导致TeXmacs中不显示 maple 的session.以下假设TeXma ...

  9. Foundation ----->NSNumber

    /*--------------------NSNumber--------------------*/     //包装基本数据类型          //1.创建number对象     //12 ...

  10. 柯朗数(Courant number)研究

    在数值计算过程中,对于计算结果的准确性和效率有很高的要求,但是这两者之间往往互相矛盾:而使用柯朗数可用于平衡两者. 1.柯朗数的定义: C = sqrt(gh)*t/s 其中,t是时间步长,s是网格在 ...