标签 : Thinking in java
人们所能够解决的问题的复杂性直接取决于抽象的类型和质量
类描述了具有相同的特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型
每个对象都只能满足某些请求,这些请求由对象的接口(interface)所定义,决定接口的便是类型
类型名称 | Light |
---|---|
接口 | on()、off()、birghten()、dim() |
Light lt = new Light();
lt.on();
接口确定了对某一特定对象所能发出的请求。
每个类用一个方框表示,类名在方框的顶部,n任何数据成员都描述在方框的中间部分,方法在方框的底部
高内聚:意味着一个软件结构的各个方面组合的很好,人们在设计对象时所面临的一个问题时,将过多的功能都塞在一个对象中。
在良好的面向对象设计中,每个对象都可以很好的完成一项任务,但是它并不试图做更多的事。
将程序开发人员按照角色分为`类创建者`(那些创建新数据类型的程序员)和`客户端程序员`(那些在其他应用中使用数据类型的类消费者)是大有裨益的。客户端程序员的目标是手机各种用来实现快速开发的类。类创建者的目标是构建类,这种类只向客户端程序员暴露必须的部分,而隐藏其他部分。被隐藏的部分通常代表对象内部脆弱的部分,他们很容易被粗心或者不知内情的客户端程序员所毁坏,因此将实现隐藏起来可以减少程序Bug。
Java用三个关键字在类的内部设定边界:public、private、protected、这些访问指定词决定了紧跟其后被定义的东西可以被谁使用。public表示跟随其后的元素对任何人都是可用的。private这个关键字表示除了类型创建者和类型内部方法之外的任何人都不能访问的元素。protected关键字与private作用相当,差别仅仅在于继承的类可以访问protected成员,但是不能访问private成员。Java还有一种默认的访问权限,当没有使用访问权限的指定词时,它将发挥作用。这种权限通常被称为包访问权限,以为内在这种权限下,类以可访问在同一个包中的其他类成员,s但是在包w之外的这些成员如同制定了private一样。
最简单的复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新的类中。我们称其为“创建一个成员对象”。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式组成。因为实在使用现有类的合成新的类,所以这种概念被称为组合(composition),如果组合是动态发生的,那么他通常被称为聚合(aggregation)。组合经常被视为(has-a)拥有关系,就像我们常说的“汽车拥有引擎盖”。
实际上,在建立新类时,应该首先考虑组合,因为它更加简单灵活。(与继承相对比)
通过继承可以达到以现有的类为基础,复制他,然后通过添加和修改这个副本来创建新类。
当父类发生改变时,子类也会反映出这些改变。
一个父类包含其所有子类型所共享的特性和行为。可以创建一个父类来表示系统中某些对象的核心概念,从父类型中导出其他类型(子类),来表示可以被实现的各种不同方式。
有两种方法可以使得父类和子类产生差异。
第一种:直接在子类中填写新的方法
第二种:覆盖,若想要覆盖则可以直接在子类中创建该方法的新定义即可
将子类看作是它的父类的f过程称为向上转型。
void doSomething(Shapeshape){
shape.erase();
shape.draw();
}
Circle circle = new Circle();
Triangle triangle = new Triangle();
Line line = new Line();
doSomeThing(circle);
doSomeThing(triangle);
doSomeThing(line);
执行同一个方法时执行不同的draw,这就是多态
所有的类都继承于一个单一的类Object
向下转型一般发生在:当容器存储类型为Object时,将对象放入容器的时候,它必须被向上转型为Object,因此他会丢失其身份。当把它取回来时,就获取了一个对Object对象的引用,而不是放入时的那个类型的对象的引用。这时就要用到向下转型,向上转型时安全的,但是向下转型几乎是不安全的,
改进办法是在se5版本后加入了泛型的概念
ArrayList shapes = new ArrayList();
new一个对象的时候就是一个对象生命周期的开始
java的垃圾回收机制会自动销毁已经无用的对象
有时中断对于处理时间性强的任务是必须的,但是对于大量的其他任务,我们只是想把问题切分成多个可独立运行的部分,从而提高程序的相应能力.在程序中,这些彼此独立运行的部分称之为线程,上述概念被称为“并发”。并发最常见的例子就是用户界面。通过使用任务,用户可以在按下按钮后快速得到一个响应,而不是被迫等到程序完成当前任务为止。
并发有共享资源的问题,即两个进程不能同时让一台打印机打印。所以必须在使用的时候使用资源锁。
所以过程就是:某个任务锁定某一项资源,完成任务,然后释放资源锁,使得其他任务可以使用这项资源。
1.客户/服务器计算技术
2.Web就是一台巨型服务器
1.插件
2.脚本语言
javascript
3.java
applet
4.备选方案
5. .NET和C#