程序设计原则

程序设计有7大原则:

1.开闭原则
2.单一原则
3.代替原则
4.依赖原则
5.接口隔离原则
6.最少原则
7.合成/聚合复用原则

原则解释:

开闭原则:

程序的设计应该是不约束扩展,即扩展开放,但又不能修改已有功能,即修改关闭。因为在软件生命周期内,经常会出在原有功能基础上扩展新功能。这时,不能因为软件已经上线,不扩展新功能,但也不能直接修改旧的功能。正确的做法是,在原有功能上,扩展一个新的功能,新的需求依赖新的功能去实现。这样就既保证了老功能不受影响,有扩展了新功能。开闭原则一条非常重要的原则,可以说其它原则的基石。

单一原则

就一个类而言,应该仅有一个引起它变化的原因。具体说,在做编程的时候,很自然的会给一个类加上各种各样的功能。这样意味着,无论任何需求要来,都需要更改这个类,这样其实是很糟糕的,维护麻烦,复用不可能,也缺乏灵活性。如果一个类承担的职责过多,就等于把这些职责耦合起来,一个职责变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致设计很脆弱,当变化发生时,设计会遭到很多意想不到的破坏。

代替原则(里氏代换原则):

派生类(子类)对象能够替换其基类(父类)对象被调用。这条原则主要是说,在程序中,任何调用基类对象实现的功能,都可以调用派生类对象来替换,当然,反过来是不行的。其实这里主要说的是继承问题,既然派生类继承基类,那它的对象也应该相应继承基类对象的实现,当然也就因该能替换基类对象。如果无法替换,就说明这个派生类继承有问题,需要修改设计。

依赖倒转原则:

这条原则说的是程序设计应该依赖抽象接口,而不应该依赖具体实现。经常听到的接口编程思想,其实说的主要就是这个原则。道理也很简单,接口是稳定的,实现是不稳定的。这也要求,一旦接口确定,就不应该再进行修改了。而根据接口的实现,是可以根据具体问题和情况,采用不同的手段去实现。

接口隔离原则:

接口隔离是说,使用多个隔离接口,比使用单个接口要好,还是一个降低类之间耦合度的意思。经常提到的降低耦合,降低依赖,主要也是通过这个原则来达到的。该原则的优势:1.避免接口污染;2.提高灵活性;3.提供定制服务;4.实现高内聚。

1.避免接口污染:一个类如果要实现一个接口,那么就要实现这个接口要求的所有方法,如果这个接口里面包含这个类不需要的方法,那么就会造成接口污染,这是不好的设计,会对系统留下隐患。

2.提高灵活性:一个类是可以同时实现多个接口的,所以将一个臃肿的接口分割为若干个小接口,通过小接口的不同组合可以满足更多的需求。

3.提供定制服务:我们在做系统设计时也需要考虑对系统之间或模块之间的接口提供定制服务。提供定制服务就必然有一个需求:只提供访问者需要的方法。这也是可以通过细化接口实现的。

4.实现高内聚:下面会讲解 高内聚原则。

最少原则(迪米特法则)

一个实体应当尽可能少的与其他实体之间发生相互作用。这样做的目的在于减少依赖,独立功能,以便更好的复用。

合成/聚合复用原则:

在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的。设计原则是:尽量使用合成/聚合,尽量不要使用继承。

 

知识补充:

类之间的关系:

依赖、组合、聚合、关联
 

依赖(Dependency):

依赖关系是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。例如,一个人(Person)可以buy(car)和buy(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car和House。与关联不同的是,Person类里并没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。 
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用; 

关联(Association):

关联关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现。 它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;

组合 和 聚合 的区别:

1、依赖性区别

聚合中的两种类(或实体)是可以单独存在的,不会相互影响;被关联的一方可以独立于关联一方,依赖性不强。

相反,组合中的两个实体(或者类)是高度依赖于彼此的,它们之间会相互影响。

2、关系类型的区别

聚合代表了has-a关系,一种单向关系,比如:钱包有钱,但钱里面没有钱包;组合代表了part-of关系,比如:人需要心脏,心脏也需要人体。

3、关联强度的不同

聚合是一种弱关联关系;组合是一种强关联关系。

4、生命周期的不同

在聚合关系中的两个类(或实体)的生命周期是不同步;但,在组合关系中的两个类(或实体)的生命周期是同步的。

 

耦合度:组合 > 聚合 > 关联 > 依赖

转载于:https://www.cnblogs.com/sqzr-001/p/11327418.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值