Think in Java 笔记 01 对象导论

1.1抽象的过程

所有编程语言都提供抽象机制,可以认为,人们所能够解决问题的复杂行直接取决于抽象的类型和质量。
Smalltalk五个基本特征
1.万物皆为对象。
2.程序是对象的集合,他们通过发送消息来告知彼此所要做的。
3.每个对象都有自己的有其他对象所构成的存储。
4.每个对象都拥有类型。
5.某一特定类型的所有对象都可以接受同样的消息。

1.2每个对象都有一个接口

Light lt=new Ligint();
lt.on();

1.3每个对象都提供服务

1.当正在试图或理解一个程序设计是,最好的方法只一是就是将对象想象为“服务提供者”。程序本身将向用户提供服务,他将通过调用其它对象提供服务来实现这一目的。
2.将对象看做是服务提供者还有一个附带的好处:呀有助于提高对象的内聚性。
3.在良好的面向对象设计中,每个对象都可以很好的完成一项任务,但是他并不试图做更多的事。

1.4被隐藏的具体实现

将程序开发人员按照角色分为类创建者和客户端程序员。
客户段程序员的目标是收集各种用来实现快速开发。
类创建着是创建类。
好处是减少BUG,快速开发,防止修改。
Java中用三个关键字在内部设定边界:public,private,protected。

1.5复用具体实现

当程序可以被重复使用时,我们可以创建一个对象。可以任意操作数量。任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成 这种概念叫组合。如果是动态那么 被称为聚合。 has-a的关系。

1.6集成

继承可以承接父类所有属性方法,当集成时,也就创作了新的类型。
1.6.1“是一个””与像一个“关系
is -a
is -like-a

1.7伴随多态的可互换对象

多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
作用:消除类型之间的耦合关系。
现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。
6.多态的好处:
1)可替换性(substitutability):多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2)可扩充性(extensibility):多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3)接口性(interface-ability):多 态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和 Sphere为了实现多态,完善或者覆盖这两个接口方法。
4)灵活性(flexibility):它在应用中体现了灵活多样的操作,提高了使用效率。
5)简化性(simplicity):多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
7.Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
在java中,多态大致可以分为以下几种情况:
1)person为父类,student为子类。那么:person p=new student();
2)fliable为接口,bird为实现接口的类,那么:fliable f=new bird();
3)fliable为抽象类,bird为继承fliable的类,那么:fliablef=new bird();
多态时需要说明p声明为父类的引用,但他实际为子类引用。但是他只能调用父类中的方法。如果子类中的方法覆盖了父类方法,那么将调用父类方法(虚方法调用)。接口多态也是同样的,也许你会问,如果f要调用自己的方法,那岂不是出错了?其实这里也是方法的覆盖,因为实现接口的子类肯定会实现接口中的方法。

1.8单根继承结构

单根继承,意味着所有类的继承,都继承自单一的基类的继承模式。.NET ,JAVA都是这样的单根继承。

1.9容器

1:List:用于存储序列 ;Map:用于存储键值对;Set 每种对象类型支持有一个
ArrayList 于LinkedList相同和不同:
相同之处:都有相同的接口和外部行为
ArrayList:在随机获取元素消耗时间固定, 而linkedList 却因为要在列表中移动来寻找指定元素,比较消耗时间
相反 在插入元素的操作 linkedList的消耗小于ArrayList
本质来说是由于两者底层实现方式不一样 ArrayList给予动态数33组实现, LinkedList给予链表结构实现的
这里提出需要看数据结构来理解链表
2:参数化类型
参数化类型必然会引起两种转型: 一种是上节提到的向上转型,在把对象放到容器中, 另一种向下转型,在从容器中取出对象。由于向下转型是非安全的,需要明确指定类型;
参数化类型 在java中称为泛型 利用下面代码标注容器只能存储什么类型的对象 ArrayList list = new ArrayList();

1.10对象的创建和生命周期

在Java中,对象的生命周期包括以下几个阶段:

1. 创建阶段(Created)
2. 应用阶段(In Use)
3. 不可见阶段(Invisible)
4. 不可达阶段(Unreachable)
5. 收集阶段(Collected)
6. 终结阶段(Finalized)
7. 对象空间重分配阶段(De-allocated)

1.11异常处理 处理错误
1.12并发编程
所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。
1.13Java与Internet
1.13.1什么是web?
web是互联网的总称,表现为三种形式,即超文本(hypertext)、超媒体(hypermedia)、超文本传输协议(HTTP)等,可见他的简单性和复杂性。
web是一个巨型的客户/服务器系统。
web最初的状态是一种很简单的单项过程,即客户机向服务器发送一个请求,然后服务器返回一个文件,客户机解读这个文件。
但慢慢的人们希望做的更多,客户机希望操作服务器,比如一些插入数据库的操作。
1.13.2客户端编程
1.插件
2脚本语言
3.Java
4.备选方案
5.Net和C#
6.Internet和Intranet
1.13.3服务器段编程
服务端编程是指在web服务器上编写程序并使之正常运行。在B/S模式下,当用户下载一个网页时,如果网页中包含服务端脚本程序,web服务器将首次执行网页中的脚本程序,然后把执行的结果网页发送到客户端浏览器显示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值