建模基於計算機的結構程序員
建模基於待「解決問題編程
建立抽象數據類型(類)
類:相同特性(數據元素)和行爲(功能)的對象
主要任務:問題空間的元素和解空間的對象之間建立一對一的映射
類型決定接口——接口肯定可發請求——產生請求——得到對象——方法(代碼)調用數組
將對象想象爲服務提供者,提升對象的內聚性。每一個對象作好本身的分內事。安全
public:任何人可用
private:子類不可用超類
protected:子類可用超類服務器
直接使用該類的一個對象
將那個類的一個對象置於某個新的類中(建立一個成員對象)多線程
組合:使用現有的類合成新的類 has-a 擁有關係
聚合:動態組合
組合帶來靈活性,新類成員一般被聲明爲private。
不要第一反應就是繼承,能夠嘗試組合。併發
對象這種工具使得程序員能夠用概念(類class)將數據和功能封裝到一塊兒。app
基類——導出類函數
導出類繼承了基類的特色,工具
基類和導出類具備相同的基礎接口,造成二者差別的作法:
一、在導出類中添加新方法
is-like-a:在導出類型中添加新的接口元素,擴展了接口。
二、覆蓋(在導出類用建立方法的新定義,覆蓋基類中的方法定義)
is-a:純粹替代,只覆蓋。
基類中,方法操做時泛化的
非OOP的編譯器採用前期綁定,對一個具體函數名字調用,解析到將要執行代碼的絕對地址。
而OOP的編譯器採用了後期綁定,當向對象發送消息時,代碼直到程序運行時才能肯定。編譯器確保調動方法的存在,並對調用變元和返回值執行類型檢查。
轉型
向上轉型:將導出類看作它的基類
全部東西都是Object類型
不知道解決問題時須要多少對象、多少空間怎麼辦?
容器,建立一種對象類型,持有對其餘對象的引用,在任何須要時均可擴充本身以容納置於其中的全部東西。
List:用於儲存序列
Map:也稱關聯數組,用來創建對象之間的關聯
Set:每種對象類型只持有一個
Queue、Tree、Stack……
不一樣容器
一、提供了不一樣類型的接口和外部行爲
二、對於某些操做具備不一樣的效率
參數化類型
儲存Object的容器能夠儲存任何東西。當將對象引用置入容器時,被向上轉型爲Object,會丟失其身份;取回時,就獲取了一個對Object對象的引用。若要變回原先接口,需向下轉型,但向下轉型不安全。一種採用向下轉型的作法是異常處理。
更好的作法是參數化類型機制。參數化類型機制是一個類,編譯器能夠經過自動定製,從而做用於特定類型上。
使用關鍵問題之一:對象生成和銷燬方式
一、編寫程序時設定:將對象置於堆棧(有時被稱爲自動變量或限域變量)或靜態存儲區域內來實現。犧牲了靈活性。
二、在堆(heap)的內存池中動態地建立對象。建立堆存儲空間的事件依賴於存儲機制的設計。
動態方式通常性邏輯假設:對象趨於變得複雜,因此查找和釋放存儲空間的開銷不會對對象的建立形成重大沖擊。動態方式帶來更大的靈活性。
Java徹底採用了動態內存分配方式。每當想要建立新對象時,就要使用new關鍵字來構建此對象的動態實例。
Java生命期:垃圾回收器
線程:獨立運行的部分(任務)
併發:把問題切分紅多個線程,從而提升程序的響應能力
多線程優勢:沒必要操心機器上是有多個處理器仍是隻有一個處理器
隱患:共享資源。解決方法:共享資源在使用期間被鎖定。
1)客戶/服務器計算技術
系統具備一箇中央信息存儲池,可根據須要將它分發給某些人員或機器集羣,其位置集中於中央,使得它可被修改,而且這些修改將被傳播給信息消費者。
服務器:信息存儲池、用於分發信息的軟件、信息與軟件所駐留的機器或機羣
單一的服務器同時爲多個客戶服務
2)Web就是一臺巨型服務器
關心:怎樣鏈接到一臺服務器上,並與之進行交互。
1)插件
2)腳本語言
3)Java
4)備選方案
Java applet
Flex
5).NET和C#
6)Internet和Intranet