码迷,mamicode.com
首页 > 其他好文 > 详细

从面向过程到面向对象

时间:2015-05-27 15:54:11      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:面向过程编程   面向对象编程   

从 IBM 公司的约翰·巴库斯在 1957 年开发出世界上第一个高级程序设计语言 Fortran 至今,高级程序设计语言的发展已经经历了整整半个世纪。在这期间,程序设计语言主要经历了从面向过程(如 C 和 Pascal 语言)到面向对象(如:C++、Java、Objective-C),再到面向组件编程(如 .NET 平台下的 C# 语言),以及正在快速发展的面向服务架构技术(如 SOA 和 WebService)。

技术分享

约翰?巴库斯

面向过程编程

结构化编程思想的核心:功能分解(自顶向下,逐层细化)。


结构化编程思想主要是将一个大的问题划分为几个小的问题,再将几个小的问题划分为更小的问题,我们解决大问题非常困难,但是解决划分后的最小的问题却比较容易。


面向过程编程把编程任务划分成一个一个的步骤,然后按照步骤分别去执行。其中每完成一个步骤就像是完成一个任务中的单个过程一样。


尼古拉斯?沃思(Niklaus Wirth):结构化编程思想的创始人。因发明了 Euler、Alogo-W、Modula 和 Pascal 等一系列优秀的编程语言并提出了结构化编程思想而在 1984 年获得了图灵奖。

技术分享

尼古拉斯?沃思


尼古拉斯?沃思教授在编程界提出了一个著名的公式:

程序 = 数据结构 + 算法


在面向过程编程或结构化编程语言当中,高级程序设计语言种类非常繁多,很多刚接触编程的人不知道应学习哪一门语言。其实语言不能用好坏来区分,任何一门程序设计语言只要它存生,就有它自己的特色和用途。在面向过程编程领域最流行的两种语言应该是 C 和 Pascal 语言,特别是 C 语言。C 语言的语法曾影响了其后所出现的所有编程语言(如 Javascript、Java、C# 等)。


面向过程编程最重要的原则:高内聚,低耦合

内聚是指模块内部各成员之间关联的紧密程度。

耦合是指模块与模块之间关联的紧密程度。


不管是面向过程还是面向对象,我们都强调模块的独立性。只有模块独立,才能实现重用。也只有实现弱耦合,模块与模块之间才不会产生太多的关联关系。

面向过程编程语言存在的主要缺点是不符合人的思维习惯,而是要用计算机的思维方式去处理问题,而且面向过程编程语言重用性低,维护困难,无法编写大型的应用程序。


面向对象编程

面向对象编程(Object-Oriented Programming)简称 OOP 技术,是开发计算机应用程序的一种新方法、新思想。过去的面向过程编程常常会导致所有的代码都包含在几个模块中,使程序难以阅读和维护。在做一些修改时常常牵一动百,使以后的开发和维护难以为继。而使用 OOP 技术,常常要使用许多代码模块,每个模块都只提供特定的功能,它们是彼此独立的,这样就增大了代码重用的几率,更加有利于软件的开发、维护和升级。 


在面向对象中,算法与数据结构被看做是一个整体,称作对象,现实世界中任何类的对象都具有一定的属性和操作,也总能用数据结构与算法两者合一地来描述,所以可以用下面的等式来定义对象和程序: 

对象=(算法+数据结构),程序=(对象+对象+……)。 

从上面的等式可以看出,程序就是许多对象在计算机中相继表现自己,而对象则是一个个程序实体。 


面向对象编程思想的核心:应对变化,提高复用


面向对象编程思想主要是复用性和灵活性(弹性)。复用性是面向对象编程的一个主要机制。灵活性主要是应对变化的特性,因为客户的需求是不断改变的,怎样适应客户需求的变化,这是软件设计灵活性或者说是弹性的问题。


阿伦?凯(Alan Kay):面向对象编程思想的创始人。2003 年因在面向对象编程上所做的巨大贡献而获得图灵奖。

技术分享

阿伦?凯


阿伦?凯:麻省理工学院的院长。阿伦?凯是 Smalltalk 面向对象编程语言的发明人之一,也是面向对象编程思想的创始人之一,同时,他还是笔记本电脑最早的构想者和现代 Windows GUI 的建筑师。最早提出 PC 概念和互联网的也是阿伦?凯,所以人们都尊称他为“预言大师”。他是当今 IT 界屈指可数的技术天才级人物。


面向过程与面向对象编程的联系

面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法,它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势,因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。


比如拿学生早上起来的事情来说说这种面向过程吧,粗略的可以将过程拟为:

(1)起床

(2)穿衣

(3)洗脸刷牙

(4)去学校


而这 4 步就是一步一步地完成,它的顺序很重要,你只须一个一个地实现就行了。而如果是用面向对象的方法的话,可能能就只抽象出一个学生的类,它包括这四个方法,但是具体的顺序就不能体现出来。


参考资料:

百度百科

豆丁


从面向过程到面向对象

标签:面向过程编程   面向对象编程   

原文地址:http://blog.csdn.net/tennysonsky/article/details/46043775

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!