【Thinking in Java】第一章 對象導論

1、抽象過程

建模基於計算機的結構程序員

  • 「解空間」的解
  • 彙編語言:對底層機器的輕微抽象
  • 「命令式」語言:彙編語言的抽象

建模基於待「解決問題編程

  • 「問題空間」的元素
  • 面向對象

2、每一個對象都有一個接口

建立抽象數據類型(類)
類:相同特性(數據元素)和行爲(功能)的對象
主要任務:問題空間的元素和解空間的對象之間建立一對一的映射
類型決定接口——接口肯定可發請求——產生請求——得到對象——方法(代碼)調用數組

3、每一個對象都提供服務

將對象想象爲服務提供者,提升對象的內聚性。每一個對象作好本身的分內事。安全

4、控制訪問

public:任何人可用
private:子類不可用超類
protected:子類可用超類服務器

5、複用

直接使用該類的一個對象
將那個類的一個對象置於某個新的類中(建立一個成員對象)多線程

組合:使用現有的類合成新的類 has-a 擁有關係
聚合:動態組合
組合帶來靈活性,新類成員一般被聲明爲private。
不要第一反應就是繼承,能夠嘗試組合。併發

6、繼承

對象這種工具使得程序員能夠用概念(類class)將數據和功能封裝到一塊兒。app

基類——導出類函數

導出類繼承了基類的特色,工具

基類和導出類具備相同的基礎接口,造成二者差別的作法:

一、在導出類中添加新方法

is-like-a:在導出類型中添加新的接口元素,擴展了接口。

二、覆蓋(在導出類用建立方法的新定義,覆蓋基類中的方法定義)

is-a:純粹替代,只覆蓋。

7、伴隨多態的可互換對象

基類中,方法操做時泛化的
非OOP的編譯器採用前期綁定,對一個具體函數名字調用,解析到將要執行代碼的絕對地址。
而OOP的編譯器採用了後期綁定,當向對象發送消息時,代碼直到程序運行時才能肯定。編譯器確保調動方法的存在,並對調用變元和返回值執行類型檢查。

轉型
向上轉型:將導出類看作它的基類

8、單根繼承結構

全部東西都是Object類型

9、容器

不知道解決問題時須要多少對象、多少空間怎麼辦?
容器,建立一種對象類型,持有對其餘對象的引用,在任何須要時均可擴充本身以容納置於其中的全部東西。
List:用於儲存序列
Map:也稱關聯數組,用來創建對象之間的關聯
Set:每種對象類型只持有一個
Queue、Tree、Stack……

不一樣容器
一、提供了不一樣類型的接口和外部行爲
二、對於某些操做具備不一樣的效率

參數化類型
儲存Object的容器能夠儲存任何東西。當將對象引用置入容器時,被向上轉型爲Object,會丟失其身份;取回時,就獲取了一個對Object對象的引用。若要變回原先接口,需向下轉型,但向下轉型不安全。一種採用向下轉型的作法是異常處理。
更好的作法是參數化類型機制。參數化類型機制是一個類,編譯器能夠經過自動定製,從而做用於特定類型上。

10、對象的建立和生命期

使用關鍵問題之一:對象生成和銷燬方式
一、編寫程序時設定:將對象置於堆棧(有時被稱爲自動變量或限域變量)或靜態存儲區域內來實現。犧牲了靈活性。
二、在堆(heap)的內存池中動態地建立對象。建立堆存儲空間的事件依賴於存儲機制的設計。

動態方式通常性邏輯假設:對象趨於變得複雜,因此查找和釋放存儲空間的開銷不會對對象的建立形成重大沖擊。動態方式帶來更大的靈活性。

Java徹底採用了動態內存分配方式。每當想要建立新對象時,就要使用new關鍵字來構建此對象的動態實例。

Java生命期:垃圾回收器

11、異常處理:處理錯誤

12、併發編程

線程:獨立運行的部分(任務)
併發:把問題切分紅多個線程,從而提升程序的響應能力
多線程優勢:沒必要操心機器上是有多個處理器仍是隻有一個處理器
隱患:共享資源。解決方法:共享資源在使用期間被鎖定。

十3、Java與Internet

1.Web

1)客戶/服務器計算技術
系統具備一箇中央信息存儲池,可根據須要將它分發給某些人員或機器集羣,其位置集中於中央,使得它可被修改,而且這些修改將被傳播給信息消費者。
服務器:信息存儲池、用於分發信息的軟件、信息與軟件所駐留的機器或機羣
單一的服務器同時爲多個客戶服務

2)Web就是一臺巨型服務器
關心:怎樣鏈接到一臺服務器上,並與之進行交互。

二、客戶端編程

1)插件
2)腳本語言
3)Java
4)備選方案
Java applet
Flex
5).NET和C#
6)Internet和Intranet

十3、服務器端編程

相關文章
相關標籤/搜索