Java 编程思想 2 (类与对象)

类与对象是面向对象的核心, 它们的提出也是一个曲折的过程.

1. 什么是类

类是一个概念 (concept), 有外延与内涵.

  • 人类的外延, 是世界上所有人所组成的集合.
  • 人类的内涵, 是他们共同具有的属性: 出生年月、性别、身高、体重等等.

Java 中定义一个类, 使用内涵的方式. 直接上代码.

package thinking;

/**
 * The first example showing the structure of a class.
 * @author Fan Min, www.fansmale.com
 */
public class Human {
	/**
	 * Starting from 1800/1/1.
	 */
	long birthDate;

	/**
	 * True for male and false for female.
	 */
	boolean gender;

	/**
	 * In cm.
	 */
	int height;

	/**
	 * In g.
	 */
	int weight;
	
	/**
	 ********************* 
	 * The default constructor.
	 ********************* 
	 */
	public Human(){
		birthDate = 50000;
		gender = true;
		height = 30;
		weight = 3000;
	}//Of the constructor

	/**
	 ********************* 
	 * Eat and grow.
	 ********************* 
	 */
	public void eat(){
		if (weight < 60000)
			weight += 10;
	}//Of eat

	/**
	 ********************* 
	 * Test the class.
	 ********************* 
	 */
	public static void main(String args[]){
		Human zhangsan = new Human();
		for (int i = 0; i < 1000; i ++) {
			zhangsan.eat();
		}//Of for i
		
		System.out.println("The current weight is: " + zhangsan.weight);
	}//Of main

} // Of class Human

在这里, 人类不仅有上述的三个属性数据 (称为成员变量), 还有可以做的事情: 当一个吃货.

2. 什么是对象

从中文看, 对象这个词有些怪异. 英文里面使用 Object, 直译过来应该是 “物体”, 或者 “东西”. 但中国人不大喜欢, 因为 Human 也是东西.

  • 从外延的角度, 对象是类这个集合中的一个元素.
  • 从内涵的角度, 对象具有类中定义属性的具体属性值, 是类的实例 (顾名思义: 实际例子). 在前面的例子中, zhangsan 就是 Human 的一个实例.

3. 如何生成对象

Human zhangsan = new Human();

计算机系统会为这一句的两层意思分别操作:

  • Human zhangsan 表示 zhangsan 是一个人的名字. 这时候并没有实体. 很多人喜欢在生孩子之前 (甚至在女朋友都没找到之前) 就取好名字. 这个名字仅在内存里占用一个地址的空间 (有可能是 64 bits)
  • new Human() 表示生成一个实体的人. 本例中, 会调用构造方法生成一个用默认数据初始化的人. 他在系统里面占用了一大片空间.

从这里也可以看出:

  • 类是静态的程序, 类的个数是固定的, 我们用 class XXX 声明了多少个类, 一般情况下系统不会去增加. 也可以认为, 类存在于文件系统 (磁盘) 中.
  • 对象在程序执行过程中动态产生, 它们存在于内存中. 在程序执行前, 不知道它会产生哪些对象, 多少个对象.

4. 向对象传递消息

zhangsan.eat()

就是向 zhangsan 这个对象传递 eat 消息. zhangsan 长到 60000 g 之后就只吃不长. 这里可以看出, 传递消息给对对象是一回事, 对象要怎么操作是另一回事. 通常他会根据自己的数据, 进行合适的操作. 这是对象的内部保护机制.
不要在对象外部 (如本例的 main 函数中) 使用

zhangsan.weight += 10;

这种方式, 硬往他身上贴膘. 这是不道德的. 这里也涉及访问控制的事情, 以后再说.

5. 面向对象的发展历程

面向对象在 70 年代被提出, 之前计算机已经发展了二十年左右.

  • 阶段 1: 操作为中心. 计算机开始用于科学计算, 当时它既庞大又昂贵, 我们希望尽量简化程序, 提高运行效率, 降低空间开销. 这个时候最好的选择是面向过程, 以操作为中心.
  • 阶段 2: 数据为中心. 随着数据库的发展, 人们发现数据为王 (现在也是), 程序可以丢, 但数据不能丢. 因此数据库操作语言 SQL 以数据为中心.
  • 阶段 3: 数据及其上操作的结合. 离开 (大量) 数据, 操作意义不大; 没有针对数据的操作, 数据也没有生机. 因此, 人们将数据及其上操作进行结合, 获得了完整的对象. 面向对象的产生也有先决条件: 计算机越来越便宜, 相比而言, 人力资源越来越贵, 因此人们想把更多的工作丢给机器.

请大家尊重每个对象的灵魂.

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值