面向对象程序设计与面向过程程序设计的区别(2)

面向过程程序设计和面向对象程序设计的区别

面向过程程序设计我个人的理解简单来说,他考虑问题的方式是面向流程的,一个程序的设计思路就是解决一个问题的流程。就好比游戏先登入界面,再输入密码,然后选择角色,在然后进入游戏玩耍,结束... .... 这把这些步样就是面向过程。面向过程就是分析出解决问题所需要的步骤,然后用函数骤一步调用就可以了一步实现,使用的时候一个一个依次。可以看出面向过程化程序设计是先确定算法,再确定数据结构。而面向对象程序设计是面向问题中的各种独立个体的,程序的析设分计过程就是将程序分解成不同对象(不同概念体)之间的交互的过程。这就好比在针对某个工程或游戏设计程序时先不考虑,游戏是怎么玩的,工作是怎么做的,而先会去找,游戏或工程中有哪些人或事物参与(一般选择:用户,玩家,角色等等),然后再看他们都有什么用,都干了些什么,针对这个区设计方法。最后在通过这些千丝万缕的联系把他们分门别类的,组装在一起。可以看出面向过程化程序设计是先确定数据结构再确定算法。

从上面很容易看出,面向过程的程序上一步和下一步环环相扣,他只考虑实现客户的需求不考虑以后扩展,如果以后客户的需求有变化 那代码量要改变非常大 耗费的时间也相当多。从本质上说,面向过程基本上是一种状态机,不利于修改,当新状态出现的时候,甚至可能需要重设每一个状态解决实现。所以说面向过

程是一种直接的编程方法,它是按照编程语言的思路考虑问题。尤其是想C语言这种过程式语言,它就是通过顺序执行一组语句来实现一个功能,这些语句的执行过程就是整个程序。不同的语言解决同一个问题的过程是不一样的。

而面向对象的程序设计很多东西都是独立的,每个对象都可以重复使用。而面向对象程序设计强调“封装”,“继承“和“多态”。数据和与数据相关的操作被包装成对象(严格的说是“类”),每一种对象是相对完整和独立的。对象可以有派生的类型,派生的类型可以覆盖(或重载)原本已有的操作。所有的这些,是为了达成更好的内聚性,即一种对象做好一件(或者一类相关的)事情,对象内部的细节外面世界不关心也看不到;以及降低耦合性,即不同种类的对象之间相互的依赖尽可能降低。而所有的这些,都有助于达成一个崇高的目标,就是可复用性。

下面举个例子来说明面向过程的程序和面向对象的程序设计的区别:

用面向过程的思想去考虑它应该是这样的:如何启动汽车、如何起步、加速、刹车、熄火等一个个操作。面向过程是把所有的功能全部在一个大的类里定义出来,当系统庞大时,功能多了,各种操作之间的调用关系也很复杂,当需要修改一个功能时就可能引发一连串的改动,使修改和维护成本增加,而不利于修改。

而面向对象则以汽车为对象,一切由汽车开始,以上的可用操

作,即功能是汽车这个对象本身所具有的,做任何操作只要告诉汽车就可以了。面向对象程序设计需求用继承/封装/多态/抽象 等去设计程序 代码量比面向过程化程序设计是多出了很多 但以后的扩展性和维护性是相当的高效。

下面我们来着重的来讨论面向对象的程序设计中的几个重要概念和编程思想:

抽象性——程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。

类——具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象 封装——也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。

(4)多态性(多形性)

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去响应共同的消息。 多态性增强了软件的灵活性和重用性。

(3)继承性。

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。

在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。

在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。

采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。把相关对象的共同部分(属性和动作)进行抽象,形成一个类。也就是说,不同对象通过继承(extends)可以共享这部分内容。通过不断归纳共同部分,就可形成不同层次的类(父类、子类)。这就形成了JAVA的编程思想。

面向过程编程的程序员,习惯于建立数据结构存放数据并定义方

法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。

下面以求长方形的周长和面积为例分析:

■ 面向过程的程序设计方式思考:

1、确定长方形的周长和面积的算法;

2、编写两个方法(函数)分别计算长方形的周长和面积;

3、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。

■ 面向对象的程序设计方式思考:

1、一个长方形可以看成一个长方形对象;

2、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积);

3、将所有长方形的共性抽取出来,设计一个长方形的类;

4、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。

比较面向对象程序设计和面向过程程序设计,还可以得到面向对象程序设计的优点:

1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;

2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;

3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;

4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软

