編程語言起源與機器,是對機器的抽象,又是大腦的延伸,也是表達的媒體;因此,它的發展從對機器的簡單抽象,發到到現在越來越遠離機器,接近人類的表達;面向對象程序設計(OOP:object-oriented Programming)就是這個發展過成中的組成部分;
本章介紹包含開發方法概述在內的OOP基本概念;
1.1 抽象過程
編程就是將問題空間與解空間進行映射的過程;這個過程中抽象的對象及質量,決定了這個語音所能處理的問題復雜性;根據建模方式(抽象機制),可以把編程語言分成三類;
- 對機器抽象的語言
如匯編對底層機器的輕微抽象,BASIC、C等在匯編的基礎上繼續抽象;這些語言的抽象對象是機器,當需要解決實際問題時,需要基于計算機的機構進行考慮,建立起實際問題模型與機器模型的關聯,建立這種映射困難且維護代價高昂;
- 只針對問題建模的語言
這種語言提供固定的建模工具,在解決具體問題時,只需要對待解問題進行建模;如LISP,提供了“列表”做為建模工具,所有的問題都建模為列表;PROLOG則選擇“決策鏈”做為問題的建模工具;這些方式對他們要解決的特定問題比較有效,超出特定領域則顯力不從心
- 利用對象進行建模的語言
以對象作為建模工具,將具體問題描述為“對象”,即不用考慮計算機結構,又具有通用性;對象就是對現實問題進行建模的工具,可以創建不同類型的對象,這些對象具有狀態(屬性)以及行為(方法);
1.2 每個對象都有一個接口
類:具有相同特征的對象的集合,可以理解為數據類型或者建模工具; OOP編程通過定義類來適應問題,通過建立對象對問題進行建模解決問題;
UML圖
1.3 每個對象都提供服務
進行程序設計時,最好的方法是將對象想象為服務提供者。通過創建一系列能提供理想服務的對象來解決問題。
有助于提供對象的內聚性:每個對象相對獨立服務單一,類與類之間的關系簡單明了
1.4 被隱藏的具體實現
類創建者通過隱藏實現,暴露給客戶端程序員(收集)必要的部分,使各自邊界清晰,減少可能產生的bug;
通過訪問控制,讓關系涉及的各方遵守各自的邊界;即,讓客戶端程序員無法觸及他們不應該觸及的部分,讓類創建者修改類內部工作方式而不影響外部;
四種訪問權限:
- public
- private
- protect
- 默認訪問權限
1.5 復用具體實現
復用是OOP最了不起的優點之一,復用某個類可以直接使用這個類的對象,或者將該類的對象置于一個新類中(創建一個成員對象,這種關系叫組合);
UML圖
1.6 繼承
UML圖
https://www.cnblogs.com/liuzhang/archive/2013/03/17/2964095.html
1.7 伴隨多態的可互換對象
后期綁定讓java具有多態的特性
1.8 單根繼承結構
所有類繼承自單一基類:Object
單根繼承在參數傳遞以及垃圾回收等方面有優勢
1.9 容器
容器區別于數組,可以動態擴充;
java中存在大量的容器類,原因是:1、不同的容器具有不同的接口;2、具有不同的執行效率;可以根據需要選擇
1.9.1 參數化類型
參數化類型也稱為泛型;JavaSE5之前,容器存儲Object,參數化類型解決了操作時需要轉型;
1.10 對象的創建和生命周期
區別于C++追求效率,對象的存儲空間及生命周期可以在編寫程序時確定;java在堆中動態地創建對象。這種方式,直到運行時才知道需要對少對象、對象的生命周期以及對象的類型;
java采用動態內存分配方式,需要創建對象時使用new來構建動態實例;采用垃圾回收機制控制對象的生命周期;
1.11 異常處理:處理錯誤
異常處理被置于語言之中,強制進行處理,增強代碼健壯性;異常處理不是面向對象的特征,在面向對象之前已經存在;
1.12 并發編程
并發編程需要注意的一個問題是資源共享的問題,可通過鎖來解決;
1.13 java與Internet
java的重要性,不僅僅是因為解決了傳統單機程序設計問題,同樣重要的是它解決了萬維網上的程序設計問題;
1.13.1 Web是什么
java applet 在客戶端編程中