面向对象编程 vs 面向过程编程

面向过程编缉是最容易让人理解的编程方式。将数据与逻缉分开,逻缉本身就是一些步骤。

面向对象支持:封装、继承、多态

封装:

面向对象的编程方法,要求把数据和数据相关的操作放到一个对象中,从而在语言层面上,支持逻缉的对象分解。这自然的使逻缉模块化了。程序的模块化,是大型程序所必须的,面向过程编程一样需要程序模块化。面向对象编程扩展了面向过程编程的模块划分方法。

对象分解,为逻缉分解提供了依据,从而导致逻缉的简洁表达(过程的表达,变为对相关对象发消息)和复用。

之所以会导致复用是因为
对象会出现在各种与它相关的逻缉中,这样对象自身的逻缉就可能被复用。这是面向对象编程的魔咒。更令人激动的是,软件中的对象是可以和领域对应上的。领域中的对象的可复用性,直接导致了软件中对应的对象的可复用性。

而面向过程编程的逻缉化分是随意的。在一个过程中混合多个对象的逻缉,很可能导致重复代码。


继承:

继承如果从复用方向理解,和面相向过程相比,并没什么新能力。 而且java是单继承的,因此要想复用两个无关的类的功能是不可能的。

然而,继承所代来的革新是利用多态,在程序中直接表达泛化关系。
这是很重要的,使得程序可以处理抽象的对象,而不只是具体的对象。这正是人类处理问题的常用手段。

多态:
提供了将基类具体化的能力。

面向对象编缉改变了程序的内在结构,但注意:程序中的对象,并非是事物的等效表达。
对象的属性是对象相关的数据信息,而方法是外界可对对象进行的操作。也就是说,对象有什么方法,是由外界需要对它进行什么操作决定的。而不是对象天生固有的。

比如说:书, 是一个对象, 翻书是一个方法。而书需不需要有翻书的方法,取决于程序中是不是需要这个方法。又如:也许程序中需要一个方法计算书本身的分子总数,这样书对象就需要加上一个 “获得分子总数” 的方法了。

猜你喜欢

转载自gdpglc.iteye.com/blog/1203638
今日推荐