C,C++,Java这些都是语言,他们之间并没有是不是面向对象的区别。用C同样可以写面向对象的程序,看看Linux的内核代码就知道了。C++,Java一样可以写面向过程的程序,他们之所以叫面向对象的编程语言是因为他们提供的语言特性更易于实现面向对象的编程方法,并不是说他们只能做面向对象编程。

还有就是并不是说面向对象一定优于面向过程。在很多领域是无法实施面向对象的方法,如硬件编程和嵌入式编程

这种实时性和效率要求高的领域就无法用到面向对象。面向对象的主要领域还是用在大型,复杂型的软件系统中。

面向过程程序设计和面向对象程序设计的区别

面向过程程序设计我个人的理解简单来说,他考虑问题的方式是面向流程的,一个程序的设计思路就是解决一个问题的流程。就好比游戏先登入界面,再输入密码,然后选择角色,在然后进入游戏玩耍,结束... .... 这把这些步样就是面向过程。面向过程就是分析出解决问题所需要的步骤,然后用函数骤一步调用就可以了一步实现,使用的时候一个一个依次。可以看出面向过程化程序设计是先确定算法,再确定数据结构。而面向对象程序设计是面向问题中的各种独立个体的,程序的析设分计过程就是将程序分解成不同对象(不同概念体)之间的交互的过程。这就好比在针对某个工程或游戏设计程序时先不考虑,游戏是怎么玩的,工作是怎么做的,而先会去找,游戏或工程中有哪些人或事物参与(一般选择:用户,玩家,角色等等),然后再看他们都有什么用,都干了些什么,针对这个区设计方法。最后在通过这些千丝万缕的联系把他们分门别类的,组装在一起。可以看出面向过程化程序设计是先确定数据结构再确定算法。

从上面很容易看出,面向过程的程序上一步和下一步环环相扣,他只考虑实现客户的需求不考虑以后扩展,如果以后客户的需求有变化 那代码量要改变非常大 耗费的时间也相当多。从本质上说,面向过程基本上是一种状态机,不利于修改,当新状态出现的时候,甚至可能需要重设每一个状态解决实现。所以说面向过

程是一种直接的编程方法,它是按照编程语言的思路考虑问题。尤其是想C语言这种过程式语言,它就是通过顺序执行一组语句来实现一个功能,这些语句的执行过程就是整个程序。不同的语言解决同一个问题的过程是不一样的。

而面向对象的程序设计很多东西都是独立的,每个对象都可以重复使用。而面向对象程序设计强调“封装”,“继承“和“多态”。数据和与数据相关的操作被包装成对象(严格的说是“类”),每一种对象是相对完整和独立的。对象可以有派生的类型,派生的类型可以覆盖(或重载)原本已有的操作。所有的这些,是为了达成更好的内聚性,即一种对象做好一件(或者一类相关的)事情,对象内部的细节外面世界不关心也看不到;以及降低耦合性,即不同种类的对象之间相互的依赖尽可能降低。而所有的这些,都有助于达成一个崇高的目标,就是可复用性。

下面举个例子来说明面向过程的程序和面向对象的程序设计的区别:

用面向过程的思想去考虑它应该是这样的:如何启动汽车、如何起步、加速、刹车、熄火等一个个操作。面向过程是把所有的功能全部在一个大的类里定义出来,当系统庞大时,功能多了,各种操作之间的调用关系也很复杂,当需要修改一个功能时就可能引发一连串的改动,使修改和维护成本增加,而不利于修改。

而面向对象则以汽车为对象,一切由汽车开始,以上的可用操

作,即功能是汽车这个对象本身所具有的,做任何操作只要告诉汽车就可以了。面向对象程序设计需求用继承/封装/多态/抽象 等去设计程序 代码量比面向过程化程序设计是多出了很多 但以后的扩展性和维护性是相当的高效。

下面我们来着重的来讨论面向对象的程序设计中的几个重要概念和编程思想:

抽象性——程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。

类——具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象 封装——也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。

(4)多态性(多形性)

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去响应共同的消息。 多态性增强了软件的灵活性和重用性。

(3)继承性。

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。

在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。

在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。

采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。把相关对象的共同部分(属性和动作)进行抽象,形成一个类。也就是说,不同对象通过继承(extends)可以共享这部分内容。通过不断归纳共同部分,就可形成不同层次的类(父类、子类)。这就形成了JAVA的编程思想。

面向过程编程的程序员,习惯于建立数据结构存放数据并定义方

法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。

下面以求长方形的周长和面积为例分析:

■ 面向过程的程序设计方式思考:

1、确定长方形的周长和面积的算法;

2、编写两个方法(函数)分别计算长方形的周长和面积;

