面向对象与面向过程程序设计的思考与解释
(蒋世贤 电子商务071 山东工商学院)
面向过程程序设计与面向对象程序设计都是一种设计程序的方法,由于其对对象操作的不同而产生了不同的设计思想。本文在笔者学习了《面向对象程序设计——C++语言描述》这门课后,由笔者整理总结面向对象程序设计与面向过程程序设计的区别与联系后,写下此文,主要阐明笔者对两种程序设计思想的思考与理解。
一、面向对象与面向过程程序设计简介
面向对象程序设计中的以“对象”作为编程实体最早可以追溯到1960年的Simula 67语言。而面向过程程序设计则诞生的比面向对象程序设计要早的多。两者都有着各自的核心思想结构。面向过程设计的思想发展较早,当今的C语言就是面向过程的一个典型,而面向对象则以其独特的程序设计视角被当今人广泛接受,C++就是其典型的代表。
(一)面向过程程序设计
面向过程的结构化程序设计方法就是采用面向过程的方法来设计结构化程序。结构化程序通常包含一个主过程和若干个子过程,其中每个子过程都描述了某一个小问题的解决方法再由主过程自顶向下调用各子过程,来逐步解决整个问题。整个执行过程是从主过程开始,再在主过程的结束语句处结束。因此,结构化程序设计方法是一种数学思维或计算机思维方法,和人们认识世界时所习惯使用的方法不同。
面向过程程序设计通常采用自顶向下设计方法进行设计。在这种设计方法中,程序的每一个步骤直接的函数依赖关系是非常紧密的。要解决一个问题,就要通过一个个所设计好的函数步骤进行,每一个环节都是环环相扣的,都不能出错。一旦一个环节出错,将影响至整个问题的解决结果。
面向过程设计语言以C语言、Pascal语言为主。而关于相关代码的举例说明,我们将在下面进行对比介绍。
(二)面向对象程序设计
面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设
计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。[1]
在面向对象程序设计中,程序是由一个个的模块构成的。程序设计过程中,我们先对这些模块分别进行设计、编码和测试,最后再将这些模块有机的组合在一起,构成一个完整的应用程序。在面向对象程序设计中最主要的概念就是类、对象、方法、详细传递机制、继承性、封装性、多态性、抽象性等了。而它与面向过程设计的不同也体现在这些概念之上。
早期,完全面向对象的语言主要包括Smalltalk等语言,目前较为流行的语言中有Java、C#、Eiffel等[2]。
二、面向对象与面向过程程序设计之间的联系
面向过程的程序设计思想诞生于面向对象的程序设计思想之前,两者都是在了为了更加方便的编写程序的过程中应运而生的。面向对象的设计思想核心是对象,而面向过程程序设计则强调于程序的过程。但是两者之间又有联系。下面的部分则是着重说明面向对象与
面向过程程序设计之间的联系。
(一)面向过程程序设计的思想
正如之前所叙述的,面向过程程序设计的核心思想是对程序自顶向下的设计。下面以设计通讯录这一具体实例为例。在编程人员设计通讯录时,首先要定义通讯录所涉及的变量的类型。其中,对于存储通讯录人名的变量我们会使用char型进行定义,而对存储号码的变量我们会使用int型进行定义。但是在实际操作中,我们不用对所存储的电话号码进行数值上的大小比较,所以为了便于操作,对于电话号码,我们也用字符型char型进行定义。这样,一个姓名对应多个电话号码,而每一个姓名也对应着一个朋友条目,所以在开始之前,我们定义了所有变量的类型,这些变量涉及到姓名、电话号码、朋友条目等内容。而这个设计思想如下图1所示:
而为了方便管理朋友条目等变量内容,我们还要使用到指针参数。这样就方便将一个联系人姓名从一个朋友条目而转移至另一个朋友条目了。
(二)面向对象程序设计的思想
面向对象编程和面向对象设计着眼于解决在面向过程编程和自顶向下设计方法中出现的一些问题,如串联改变等。[3]在面向对象编程中,构成模块的基本单元是类,而不是过程。
再拿通讯录为例,如果以面向对象设计语言来编写的话,我们首先要为各个对象创建适合他们的类。通过对通讯录的研究,我们首先要为通讯录创建一个类。这个类包含了姓名、电话、Email等属性。其相关代码如下:
#include "CommEntry.h"
void CommEntry::input(){
cout<<"Name:";
cin>>name;
cout<<"Tel:";
cin>>tel;
}
void CommEntry::output(){
cout<<"Name:"<<name<<endl;
cout<<"Tel:"<<tel<<endl;
}
void CommEntry::setName(string nm){
name = nm;
}
void CommEntry::setTel(string t){
tel =t;
}
string CommEntry::getName(){
return name;
}
string CommEntry::getTel(){
return tel;
}
void FriendEntry::input(){
CommEntry::input();
cout<<"Email:";
cin>>Email;
}
void FriendEntry::output(){
CommEntry::output();
cout<<"Email:"<<Email<<endl;
}
void FriendEntry::setEmail(string em){
Email = em;
}
string FriendEntry::getEmail(){
return Email;
}
而关于对姓名、电话输入、输出的代码如下:
#include <string>
#include <iostream>
using namespace std;
class CommEntry{
public:
void input();
void output();
void setName(string nm);
void setTel(string t);
string getName();
string getTel();
private:
string name;
string tel;
};
class FriendEntry : public CommEntry{
public:
void input();
void output();
void setEmail(string em);
string getEmail();
private:
string Email;
};
而相应的主程序的代码如下:
#include <cstdlib>
#include <iostream>
#include "CommEntry.h"
using namespace std;
int displayMenu(){
int i;
cout<<endl;
cout<<"================"<<endl;
cout<<"1.输入通讯录条目"<<endl;
cout<<"2.输出通讯录条目"<<endl;
cout<<"3.修改姓名"<<endl;
cout<<"4.修改电话"<<endl;
cout<<"0.退出"<<endl;
cout<<"================"<<endl;
cout<<"请选择(0-4):";
cin>>i;
return i;
}
int main(int argc, char *argv[]){
int iChoice =1;
FriendEntry ce;
while (iChoice!=0){
iChoice = displayMenu();
switch (iChoice){
case 1:
ce.input();
break;
case 2:
ce.output();
break;
case 3:{
string nm;
cout<<"name:";
cin>>nm;
ce.setName(nm);
break;
}
case 4:{
string t;
cout<<"tel:";
cin>>t;
ce.setTel(t);
break;
}
case 0:
break;
}
}
system("PAUSE");
return EXIT_SUCCESS;
pascal语言面向对象吗}
由此我们可以知道,我们先定义了通讯录这个类,然后再完善了其中姓名、电话、Email等内容的属性。而各个属性之间的关系我们又用了相关代码加以定义。
(三)面向对象与面向过程程序设计之间的联系
由上述通过创建通讯录的实例我们可以看出,在面向对象程序设计中,程序的模块结构和可读性比面向过程的要好,同时有关通讯录类(CommEntry)能在程序中直接反映出来,其概念和处理方法比较符合人类认识问题、分析问题和解决问题的一般规律。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论