概述:对很多刚入门java基础的人来说,对面向对象的概念大都停留在好像是这样或者一知半解的状态。我将我对面向对象的概念做理解最一次浅显易懂的总结,如果有错误请恕小弟才疏学浅,帮忙提点提点。
对象抽象出类,类实例成对象
在我们理解这句话之前,我们有必要深入剖析对象、类(类型)、抽象、实例等名词在java中的概念,只有理解这几个名词的真正意思,我们才能对面向对象有更清晰的认识。百度百科中,对对象的解释是客观世界中存在的人、事、物体等实体,而在java中,也是一样的,但是它会更具体化。
在java中,对象不单单只是一个单纯的实体(物体),而是具有基本属性和行为。
基本属性可以理解为一个实体的表面特征; 行为则可以理解为这个实体发出的一个动作。
这样我们就可以通俗的形容java中的对象:具有某种特征的能做出动作的执行者。
为什么说对象是执行者: 1. 程序员编写代码去操作对象; 2. 对象听从程序员的指令去执行方法。 这里的动作指类中程序员编写的实现方法。 所以不妨在刚接触面向对象时就把对象理解为:动作的执行者,这样会更方便理解。
我们可以一起来分析一个经典的例子:
冰箱装大象(这个例子是很多前辈喜欢比喻的,我觉得这个例子对初学者的理解真的是狠狠狠有帮助,特盗用一下)
编程目的: 实现把大象装进冰箱。 为了突出面向对象的思想特点,我们先看看面向过程的思想的实现过程。
**面向过程:** 1. 打开冰箱门 2. 抱起大象 3. 把大象塞进冰箱 4. 关闭冰箱门 面向过程在这里突出的特点就是流程化的实现功能,在现实生活中就是按部就班,一步一个脚印的感觉。 **面向对象:** 如果用面想对象的思想,那么首先要做的是,选取对象。 此例中,有两个名词,冰箱和大象,如果不出于其他方面的考虑(逻辑、性能、效率等),哪一个名词都可以作为对象。 thinking in java中对对象的描述之一:万物皆可为对象。 我们先选定冰箱作为对象,开始进行面向对象的设计: 1.这是一个冰箱(创建一个冰箱类) (然后你可以让这个冰箱具有基本特征,比如你可以给它白色的颜色、给它是海尔的牌子等。--即在类中定义对象的基本属性。此例子中,这些特征在装大象的过程中不用用到,所以暂不列入设计步骤) 2.冰箱,你可以装东西(定义一个装东西的动作--即在类中编写实现方法) 3.冰箱,把大象装进来(--即创建对象,然后调用方法) 这样基本实现了冰箱装大象的功能。用上面理解的概念,此时,冰箱是动作的执行者,我们作为程序员,通过命令冰箱去装大象(怎么装就是你定义的方法,方法有千千万万,只要能实现装的这个动作就行),所以程序员是发号施令的指挥者,冰箱是动作的执行者。
上面描述了那么多,主要是为了了解对象的概念和作用,我们再用简单的语句进行归纳。 对象的概念:具有属性(即表面特征)、行为(动作)的实体 对象的作用:程序员通过程序命令(比如调用)去告诉对象它需要执行什么方法(动作)。
Thinking in Java中的一句话:
当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者” 。
我们编程的目的就是为了提供一个程序让用户实现他们想要做的事情(即提供服务)。
可以肯定的是,程序员不是这个服务的直接提供者。 和用户接触的是程序员编写的程序,是程序在处理用户的需求。
从设计程序的角度来看:程序员是一个发号施令的角色。 从用户使用程序的角度来看:用户的角色定位是程序员的上级,用户的使用触发了程序员编写的指令,这些指令会命令程序中的对象去执行程序中的方法,从而达到完成服务的过程。
那么,我们简单的总结一下就是: 1.用户有需求; 2.程序员在程序中通过创建/使用一个或者多个对象去执行一些程序中编写好的方法; 3.实现用户的需求。
所以,我们对对象又可以有一个新的认识,对象才是真正的服务提供者。对对象进行各种操作可以实现开发中常用的封装,继承,多态,聚集,组合等等。 所以,使用对象+调用方法是面向对象的最基础的编程思想。
把冰箱装大象的例子用代码实现: 1.找对象: 从需求中找名词,需求为:把大象装进冰箱。名词有:大象,冰箱。 选取冰箱作为对象(万物皆为对象,这里选取大象作为对象) 2.找对象属性: 对象拥有什么特征:品牌,颜色,尺寸,功耗…… 3.找对象属性的数据类型: 给找到的属性匹配上数据类型:品牌–String类型,颜色–String类型,高度–double类型,功耗–int类型 4.结合上面三步,编写一个与对象形成对应关系的类
public class Fridge(){ //private是访问权限限制,是封装的思想,以后会单独总结 //定义品牌属性 private String brand = "海尔"; //定义颜色属性 private String color = "白色"; //定义高度属性 private double height = 1.5; //定义功耗属性 private int power= 2000; }5.找方法 : 从需求中找动词,需求为:把大象装进冰箱。动词:装进 6.写方法 在类中实现方法
public class Fridge(){ //private是访问权限限制,是封装的思想,以后会单独总结 //定义品牌属性 private String brand = "海尔"; //定义颜色属性 private String color = "白色"; //定义高度属性 private double height = 1.5; //定义功耗属性 private int power= 2000; //写装的方法 public void enter(){ //这是个比喻,具体怎么把大象装进冰箱的代码.. - -。就省略了 ... } }对象抽象出类的步骤就基本完成。 接下来就是使用对象+调用方法。 这一步是类实例出对象,在另一篇面向对象的总结中会着重描述,这里只表现出对象是怎么被使用的。
//写一个入口函数 public static void main(String[] args) { //创建对象 Fridge fridge = new Fridge(); //调用方法 -- 实现装的功能 fridge.enter(); }何为对象: 1.对象是计算机程序中对一个实体的称呼; 2.对象具有基本属性和方法,基本属性表示静态表面的特征,方法表示动态的可以实现的动作; 3.万物皆为对象; 4.对象必须是名词,编码前先确定好对象,可以在功能需求中找名词,从名词中选取有需要的对象; 5.对象可以抽象出类,类的组成必须包含对象的属性和方法; 6.对象是由类创建出来的,专业术语叫类的一个实例。 7.对象和类之间的关系:相辅相成 – 先确定了对象,以对象为模板,才创建了类,最后类再创建出若干个这种对象供程序员使用。
此文着重学习总结了对象抽象出类的过程,另一篇将学习总结:何为类、类实例出对象的原理,涉及到new关键字的两种使用情况(对象引用和匿名对象)和原理和引用过程的实现的原理(C中的指针)。