1. 程式人生 > >JAVA第一章 物件導論

JAVA第一章 物件導論

	/*+
	 * 1、程式語言的產生起源與對機器的模仿
	 * 2、www.MindView.net <<c程式設計思想>> Think in C
	 * 
	 */
	
	/*
	 * 什麼是抽象過程
	 * 1、抽象型別:型別指的是:抽象的是什麼
	 * 2、命令式語言:FORTRAN,BASIC,C是對組合語言的抽象
	 * 3、每個物件就像是一臺微型計算機:具有狀態也有操作
	 * 4、面向物件程式設計的特性
	 * (1)、萬物皆是物件
	 * (2)、程式是物件的集合:他們通過傳送訊息告知彼此需要做什麼
	 * (3)、每個物件都有自己的由其他物件所構成的儲存
	 * (4)、每個物件都有它的型別
	 * (5)、某一特定型別的所有物件都可以接收同樣的訊息:比如圓形物件可以接收幾何形物件同等的訊息
	 */
	
	/*
	 * 每個物件都有一個介面
	 * 1、類描述了具有相同資料和行為的物件的集合,所以類就是一個數據型別
	 * 2、Java允許程式設計師定義自己需要的資料型別來適應問題,即定義新的類,程式設計系統也會檢查和照管新類
	 * 3、物件介面確定某一物件所能傳送和接收的請求,
	 *   Light it=new Light();
	 *   it.on();
	 * 定義一個物件的引用it,然後呼叫new方法來建立該型別的新物件。然後向物件傳送請求(呼叫請求介面(即方法)),物件就知道自己該做什麼
	 * 4、UML:統一建模語言
	 */
	
	/*
	 * 每個物件都提供服務
	 * 1、程式是物件的集合,它通過物件之間的服務來完成工作。物件就是服務提供者,它將呼叫本身或其他物件的服務來完成目的。程式設計師就是根據需要確定
	 * 我們需要哪些物件。
	 * 2、物件的內聚性:
	 * 高內聚是軟體設計的基本質量要求之一:即一個軟體構建(一個物件,一個方法或一個物件庫)各個方面組合的很好。
	 * 就是說:每一個物件由不必由太多動能,可以被其他物件複用。		 
	 * 
	 */
	
	/*
	 * 被隱藏的具體實現
	 * 1、程式開發人員分為:1、類建立者(建立資料型別)和客戶端程式設計師(應用資料型別)
	 * 類建立者的目標是構建類:這種類只向客戶端程式設計師暴露必備的部分,而隱藏其他部分
	 * 2、訪問控制:
	 * (1)讓客戶端程式設計師無法觸及他們不該觸及的那一部分
	 * (2)庫設計者改變內部方式而不影響客戶端程式設計師
	 * java通過三個關鍵字設定內部邊界:
	 * (1):public:任何人都可使用
	 * (2):private:只有類的內部方法可以使用
	 * (3):protected:一般作用與private相當,不同的是繼承類可以訪問
	 * (4):預設:包訪問許可權:同包的類可以訪問
	 */
	
	/*
	 * 複用具體實現
	 * 1、程式碼複用是面向物件程式設計最了不起的優點之一
	 * (1):複用方式
	 * 		直接使用該類的物件
	 * 		將一個類的物件置於一個新類中(組合:汽車擁有引擎):新類的成員一般為private
	 */
	
	/*
	 * 繼承
	 * 1、Java程式語言的基本單位:class
	 * 2、繼承的出現:有一個類和另一個類有相似的屬性和功能。
	 * 	匯出類比基類具有更多的特性和功能。(匯出類和基本具有相同的型別,圓形也是幾何形)
	 * 3、兩種方法使匯出類和基類有差異性
	 * 	(1):在匯出類中新增新方法
	 * 	(2):覆蓋
	 * 4、“是一個”和“像是一個”的關係
	 * 	替代原則
	 * 	(1):完全覆蓋:即匯出類完全重寫基類的方法(是一個的關係)
	 * 	(2):擴充套件介面(新增新功能)(像是一個的關係)
	 */
	
	/*
	 * 伴隨多型的可互換物件
	 * 1、在處理型別的層次結構時,經常想把一個物件不當成它的特定物件來處理,而是將它當作基類物件來對待:把自行車看做交通工具,把鸚鵡看成鳥
	 * 	物件會根據自己的型別執行相應的方法
	 * 2、前期繫結和後期繫結
	 * 前期繫結:在編譯時產生一個具體函式名字的呼叫:執行時呼叫執行程式碼的絕對地址
	 * 後期繫結:執行時才能確定程式碼的絕對地址,編譯器確保呼叫方法的存在,並對引數和返回值進行檢查。
	 * 後期繫結的實現:Java使用一小段特殊程式碼替代絕對地址的呼叫
	 * C++是使用virtual關鍵詞實現的,而Java動態繫結是預設行為
	 * 
	 * 3、將匯出類當做基類處理:
	 * 向上轉型的過程:“你是一個幾何形,你有自己的draw()方法,去做吧”
	 */
	
	/*
	 * 單根繼承結構
	 * 1、終極基類:object
	 * 2、單根繼承結構保證所有物件都具備某些功能
	 * 3、物件在堆上建立
	 * 4、單根繼承使垃圾回收機制變得簡單
	 */
	
	/*
	 * 容器
	 * 1、C++中使用“集合”來表述,Java使用容器表述
	 * 2、Java具有滿足不同需要的各種型別的容器:List(用於序列儲存),Map(關聯陣列),Set(每個物件型別只持有一個)
	 * (1):不同型別的容器提供不同型別的介面和外部行為
	 * (2):不同型別對於某些操作具有不同的效率
	 * 3、引數化型別(容器中只儲存object型別):向上轉型是安全的,向下轉型是不安全的
	 * 4、Javase5的重大變化之一:增加引數化型別:稱為泛型:用<>表示
	 * List<Shape> list=new ArrayList<Shape>();	 
	 * 
	 */

	/*
	 * 物件的建立和生命期
	 * 1、物件生存需要記憶體
	 * 2、Java採用了動態記憶體分配方式:建立物件使用new關鍵字
	 * 3、垃圾回收機制:發現物件不再被使用,就銷燬他
	 */
	
	/*
	 * 異常處理
	 */
	
	/*
	 * 併發程式設計:
	 * 1、作業系統的併發是基於中斷服務程式,分配時間片的手段
	 * 2、Java的併發是內置於語言的:Javase5添加了很多大額的庫支援
	 */
	
	/*
	 * Java和Internet
	 * 1、客戶端/伺服器技術
	 * 伺服器是提供服務的:伺服器上有資訊儲存池
	 * 2、web是一臺巨型伺服器
	 * 3、客戶端程式設計
	 * 早期的互動只由伺服器提供:瀏覽器只負責解析翻譯
	 * form表單提交是通過伺服器提供的通用閘道器介面CGI(但CGI啟動很慢,消耗網路頻寬)
	 * 4、客戶端程式設計如何實現:
	 * (1):外掛
	 * (2)指令碼語言
	 * (3)Java(通過applet和Java web start)
	 * (4).net和C#
	 * 5、伺服器程式設計
	 * (1)返回一個編排好的頁面
	 * (2)利用指令碼語言解析原始資料
	 * (3)servlet+jsp
	 * 6<<企業Java程式設計思想>>thinking in enterprise java
	 * 
	 */