《Java编程思想》001 对象导论

与您共读《Java 编程思想》page 1-20

对象导论

1.1 抽象过程

所有编程语言都提供了抽象机制,人们所能解决问题的复杂性直接取决于抽象的类型和质量。
面向对象思想: 程序可以通过添加新类型的对象时自身适用于某个特定的问题。

面向对象的五个基本特性(Alan Kay)

  • 万物皆对象(奇特的变量、存储数据、执行操作)
  • 程序是对象的集合,他们通过发送消息来告知彼此所要做的。(消息:对某个特定对象方法调用的请求)
  • 每个对象都有自己的由其它对象构成的存储。(程序的复杂性隐藏在对象的简单性背后)
  • 每个对象都拥有其类型(每个对象都是一个class的instance)
  • 某个特定类型的所有对象都可以接收同一类型的消息。

对象具有状态、行为和标识(Booch)

  • 内部数据:状态
  • 方法:产生行为
  • 内存地址:标识

1.2 每个对象都有一个对象

接口是确定了对某一特定对象所能发出的请求。

1.3 每个对象都提供服务

把对象看做服务提供者,有助于提高对象的内聚性。高内聚是软件的基本质量要求之一。

1.4 被隐藏的具体实现

  • 类创建者:创建数据类型的程序员
  • 客户端程序员:在应用中使用数据类型的程序员

访问控制

  • 客户端程序员无法触及他们不应该触及的部分
  • 允许库设计者可以改变内部类的工作方式二不用担心会影响客户端程序员

访问指定词(access specifier)

  • public
  • private
  • protected

包访问权限

1.5 复用具体实现

代码复用是面向对象语言提供的最了不起的特性之一。

  • 直接使用对象
  • 创建一个成员对象(组合 has-a)

1.6 继承(extends)

  • 添加新方法
  • 覆盖(overriding)

1.7 伴随多态的可换对象

导出类看做基类的过程为向上转型(upcasing)

1.8 单根继承结构

  • 所有对象具有共同的接口
  • 所有对象具备某些功能
  • 是垃圾回收机制简化

1.9 容器

  • List(存储序列)
  • Map(关联数组,建立对象之间的关联)
  • Set(每种对象只持有一个)
  • 其它:队列、数、堆栈等

容器选择
- 不同容器提供了不同类型的接口和外部行为
- 不同容器对某些操作的效率不同

ArrayList和LinkedList对比
- 提供的接口和外部行为相同
- ArrayList随机访问数据花费时间相同
- LinkedList随机选取元素需要在列表中移动,越接近表尾时间越长
- 插入元素LinkedList的花费比ArrayList小

参数化类型(泛型)

参数化类型传递机制就是编译器可以自动定制作用于特定类型的类。
使用一堆尖括号,中间包括类型信息。

// 一个存储Shape对象的容器
ArrayList shape = new ArrayList();

1.10 对象的创建和生命周期

内存何时释放的问题?

  • 方式一:C++认为效率控制是重要的议题
    • 对象的存储空间和生命周期可以再编写程序书确定,将对象置于堆栈(自动变量(automatic variable)或限域变量(scoped variable))或静态存储区来实现
    • 牺牲了灵活性,编写程序时必须知道对象的确切数量、生命周期和类型
  • 堆(heap)
    • 在堆内存中动态创建对象
    • 运行时才知道有多少对象及生命周期等
    • 灵活

Java完全采用动态内存分配方式,通过垃圾回收机制确定对象何时销毁

异常处理

Java内置异常处理机制,并且强制使用。它是唯一可接受的错误报告方式。

并发编程

  • 并发和并行
  • 资源共享

1.13 Java与Internet

客户/服务器技术

  • 中央信息存储池:存储数据、分发
  • 客户机
  • 事务处理
  • 中间件将负载分散给服务器端的其他机器
  • web就是一台巨型服务器

客户端编程

  • 最初的 “服务器-浏览器”设计 提供交互性,交互有服务器提供
  • 客户端HTML通过通用网关(common gateway interface,CGI)传递
  • 网站可以完全建立在CGI,CGI几乎可以做任何事情
  • 构建CGI程序之上的网站可能会变得复杂而难以维护,并产生响应时间过长的问题

你可能感兴趣的:(共读《Java编程思想》)