http://hi.baidu.com/drmfslc5/blog/item/2a8ba5b03abb1cabd8335aed.html
面向对象(Object-Oriented)
面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
简称OO,体现了计算机程序设计的一种思想,这种思想主要表现在具体的开发语言上,如java . 这种程序开发语言有着完全/部分地以面向对象思想设计和实现的特性,所以被称做为面向对象的计算机程序开发语言。
OO理论体现于OO思想,在曾经学过的C++语言中部分是以面积对象的思想设计并实现的,所以C++也是一种面向对象的计算机程序开发语言。在学习C++时,还记得哪些面向对象的特性?对象唯一, 抽象性,继承,多态,封装 ,共享
万事万物皆对象
C语言中 整个程序是过程式的,OO思想在八九十年代成为讨论的热点,Booch/Coad/Yourdon等等的面向对象开发方法。 主要是运用一种思想:把万事万物都抽象化,想象成对象的思想。这种思想符合我们人类对事物理解的思维方式。把这种思维方式用到计算机程序设计上能流畅地表达程序员的思想。所以慢慢兴起。
什么是对象? 对象可以是具体的实物,如桌椅,教室,电脑等 ; 另外,一个想法,虽然摸不着,看不到,但人类的思想可以感受到,最终可以通过某种方式体现出来。所以对象也可以是抽象的事物。抽象和具体不正是人类智慧的体现吗?
程序员在OO程序设计中所要对待/解决的问题就是建模。这种建模就是将问题进行抽象化认识的过程。
什么是面向对象?将问题空间中诸元素表示成对象,并将对象行为描述为具体实现的方法,把对象的静态特征描述为其属性。 面向对象的程序设计就是这样子一个过程。理解分析待求解问题时完成了对问题的抽象化认识,把抽象化结果用程序设计语言实现。
我们所学习的java程序语言就是一种OO语言。所以要学习并运用java,必须理解面向对象。面向对象的程序中全部由对象组成,对象无处不在,对象间相互通信,互相协调完成软件的功能需求。尤其像java这样的比较纯的面向对象的程序开发语言。具体一个例子:GelPen 中有油量
面向对象都有哪些特性?
刚才提到的那几点
(1)对象唯一性。
每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
(2)抽象性。
分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
(3)继承性。
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
(4)多态性(多形性)
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
(5)共享性
面向对象技术在不同级别上促进了共享
同一类中的共享。同一类中的对象有着相同数据结构。这些对象之间是结构、行为特征的共享关系。
对象的存储空间
通常所说的对象是一个具体的已经可在计算机中找到的实体,这体现在它被分配了存储空间,一般是指内存,也有些对象,诸如流对象,持久化对象是被放到外存中,用到时在以某特定方法实例化到内存中
引用:引用就是操作对象的句柄,类似于指针,再说白话一些就是个名字,它需要分配空间才能使用。一般分配空间的方法是new关键字,还有就是工厂模式 。举个例子。
JAVA中既可以声明一个自定义的类引用,也可以定义已经具有的类类型的引用。
静态数据。 static关键字修饰的数据,在内存中固定的位置, 不过static 也可修饰方法,但是存储位置不同
常量 final修饰的数据,永远不变的数据,最终嘛。
对象一般是程序运行时存在于内存中,可以随时用,因为它是存活于之中。但在java中存在一种存活于程序外的对象和数据,可不受运行时刻控制。典型的流对象,持久化对象。二者把对象存储在磁盘上。保存了对象的状态。在需要对象时,再通过某种方式生成常规对象。
将上面提到的一些概念与存储空间做一下联系。将对象的相关元素和存储空间关联起来。
堆栈:存在于内存的RAM之中,堆栈指针的内容操作内存,堆栈指针上移,释放内存,下移,分配内存。如有数据需要存放于内存之中,编译器需要知道数据大小和其生命周期,java对象的引用 (句柄)存放于其中。
堆: 通用RAM,编译器不需要知道堆为其分配多少空间,也不需要知道堆中数据生命周期。new生成的对象的空间都是在堆里。编译器不用考虑细节,堆自动完成分配空间分配。堆为对象创建提供灵活性。Java的对象存放于堆中。
静态存储空间:一般是固定的存储区域,程序运行期间,该区域不能被其他数据占用。static关键字修饰的数据都在这里放着。不过修饰的对象存储在堆中。
常量存储空间:内存ROM中,java常量所在的地方
磁盘存储空间:既外存,流,持久化对象等
对象的生存空间
人类的生命是有限的,一个人在其生命可以完成许多事,但在生命周期外就无能为力了,每个生命不会无休止地生存在这个世界上,否则各种资源无法承受。对象也是如此,是有它的生命周期的,在这之中它可以做很多事,但不能无休止地占据着内存,否则内存会不够分配。一般说生命周期是说它被分配内存的一段时间,说生存空间是体现在代码段中,一般局部变量是生存在一对{}中。如一个方法体内,循环体中,条件判断体中。对象的属性是随着对象的内存分配与释放而被分配释放的。