面向对象设计原则之概述

  对于面向对象软件系统的设计而言,在支持可维护性的同时,提高软件系统的可复用性是一个至关重要额问题,如何同时提高一份软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用还是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。
  面向对象设计原则是学习设计模式的基础,每一种模式都符合一种或多种面向对象设计的原则,使用这些原则达到可维护的复用,让设计出的系统更加灵活、易于扩展。
  通常认为,一个易于维护的系统,就是复用率高的系统;而一个复用性较好的系统,就是一个易于维护的系统。
  知名软件大师Robert C.Martin认为一个可维护性较低的软件设计,通常由如下4个原因造成:
    1.过于僵硬(Rigidity):很难在一个软件系统中添加一个新的功能,增加一个新的功能将涉及很多模块,造成系统改动较大。
    2.过于脆弱(F人agility):与过于僵硬同时存在,修改已有的系统时代码过于脆弱,对一个地方的修改会导致看上去没有关系的另一个地方发生故障。
    3.复用率低(Immobility):复用是指一个软件的组成部分可以在同一个项目中的不同地方甚至是不同的项目中重复使用。而复用率低表示很难重用这些现有的软件组成部分,如类、方法、子系统等,即使是重用也只是停留在简单的复制粘贴上,甚至根本没办法重用,程序员宁愿不断的重复编写一些已有的程序代码。
    4.黏度过高(Viscosity):对系统进行改动时,有时候 可以保存系统的原始设计意图和原始设计框架,有时候可以破坏原始设计意图和原始设计框架,前者对系统的扩展更有利,应该尽量按照前者来进行改动。如果采用后者比前者更容易则称为系统的黏度过高,黏度过高将导致程序员采用错误的代码维护方案。
  那么这样的系统才算一个好的设计,才是一个复用性较高的设计呢?软件工程和建模大师Peter Coad认为,一个好的系统设计应该具备如下三个性质:
    1.可扩展性(Extensibility):容易将新的功能添加到现有的系统中,与“过于僵硬“相对应。
    2.灵活性(Flexibility):代码修改时不会波及很多其他模块,与”过于脆弱“项对应。
    3.可插入性(Pluggability):可以很方便地将一个类抽取出去,同时将另一个有相同接口的类添加进来,与”黏度过高“相对应。
  软件的复用或常用拥有众多优点,如可以提高软件的开发效率,提高软件质量,节约成本,恰当的复用还可以改善系统的可维护性。
  面向对象设计复用的目标在于实现支持可维护性的复用,如在JAVA这样的语言中,可以通过面向对象技术中的抽象、继承、封装和多态等特性来实现更高层次的可复用性。通过抽象和继承使得类的定义可以复用,通过多态使得类的实现可以复用,通过抽象和封装可以保持和促进系统的可维护性。在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些原则可以有效的提高系统的复用性,同时提高系统的可维护性。
  常用的面向对象的设计原则包括如下7个:单一职责原则(Single Responsibility Principle,SRP)、开-闭原则(Open-Close Principle,OCP)、里氏代换原则(Liskov Substituition Principle,LSP)、依赖倒换原则(Dependence Inversion Principle,DIP),接口隔离原则(Interface Segregation Principle,ISP)、合成复用原则(Composition Reuse Principle,CRP)、迪米特法则(Law of Demeter,LoD)。这些原则并不是孤立存在的,它们相互依赖,相互补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值