Thinking in Java 读书笔记 第一章 对象导论

来源:互联网 发布:网络教育本科学历 编辑:程序博客网 时间:2024/05/19 09:12

章一 对象导论

内容: OOP(Object-oriented Programming)的背景性,补充性材料

1.1 抽象过程

OOP设计方式,基于Smalltalk:

  • 万物皆为对象
  • 程序是对象的集合,对象之间通过发送消息来告知彼此所要做的
  • 每个对象都有自己的由其他对象所构成的存储
  • 每个对象都有其类型
  • 某一特定类型的所有对象都可以接收同样的消息

Booch的对象描述:对象具有状态行为标识

1.2 每个对象都有一个接口

接口确定了对某一特定对象所能发出的请求
UML: Unified Modeling Language, 类用方框表示,类名在头部,重要数据成员在中间,方法在底部。
通常,只展示类名公共方法,如下:

Light on(), off()

1.3 每个对象都提供服务

通过将对象想象为服务提供者,有助于开发理解程序设计

目标创建(或复用代码)能够提供服务解决问题的一系列对象
途径:将问题分解为对象集合,并将对象视为服务提供者

tip:不要将过多功能放入一个对象,注意高内聚,低耦合

1.4 被隐藏的具体实现

程序开发人员:

  • 类创建者(创建新数据类型的程序员)
  • 客户端程序员(使用数据类型的类消费者)

访问控制:

  • 让客户端程序员无法触及他们不该触及的部分
  • 允许类库设计者改变类内部工作方式而不用担心会影响到客户端程序员
  • 分类:
    • public: 全局访问
    • default(默认) : 包访问权限
    • protected : 比private子类访问权限
    • private :类内访问

1.5 复用具体实现

复用某个类的方式

  • 直接使用该类的对象
  • 将该类对象置于某个新的类中——组合(代表has-a的关系)

1.6 继承

当继承现有类型时,创造了新的类型:

  • 新的类型包括现有类型的所有成员(尽管private成员被隐藏,且无法访问)
  • 新的类型复制了基类的接口——子类和基类有相同类型
  • 子类基类产生差异
    • 在子类中添加新方法
    • 在子类中重新定义基类的方法,采取覆盖override操作

1.6.1“是一个” vs “像是一个”

是一个子类父类拥有完全相同的接口,符合替代原则,则两者为是一个的关系
像是一个子类中添加新的接口

1.7 多态

设计思想:将对象当作其父类对象来看待,而不是他所属的特定类型,从而写出不依赖特定类型的代码——多态
好处:添加新类型时不影响现有继承体系,改善设计,降低软件维护成本
表现:调用方法时,总能实现正确的操作
实现后期绑定——当向对象发送消息,被调用代码在运行期确定(Java采用小段代码(计算方法体地址)代替绝对地址调用

tips:

  • Java无需生命某个方法具备后期绑定属性所带来的灵活性,Java中默认动态绑定
  • upcasting(向上转型):将子类看做其父类

1.8 单根继承结构

定义:所有类都继承自单一的基类——Object

优势:

  • 所有对象都属于同一基本类型,都具有同一共同结果
  • 所有对象都具备某些功能
  • 有助于垃圾回收器的实现
  • 所有对象都具有类型信息:方便系统级操作(异常处理)

1.9 容器

分类:

  • List:存储序列
  • Map关联数组,建立对象间的联系
  • Set:不重复序列

容器分类原因:

  • 不同的容器提供不同的接口外部行为
  • 不同的容器对某些操作有不同的效率

1.9.1 参数化类型

在Java SE5之前,容器存储的对象都向上转型为Object,这使得容器易被复用,但当对象被取回,会丢失其身份信息
取回对象在放入容器前的类型的方法:使用向下转型
解决方法:参数化类型
参数化类型:编译器可以自动定制作用于特定类型上的类,在Java中被称为泛型。代码示范如下:
ArrayList<Shape> shape= new ArrayList<Shape>();

1.10 对象的创建和生命期

创建:Java完全采用动态内存分配方式(基本类型除外),通过new来构建对象的动态实例
销毁:Java采用垃圾回收器来处理内存释放问题,结合所有对象都单根继承自Object只能通过new创建对象,使得决策简单很多

1.11 异常处理

异常处理错误处理直接置于编程语言中,乃至操作系统中。
异常是一种对象,在出错地点被抛出,并被专门设计用来处理特定类型错误的相应异常处理器 “捕获”
异常不能被忽略,其保证一定会被处理
异常提供了从错误状态进行可靠恢复的途径

1.12 并发编程

基本概念:同一时刻处理多个任务
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位
多线程隐患共享资源
解决方法

1.13 Java与Internet

Java的重要性:解决了万维网(WWW)上的程序设计问题

1.13.1 Web

1. 客户/服务器计算技术

核心思想:系统具有一个中央信息存储池,用以存储数据,并根据需要将其发送给人员或机器集群
服务器:信息存储池、用以分发信息的软件以及信息与软件所驻留的机器或机群的总称
客户机:通过软件与服务器进行通信,以获取信息、处理信息、显示信息

2. Web就是一台巨型服务器

1.13.2 Web客户端编程(Active X控件、Java Applet等)

1.插件

方式:将插件代码插入浏览器中适当文职,为浏览器添加新功能
价值:允许专家级程序员不经过浏览器生产厂商的许可,就可开发某种语言扩展,并将它们加入到服务器中

2.脚本语言

语言:JavaScript
优点:源代码直接嵌入到HTML页面中,易理解快速加载
缺点:暴露源代码
脚本语言总是被用来解决特定类型的问题,创建更丰富、更有交互性的GUI

3.Java

Java通过appletJava Web Start来进行客户端编程

4.备选方案

Macromedia的Flex

5. .NET和C#

.NET平台:大致相当于Java虚拟机和Java类库
C#:模仿Java建立的语言

6.Internet与Intranet

Intranet:当Web技术仅限用于特定公司的信息网络时,它被称为Intranet(企业内部网)
Intranet比Internet提供了更高的安全性

1.13.3 服务器端编程

对服务器的请求可能为文件请求,或更复杂的数据库事务请求。
这些数据库请求必须通过服务器端的某些代码来处理,这就是服务器端编程。
一般,服务器端编程通过使用Perl、Python、C++或其他语言编写CGI(common gateway interface,通用网关接口)实现
Java通过servlet及其衍生物JSP实现服务器端编程

1.14 总结

过程型语言数据定义函数调用
OOP语言
- 定义用以表示问题空间概念的对象
- 定义发送给这些对象的用来表示在此空间内的行为消息

原创粉丝点击