什么是面向对象
面向对象(Object Oriented)是软件开发方法,一种编程范式,它是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
早期的计算机编程是基于面向过程的方法,如实现算术运算,只需要通过设计一个算法就可以解决问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,可以帮助人们实现对现实世界的抽象与数字建模。
通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率。
面向对象的思想已经涉及到软件开发的各个方面,如:面向对象的分析(OOA,Object Oriented Analysis)、面向对象的设计(OOD,Object Oriented Design),以及我们经常说到的面向对象的编程实现(OOP,Object Oriented Programming)。
面向对象与面向过程
上面提到“早期的计算机编程是基于面向过程的方法”,而面向对象也是相对于面向过程来讲的,它的底层还是面向过程,下面我们就来看看两者的区别吧。
一、出发点不同
面向对象方法是用符合常规思维的方式来处理客观世界的问题,强调把问题领域的要领直接映射到对象及对象之间的接口上。而面向过程方法强调的则是过程的抽象化于模块化,它是以过程为中心构造或处理客观世界的问题。
二、层次逻辑关系不同
面向对象方法则是用计算机逻辑来模拟客观世界中的物理存在,以对象的集合类作为处理问题的基本单元,尽可能地使计算机世界向客观世界靠拢,以使问题的处理更清晰直接,面向对象的方法是用类的层次结构来体现类之间的继承和发展。而面向过程方法处理问题的基本单位是能清晰准确地表达过程的模块,用模块的层次结构概括模块或模块间的关系与功能,把客观世界的问题抽象成计算机可以处理的过程。
三、数据处理方式与控制方式不同
面向对象方法将数据与对应代码封装成一个整体,原则上其他对象不能直接修改其数据,即对象的修改只能由自身的成员函数完成,控制程序方式上是通过“事件驱动”来激活和运行程序。面向过程方法是直接通过程序来处理数据,处理完毕后即可显示处理结果,在控制程序方式上是按照设计调用或返回程序,不能自由导航,各模块之间存在着控制与被控制、调用与被调用的关系。
四、分析设计与编码转换方式不同
面向对象方法贯穿于软件生命周期的分析、设计及编码中,是一种平滑过程,从分析到设计再到编码是采用一致性的模型表示,即实现的是一种无缝连接。面向过程方法强调分析、设计及编码之间按规则进行转换,贯穿于软件生命周期的分析、设计及编码中,实现的是一种有缝的连接。
基本思想
面向对象编程(OOP,Object Oriented Programming,面向对象程序设计)的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。
传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类。
面对对象程序设计是尽可能地在模拟人类的思维。通过这样的方式能够让开发的软件更加符合人类的认知,人们使用起来也能够更加顺手。并且通过应用软件能够切实地解决现实生活中的问题。面向对象程序设计使得描述问题的问题空间和问题的解决方法空间组合在一起,并且尽可能地保持一致。能够将客观世界中的抽象问题转化为具体的问题对象。
面向对象的思维更符合人认识和思考问题的方式,面向对象的概念和应用已经超越了软件开发和程序设计,扩展到多个的领域,其中一个应用的分支就是面向对象的知识表示法。这种表示法把组成客观世界的实体抽象为数据和对数据的操作,并使用类把数据和对数据的操作封装成为一个不可分割、互相依存的整体。面向对象表示的知识更接近客观世界,表示方案更加自然,易于理解。面向对象技术良好的模块性,面向对象的系统良好的可维护性、可扩充性和可重用性等特点,正符合人们组织和管理知识库的需求。
面向对象的优点
面向对象的开发方法把系统软件看成是各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点:
- 把软件系统看成是各种对象的集合,这更接近人类认识世界的自然思维方式
- 软件需求的变动往往是功能的变动,而功能的执行者 —— 对象一般不会有大的变化。这使得按照对象设计出来的系统结构比较稳定
- 对象包括属性(数据)和行为(方法),对象把数据及方法的具体实现方式一起封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性,从而提高了软件的可维护性
- 支持封装、抽象、继承和多态各种特性,提高了软件的可重用性、可维护性和可扩展性
广义地讲,面向对象编程是结构化编程的一种改进实现方式。传统的面向过程的结构化编程的最小子系统是功能模块,而面向对象的最小子系统是对象。方式。传统的面向过程的结构化编程的最小子系统是功能模块,而面向对象的最小子系统是对象。