【学习笔记】第一章 对象导论

来源:互联网 发布:打开xlsx的软件 编辑:程序博客网 时间:2024/05/01 04:06

1.1 抽象过程

1.万物皆对象
2.程序是对象的集合,它们通过发送消息来告知彼此所要做的。
3.每个对象都有自己的由其他对象所构成我的存储。
4.每个对象都拥有其类型。
5.某一特定类型的所有对象都可以接受同样的消息。

对象,即为某个类的实例。
在OOP中,一切事物可以抽象为对象,即所谓万物皆对象。
每个对象(类)定义有自己的方法,赋予对象发送消息的能力。
类似C的结构体,每个对象可以包涵其他对象,基础类型,进一步抽象。
多态,上下转型,赋予同类对象可以接收同样的消息。


P1.对象的创建

Light li = new light();//new light()为类Light的新生成的一个对象(实例),li为该对象的引用。

1.3 每个对象都提供服务

在良好的面向对象设计中,每个对象都可以很好得完成一项任务,但是它并不试图做更多的事。

不要赋予一个对象太多的功能,功能不明确,不利于代码复用。


1.4 被隐藏的具体实现

java用三个关键字在类的内部设定边界:public,private,protected。

public:包内任何人可用。
private:类中可用,即除了类的创建者其余用户不可见。
protected:继承自父类的子类可以调用父类中的protected成员,private则不行。


1.6 继承

对面向对象设计的人们来说,困难之一是从开始到结束过于简单

在对自然事物的描述中,我们可能直接建立一个类来对该事物进行抽象(比如需要圆形,我们就创建一个圆形类),并未考虑到之后可能还有三角形,正方形之类的需求。所以我们需要跟长远的考虑,例如建立几何形类,使圆类继承自该类,以便于代码的扩展,也不会让许多类看起来杂乱。

对于继承可能会引发某种争论,继承应该只覆盖基类的方法(而并不添加在基类中没有的新方法)么?

替代原则:不在子类中实现新的接口(不添加父类接口不提供的方法)。否则可能在实现了新接口后,使子类具备了更多的功能,使父类的定义不再适用于对子类的描述。


1.7 伴随多态的可互换对象

如果某个方法要让泛化几何形状绘制自己,让泛化交通工具行驶,或者让泛化的尿了移动,那么编译器在编译时是不可能知道应该执行那一段代码的。

假设存在方法action(Bird bird),在action中调用bird的move方法,Brid类存在子类Goose,Penguin,三个类存在各种不同的move方法。那么在bird传入不同类型的引用时,调用action会发生什么呢?

class Bird {    public void move() {        System.out.println("bird fly");    }}class Goose extends Bird{    @Override    public void move() {        System.out.println("Goose swim");    }}class Penguim extends Bird {    @Override    public void move() {        System.out.println("Penguim walk");    }}public class Demo {    public static void main(String[] args) {        Bird b = new Bird();        Goose g = new Goose();        Penguim p = new Penguim();        action(b);        action(g);        action(p);    }    private static void action(Bird bird) {        bird.move();    }}/*Output bird fly Goose swim Penguim walk*/

不知何故,他总是做了该做的。

前期绑定:在编译时, 方法调用已经和方法体绑定。
后期绑定:在运行时,根据存储在对象内部的信息计算方法体的地址,以完成调用。
java显然属于后者。


1.9 容器

P2 泛型存在的原因

在之前容器中只存储Object的对象,在向下转型的过程中存在安全隐患,故在建立容器的时候直接显式的定义泛型,以<>表示。例如:
Linkedlist<String>


1.10 对象的创建和生命期

在堆栈创建对象:创建,释放快,但不灵活(要提前知道对象的特性)。
在堆中动态分配内存创建对象:创建,分配慢,灵活。


P3客户端编程

在浏览器与服务器的交互中,浏览器处于被动,全权依赖于服务器返回的数据,为解决流量过多的问题,将一些客户端力所能及的处理放在客户端执行而进行的客户端编程。e.g.插件,脚本语言,java(applet)。

0 0
原创粉丝点击