面向对象的设计原则之总结

总结自
 
   面向对象的设计原则(PDF -〉 中科院软件所互联网软件技术实验室. 陈烨
 
OCP原则(开闭原则)
    
    模块的代码是可扩展的,可以通过继承、组合等来扩展模块的功能。
    模块的代码是不可以修改的,即不可以修改原来模块中的代码。
    符合OCP的程序只能通过增加代码而不是更改现有代码来变化。
 
    一种可变性不应当散落在代码的各个角落,而应当被封装在一个对象里,
    同时,一种可变性不应当与另一种可变性混合起来。
 
    如果代码中遇到很多instance of的判断,而且当功能扩展时,可能还会
    增加类型,是否可以考虑更改原来的instance of结构(见原文OCP实例)
    这样,当类型增加时,可以只需添加一个接口的实现。无需更改原来代码。
 
LSP原则(LSP原则)
 
    什么时候才能正确使用继承?即S什么时候才是T的真正子类?LSP原则
    指出:
   
    若对于每一个类型S的对象s1,都存在一个T的类型t1,使得在所有针对
    T编写的程序P中,用s1替换t1后,程序的行为功能不变,则S是T的子类型。
 
    文中举了一个矩形和正方形的例子,正方形继承自矩形,但是,当使用正方
    形实例替换矩形之后,程序的行为功能变掉了。即方法f(rectangle r)执行
    不再具有原来的行为功能了。
 
    行为功能才是软件关注所关注的问题,所有派生类的行为功能必须和客户程序
    对其基类期望的一致。
 
DIP原则(依赖倒置原则)
 
    糟糕的设计:很难添加新的功能,因为每一处改动都会影响系统中过多的模块
    当你做了一处改动,却导致系统的另一模块发生了问题,很难在别的应用程序
    重用现在的模块,因为他不能从现有的应用程序独立的提取出来。
   
    糟糕的设计是因为过强的耦合关系,解耦的方法就是使用依赖导置原则。
 
    依赖倒置的基本原则是这样的:
        
            高层模块不应该依赖于低层模块,二层应该依赖于抽象。
            抽象不应该依赖于细节,细节应该依赖于抽象。
 
    在java中,面向接口编程就是依赖倒置的一个体现。
    实践中,应该从问题的具体细节中分离出抽象,以抽象的方式对类进行耦合。
    依赖倒置的主要缺点就是导致大量的类的生成,由于系统中并不是每个类都会
    产生变化,明确确定不发生变化的东西可以不使用该原则。
 
ISP原则(接口隔离)
   
    这个容易理解,一个类对另一个类的依赖应当是建立在最小接口基础上的,使用
    多个专门的接口比使用单一的总接口要好。
 
CARP(合成复用原则)
 
   在新对象里面使用已有的一些对象,通过对已有对象的委派达到复用目的。
   一般认为,合成优于继承。
 
LoD (迪米特原则)
 
   “不要和陌生人说话”,即一个对象应当对其他对象有尽可能少的了解,这也是
    为了减少耦合性。
    一个类尽量只于自己的朋友交谈,朋友的条件是这样的:
    (1)当前对象本身
    (2)当前对象的方法传进来的参数变量
    (3)当前对象创建的对象
    (4)当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友
 
     迪米特法则的主要用意是控制信息的过载。在将迪米特法则运用到系统
     设计中时,要注意下面的几点:
     
     1)在类的划分上,应当创建有弱耦合的类。
     2)在类的结构设计上,每一个类都应当尽量降低成员的访问权限。
     3)在类的设计上,只要有可能,一个类应当设计成不变类。
     4)在对其他类的引用上,一个对象对其对象的引用应当降到最低。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值