上一节讲述了目前软件开发存在的问题,该如何解决这些问题?从前面的分析可以看出,用户的需求是在不断发生变化的,既然作为软件开发人员不能拒绝这些变化,那就要正视这些变化,拥抱变化,尽量的满足用户需求的变化,要达到上述目的,就只有依靠程序设计,因为只有程序设计的更加灵活了,才能更好的适应需求的变化,才能更少的改动代码,从而产生更少的程序缺陷。
程序如何才能设计的更加灵活呢?随着经验的积累,程序设计人员总结出了一些面向对象的设计原则,大体上可以分为:单一职责原则、开闭原则、依赖注入原则、里氏替换原则、迪米特原则、接口分离原则和优先使用组合而不是继承原则。依据这些设计原则来进行程序设计和开发,就有可能使程序设计的更加灵活,能够更好的适应用户需求的复杂多变。下面来详细的讲解一下这些设计原则:
1.单一职责原则
单一职责原则的英文缩写是SRP,全称是Single Responsibility Principle。它的意思是说系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个。
这是软件开发人员经常会违反的一个设计原则,通常为了省事,开发人员会将很多功能集中在一个类里面,从而造成这个类庞大无比,难于维护。
2.开闭原则
开闭原则的英文缩写是OCP,全称是Open for Extension,Closed for Modification的核心思想就是:一个对象对扩展开放,对修改关闭。它的意思是说对类的改动是通过增加代码进行的,而不是改动现有的代码。通俗的说就是,软件开发人员一旦写出了可以运行的代码,就不应该去改变它,而是要保证它能一直运行下去。
这也是软件开发人员经常会违反的一个设计原则,为了满足用户的新需求,需要修改或扩充原来的代码,这样造成的后果就是如果这个类中有一个功能要进行修改,就很可能会引起其他功能的变动,从而产生不可预知的后果,在软件开发中,经常会出现为了修改一个程序缺陷会产生新的程序缺陷的问题,就是违法了这一原则造成的。
3.依赖注入原则
依赖注入原则的英文缩写是DIP,全称是Dependence Inversion Principle。它的意思是说要依赖于抽象,不要依赖于具体的实现。在软件开发中,所有的类如果需求调用其他的类,就应该调用该类的接口或抽象类,而不是直接调用该类的实现类。
依赖注入原则在Spring中,得到了充分的应用,这样才能保证Spring的灵活性,因此在采用Spring开发代码时,要针对接口编程,而不是针对实现编程。
4.里氏替换原则
里氏替换原则的英文缩写是LSP,全称是Liskov Substitution Principle。它的意思是说在任何抽象类出现的地方都可以用它的实现类来替代。采用里氏替换原则可以更好的使用继承。
5.迪米特原则
迪米特原则的英文缩写是LOD,全称是Law of Demeter。它的意思是说一个对象应当对其他对象尽可能少的了解,从而能够降低各个对象之间的耦合,提高系统的可维护性。
在程序设计中,各个模块之间互相调用时,通常都会提供一个统一的接口来实现,这样其他模块就不需要了解另一个模块的内部实现细节,这样当一个模块内部的实现发生改变时,不会影响的其他模块的使用。
6.接口分离原则
接口分离原则的英文缩写是ISP,全称是Interface Segregation Principle。它的意思是说不应该强迫客户程序依赖它们不需要使用的方法。
在软件开发中,开发人员经常会将很多对外提供的方法防止一个类中实现,然后提供给其他模块使用,这就违反了接口分离原则,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口当中。
7.优先使用组合而不是继承原则
优先使用组合而不是继承原则的英文缩写是CARP,全称是Composite/Aggregate Reuse Principle。它的意思是说优先使用组合,而不是继承。
经过这么多年的开发经验积累,很多开发人员对于继承都是深恶痛绝,因为父类的任何改变都可能影响子类的行为,采用继承时,如果用户需求发生变化而造成父类进行修改,则所有的子类都要进行修改。而在使用组合时,就降低了这种依赖关系。
上面介绍的这些设计原则,都是前人通过多年设计经验总结出来的,从上面的讲解也可以看出,这些设计原则的一个核心思想就是强调尽量降低代码之间的依赖,从而能够灵活多变,适应用户需求的不断变化,这也是“高内聚、低耦合”思想的具体实现。
阅读(944) | 评论(0) | 转发(0) |