Java编程思想(第一章 对象入门)总结

时间:2023-03-09 21:40:12
Java编程思想(第一章 对象入门)总结

面向对象编程(oop)

1.1抽象的进步

所有编程语言的最终目的都是提供一种“抽象”方法。   难点是 在机器模型(位于“方案空间”)和实际解决问题模型(位于“问题空间”)之间,程序员必须建立起一种联系。造成程序员代码很难编写。因此造成的副作用便是一门完善的“编程方法”学科。

面向对象的程序设计在此基础上则可以利用一些工具表达问题空间中的元素。因为这种表达非常普通,所以不必受限于特定类型的问题。

将问题空间中的元素以及它们在方案空间的表示物称为“对象”(object)、

编程对象的五大共同特征:

1所有东西都是对象。将对象想象成一种新型变量;它保存着数据,但是可以要求它最自身进行操作。理论上,

可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象;

2程序是一大堆对象的组合:通过消息传递,各对象知道自己该做什么。为了向对象发出请求,需要向那个对象“”发送一条消息“”,可将消息想想成一个调用请求,它调用的是从属于目标对象的一个 子例程或函数

3每个对象都有自己的存储空间,可容纳其他对象。即通过封装现有的对象,可以制作出新型对象。

4每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,"类"(class)是类型(type)的同义词。一个类最重要的特征就是“能将什么消息发送给他”;

5同一类所有对象都能接收相同的消息。这一特性为对象的“可替换性”

1.2对象的接口

在面向对象的程序设计中,尽管我们要做的是新建各种各样的数据“类型”(TYpe),但是所有的都使用class关键字,因此我们看到type时需要想到 class关键字

挑战:如何在“问题空间”(问题实际存在的地方)的元素与“方案空间”(对实际问题进行建模的地方)的元素之间建立起理想的“一对一”

的映射关系。

想要利用对象进行工作,则需要对对象发出请求,令其做一些实际的事情。我们向对象发出的请求是通过它的“接口”定义的,对象的“类型”或“类”则规定了它的接口形式。“类型”与“接口”的等价或对应关系是面向对象程序设计的基础

列举灯泡为例:

Java编程思想(第一章 对象入门)总结

类型/类的名称是Light

为Light对象创建一个句柄  new新建一个对象,并用等号将其赋给句柄

Java采用三个显示(明确)关键字以及一个隐式(暗示)关键字来设置类边界:public,private,protected以及暗示性的friendly。若未明确指定其他关键字则默认是后者。

public:任何人都可以使用

private:除了自己、类型的创建者、以及那个类型的内部函数成员,其他任何人都不能访问后续的定义信息。

friendly:设计包装或封装的概念(package)的概念   即Java用来构建库的方法。若某一样东西是友好的,意味着它只能在这个包装的范围内使用(所以这一访问级别有时也叫做“”“包装访问”)。

protected:只是一个继承的类可访问受保护的成员,但是不能访问私有成员。

1.4 方案的重复使用  是面向对象的程序设计提供的最伟大的杠杆

为了重复使用一个类

可以直接使用哪个类的对象,单同时可以将那个类的一个对象置入一个新类。----创建一个成员对象。

新类可以由任意数量和类型的其他对象构成。无论何时,只要新类达到了设计要求即可。

这个概念叫做组织---在现有类的基础上组织一个新类。  有时,我们也将组织成为包含关系。

新建类的时候,首先应该考虑“”“组织对象”,这样更加简单和灵活。利用对象的组织,我们可以使实际保持清爽。一旦需要用到继承,就会意识到这一点

1.5 继承:重新使用接口

对象在概念上可以允许我们将各种各样的数据和功能封装在一起。这样便可以表达“问题空间“”的概念,不要刻意的遵照基础机器的表达方式。

在程序设计语言中,这些概念则反映为具体的数据类型(class)

继承的目标:利用现成的数据类型,对其进行克隆,在根据情况进行添加和修改;

