2005年10月22日

 Java这个东西以前也学过点,不过太乱了。现在想好好的看看。所以找了本《Think in java 3》(电子版)来看。希望能系统地学习一下。所以呢要做点笔记了。呵呵。

第一天

对象

OO的方法是对编程语言的抽象。有人说“解决问题的复杂程度直接取决于抽象的种类和质量。”我想,对编程语言的抽象实际上是使之更好地描述我们的现实。

Alan Kay总结了Smalltalk的五大基本特征。这是第一种成功的面向对象程序设计语言,也是Java的基础语言。

(1) 所有东西都是对象。

(2) 程序是一大堆对象的组合。

(3) 每个对象都有自己的存储空间,可容纳其他对象。


(4) 每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。


(5) 同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。

有人强调“类型”决定了接口,而“类”是那个接口的一种特殊实现方式。

接口

每一个对象都需要接受和“发送”信息,“接口”(Interface)规定了可对一个特定的对象发出哪些请求。

接口是为了——实现方案的隐藏。好处:

1、防止程序员接触不该接触的东西(不需要接触)

2、使得库的设计人员可以在不影响程序员的情况下修改内部结构。

如同公共汽车一样。我们不知道他的行驶路线,我们只知道他可以到达我们要去的目的地。即使路线修改了,我们仍然不用担心,因为我们知道,她可以到达我们要去的地方,而路线或许不同了。

封装

java的3个显示关键字和1个隐式关键字

public 所有人都可以用

private 只有自己可以用

protected 自己和自己的子女可以用

隐式的

friendly 没有显示说明时,默认的。在同一个Package下可以用。(包装访问)

组织与继承

组织比继承更清晰简单灵活。组织就是类之间的相互包含。

继承是创建一个新类,它拥有extends(关键字)父类的部分成员(除private和构造函数)。这个新类与父类有相同的类型,尽管具体的成员不同(子类扩展)。

多态性(Polymorphism)

我们来看这个函数

void doStuff(Shape s) {
  s.erase();
  // ...
  s.draw();
}


这个函数可与任何“几何形状”(Shape)通信,所以完全独立于它要描绘(draw)和删除(erase)的任何特定类型的对象。如果我们在其他一些程序里使用doStuff()函数:

Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);
凡是doStuff()能发给一个Shape的消息,Circle也能接收。因为他们是同一类型。Circle
继承了Shape。编译器在编译的时候并不知道自己要操作的准确类,是Circle还是Triangle,
在执行的时候才由编译器和系统负责对细节控制,使之得到我们期望的结果。这就是多态性。
(C++中用Virtual)这种方法称为“动态绑定”。