大家好,欢迎来到IT知识分享网。
引言:
要让自己写的代码有质量,特别是对于面向对象编程的话,代码以及框架的是否合理直接决定了你的程序是否可以良好的扩展和壮大,这在软件工程中也多少学过一点,简单来说就是要做到低耦合高内聚。经过编程人员多年的总结,良好的框架设计或者说编码风格应当达到一定的要求,本文的正文部分正是达到这种要求需要遵循的六大基本原则,小编针对每一种原则写了一个Demo,Demo在本文末尾附上下载链接。
1、面向对象设计的几个目标
可扩展性,容易添加新功能。
灵活性,容易添加新的功能代码修改平稳地发生。
可插入行,容易将一个类抽出去,同时将另一个类有同样接口的类加人进来。
2、判断软件设计质量的标准
高内聚、低耦合
耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息
内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。
正文:
1、单一职责原则(SRP,Single-Responsibility Principle)
定义:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
高内聚
一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将他们封装在同一个类中。
好处:
可降低类的复杂度,一个类只负责一项职责,其逻辑肯定比负责多项职责简单的多
复杂度低,可读性自然提高
可维护性高,风险低。如果接口的单一职责号,一个接口修改指对应相应的实现类有影响。对其它的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。
2、开放封闭原则(OCP,Open-Closed Principle)
定义:对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
高内聚、低耦合
优点:降低了程序各部分之间的耦合性,为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。
其适应性、灵活性、稳定性都比较好。已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能。增加的新模块对原有的模块完全没有影响或影响很小,这样就无需为原有模块进行重新测试。
3、里氏替换原则(LSP,Liskov Substitution Principle)
定义:子类型必须能够替换它们的基类型。一个软件实体如果使用的是一个基类,那么当把这个基类替换成继承该基类的子类,程序的行为不会发生任何变化。软件实体察觉不出基类对象和子类对象的区别。
低耦合
优点:可以很容易的实现同一父类下各个子类的互换,而客户端可以毫不察觉。
4、依赖倒置原则(DIP,Dependence Inversion Principle)
定义:要依赖于抽象,不要依赖于具体。客户端依赖于抽象耦合。
低耦合
抽象不应当依赖于细节,细节应当依赖于抽象。要针对接口编程,不针对实现编程。
优点:使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细节改变的影响。依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定决定了系统的稳定性。
5、接口隔离原则(ISP,Interface Segregation Principle)
定义:使用多个专一功能的接口比使用一个的总接口总要好。
从一个客户类的角度来讲:一个类对另外一个类的依赖性应该是建立在最小接口上的。过于臃肿的接口是对接口的污染,不应该强迫客户依赖于它们不用的方法。
高内聚
优点:会使一个软件系统功能扩展时,修改的压力不会传到别的对象那里。
6、迪米特法则(Law of Demeter)
又叫最少知识原则(LKP,Least Knowledge Principle)
定义:对象与对象之间应该使用尽可能少的方法来关联,避免千丝万缕的关系。
低耦合
类知道的其他的类应尽量少
类可以访问其他类的方法或者属性也应尽量少。
总结:
本文针对上述设计原则做了一个Demo,需要的朋友可以前往Github下载,通过对示例代码来更好的揣摩面向对象程序设计的基本原则。当然了,真的想掌握这些设计原则,还需要一个漫长时间的过程,在实际开发的过程中去慢慢的体会。送上小编非常喜欢的一句话,与君共勉:九层之台,起于累土!
Demo源码: https://github.com/xiaomo008/OOD
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/47282.html