继承的过程:若原始类发生了变化,修改过的“克隆”类也会反映出这种变化

继承的实现:Java中使用extends关键字实现的

使用继承时,衍生类具有与基础类相同的接口,所以那个接口必须进行特殊的设计。即对象接收到一条特定的消息后,必须有一个方法能够执行

将衍生类和原来的基础类进行区分:

1为衍生类添加新的函数(功能),所以需要添加更多的函数。

1.5.1改善基础类

2改变基础类的一个现有函数的行为

第二个办法是改变基础类一个现有函数的行为。目标是:尽管使用的函数接口未发生改变,但是他的新版本具有不同的表现。

1.5.2等价与类似的关系

可以将衍生类的一个对象换成基础类的一个对象,可将其想象成一种“纯替换”。

类似关系是指:我们为衍生类型加入新的接口元素,所以不仅扩展了接口,也创建一种新的类型。这种新类型仍可以替换成基础类型,但是这种替换不是完美的,因为不可能在基础类中访问新函数。

1.6多形对象的互换使用

Upcasting(上溯造型)把衍生类型当作它的基本类型处理。

cast(造型)是根据一个现成的模型创建。

Up(向上)表明继承的方向是从“上面”来的-----即基础类位于顶部而衍生类在下方展开。

1.6.1动态绑定

多形性:将一条消息发送给对象时,如果并不知道对方的具体类型是什么,但采取的行动同样是正确的。

动态绑定:用以实现多形性的方法

其中函数的动态绑定是自动运行的,所以将一条消息发送给对象时,我们完全可以肯定对象会采取正确的行动,即使其中涉及上溯造型之类的处理。

1.6.2抽象的基础类和接口

我们希望基础类只为自己的衍生类服务,即不想其他任何人实际创建基础类的一个对象,为了达到这个目的,需要把那个类变成抽象的----使用abstract关键字。

也可以用abstract关键字描述一个尚未实现的方法---作为一个“根”使。

抽象方法也许只能在一个抽象类里创建。继承了一个类后,那个方法就必须实现,否则继承的类就会变成抽象类。通过城建一个抽象方法,可以讲一个方法置入接口中。

1.7对象的创建和存在时间

Java提供了一个垃圾收集器

1.7.1集合与继承器

集合:容器,集合会自动扩充自己,以便适应我们在其中置入的任何东西。

倘若希望对集合中的一系列元素进行操作则需要使用“继续器”

继续器:是一种对象,负责选择集合内的元素,并把它们提供给继承器的用户。通过集成器的作用,集合被抽象成一个简单的序列。继承器允许我们遍历那个序列,同时不要关心基础结构是什么

1.7.2单根结构

利用单根结构可以方便地实现一个垃圾收集器。

下塑造性:是下塑造型成一种更特殊的造型。

1.7.4消除  违例控制

1.9多线程

使用多线程时需要程序员创建一个对象,用它代表一把锁,所有线程在访问那个资源时都必须检查这把锁

1.11.1什么是Web

1客户机/服务器计算

服务器(server):将各种元素集中到一起,信息仓库,用于投递信息的软件以及信息及软件所在的机器。

客户:对于驻留在远程机器上的软件,他们需要与服务器通信,取回信息,进行适当的处理,然后在远程机器上显示出来

中间件:为了避免访问拥塞,可让客户机负担部分处理任务,但是有时也可以分派给服务器所在地的其他机器。

1.11.2客户端编程

1.12.1不要迷失

时刻提醒自己注意一下问题:、

1对象是什么(怎样将自己的项目分割成一系列单独的组件)

2它们的接口是什么(需要将什么消息发送给每一个对象?)

在确定了对象和接口之后,便可以着手编写一个程序。

整个过程可以分为4个阶段

阶段0 拟出一个计划

阶段1要制作什么?建立需求分析和系统规格

阶段2如何构建

阶段3开始创建

阶段4校订  维护