我所理解的面向对象
说到面向对象,我们也许并不陌生,但是以我个人为例,总是有一种莫名其妙的感觉。自己在编程中确实能够隐约的感觉到它的存在,但是又无法具体说明她是什么样式的。今天我们简单总结一下,如果有不对的地方希望大家不吝指教,小弟将不胜感激~
1、面向对象的基本概念
面向对象,这一概念已经有好多年的发展历史了。时至今日,我们仍然在使用着她,足见其魅力所在。面向对象是当今主流的一种设计规范和设计理念。它取代了早期结构化、过程化的开发流程。主张万物皆对象的开发理念。最终达到程序能够以人的思维去思考问题。传统的结构化程序设计通过设计一系列的过程(即算法来求解问题),这一些过程一旦被确定,就要开始考考虑存储数据的方式,这就明确的表述了程序员的工作方式。但是面向对象不同, 它不关心对象的具体实现过程,只要满足用户的需求即可。 面向对象就是把我们现实世界中客观存在的事物按照相应的特征看成一个具体的实物,也可理解为一种抽象。一个对象也可以理解为是一个把数据(属性)和程序(方法)封装在一起的实体而类则是一个具有相同属性和方法的一个对象集合。它定义了该集合所有对象所共有的属性和方法。对象就是类的一个实例。
2、面向对象的三大特征(封装、继承、多态)
封装:把对象里面的属性和对属性的操作封装成一个独立的实体,并尽可能的隐藏内部类的实现细节。封装能控制用户对类的修改和访问数据的程度,增强了程序的可维护性。
① 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
②对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
继承:发生在类和类之间,可分为单继承和多层继承(Java不支持多继承)描述父子对象之间的血缘关系, 最终达到的目的是:一旦使用了继承,子类便获得了父类所有的成员(变量和方法),但是父类的私有的方法和属性不能被访问,父类的final成员不能被重写。 一旦使用了继承,父类的实例能指向派生类(子类)的引用。即java中对象的上转型。
多态:对象在运行期和编译期具有的两种状态,使代码具有灵活性和重用性。
①编译时多态:也就是函数重载,所谓函数重载就是指同一个函数名可以对应多个函数的实现具体调用哪个按照由参数个数,参数类型等来决定。
②运行时多态:用一个基类的指针或引用来操纵多个派生类型的能力被称为多态性。这里的运行时多态,在java中我们也可称之为对象的上转型。
为了更好的理解运行时,请看下面运行时多态的例子:
比如有一个父类superClass,它有2个子类subClass1,subClass2.superClass有一个方法func(),两个子类都重写了这个方法。那么我们可以定义一个superClass的引用obj,让它指向一个子类的对象,比如superClass obj = new subClass1();那么我们调用obj.func()方法时候,会进行动态绑定,也就是obj它的实际类型的func()方法,即subClass1的func()方法。同样你写superClass obj = new subClass2();obj.func()其实调用的是subClass2的func()方法。这种由于子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,这就是多态。多态对程序的扩展具有非常大的作用,比如你要再有一个subClass3,你需要改动的东西会少很多,要是使用了配置文件那就可以不动源代码了。
3、OOA(面向对象分析)/OOD(面向对象设计)/OOP(面向对象编程)
OOA(面向对象分析)
Object-Oriented Analysis(面向对象分析方法)是确定需求或者业务的角度,按照面向对象的思想来分析业务。例如:OOA只是对需求中描述的问题,进行模块化的处理,描述问题的本质,区别每个问题的不同点相同点,确定问题中的对象。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析
OOD(面向对象设计)
面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。
OOP(面向对象编程)
面向对象编程技术的关键性观念是它将数据及对数据的操作行为放在一起,作为一个相互依存、不可分割的整体——对象。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。面向对象编程就是定义这些类。类是描述相同类型的对象集合。类定义好之后将作为数据类型用于创建类的对象。程序的执行表现为一组对象之间的交互通信。对象之间通过公共接口进行通信,从而完成系统功能。类中声明的public成员组成了对象的对外公共接口。
好吧,今天就先到这里吧~