面向对象

面向对象分析与设计方法是为了适应人类理解事物的特点而出现的。人类理解事物的方法就是将事物抽取共性、分门别类。它的出现不是替机器着想,而是替人类着想,体现了软件的易理解性、可维护性越来越重要。

“道生一,一生二,二生三,三生万物”,意味着万事万物的纷繁变化离不开背后的根本原理——道。软件面向对象分析与设计也是如此,所谓的“道”就是为什么要有面向对象设计。由它来衍生出各大设计原则,再衍生出各种设计模式。

为什么要有面向对象分析与设计——为了适应人类理解事物的特点——将事物抽取共性、分门别类——在一定抽象层次上统一对待!

如果不是在一定抽象层次上需要统一对待某一类事物,为何要抽象呢?代码复用?公用函数不是一样代码复用?常常有朋友问:“椅子与沙发应是否应该继承自同一个父类?”,我不得不回答:“使用的场景是什么呢?” 如果没有场景需要统一对待它们,这个问题还真不好说……

值得注意的是,事物是立体的,每一种抽象都是从某一方面、某一视角来看的,从另外一个视角来看的话,很有可能完全是另一颗抽象层次树。比如:家具从用途来划分是一种抽象层次树,而从做工来划分,就是另一种抽象层次树。

有一个有趣的例子,关于正方形是不是矩形的。我们从小学的几何知识中就学到,正方形是特殊的矩形,这个还需要讨论吗?呵呵,这个问题还真是有趣,在几本大师的书中也提到过这个问题,比如,闫宏的《Java与模式》、Robert C. Martin的《敏捷软件开发 原则、模式与实践》,个人觉得仍未点透。

正方形是特殊的矩形——是从“读取边长”角度来看的,就是说,这个形状是边长固定了的,如果从“设置边长”角度来看,正方形就不能说是矩形的子类了,因为子类的行为与父类不一致。要点透的是:抽象是从某一视角来看的。不说明视角与如何对待该类事物来说抽象是没有意义的。

你可能感兴趣的:(java,设计模式,敏捷)