面向某个东西,就表明这个东西是主导因素。
面向对象,那么对象就是主导因素。因此我们首先实现的不是函数,而是“类”,也即对象。
首先我们知道世界上有很多类,比如人类,爬虫类,鱼类。而人类中还有超人类,变异人类,巨人类等等(仅供参考)。
在面向对象时,我们实现程序,就是先实现某个类,比如“超人类”。然后我们实现它其中的一个方法,比如“cry”。这个cry方法是源自于它的父类“人类”的。如果你不实现它,那么超人类哭起来也和普通人类没有什么不同。这就是面向对象中的“继承”。
而在面向过程的编程时,我们只知道方法“cry”,我们首先实现了它,而不考虑任何的其他要素。假设这个cry函数实现了人类的cry。
过了一段时间,我觉得超人类可以用一滴眼泪让人起死回生,那么应该怎么编程呢?一般来说,在cry里写肯定就行不通了,得用superman_cry函数来替代。而人类的cry怎么办?我们把它改写成了human_cry。
在面向对象时,对象是主导,你只需要调用person.cry()函数,而不需要担心他是人类,超人类,或者是更细节的婴儿时期、青年、壮年、抑或老年。而在面向过程时,你必须给这些诸多可能进行分门别类的一个一个判断,写出众多的函数。在可能越来越多,项目越来越大时,函数就以指数级增长了。
面向过程非常不利于解耦,对维护也有非常大的麻烦——往往写出代码的人都不能很好的搞定自己的代码。
面向对象,那么对象就是主导因素。因此我们首先实现的不是函数,而是“类”,也即对象。
首先我们知道世界上有很多类,比如人类,爬虫类,鱼类。而人类中还有超人类,变异人类,巨人类等等(仅供参考)。
在面向对象时,我们实现程序,就是先实现某个类,比如“超人类”。然后我们实现它其中的一个方法,比如“cry”。这个cry方法是源自于它的父类“人类”的。如果你不实现它,那么超人类哭起来也和普通人类没有什么不同。这就是面向对象中的“继承”。
而在面向过程的编程时,我们只知道方法“cry”,我们首先实现了它,而不考虑任何的其他要素。假设这个cry函数实现了人类的cry。
过了一段时间,我觉得超人类可以用一滴眼泪让人起死回生,那么应该怎么编程呢?一般来说,在cry里写肯定就行不通了,得用superman_cry函数来替代。而人类的cry怎么办?我们把它改写成了human_cry。
- 这个时候调用者就头疼了:什么时候调用human_cry,什么时候调用superman_cry呢?
- 而且是不是每个类想要cry,就要加一个函数呢?
- 假如我想实现超人类的其他行为,又该怎么做呢?是不是用superman_beat,superman_eat这样来增加一系列函数呢?
- 而人类中的函数失效了以后,超人类涉及到调用人类的函数又怎么办呢?
在面向对象时,对象是主导,你只需要调用person.cry()函数,而不需要担心他是人类,超人类,或者是更细节的婴儿时期、青年、壮年、抑或老年。而在面向过程时,你必须给这些诸多可能进行分门别类的一个一个判断,写出众多的函数。在可能越来越多,项目越来越大时,函数就以指数级增长了。
面向过程非常不利于解耦,对维护也有非常大的麻烦——往往写出代码的人都不能很好的搞定自己的代码。