首页 > 代码库 > 面向对象设计(OOD)七大原则
面向对象设计(OOD)七大原则
这篇文章我会不停的维护它,它将会越来越长,但它是关于我在面向对象中的一些学习的思考心得。希望对自己对各位都能有用处。
开篇前,说明一下写这篇文章的原因。原因是因为设计模式。因为设计模式里的各种模式,都是建立在这些原则之上的。好比盖房子需要夯实的地基,或者比作数学论证中的使用到的公理。你不能说为什么盖房子一定要建立在地基之上,也不能说为什么两点一直线,三点一面这些公理为什么就这么牛逼的存在,因为这是自然规律,你必须遵守它们。这些设计原则也类似,它们没有24种设计模式那样华丽的身姿,但它们是程序设计江湖上真正的法则。许多的大师总结出了这些原则,告知了我们这些后辈。我们了解了它们,会让我们更好的设计出优秀的软件框架来。
首先,先做一下知识的普及。如果你在一些文章中看到OOD,你要懂得,这是面向对象设计(Object-Oriented Design,OOD)。如果看到一些设计书籍提到OOD,我们便知道这是指面向对象设计的意思。
接下来,真正的主角们,这些江湖上的大佬登场了。这些原则,盼望我们都能完全懂得。
Software entities should be open for extension,but closed for modification。多简单啊?!这个原则的意思大概是说:软件对扩展应该是开放的,对修改应该是关闭的。说的更通俗点儿,就是说我们开发了一个软件,应该可以对它进行功能扩展(开放),而在进行这些扩展的时候,不需要对原来的程序进行修改(关闭)。
各位,如果我们有经历一段时间的开发,会发现,一个软件的代码设计,如果能做到对功能扩展,对修改关闭是多么棒的事儿。这意味着这个软件维护的稳定性会大大提高,因为对修改关闭嘛,所以之前的代码,不需要太多的修改,我们曾经都做过全文搜索复制替换部分文件的事情,或者在好多个文件中重复的修改某段代码。如果我们的软件编码能按照对扩展开发,对修改关闭的原则去编写,尽力的让这个原则更好的体现在软件设计中,这就是一个非常棒的设计了。
总结一下,如果按照OCP原则,软件设计开发中,会有如下的优点:
1.在软件可用性上,非常灵活。你可以在软件完成对软件进行扩展,加入新的功能。这样,这个软件就可以通过不断的增加新模块满足不断变化的新需求!
2.由于对软件原来的模块不能修改,因此不用担心软件的稳定性。
对OCP的实现,主要用到的就是抽象。各位,你们在编写代码的时候,会不会经常使用抽象的思想呢。一定要用上抽象的思想去写代码。把系统所有可能的行为抽象为抽象底层,这些抽象类规定出所有具体的类必须提供的方法,这些作为系统设计的抽象层。所以使得在任何可扩展的情况下,系统的抽象层不需要修改。同时,我们也可以从抽象层再派生出其他的抽象类来修改或扩展系统的行为,因此,对于可变部分,是可以扩展的。
我们也很容易想到,在一开始进行软件设计的时候,把所有的东西都面面俱到的考虑到是不可能的(有时候也不合适)。所有可变的东西都写入到抽象底层是不可能的。因此,开闭原则很难被完全实现。只能在某些模块,某些程度,某个限度内使用这个原则。所以说,OCP具有理想主义的色彩,是OOD设计的终极目标。因此,对OCP的设计原则,许多OOD大师都费尽心思,研究OCP的实现方式。很多原则,如:里氏代换原则、合成复用原则,依赖倒转原则,接口隔离原则,抽象类,迪米特法则等,都可以看作是OCP的实现方法。
开篇前,说明一下写这篇文章的原因。原因是因为设计模式。因为设计模式里的各种模式,都是建立在这些原则之上的。好比盖房子需要夯实的地基,或者比作数学论证中的使用到的公理。你不能说为什么盖房子一定要建立在地基之上,也不能说为什么两点一直线,三点一面这些公理为什么就这么牛逼的存在,因为这是自然规律,你必须遵守它们。这些设计原则也类似,它们没有24种设计模式那样华丽的身姿,但它们是程序设计江湖上真正的法则。许多的大师总结出了这些原则,告知了我们这些后辈。我们了解了它们,会让我们更好的设计出优秀的软件框架来。
首先,先做一下知识的普及。如果你在一些文章中看到OOD,你要懂得,这是面向对象设计(Object-Oriented Design,OOD)。如果看到一些设计书籍提到OOD,我们便知道这是指面向对象设计的意思。
接下来,真正的主角们,这些江湖上的大佬登场了。这些原则,盼望我们都能完全懂得。
OOD七大设计原则一:开闭原则(Open-closed Principle,OCP)
这个原则是由Bertrand Meyer大师在1988年提出的,那时候我才1岁。这个原则是这样定义的:Software entities should be open for extension,but closed for modification。多简单啊?!这个原则的意思大概是说:软件对扩展应该是开放的,对修改应该是关闭的。说的更通俗点儿,就是说我们开发了一个软件,应该可以对它进行功能扩展(开放),而在进行这些扩展的时候,不需要对原来的程序进行修改(关闭)。
各位,如果我们有经历一段时间的开发,会发现,一个软件的代码设计,如果能做到对功能扩展,对修改关闭是多么棒的事儿。这意味着这个软件维护的稳定性会大大提高,因为对修改关闭嘛,所以之前的代码,不需要太多的修改,我们曾经都做过全文搜索复制替换部分文件的事情,或者在好多个文件中重复的修改某段代码。如果我们的软件编码能按照对扩展开发,对修改关闭的原则去编写,尽力的让这个原则更好的体现在软件设计中,这就是一个非常棒的设计了。
总结一下,如果按照OCP原则,软件设计开发中,会有如下的优点:
1.在软件可用性上,非常灵活。你可以在软件完成对软件进行扩展,加入新的功能。这样,这个软件就可以通过不断的增加新模块满足不断变化的新需求!
2.由于对软件原来的模块不能修改,因此不用担心软件的稳定性。
对OCP的实现,主要用到的就是抽象。各位,你们在编写代码的时候,会不会经常使用抽象的思想呢。一定要用上抽象的思想去写代码。把系统所有可能的行为抽象为抽象底层,这些抽象类规定出所有具体的类必须提供的方法,这些作为系统设计的抽象层。所以使得在任何可扩展的情况下,系统的抽象层不需要修改。同时,我们也可以从抽象层再派生出其他的抽象类来修改或扩展系统的行为,因此,对于可变部分,是可以扩展的。
我们也很容易想到,在一开始进行软件设计的时候,把所有的东西都面面俱到的考虑到是不可能的(有时候也不合适)。所有可变的东西都写入到抽象底层是不可能的。因此,开闭原则很难被完全实现。只能在某些模块,某些程度,某个限度内使用这个原则。所以说,OCP具有理想主义的色彩,是OOD设计的终极目标。因此,对OCP的设计原则,许多OOD大师都费尽心思,研究OCP的实现方式。很多原则,如:里氏代换原则、合成复用原则,依赖倒转原则,接口隔离原则,抽象类,迪米特法则等,都可以看作是OCP的实现方法。
本文参考:http://blog.csdn.net/brookes/article/details/1896422
(2014-08-22,暂时写到这。)面向对象设计(OOD)七大原则
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。