3、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。

■ 面向对象的程序设计方式思考:

1、一个长方形可以看成一个长方形对象;

2、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积);

3、将所有长方形的共性抽取出来,设计一个长方形的类;

4、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。

比较面向对象程序设计和面向过程程序设计,还可以得到面向对象程序设计的优点:

1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;

2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;

3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;

4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软

C,C++,Java这些都是语言,他们之间并没有是不是面向对象的区别。用C同样可以写面向对象的程序,看看Linux的内核代码就知道了。C++,Java一样可以写面向过程的程序,他们之所以叫面向对象的编程语言是因为他们提供的语言特性更易于实现面向对象的编程方法,并不是说他们只能做面向对象编程。

还有就是并不是说面向对象一定优于面向过程。在很多领域是无法实施面向对象的方法,如硬件编程和嵌入式编程

这种实时性和效率要求高的领域就无法用到面向对象。面向对象的主要领域还是用在大型,复杂型的软件系统中。


相关内容

  • 面向过程和面向对象的区别
  • 面向过程就像一个细心的管家,事无具细全要考虑到,而面向对象就像是个家用电器,你只需只道他的功能,而不需知道它的工作原理 "面向过程"是一种以事件为中心的编程思想.就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实"面向对象"(Object Orie ...

  • C语言与C的区别
  • C语言与C++的区别.txt两人之间的感情就像织毛衣,建立的时候一针一线,小心而漫长,拆除的时候只要轻轻一拉....C/C++是指C语或C++,是指一系列的语言 C和C++的关系: 正如楼上所说的是win98跟winXP的关系.C++是在C的基础上增加了新的理论,玩出了新的花样.所以叫C加加. C和 ...

  • 大连交通大学(软件工程)复习大纲(最新修改)
  • <软件工程>复习大纲 第1章:软件工程的范畴 重点掌握如下的内容: 1掌握软件工程.软件危机.生命周期的概念 1% 2掌握维护的3种分类并能够结合具体例子进行判断 1% 3掌握为什么没有计划.文档和测试阶段 1% 了解如下内容: 1了解软件工程的传统生命周期模型(瀑布模型)的阶段划分和各 ...

  • 总结4:有关简述的问题
  • 总结4:有关简述的问题 1.描述一下C#中索引器的实现过程,是否只能根据数字进行索引? 索引器允许类或结构的实例就像数组一样进行索引. 索引器类似于属性,不同之处在于它们的访问器采用参数. class SampleCollection { private T[] arr = new T[100]; ...

  • 封装和构造方法
  • 1 面向对象 1.1 万物皆对象 我们是怎么认识世界的? 人类从小就不断的接触到各种各类存在世界上的各种生物,然后通过事物的公共特性,将它们归类,所以以后就不会出现见到猫叫老虎.那么我们在现实生活中,是通过具体的某个事物归纳总结它们的公共特性然后产生类那么类就描述了该种事物的的共别.性,相当于造事物 ...

  • 面向服务的体系结构主要实现技术比较研究
  • 第36卷 第1期计算机科学Vol.36No.1面向服务的体系结构主要实现技术比较研究 尹红丽1 王永明2 (云南师范大学计算机科学与信息技术学院 昆明650092)1 (华南理工大学计算机科学与工程学院 广州510641)2 摘 要 面向服务的体系结构(SOA)是一种网络环境下分布式应用系统的概念模 ...

  • 5.2 面向对象程序设计的基本概念
  • 一. 教学目标 1. 知识与技能 (1)认识面向对象程序设计中对象.类的概念及其特征. (2)认识面向对象程序设计中类.对象和实例的关系. 2. 过程与方法 (1)能够举例说明现实世界与程序世界的对象及其特征. (2)能够举例说明现实世界与程序世界的类及其特征.. (3)能够画图表示类.对象和实例三 ...

  • 软件工程考试范围
  • 1. 什么是软件?软件与硬件的区别?软件的特点? 软件的定义:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合. 软件与硬件的区别: 软件的特点:(1)软件是一种逻辑实体,而不是具体的物理实体.因而它具有抽象性 (2)软件的生产与硬件不同,在它的开发过程中没有明显 ...

  • 软件工程自考课程内容大纲
  • (一) 课程内容 第1节 软件工程的产生 第2节 软件工程过程和软件生存周期 第3节 软件生存周期模型.方法和工具 (二)考核知识点与考核要求 第1节 软件工程的产生 1. 软件的特点,要求达到识记层次. 2. 软件生产的发展,要求达到识记层次 3. 软件危机的产生.表现.原因,要求达到领会层次. ...