`
温柔一刀
  • 浏览: 856862 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

OO的五大原则

    博客分类:
  • java
阅读更多

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

1. SRP(Single Responsibility Principle 单一职责原则)
单一职责很容易理解,所谓单一职责,就是一个设计元素只做一件事。

2. OCP (Open Close Principle 开闭原则)
一句话:“Closed for Modification; Open for Extension”——“对变更关闭;对扩展开放”。

3. LSP(Liskov Substitution Principle 里氏替换原则)
子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract) 的概念推出。我们以学生为例,夜校生为学生的子类,因此在任何学生可以出现的地方,夜校生均可出现。这个例子有些牵强,一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。运用替换原则时,我们尽量把类B设计为抽象类或者接口,让C类继承类B(接口B)并实现操作A和操作B,运行时,类C实例替换B,这样我们即可进行新类的扩展(继承类B或接口B),同时无须对类A进行修改。

4.DIP(Dependence Inversion Principle 依赖倒置原则 )
依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。 简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述: 抽象不应当依赖于细节;细节应当依赖于抽象; 要针对接口编程,不针对实现编程。

5.ISP(Interface Segregation Principle 接口分隔原则)
采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。

分享到:
评论

相关推荐

    面向对象编程,OO设计的五大原则

    面向对象,编程,OO设计的五大原则 OO的五大原则是指SRP、OCP、LSP、DIP、ISP。

    OO设计五个原则.pdf

    OO设计五个原则.pdf

    c++ 面向对象设计五大原则

    面向对象设计的主要任务就是类的设计,不少面向对象(OO)的先驱和前辈已经提出了很多关于类的设计原则,用于指导OOP,其中就包括类设计的五项基本原则。 1.单一职责原则(Single Resposibility Principle,SRP) ...

    head_first_design_patterns.pdf Head First 设计模式(英文原版 非扫描)

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    Head.First设计模式_PDF.part1

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    某区块鼠区块养殖系统源码 无加密完整版 带充值接口 可封装APP.zip

     区块价值:2001-5000RMB,领养时间:20.40-21.00,预约/即抢领养微分:20-40,智能合约收益10天15,可挖EMK9个/天开发找邓经理l76+.8847+.OO27微电  三、规则说明  1.宠物共分4个种类,每个种类的价值、合约收益...

    de.htwg.se.fivewins:这是为“软件工程”讲座用Java编写的“五胜”游戏

    #五连胜 ###SE 游戏 ... 我们还遵循了测试第一原则(它是 xp 的一部分)的方法,使用了 OO 原则和设计模式。 为了更好地协作,我们使用了 scrum 和 git。 在 Scrum 中,我们协调了我们的协作,谁有什么

    编程新手真言......

    第五部分 225 选读 225 字符与字符串 226 为什么我说Java是脚本语言 226 宽松语法,无语法语言 227 Linux与3D 228 伪码语言 229 最强大的语言原来是预处理 230 语言宿主 231 shell编程和交互式语句编程 232 Debug,...

    宠物鼠鱼十二生肖华登qukuai狗宠物养殖系统qukuai源码_源码.zip

    区块价值:2001-5000RMB,领养时间:20.40-21.00,预约/即抢领养微分:20-40,智能合约收益10天15%,可挖EMK9个/天开发找邓经理l76+.8847+.OO27微电 三、规则说明 1.宠物共分4个种类,每个种类的价值、合约收益、...

    代码语法错误分析工具pclint8.0

    2)在Name栏中输入“PC-lint ”,原则上这个名称可以随便起,只要你能搞清楚它的含义 就可以了。 3)在Run栏中输入“c:\lint\lint-nt -u -ic:\lint std env-si %f”其中c:\lint是你P C-LINT的安装目录。 4)...

    asp.net知识库

    忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,...

Global site tag (gtag.js) - Google Analytics