通常會被問到,什么事OOD,然后大部分人期待的答案比較死板,繼承、封裝、多態!懂這個的人多的去了,有什么好問?回答出來的人是否拿著Java又去做一些面向過程的勾當?
計算機革命起源于機器,因此編程語言的產生始于對機器的模仿;因為機器只認得0和1,所以所有的編程語言都得提供一種抽象機制,人們解決問題的復雜性取決于抽象的類型和質量,匯編語言就是對機器碼的輕量級抽象,然后像C一樣的“命令式”語言是對匯編的抽象;人們為了讓計算機去解決問題就需要用這些語言,本質是在把問題基于計算機的抽象結構給出解決方案,這里涉及問題空間和解空間這兩個元素:
第一:問題空間
現實世界存在的問題,需要解決,具有其問題的結構特征;特征可以理解為現實世界的模擬抽象;始于人類對自然界分解,組織成的各種概念和關系;因此符合人類的思維方式,容易被人類理解;
第二:解空間
計算機的結構構成的空間,是問題最終得以處理為結果的地方,解空間的每一個解也是人類組織創建,但思想出發點是計算機的比較底層的抽象所組織的,可以認為,這類抽象結果,是一種基于計算機的建模過程;第一段提到面向過程的勾當,就是用高級過程語言抽象的思維去解決問題;因此不可否認,Java也是需要過程性元數據的;
面向對象:
因此,基于解空間,以計算機思維解決問題這類操作是費時費力的,而面向對象就是一種特別的只針對待解決問題的建模;我們將問題空間的元素及其在解空間中的表示稱之為:“對象”,這意味著,程序員不僅僅擁有計算機的元類型去解決問題,而且能自定義類型,我們稱之為類,它是對象的抽象;有了新類型后,也意味著,計算機允許根據問題來描述問題;而不是根據運行解決方案的計算機來描述問題,這點是關鍵所在;就好比每個對象是一臺微型計算機,它是有狀態的,還具有操作;
順便提一下,每一個對象,都需要接受請求來完成任務,一些對象只能滿足某些請求,這些請求是由對象的接口所定義,決定接口的叫類型,這些接口都有一個方法與之關聯,當向對象發送請求時,方法就會被調用,此過程通常被概況為:向對象“發送消息”(產生請求),通過發生消息,對象就通過方法知道此消息的目的,然后執行對象行為;在代碼表現:需要有對象的引用,聲明對象的名稱,然后用一個圓點連接消息請求;
每一個對象都提供服務:
當試圖開發或理解一個程序設計時,最好的方法之一就是將對象想象為服務提供者,程序本身向用戶提供服務,它通過調用其他對象提供服務達到這一目的,你的目標就是去創建能提供理想的服務來解決問題的一系列對象;將對象當做是服務提供者還有一個好處就是:內聚性,內聚性是軟件設計的基本質量要求之一,這意味著一個軟件構件組合的非常之好,
?
、、、、待續 5.23