戏谈面向对象

面向对象

面向对象其实就是它的三大特性:封闭性,继承,多样性。这三点几乎就是面向对象的全部了。他们之间的关系类似于《道德经》中的宇宙观:道生一,一生二,二生三,三生万物。

先来吐个槽

很多讲面向对象的书,把继承放在封闭性前面,那么我很是不能理解作者的意图。没有封闭性继承从何而生从何而来呢?

说的具体点,一个人或者说是读者,还不知道世界上有Class和Obect这两个东西是做什么用的,你只告诉他extends可以使子类共享父类的对象,那不就成了为了学知识而学知识了吗。

接下来详细说说这三个特性

封闭性——道生一

在早期的编程中(如早期的C语言),没有类和对象的概念,所有的逻辑以函数的形式写在一个文件里面。我们称之为“胖球模式”,这种模式非常不利于大型软件的和维护扩展。那么封闭性就再这个时候应运而生,将相互配合紧密即耦合性高,或逻辑关联性高的几个变量和方法放在同一个类中,提高了软件的可读性和可维护性,产生了高内聚低耦合的编程思想。

由封闭到继承——一生二,二生三

有了类和对象,为了共用代码提高开发效率,就有了继承这个东西。子类可以轻易获得父类的功能和接口。子类又可以再有自己的子类,不断扩展功能又不破坏单个文件的可读性和可维护性。这是“二生三”再纵向,即深度上表现为“子子孙孙无穷匮也....”

多样性——二生三,三生万物

类继承的行为衍生出来这样一种现象:同一个父类可以有多个不同的子类,多个子类可以继承自一个父类。这样既能轻易实现很多个类之间的公用代码,在这些类之间又存在树装的继承关系。还出现了接口这种比较虚拟的标签式父类,又衍生出诸如里式转换、设计模式等类和对象的使用技巧。

多样性还有一种较为微观的表现形式,即重载(并不是所有面向对象的语言都支持重载,当年显赫一时的ECMA4标准就不支持),同名方法根据入参数量和类型的不同继而调用不同的代码块执行不同的逻辑。

面向对象程序的世界,自此变得此丰富多彩景象万千....

额外多说点废话:面向对象的未来

从历史的发展规律来讲,花开自有花落,一个东西有出现和发展必然也有消亡和消失。面向对象最终会随着人编程的消亡而退出历史舞台。随着人工智能和CPU运算性能的发展,人工编程和它所使用的面向对象终将一同退出历史舞台。

未来使用机器智能进行编程和测试,计算机可以轻而易举的灵活使用十万个函数,甚至当电脑性能达到一定程度时,可以用穷举数据组合排列的蛮力法进行穷举便利测试来测试验证程序的正确性。这个场景中就不再需要Class和Object这种逻辑来辅助开发。

不过随着人工智能,准确的说是机器智能的不断进步和演进,我猜测类和对象还会重新回到开发中来,不过那个时候的面向对象,是用于机器智能编程的,比现在的类和对象肯定要先进许多许多,也许这就不是我这个时代的人能预测的事情了。

猜你喜欢

转载自blog.csdn.net/Aman1984/article/details/82903469