面向过程与面向对象程序设计(马京振)
浅谈面向对象和面向过程程序设计
浅谈面向对象和面向过程程序设计石博文【摘要】主要论述了面向过程程序设计的结构化思想和面向对象程序设计的抽象、封装、继承、多态技术,并详细介绍了两种思维方式的特点、优缺点以及相互联系.【期刊名称】《电子世界》【年(卷),期】2017(000)001【总页数】2页(P59-60)【关键词】程序设计;面向对象;面向过程;模块;封装;继承;多态【作者】石博文【作者单位】河北农业大学渤海校区理工学院【正文语种】中文程序设计是给出解决特定问题程序的过程。
程序设计的本质是把人们在现实生活中遇到的问题经过抽象处理,再利用计算机语言转换到机器能够理解的层面上去。
如今,在程序设计中,有两个非常成熟的设计方式:面向过程的程序设计和面向对象的程序设计。
2.1 设计思想面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个调用。
结构化程序设计是其核心思想。
2.2 设计特点(1)模块化模块化即功能分解,实质是采用自顶向下、逐步求精的设计过程把程序分解成单一处理功能的模块,进而通过调用相应模块并传递参数以实现程序的功能,此功能模块可以理解为函数、过程、子程序;每一模块内部均是由顺序、选择、循环三种基本结构组成,利用这三种结构的组合、嵌套,可以实现任何复杂的程序设计。
功能分解使得系统是模块的组件即:程序=(模块+模块+模块+…)、模块=(数据结构+算法)[1]。
模块设计应坚持“高内聚,低耦合”的设计原则。
其中“高内聚”是指每一个模块都执行一个完整的功能,具有一个完整功能的业务都组合在一个模块当中,而不会分散到两个或者多个模块当中;“低耦合”是指每一个模块之间的共用信息应该尽量少,每个模块之间的交集应尽可能小,应该尽量降低每个模块之间的耦合度。
(2)数据和操作分离面向过程的程序设计把重点放在解决问题的功能模块划分上,将数据和操作这些数据的函数分开。
数据处于次要地位,而过程即模块划分是关心的焦点[2]。
大学C C++语言程序设计课后习题答案1-8(电子工业出版社 阳小华 马淑萍
习题答案习题 1(参考答案)1.程序与算法的概念及二者的区别是什么?程序:为了实现特定目标或解决特定问题而用计算机语言偏写的指令序列,它由算法和数据结构组成。
算法:(Algorithm)是在有限步骤内求解某一问题所使用的一组定义明确的规则。
通俗地讲,就是计算机解题的步骤。
算法与程序的区别:计算机程序是算法的一个实例,同一个算法可以用不同的计算机语言来表达。
2.简述程序设计语言发展的过程程序设计语言经过最初的机器代码到今天接近自然语言的表达,经过了四代的演变。
一般认为机器语言是第一代,符号语言即汇编语言为第二代,面向过程的高级语言为第三代,面对象的编程语言为第四代。
3.简述高级程序设计语言中面向过程与面向对象的概念。
“面向过程”是一种以过程为中心的编程思想。
首先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步地实现,使用的时候依次调用函数即可。
一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。
“面向对象”是一种以事物为中心的编程思想。
面向对象的方法主要是将事物对象化,对象包括属性与行为。
面向过程与面向对象的区别:在面向过程的程序设计中,程序员把精力放在计算机具体执行操作的过程上,编程关注的是如何使用函数去实现既定的功能;而在面向对象的程序设计中,技术人员将注意力集中在对象上,把对象看做程序运行时的基本成分。
编程关注的是如何把相关的功能(包括函数和数据)有组织地捆绑到一个对象身上。
4.C语言程序的特点是什么?(1)C语言非常紧凑、简洁,使用方便、灵活,有32个关键字,有9种流程控制语句。
(2)C语言运算符丰富,共有45个标准运算符,具有很强的表达式功能,同一功能表达式往往可以采用多种形式来实现。
(3)数据类型丰富。
C语言的数据类型有整型、实型、字符型、数组类型、结构类型、共用类型和指针类型,而且还可以用它们来组成更复杂的数据结构,加之C语言提供了功能强大的控制结构,因而使用C语言能非常方便地进行结构化和模块化程序设计,适合于大型程序的编写、调试。
北京交通大学22春“计算机科学与技术”《软件工程与实践》期末考试高频考点版(带答案)试卷号3
北京交通大学22春“计算机科学与技术”《软件工程与实践》期末考试高频考点版(带答案)一.综合考核(共50题)1.测试计划,测试用例,出错统计和有关的分析报告一般不用长期保存。
()A.错误B.正确参考答案:A2.()用于网络的主干线路和室外连接。
A.非屏蔽双绞线B.屏蔽双绞线C.同轴电缆D.光纤参考答案:D3.以下不属于白盒测试技术的是()。
A.逻辑覆盖B.基本路径测试C.循环覆盖测试D.等价类划分参考答案:D4.有一数列:87 55 66 13 19 39 48经过一趟排序后得到:55 87 13 66 19 39 48请问使用的是何种排序方法?()A.简单插入排序B.冒泡排序C.2路归并排序D.快速排序5.计算机系统工程是一种从系统层面上的问题求解活动。
()A.错误B.正确参考答案:B6.缺乏处理大型软件项目的经验是产生软件危机的唯一原因。
()A.错误B.正确参考答案:A7.从事物的组成部件及每个部件的属性,功能来认识事物。
这种方法被称为()的方法。
A.面向对象B.面向数据C.面向过程D.面向属性参考答案:A8.在面向对象的程序设计中,派生类只能从一个基类产生。
()A.错误B.正确参考答案:A9.下列关于进程的描述错误的是()。
A.进程是动态的B.进程有生命期C.多个进程可以并行执行,不需同步机构参考答案:C10.为改正软件系统中潜藏的错误而进行的维护活动称为()A.纠错性维护B.适应性维护C.改善性维护D.预防性维护参考答案:A11.软件的发展经历了()个发展阶段A.1B.2C.3D.4参考答案:D12.软件测试是对软件规格说明,软件设计和编码的最全面也是最后的审查。
()A.错误B.正确参考答案:B13.为改正软件系统中潜藏的错误而进行的维护活动称为()。
A.纠错性维护B.适应性维护C.改善性维护D.预防性维护参考答案:A当模块中包含复杂的条件组合,只有()能够清晰地表达出各种动作之间的对应关系。
中国计量学院C++习题
精品文档,知识共享!〔校精品〕面向对象程序设计(2007053) > 模拟试题模拟试题试题1一、 选择题(每题2分,共30分)1.C++对C 语言作了很多改进,下列描述中( )使得C 语言发生了质变,从面向过程变成了面向对象。
A 、增加了一些新的运算符;B 、允许函数重载,并允许设置缺省参数;C 、规定函数说明必须用原型;D 、引进了类和对象的概念; 2.下列描述中,( )是错误的。
A 、内联函数主要解决程序的运行效率问题;B 、内联函数的定义必须出现在内联函数第一次被调用之前;C 、内联函数中可以包括各种语句;D 、对内联函数不可以进行异常接口声明;3.在C++中,关于下列设置缺省参数值的描述中,( )是正确的。
A 、不允许设置缺省参数值;B 、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;C 、只能在函数的定义性声明中指定参数的缺省值;D 、设置缺省参数值时,必须全部都设置; 4.( )不是构造函数的特征。
A 、构造函数的函数名与类名相同; B 、构造函数可以重载;C 、构造函数可以设置缺省参数;D 、构造函数必须指定类型说明。
5.( )是析构函数的特征。
A 、析构函数可以有一个或多个参数;B 、析构函数名与类名不同;C 、析构函数的定义只能在类体内;D 、一个类中只能定义一个析构函数;6.关于成员函数特征的下列描述中,( )是错误的。
A 、成员函数一定是内联函数; B 、成员函数可以重载;C 、成员函数可以设置缺省参数值;D 、成员函数可以是静态的;精品文档,知识共享!7.下列静态数据成员的特性中,()是错误的。
A、说明静态数据成员时前边要加修饰符static;B、静态数据成员要在类体外进行初始化;C、静态数据成员不是所有对象所共用的;D、引用静态数据成员时,要在其名称前加<类名>和作用域运算符;8.友元的作用是()。
A、提高程序的运用效率;B、加强类的封装性;C、实现数据的隐藏性;D、增加成员函数的种类;9.关于new运算符的下列描述中,()是错误的。
《python语言实训》面向对象程序设计实验
《python语言实训》面向对象程序设计实验一、实验目的1、掌握面向对象程序设计的思想。
2、掌握类的定义。
3、掌握对象的创建和使用。
4、掌握属性和方法的访问控制、★△类属性和实例属性、类的方法。
5、掌握继承、多重继承、多态。
6、掌握程序流程控制语句、函数与模块、数据结构等知识内容与面向对象程序设计的综合应用。
二、实验内容1、对象的创建和使用,在Python中,用赋值的方式创建类的实例,创建对象后,通过实例对象访问这个类的属性和方法。
2、从面向过程到面向对象,面向过程程序设计采用自顶向下的方法,分析出解决问题所需要的步骤,将程序分解为若干个功能模块,每个功能模块用函数来实现。
3、定义属性、定义方法、创建实例对象、调用属性和方法。
4、构造方法,在生成对象时调用,可以用来进行一些属性初始化操作,不需要显示去调用,系统会默认去执行。
5、类方法、实例方法和静态方法,方法的访问控制使用。
6、类与对象的应用、属性与方法的应用。
7、类中内置的方法、类方法、实例方法、静态方法。
8、继承与多态的应用、面向对象程序设计案例的应用。
9、Python程序控制结构、数据结构、函数与模块与面向对象程序设计方法的综合案例。
三、主要实验设备及器材1、计算机终端1套(配备Windous10系统或Windows7系统,英特尔i5及以上的处理器,4G以上内存,256G硬盘)。
2、多媒体教学设备1套。
3、网络设备套件1套。
4、Python软件、PyCharm软件、Anaconda软件等Python软件1套。
四、实验步骤(1)演示性实验教师利用多媒体等设备,对本章节的知识在Python语言的相关软件上进行演练。
(2)验证性实验学生指对Python的语言对象有了一定了解,并提出自己的相关问题,然后学生利用实验室的电脑设备解决问题。
(3)设计性实验设计程序以解决金融工程中的计量分析问题。
2、实验步骤(1)Python的Car对象的创建。
(2)在精灵宝可梦游戏中创建小火龙角色,对给出的各个属性进行迭代和私有化。
面向过程和面向对象程序设计(马京振)
面向过程与面向对象程序设计一、面向过程的程序设计面向过程(Process Oriented)这个词是在面向对象(Object Oriented)出现之后为与之相对而提出的,其实它在以前基本被叫做“结构化编程”。
早期的程序设计,大量使用共享变量(全局变量)和GOTO语句一类的东西,后来有人证明所有的程序流程都可以使用三种基本流程(顺序、选择、重复)来实现,并提出“GOTO有害说”,从此人们进行编程的方式发生重大变化,每种语言都提供这些基本控制结构的实现方式,并提供把数据访问局部化的能力,以及某种形式的模块化/分别编译机制。
在这些基础上,人们所进行的编程活动基本是通过编写用于不同目的的功能函数/过程来实现,故称为“面向过程”。
1.1面向过程设计概述面向过程的结构化程序设计方法就是采用面向过程的方法来设计结构化程序。
结构化程序通常包含一个主程序和若干个子过程,其中每个子过程都描述了某一个小问题的解决方法再由主过程自顶向下调用各子过程,来逐步解决整个问题。
结构化程序设计方法是一种数学思维或计算机思维方法,和人们认识世界时所习惯使用的方法不同。
面向过程开发方式是对计算机底层结构的一层抽象,它把程序的内容分为数据和操纵数据的操作两部分。
这种编程方式的核心问题是数据结构和算法的开发和优化。
C语言所提供的机制就是典型的结构化编程设施。
1.2面向对象设计的特点面向过程的程序设计方法通过在程序中模拟问题求解中的过程来进行问题求解,这种方法认为过程或函数可以作为建立大型复杂软件系统的抽象机制。
但由于在问题求解过程中,一些过程比较复杂,为控制复杂性,引入了功能分解的方法,即将一个复杂的过程分解为复杂性较低的低级过程,这种分解一直进行到参与设计和编程的人员可以理解的步骤或过程为止。
这样使得系统是过程的组件,在整个分解过程中,数据结构的安排是出于对过程组织的需要而进行的。
因此,数据处于次要地位,而过程是关心的焦点。
面向过程的程序方法把重点放在解决问题的过程上,将数据结构和操作这些数据结构的函数分开,在方法上存在明显的不足。
北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版习题答案
main()
{int x,y;
scanf("%d",&x);
if(x<10) if(x>=5)y=x+1;
else if(x>=0)y=x-1;
else if(x>-5)y=x;
main()
{int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */
printf("cock hen chick\n");
for(i=1;i<=20;i++)
for(j=1;j<=33;j++)
for(k=1;k<=33;k++)
{int a[]={-10,0,15,34},i;
for(i=0;i<=3;i++)
printf("%d\370C=%g\370F\t",a[i],a[i]*1.8+32);}
执行结果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F
4.源程序:
=-200
j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf("%lf%lf%lf",&a,&b,&c); 9. 13 13.000000,13.000000 10.a=a^c;c=c^a;a=a^c;(这种算法不破坏b的值,也不用定义中间变量。)
面向过程和面向对象程序设计分析
面向过程和面向对象程序设计分析作者:马金霞宋传磊来源:《中国新通信》2016年第11期【摘要】面向过程程序设计方法在上世纪八九十年代被广泛接受和使用,并占据主导地位。
面向对象程序设计方法问世后,软件开发方法面临着从面向过程范型到面向对象范型的转变,对象作为该方法的核心技术,正在得到新的开发语言和新的系统架构的支持,两种开发方法存在质的区别。
【关键词】面向过程面向对象开发方法区别在软件开发过程中,有两个非常成熟、经典的开发方法:面向过程方法和面向对象方法。
本文就个人认识对这两种方法的区别和联系做出简要阐述。
一、面向过程程序设计面向过程程序设计基于结构化程序设计思想,强调程序结构规范为顺序、选择和循环三种基本结构,利用这三种结构的组合、嵌套,可以实现任何复杂的程序设计。
遵循结构化程序设计思想设计的程序具有结构简单、规范、易理解、易维护等特点,这给程序的设计和维护带来了质的飞跃。
面向过程的程序设计方法,以算法为核心,把数据和处理过程作为相互独立的部分,数据代表问题域中的实体,而程序代码则用于处理这些数据。
把数据和代码作为分离的实体,采用计算机的观点处理问题。
计算机处理问题是分步进行的,要想让计算机实现某种功能,必须告诉计算机详细的解题步骤,即向计算机详细描述求解算法。
所以,面向过程程序设计就是按照计算机的要求,围绕算法进行程序设计。
面向过程的程序设计方法,实质上是自顶向下的功能分解法,通过逐步求精的设计过程把程序分解成单一处理功能的模块,进而通过参数传递调用相应模块以实现程序的功能。
系统功能的实现最终落实在相应的功能模块上,此功能模块可以理解为函数、过程、子程序、宏等。
以下通过C语言程序案例表述面向过程程序设计。
案例:主功能模块main(),通过调用子功能模块swap(),实现两个整型变量值的交换。
编码实现:#include “stdio.h”int swap(int *p,int *q){int t; t=*p;*p=*q;*q=t;}void main(){int x,y;scanf(“%d%d”,&x,&y);printf(“交换前x=%d,y=%d\n",x,y);swap(&x,&y);printf(“交换后x=%d,y=%d\n",x,y);}二、面向对象程序设计面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。
重大社2024《人工智能技术基础》课件模块7 面向对象程序设计
7.1.4 私有成员与公有成员
>>> class A: def __init__(self, value1 = 0, value2 = 0): self._value1 = value1 self.__value2 = value2 def setValue(self, value1, value2): self._value1 = value1 self.__value2 = value2 def show(self): print(self._value1) print(self.__value2)
在Python中,可以使用内置方法isinstance()来测试一个对 象是否为某个类的实例。
>>> isinstance(car, Car) True >>> isinstance(car, str) False
7.1.1 类定义语法
Python提供了一个关键字“pass”,类似于空语句,可以 用在类和函数的定义中或者选择结构中。当暂时没有确定 如何实现功能,或者为以后的软件升级预留空间,或者其 他类型功能时,可以使用该关键字来“占位”。
7.1.4 私有成员与公有成员
下面的代码演示了特殊成员定义和访问的方法:
>>> class Fruit:
class Car: def infor(self): print(" This is a car ")
7.1.1 类定义语法
定义了类之后,可以用来实例化对象,并通过“对象名. 成员”的方式来访问其中的数据成员或成员方法。
>>> car = Car() >>> r()
《面向对象程序设计》课件——第四章 程序流程控制
请输入一个百分制成绩: 80 对应的五分制成绩是: B
4、判断条件及组合
判断条件及组合
分支结构中的判断条件可以使用任何能够产生True或False的 语句或函数。 形成判断条件最常见的方式是采用关系操作符。
判断条件及组合
>>> 4 < 5 True >>> 0 == False True >>> "" == True False
# 判断用户输入数字的某个属性 s = eval(input("请输入一个整数: "))
if s %3 ==0 and s % 5 == 0: print("这个数字既能被3整除, 又能被5整除")
print("输入数字是: ", s)
>>> 请输入一个整数: 123 输入数字是: 123
>>> 请输入一个整数: 150 这个数字既能被3整除,又 能被5整除 输入数字是: 150
1 遍历循环: for 2 无限循环: while 3 循环控制: break和continue
1、遍历循环: for
遍历循环: for
✓ 根据循环执行次数的确定性,循环可以分为确定次 数循环和非确定次数循环。
✓ 确定次数循环指循环体对循环次数有明确的定义, 循环次数采用遍历结构中元素个数来体现。 Python通过保留字for实现“遍历循环” 。
1.Python分支结构
目录
1 单分支结构: if 2 二分支结构: if-else 3 多分支结构: if-elif-else 4 判断条件及组合
1、单分支结构: if
单分支结构: if Python的单分支结构使用if保留字对条件进行判断。
东北大学《计算机基础》课件-第5章(张老师)
C++保持了C语言的简洁、高效和接近汇编语言等优点,同时又对C语言的 不足和问题作了很多重要改进。
①增加了新的运算符,使C++应用起来更加方便;②改进了类型系统,增 加了安全性;③使用“引用”作函数参数为用户编程带来了很大方便;④允
许
函数重载,允许设置缺省参数,提高了编程的灵活性,减少了冗余返;回⑤本对章目
1. C++的特点
1抽象:是对具有特定属性及行为特征的对象进行概括,从中 提炼 出这一类对象的共性,并从通用性的角度描述其共有的属性及 行 为特征。抽象又分为数据抽象和代码抽象,前者描述某类对象的 公共属性,后者描述某类对象共有的行为特征。 2封装和数据隐藏:在面向对象程序设计中,通过封装可以将 一部分 属性和数据的操作隐藏起来,另一部分作为类的外部接口, 使用者 可以访问。这样可以对属性和操作的访问权限进行合理控制, 减少 程序之间的相互影响,降低出错的可能性。
3 确定数据结构和算法:数据结构 + 算法 = 程序
4 编写程序5 调试程序6 Fra bibliotek理资料,交付使用
返回本节目录
5.1.3 程序设计语言
程序设计语言是人们根据描述问题的需要而设计的,是计算机能 够直接识别的语言,有一套固定的符号和语法规则,是人与计算机交 流所使用的“语言”。
程序设计语言可分成机器语言、汇编语言和高级语言。前两类依 赖于计算机硬件,因机器而异,又称为低级语言,而高级语言与计算 机硬件基本无关,是目前使用非常广泛的程序设计语言。
程序设计语言就是计算机能够理解和执行的特殊语言。
5.1.2 程序设计的一般过程
概括地说,程序设计就是分析问题、编写程序、调试程序的过 程。用计算机解决实际问题的基本过程如下图所示。
前言
面向对象程序设计 第二版
面向对象技术的发展与应用:
主要应用前景:
⒈人工智能、工矿企业 ⒉高新技术产业、可视化软件的开发
经济效益:
⒈面向对象的系统分析员,月薪是面向过程系统分析员的 3~5倍。 3~5倍。 ⒉面向对象软件产品的价格大大高于面向过程的软件产品: 如: FIX(进口的工业监控软件)一套 = 15万元人民币 FIX(进口的工业监控软件)一套 15万元人民币 In Touch (进口的工业监控软件) 一套 = 20万元人民币 20万元人民币
面向对象程序设计 第二版
面向对象技术
牟永敏
电子讲义
北京信息科技大学 计算机学院
清华大学出版社
讲义制作:北京信息工程学院信息与计算科学专业05141班 讲义制作:北京信息工程学院信息与计算科学专业05141班 曹硕
面向对象程序设计 第二版
前言 课程介绍
学习目的:
面向对象程序设计是软件开发的一种新技术,通过 本课程的学习,使学生了解面向对象技术,理解面向对 象的基本方法,初步培养面向对象思维,掌握C++提供 象的基本方法,初步培养面向对象思维,掌握C++提供 的面向对象机制,为采用面向对象方法学指导具体问题 的分析、设计与实现打下良好的基础。适应现代软件产 业的发展和需要。
3、考试形式:开卷 (试题格式,参考习题解答最后的模拟 试卷)
面向对象程序设计 第二版
本书特点
1. 理论实践紧密结合 目前,介绍C++的书虽然不少, 目前,介绍C++的书虽然不少,但是大部分是只介绍了 C++的语法功能,而忽略了如何在面向对象的理论指导下, C++的语法功能,而忽略了如何在面向对象的理论指导下,利 用C++语言来解决实际问题的系统化论述。使许多读者在学完 C++语言来解决实际问题的系统化论述。 C++语言以后,并没有把程序设计方法真正由“面向过程” C++语言以后,并没有把程序设计方法真正由“面向过程”飞 跃 到“面向对象”,甚至有的读者用C++语言开发环境,仍然进 面向对象” 甚至有的读者用C++语言开发环境, 行 着“面向过程”的软件开发。 面向过程”的软件开发。
面向对象程序设计教程-(马石安版)
第 1 章习题答案名词解释抽象:抽象(Abstract)就是忽略事物中与当前目标无关的非本质特征,而强调与当前目标有关的本质特征,从而找出事物的共性,并把具有共性的事物划为一类。
面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
封装:面向对象方法中的封装就是把将抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。
消息:消息是面向对象程序设计用来描述对象之间通信的机制。
一个消息就是一个对象要求另一个对象实施某种操作的一个请求。
填空题(1) 面向过程的结构化程序设计方法面向对象程序设计方法(2) 顺序选择循环(3) 程序=数据结构+算法程序=对象+消息(4) 过程类(5) 抽象性封装性继承性多态性选择题(1) B (2) C (3) D (4) C (5) D (6) A (7) A (8) B C (9) A D判断题(1) t (2) f (3) f (4)f (5) t (6) f (7) f (8) t简答题(1) 结构化程序设计方法着眼于系统要实现的功能,从系统的输入和输出出发,分析系统要做哪些事情,进而考虑如何做这些事情,自顶向下地对系统的功能进行分解,来建立系统的功能结构和相应的程序模块结构,有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
随着程序规模与复杂性的增长,这种面向过程的结构化程序设计方法存在明显的不足之处。
首先是数据安全性问题,由于数据被每个模块所共用,因此是不安全的,一旦出错,很难查明原因。
其次是可维护性及可重用性差,它把数据结构和算法分离为相互独立的实体,一旦数据结构需要改变时,常常要涉及整个程序,修改工作量极大并容易产生新的错误。
每一种相对于老问题的新方法都要带来额外的开销。
另外,图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。
(2) 面向对象的程序设计方法中,将程序设计为一组相互协作的对象(Object)而不是一组相互协作的函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向过程与面向对象程序设计
一、面向过程的程序设计
面向过程(Process Oriented)这个词是在面向对象(Object Oriented)出现之后为与之相对而提出的,其实它在以前基本被叫做“结构化编程”。
早期的程序设计,大量使用共享变量(全局变量)和GOTO语句一类的东西,后来有人证明所有的程序流程都可以使用三种基本流程(顺序、选择、重复)来实现,并提出“GOTO有害说”,从此人们进行编程的方式发生重大变化,每种语言都
提供这些基本控制结构的实现方式,并提供把数据访问局部化的能力,以及某种形式的模块化/分别编译机制。
在这些基础上,人们所进行的编程活动基本是通过编写用于不同目的的功能函数/过程来实现,故称为“面向过程”。
1.1面向过程设计概述
面向过程的结构化程序设计方法就是采用面向过程的方法来设计结构化程序。
结构化程序通常包含一个主程序和若干个子过程,其中每个子过程都描述了某一个小问题的解决方法再由主过程自顶向下调用各子过程,来逐步解决整个问题。
结构化程序设计方法是一种数学思维或计算机思维方法,和人们认识世界时所习惯使用的方法不同。
面向过程开发方式是对计算机底层结构的一层抽象,它把程序的内容分为数据和操纵数据的操作两部分。
这种编程方式的核心问题是数据结构和算法的开发和优化。
C语言所提供的机制就是典型的结构化编程设施。
1.2面向对象设计的特点
面向过程的程序设计方法通过在程序中模拟问题求解中的过程来进行问题
求解,这种方法认为过程或函数可以作为建立大型复杂软件系统的抽象机制。
但由于在问题求解过程中,一些过程比较复杂,为控制复杂性,引入了功能分解的方法,即将一个复杂的过程分解为复杂性较低的低级过程,这种分解一直进行到参与设计和编程的人员可以理解的步骤或过程为止。
这样使得系统是过程的组件,在整个分解过程中,数据结构的安排是出于对过程组织的需要而进行的。
因此,数据处于次要地位,而过程是关心的焦点。
面向过程的程序方法把重点放在解决问题的过程上,将数据结构和操作这些数据结构的函数分开,在方法上存在明显的不足。
二、面向对象的程序设计
人们在认识客观世界中的各种系统时所习惯使用的方法是面向对象的方法。
面向对象的程序设计(OOP)方法就是用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的程序系统能够映射问题域,即程序系统中的对象以及对象之间的关系能够如实地反映问题域中固有的事物及其关系。
因此,它为我们提出了一个全新的概念,其主要思想是将数据(成员数据)及处理这些数据的相应函数(成员函数)封装到一个类(class)中,而使用类的数
据变量则称为对象(object)。
2.1面向对象设计概述
面向对象的程序在程序结构上表现为类之间的联系,这些联系反映了程序运行时对象之间的消息传递关系,程序正文中类之间的静态联系提供了在程序运行时对象之间的消息传递的通道。
面向对象的程序的功能是通过特定的消息传递序列来实现的。
使用面向对象的程序设计方法设计软件系统必须首先清楚软件系统的构造块:对象。
在面向对象的程序设计中,对象就是将数据和对数据进行的合法操作结合于一体的抽象实体,以这种实体所构成的程序就是面向对象的程序。
面向对象方法中,对象可以接受其他对象传来的消息,也可以向其他对象发送消息。
有的语言静态类型,决定了对象可接受的消息的范围,这称为对象的类型的接口。
有的语言中对象可以接受任何消息,但只对其有意义的消息进行反应。
对象中可以包含其他对象,这成为“聚合”,对象可以被当作其他类型的对象,这要求对象的类型“继承”另外的类型。
对象只能通过其所提供的接口来进行访问,其内部具体实现是不可访问的,这成为“封装”。
面向对象方法的三个核心要素是:封装、继承、多态。
2.2面向对象设计的基本概念
1.对象
对象的本意是指某一事物,即对象是可以看到、摸到、感觉到的一种实体。
在面向对象的技术中,对象是指计算机系统的一个基本成分,它有一个唯一的名,有一组状态(用公共数据和私有数据表示)及表示对象行为的一组公共或私有操作,即“对象=数据+动作”,对象具有一个操作集合和一个记录操作结果的局部共享状态。
2.类(class)
类是具有相同操作(功能)与相同数据格式(特征)的对象集合。
它是面向对象程序设计语言提供的可再用软件成分,类可以看作为抽象数据类型的具体实现。
抽象数据类型是指数据的集合和作用其上的操作的集合,而抽象数据类型则不关心实现的具体细节,从外部看,类的行为可以用新定义的操作加以规定。
类为对象集合的抽象,它规定了对象的公共状态与行为特征,即对象为类的一个实例(instance),对象与类的关系相当于程序设计语言中变量与变量所具有的类型的关系。
3.消息
消息是要求某个操作的规格说明,由三部分组成:接受消息的对象、消息选择子(消息名)和零个或多个变元。
4.方法
对象所能执行的操作称为方法,在C++语言中称为成员函数。
方法是类中定义的函数,描述对象执行操作的算法。
2.3面向对象设计的优点
面向对象的程序设计方法与面向过程的结构化程序设计方法相比较,面向对象的方法至少有三个优点:第一,面向对象的程序设计方法通过将数据封装在类中,对信息进行了很好的隐藏,面向对象的程序容易阅读和理解,程序员只需了解必要的细节,降低了程序的复杂性,使其具有较好的可维护性;第二,程序员
通过修改、添加或删除对象,可以很容易的修改、添加或删除程序的属性,使程序具有易修改的特性;第三,程序员可以将某些公用的类和对象保存起来,随时插入到应用程序中,不需做什么修改就能使用,具有很好的可重用性。
因此,面向对象的设计方法是提高软件开发效率,解决软件重用的有效方法。
综上,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向对象的程序设计方法所得到的程序是类的集合,而面向过程的程序设计方法所得到的程序是函数的集合。
三、程序的设计模式
对于设计模式,Christopher Alexander和他的同事们可能最先将模式语言(pattern language)应用于城市建筑领域,他的思想和其他人的贡献已经根植于面向对象软件界。
简而言之,软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
一般而言,一个模式包含四个要素:模式名称、问题、解决方案和效果。
一个设计模式命名、抽象和确定了一个通用设计结构的主要方面,这些设计结构能被用来构造可复用的面向对象设计。
设计模式确定了所包含的类和实例,它们的角色、协作方式以及职责分配。
每一个设计模式都集中于一个特定的面向对象设计问题或设计要点,描述了什么时候使用它,在另一些设计约束条件下是否还能使用,以及使用的效果和如何取舍。
虽然设计模式描述的是面向对象设计,但它们都基于实际的解决方案,这些方案的实现语言是Smalltalk和C++等主流面向对象编程语言,而不是过程式语言(Pascal、C、Ada)或更具动态特性的面向对象语言(CLOS、Dylan、Self)。
设计模式分为三种类型,共23种,创建型模式包括单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式;结构型模式包括适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式;行为型模式包括模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
设计模式不能够随意使用。
通常你通过引入额外的间接层次获得灵活性和可变性的同时,你也使设计变得更复杂并/或牺牲了一定的性能。
一个设计模式只有当它提供的灵活性是真正需要的时候,才有必要使用。
当衡量一个模式的得失时,它的效果部分是最能提供帮助的。