究竟什么是面向对象?

来源:互联网 发布:axurerp7.0破解版mac 编辑:程序博客网 时间:2024/06/05 11:25

一、什么是面向过程?

面向对象程序设计(Object-oriented Programming,简称为OOP)已经是当今主流的程序设计范型,但提到面向对象,就必须说一下面向过程,相信大多数学过计算机的人都接触并学习过c语言,c语言就是一门最具代表性的面向过程的语言。面向过程是一种以过程为中心的编程思想,主要是以什么正在发生为主要目标进行编程,而面向对象则关注的是谁在受影响,两者明显不同的就是封装、继承、类。

举一个简单地例子吧,拿学生早上起来这件事说明面向过程,基本可以将过程模拟为:

1、起床

2、穿衣

3、洗脸刷牙

4、去学校

这四步按着顺序一步一步完成,这就是面向过程。如果要用面向对象的方法的话,就需要抽象出一个学生的类,它包括这四个方法,但具体的顺序就不一定按照原来的顺序了,故而面向过程主要是模块化的思想方法。

二、面向对象思想产生的原因

由于面向过程编程在构造系统时,无法解决重用,维护,扩展的问题,而且逻辑过于复杂,代码晦涩难懂,因此,人们开始想能不能让计算机直接模拟现实的环境,以人类解决问题的方法,思路,习惯和步骤来设计相应的应用程序。于是,面向对象的编程思想就产生了。

三、什么是面向对象?


究竟什么是面向对象?这恐怕是一个比较深奥的问题。

在了解面向对象之前,需要有一点基础的编程经验,如果是零基础也没关系(因为本文不会涉及到java程序的代码)试着去理解并接受这种程序设计思想,可以了解到对象的重要性,以及怎么样使用对象进行设计。

所有编程语言都提供抽象机制,即人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。汇编语言是对底层机器的轻微抽象。接着出现的许多所谓“命令式”语言(如C)都是对汇编语言的抽象,但是它们所作的主要抽象仍要求在解决问题时要基于计算机的结构,而不是基于所要解决的问题的结构来考虑。程序员必须建立起在机器模型(位于“解空间”内,这是你对问题建模的地方,例如计算机)和实际待解问题的模型(位于“问题空间”内,这是问题存在的地方,例如一项业务)之间的联系。

面向对象方式通过向程序员提供表示问题空间中的元素的工具更进了一步。这种表示方式非常通用,使得程序员不会受限于任何特定类型的问题。我们将问题空间中的元素及其在解空间中的表示称为“对象”。这种思想的实质是:程序可以通过添加新类型的对象使自身适用于某个特定问题。因此,当你在阅读描述解决方案的代码的同时,也是在阅读问题的描述。相比于面向过程的语言,这是一种更灵活和更强有力的语言抽象。故而,OOP允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。但是它仍然与计算机有联系:每个对象看起来有点像一台微型计算机——它具有状态(属性),还具有操作(方法),用户可以要求对象去执行这些操作(调用方法)。如果要对现实世界中的对象作类比,那么说它们都具有特性和行为似乎不错。

面向对象其实是现实世界模型的自然延伸。现实世界中的任何实体都可以被看作对象。对象之间通过消息相互作用。另外,现实世界中的任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心、以算法为驱动的话,面向对象的编程语言则是以对象为中心,以消息为驱动。用公式表示,过程式编程语言为“程序=算法+数据”;面向对象编程语言为“程序=对象+消息”。

“这个世界是由什么组成的?”这个问题如果让不同的人来回答,会得到不同的答案。如果回答该问题的人是一个化学家,他也许会告诉你:“还用问吗?这个世界是由分子、原子、离子等化学物质组成的。”如果他是一个画家,他也许会告诉你:“这个世界是由不同的颜色所组成的。”但如果让一个分类学家来考虑这个问题就有趣多了,他会告诉你:“这个世界是由不同类型的物与事所构成的。”好!作为面向对象的程序员,我们要从分类学家的角度去考虑问题:“这个世界是由动物、植物等组成的。动物又分为单细胞动物、多细胞动物、哺乳动物等,哺乳动物又分为人、大象、老虎......就这样分下去了!”

四、究竟什么是类,什么是对象?

面向对象程序设计的思想中最重要的两个概念就是类和对象了,但对于这两个概念还是比较抽象的,甚至于一些学java两三年的程序员还搞不明白这两个概念究竟是什么,应该怎么表达。

现在从抽象的角度,我们给“类”下个定义吧!我的意思是,从抽象的角度,你回答我:“什么是人类?”首先让我们来看看人类所具有的一些特征,这个特征包括属性(一些参数、数值,如姓名,体重)及方法(一些行为,他能干什么)。每个人都具有身高、体重、年龄、血型等一些属性。还有人会劳动、人都会直立行走、人都会用自己的头脑去创造工具等方法。人之所以能区别于其他类型的动物,是因为每个人都具有人这个群体的属性与方法。“人类”只是一个抽象的概念,它仅仅是一个概念,它是不存在实体的。但是所有具备“人类”这个群体的属性与方法的对象都叫人。这个对象“人”是实际存在的实体,每个人都是人这个群体的一个对象。老虎为什么不是人?因为它不具备人这个群体的属性与方法,老虎不会直立行走,不会使用工具等,所以说老虎不是人。

由此可见,类描述了一组由相同特性(属性)和相同行为(方法)的对象集合。在程序中,类实际上就是一个数据类型,例如,整数、小数等。整数也有一组特性和行为。二者的差异在于,为了模拟真实世界,为了更好地解决问题,程序员通过定义类来适应问题,而不再被迫只能使用现有的用来表示机器中的存储单元的数据类型。而对象则是类的实例化,是人们要进行研究的任何事物,对象具有状态和行为。

五、小结

想必介绍到这里,大家已经对面向对象程序思想有了一定的认知,最后罗列出天才计算机大师Alan Kay总结出的面向对象语言的五个基本特性:

1、万物皆为对象。

2、程序是对象的集合,它们通过发送消息来告知彼此所要做的。

3、每个对象都有自己的由其他对象所构成的存储。

4、每个对象都拥有其类型。

5、某一特定类型的所有对象都可以接收同样的消息。

最后小编也要奉劝大家一句,面向对象也要适可而止,希望大家还是找到自己心仪的对象