第19卷第3期 电脑与信息技术 Vol.19 No.3 2011年6月 Computer and Information Technology Jun.2011 文章编号:1005-1228(201D03-0049-03 面向过程、面向对象与泛型程序设计的对比分析 包得海,刘昉 (甘肃民族师范学院计算机科学系,甘肃合作747000) 摘要:编程语言在软件设计领域经历过三次重大的变革,它们分别是面向过程的编程,面向对象的编程和泛型编程。其 中的每一次变革不仅影响到编程语言本身,更影响到软件工程中的各个领域。文章介绍了这三种程序的设计方法,并且对 其进行了比较和分析。 关键词:面向过程程序设计:面向对象程序设计:泛型程序设计:对比分析 中图分类号:TP311 文献标识码:A The Comparison Between Process-Oriented Programming, Object-Oriented Programming and Generic Programming BAO De-hai,LIU Fang (Computer Department of Gansu Normal University for Nationalities,Hezuo 747000,China Abstract:Programming language in software design area has gone through three major changesthey are process oriented programming.object-oriented programming and generic programming.Which changes each time affect not only the programming language itself but also every area in software engineering.This article describes the three programming methods and their comparison and analysis Key words:process oriented programming:object-oriented programming:generic programming:contrast found 软件复用一直是软件开发领域每个软件工程师所 关系尽可能简单,在功能上相对独立:每一模块内部均 关注的焦点,在程序设计方面,先后出现过三种程序设 是由顺序、选择和循环三种基本结构组成:其模块化实 计方法,分别是面向过程的程序设计,面向对象的程序 现的具体方法是使用子程序。面向过程的程序流程在 设计和泛型程序设计。面向过程的设计方法在软件行 编码时己确定四。 业得到广泛的接受和使用,并由此而建立起来的结构 “面向过程”所采用的是自顶向下、逐步求精的开 化方法一度成为早期主导地位的软件构造和开发方 发方法,先将一个复杂的大系统分解为若干个可独立 法。面向对象的方法提出后,当代软件工程的发展逐渐 设计的子模块,并明确各模块间的组装与交互机制,在 从传统的结构化方法转向面向对象的方法。而泛型程 各个子模块设计完成之后将这些子模块组合起来,形 序设计是最近几年新出现的一种方法,它相对面向对 成最终的大系统。系统的模块化设计,目前还没有一个 象而言,在更高层次上对数据进行抽象,它的出现,必 完全机械式的形式化的方法。 将在将来的软件工程领域出现一种新的开发方法。 “面向过程”中的模块设计坚持的是“高内聚,低耦 1面向过程程序设计 合”的设计原则。其中“高内聚”是指每一个模块都执行 一个完整的功能,具有一个完整功能的业务都组合在 “面向过程”是一种以模块为中心的编程思想。面 一个模块当中,而不会分散到两个或者多个模块当中。 向过程的软件,其程序结构是按功能划分为若干个基 “低耦合”是指每一个模块之间的共用的信息应该尽量 本模块,这些模块形成一个树状结构,这个树形结构表 少,比如说参数,全局变量等,换句话说,就是每个模块 现的是各个模块之间相互调用的关系:各模块之间的 之间的交集应该尽可能的小,应该尽量降低每个模块 收稿日期:2011-01-25 资助课题:甘肃省高等学校研究生导师科研项目(编号:1012.060 作者简介:包得海(1972-),男,甘肃永登人,硕士,讲师,主要研究方向:智能算法及藏文数据库:刘昉(1967-),男,甘肃天水人,副教授,主要研究方 向:计算机网络。 1994-2011 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
第 19 卷第 3 期 收稿日期:2011- 01- 25 资助课题:甘肃省高等学校研究生导师科研项目(编号:1012- 06) 作者简介:包得海(1972-),男,甘肃永登人,硕士,讲师,主要研究方向:智能算法及藏文数据库;刘 昉(1967-),男,甘肃天水人,副教授,主要研究方 向:计算机网络。 面向过程、面向对象与泛型程序设计的对比分析 包得海,刘 昉 (甘肃民族师范学院计算机科学系,甘肃 合作 747000) 摘 要:编程语言在软件设计领域经历过三次重大的变革,它们分别是面向过程的编程,面向对象的编程和泛型编程。其 中的每一次变革不仅影响到编程语言本身,更影响到软件工程中的各个领域。文章介绍了这三种程序的设计方法,并且对 其进行了比较和分析。 关键词:面向过程程序设计;面向对象程序设计;泛型程序设计;对比分析 中图分类号:TP311 文献标识码:A The Comparison Between Pr ocess- Oriented Pr ogramming, Object- Oriented Pr ogramming and Generic Pr ogramming BAO De- hai,LIU Fang (Computer Department of Gansu Normal University for Nationalities,Hezuo 747000,China ) Abstract:Programming language in software design area has gone through three major changes,they are process- oriented programming, object- oriented programming and generic programming.Which changes each time affect not only the programming language itself but also every area in software engineering.This article describes the three programming methods, and their comparison and analysis. Key wor ds: process- oriented programming; object- oriented programming; generic programming;contrast found 软件复用一直是软件开发领域每个软件工程师所 关注的焦点,在程序设计方面,先后出现过三种程序设 计方法,分别是面向过程的程序设计,面向对象的程序 设计和泛型程序设计。面向过程的设计方法在软件行 业得到广泛的接受和使用,并由此而建立起来的结构 化方法一度成为早期主导地位的软件构造和开发方 法。面向对象的方法提出后,当代软件工程的发展逐渐 从传统的结构化方法转向面向对象的方法。而泛型程 序设计是最近几年新出现的一种方法,它相对面向对 象而言,在更高层次上对数据进行抽象,它的出现,必 将在将来的软件工程领域出现一种新的开发方法。 1 面向过程程序设计 “面向过程”是一种以模块为中心的编程思想。面 向过程的软件,其程序结构是按功能划分为若干个基 本模块,这些模块形成一个树状结构,这个树形结构表 现的是各个模块之间相互调用的关系;各模块之间的 关系尽可能简单,在功能上相对独立;每一模块内部均 是由顺序、选择和循环三种基本结构组成;其模块化实 现的具体方法是使用子程序。面向过程的程序流程在 编码时已确定[1]。 “面向过程”所采用的是自顶向下、逐步求精的开 发方法,先将一个复杂的大系统分解为若干个可独立 设计的子模块,并明确各模块间的组装与交互机制,在 各个子模块设计完成之后将这些子模块组合起来,形 成最终的大系统。系统的模块化设计,目前还没有一个 完全机械式的形式化的方法[1]。 “面向过程”中的模块设计坚持的是“高内聚,低耦 合”的设计原则。其中“高内聚”是指每一个模块都执行 一个完整的功能,具有一个完整功能的业务都组合在 一个模块当中,而不会分散到两个或者多个模块当中。 “低耦合”是指每一个模块之间的共用的信息应该尽量 少,比如说参数,全局变量等,换句话说,就是每个模块 之间的交集应该尽可能的小,应该尽量降低每个模块 文章编号:1005-1228(2011)03-0049-03 Vol.19 No.3 Jun. 2011 第 19 卷第 3 期 201 1 年 6 月 电 脑 与 信 息 技 术 Computer and Information Technology
·50· 电脑与信息技术 2011年6月 之间的耦合度。 一个“模型”。如果概念C2拥有概念C1的所有功能, 并且加上其他功能,便说C2是C1的一个强化。它们 2面向对象程序设计 三者之间的关系如图1所示: “面向对象”的特色是程序围绕被操作的对象来设 计,不是围绕操作本身。所以面向对象里有几个新的概 Conceptl Refinement 念,这就是对象、类、方法、事件、属性等。“面向对象”方 Modeling 法是一种把面向对象的思想应用于软件开发过程中, Modeling 知道开发活动的系统开发方法,简称OO Concept11 (Object-Oriented方法,是建立在“对象"概念基础上的 方法学。它的基本思想是把软件系统分解成一个个的 对象,以对象为中心,以类和继承为构造机制来认识、 图1泛型程序设计三概念之间的关系示意图 理解、刻画客观世界和设计、构建相应的软件系统。 4 三种程序设计的比较 “面向对象”是一种以事物为中心的编程思想。把 数据及对数据的操作放在一起,作为一个相互依存的 上述三种程序设计方法虽然在本质上有很大的区 整体一对象。对同类对象抽象出其共性,形成类。类 别,但它们之间仍然存在连系。面向对象是面向过程发 中的大多数数据,只能用本类的方法进行处理。类通过 展到一定阶段的产物,而泛型程序设计又是面向对象 接口与外界发生关系,对象与对象之间通过消息进行 发展到一定阶段的产物,比如面向对象中的类的成员 通信。程序流程由用户在使用中决定四。 函数离不开面向过程中的函数,而没有面向对象中对 面向对象程序设计方法的中心是围绕着对象、类、 类型的抽象,也不会有泛型程序设计的发展。 消息、继承性和多态性等机制展开的。其中对象、类是 4.1抽象层次 面向对象程序设计方法的核心,消息是连接它们的纽 面向过程的开发在解决问题的时候有点欠缺,抽 带,继承性是面向对象程序设计方法得以最大限度地 象层次不够,因为面向过程主要是以数据流和时间的 实现代码重用,而多态性则是使这一方法更加灵活和 触发进行过程,以函数和模块为共享的单位,如果应用 高效。 的需求经常变化,则面向过程建立起来的程序结构也 会随着需求的改变而发生变化。面向对象的开发是从 3泛型程序设计 现实世界抽象出一个个的对象,再对具有共同特征的 泛型程序设计是以类型需求为中心的程序设计方 对象抽象出类,并通过继承来实现程序的共享和重用, 法。就是说要将程序写得尽可能通用,可以适合多种数 通过消息来实现各个对象之间的通信。在类这一层次 据类型的操作,同时并不损失效率。泛型程序设计的抽 对软件系统进行抽象,而泛型程序设计比面向对象程 象机制是直接建立在需求分析上,从而易于同需求分 序设计具有更高的抽象能力。由于面向对象程序设计 析阶段更好地衔接。泛型程序设计的过程就是发现类 是以共同的基类为共性抽象,而泛型程序设计是以共 型需求、分析类型需求之间的关系,并运用这种类型需 同的需求条件为共性抽象,因此,泛型程序设计比面向 求关系实现系统结构和逻辑的过程。 对象程序设计具有更高的抽象能力,并且泛型程序设 泛型设计的目标是将算法从对象的行为中分离出 计包含了面向对象程序设计的核心内容。 来,做到算法的设计与数据结构无关,从而实现算法 4.2语言的复杂性 软件的复用。泛型设计必须创新一种技术,将数据结 面向过程的设计是以函数和模块为共享单位,因 构与算法之间的强祸合关系削弱为弱祸合关系,从而 此,面向过程的语言相对而言要简单一些,面向对象是 解决算法软件的复用问题。 以类和接口来对程序进行抽象和组装,比面向过程的 泛型程序设计有三个非常重要的概念,也是泛型 语言抽象性更高,而类和接口的组织和建立要比函数 程序设计的基石,它们是概念(Concep心、模型 的建立复杂得多,因此,面向对象的程序设计语言比面 Modeling)、强化Refinement。概念是一组能支持相 向过程的程序设计语言要复杂。而泛型程序设计是以 应的操作类型数据的定义,这些操作与具体的数据类 共同的需求条件为共同的抽象,具有相同的需求条件, 型无关,也可以认为它是一组类型的集合。当某个类型 在泛型程序设计中就可以进行相同的抽象,而在需求 满足某个“概念”的所有条件,称此模型为该“概念”的 层次上的抽象要比在类和对象上的抽象又要复杂得 1994-2011 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
电 脑 与 信 息 技 术 2011 年 6 月 之间的耦合度。 2 面向对象程序设计 “面向对象”的特色是程序围绕被操作的对象来设 计,不是围绕操作本身。所以面向对象里有几个新的概 念,这就是对象、类、方法、事件、属性等。“面向对象”方 法是一种把面向对象的思想应用于软件开发过程中, 知 道 开 发 活 动 的 系 统 开 发 方 法 , 简 称 OO (Object- Oriented)方法,是建立在“对象”概念基础上的 方法学。它的基本思想是把软件系统分解成一个个的 对象,以对象为中心,以类和继承为构造机制来认识、 理解、刻画客观世界和设计、构建相应的软件系统。 “面向对象”是一种以事物为中心的编程思想。把 数据及对数据的操作放在一起,作为一个相互依存的 整体——对象。对同类对象抽象出其共性,形成类。类 中的大多数数据,只能用本类的方法进行处理。类通过 接口与外界发生关系,对象与对象之间通过消息进行 通信。程序流程由用户在使用中决定[2]。 面向对象程序设计方法的中心是围绕着对象、类、 消息、继承性和多态性等机制展开的。其中对象、类是 面向对象程序设计方法的核心,消息是连接它们的纽 带,继承性是面向对象程序设计方法得以最大限度地 实现代码重用,而多态性则是使这一方法更加灵活和 高效。 3 泛型程序设计 泛型程序设计是以类型需求为中心的程序设计方 法。就是说要将程序写得尽可能通用,可以适合多种数 据类型的操作,同时并不损失效率。泛型程序设计的抽 象机制是直接建立在需求分析上,从而易于同需求分 析阶段更好地衔接。泛型程序设计的过程就是发现类 型需求、分析类型需求之间的关系,并运用这种类型需 求关系实现系统结构和逻辑的过程[3]。 泛型设计的目标是将算法从对象的行为中分离出 来,做到算法的设计与数据结构无关,从而实现算法 软件的复用。泛型设计必须创新一种技术,将数据结 构与算法之间的强祸合关系削弱为弱祸合关系,从而 解决算法软件的复用问题。 泛型程序设计有三个非常重要的概念,也是泛型 程 序 设 计 的 基 石 , 它 们 是 概 念 (Concept)、模 型 (Modeling)、强化(Refinement)。概念是一组能支持相 应的操作类型数据的定义,这些操作与具体的数据类 型无关,也可以认为它是一组类型的集合。当某个类型 满足某个“概念”的所有条件,称此模型为该“概念”的 一个“模型”。如果概念 C2 拥有概念 C1 的所有功能, 并且加上其他功能,便说 C2 是 C1 的一个强化。它们 三者之间的关系如图 1 所示: 图 1 泛型程序设计三概念之间的关系示意图 4 三种程序设计的比较 上述三种程序设计方法虽然在本质上有很大的区 别,但它们之间仍然存在连系。面向对象是面向过程发 展到一定阶段的产物,而泛型程序设计又是面向对象 发展到一定阶段的产物,比如面向对象中的类的成员 函数离不开面向过程中的函数,而没有面向对象中对 类型的抽象,也不会有泛型程序设计的发展。 4.1 抽象层次 面向过程的开发在解决问题的时候有点欠缺,抽 象层次不够,因为面向过程主要是以数据流和时间的 触发进行过程,以函数和模块为共享的单位,如果应用 的需求经常变化,则面向过程建立起来的程序结构也 会随着需求的改变而发生变化。面向对象的开发是从 现实世界抽象出一个个的对象,再对具有共同特征的 对象抽象出类,并通过继承来实现程序的共享和重用, 通过消息来实现各个对象之间的通信。在类这一层次 对软件系统进行抽象,而泛型程序设计比面向对象程 序设计具有更高的抽象能力。由于面向对象程序设计 是以共同的基类为共性抽象,而泛型程序设计是以共 同的需求条件为共性抽象,因此,泛型程序设计比面向 对象程序设计具有更高的抽象能力,并且泛型程序设 计包含了面向对象程序设计的核心内容[4]。 4.2 语言的复杂性 面向过程的设计是以函数和模块为共享单位,因 此,面向过程的语言相对而言要简单一些,面向对象是 以类和接口来对程序进行抽象和组装,比面向过程的 语言抽象性更高,而类和接口的组织和建立要比函数 的建立复杂得多,因此,面向对象的程序设计语言比面 向过程的程序设计语言要复杂。而泛型程序设计是以 共同的需求条件为共同的抽象,具有相同的需求条件, 在泛型程序设计中就可以进行相同的抽象,而在需求 层次上的抽象要比在类和对象上的抽象又要复杂得 ·50·