特此聲明:本人正在學習android架構知識,此些blog相當於自己的學習筆記,完全手工碼字,部分內容借鑒於android研究員高煥堂高老師的ppt講義,穿插個人領悟,出於弘揚程序員奉獻精神,再此分享給感興趣的朋友!
1.面向對象oop
oriented的含義:意味着一種信仰,object-oriented相信任何的軟件都是有對象構成,
而不是Nothing else,由此可以得出總結:電腦語言的設計就簡化了寫程序只要定義class就可以了
2.Oriented-Based-Driven-Centered 之間的區別:
Based:--基於需求,有先后的順序。例如先進行需求分析,然后基於需求分析的結果(文件)
而進行后續的軟件開發活動,稱為:Requirement-based software developer
俗稱:打地基。
driven:“引導”,當在開發軟件的時候,按照指定的模型去開發程序,以用戶的使用為北極星,在不
違背用戶需求的情況下開發系統。
centered:一切的軟件開發的活動都是圍繞這架構,就是像聖誕節的糖果和禮物一樣都掛在聖誕樹上
一樣
對象(Object)
自然界中我們都認識的東西都是對象,而對於自己不認識的東西我們就理所當然的不認為是成為對象
,舉個例子:李白自己寫的詩文,他認為是對象,但是給他看一個外文詩的時候,他就不認為是對象
因為他根本不認識這個東西。
然后是。一旦我們認識了某樣東西,我們就可以說出他的特點,並於別的對象做一個對比,其特點包
括:
1>對象之特征或者屬性
2>對象之行為
例如:人有鼻子,胳膊,退等屬性,會跑,跳等行為。
軟件之對象(software Object)是有數據(Data)和函數(Function)組成。
類(Class)
是群體或者集合,而對象是類中的一份子,類是對象的集合。
類是一群具有共同重要屬性的對象,類的定義就是說明這對象都具有什么的重要特性,軟件中的對
象以數據來表達特性,以函數來表達行為,因此,類的定義就是說明軟件中的對象,應包含數據和函數。
繼承(extend)
對眾多的對象加以分門別類,就形成了繼承的的體系,衍生類=子類
子類繼承基類(父類)子類和父類如同兒子和爸爸的關系,子類繼承父類的所用屬性和行為,並且子類還可以自己
定義屬性(data)和行為(函數)。
表達組合:,擴充功能,和繼承類似。
基類和子類的結構用途:比如輪胎和引擎的關系,引擎帶動輪胎運作,彼此是組合關系
我們在此舉個列子:
創建小線程:
main(){
Thread t = new Thread(new Task());//創建輪胎引擎
t.start();//啟動引擎帶動輪胎轉動,拿到基類對象,通過接口調用子類的函數。
//t開啟小線程去執行run()函數。
}
class Task implements Runnable{
public void run(){
system.err.println("hello world");
}
}
想要將輪胎和引擎結合起來,那么就必須給Thread(引擎)定義一個接口(Runnable),然后創建Task(輪胎)去實現這個接口,
接口(interface)=(卡榫函數)
基類和子類的結構:
所謂的卡榫(Hook)就是用來結合兩個東西的接口,如果兩個東西與不同的時間出現,那么一方
就會預留虛空,給予另一方未來時刻能以實體來填補該空間,兩者虛實相依就密合起來,以此實現新陳代謝抽換自如(pnp)
變與不變的分離:是設計卡榫函數函數以及應用框架之基本原則和手藝
分離出變與不變部分之后,就可以將不變的部分寫在父類別里,而變的部分寫在子類別里
*在Java里,使用抽象(abstract)函數或可覆寫(overridable)函數來實現卡榫函數
Ioc控制反轉:
基類調用子類,主控權在基類上,
Ioc機制源自於oo語言(c++等)的類別繼承體系,c++中基類的函數可以主動的調用子類的函數,這是經典的
ioc機制。
基類和子類之間,基類是主控權,通過Hook函數來調用子類
通常撰寫基類在先,而子類在后,這種前輩擁有主導權,進而控制后背之情形,叫做“控制反轉”
默認(Default)行為:基類的主要功能,提供預設值的默認行為,即函數,供子類調用
繼承。
主動性vs被動型api:
UI = USER INTERFACE.
從基類的視角去區分主動和被動。
API:這是一個名詞,但是他關聯着三個動詞:1.定義(define)2.實現(implement)3.呼叫(ioc)
可講API分為“主動型”和“被動型”
接口(interface)是雙方接觸的地方,可以說是雙方勢力或者地盤的界線
誰擁有接口的制定權,誰就掌控着控制點,誰就能獲得主動權,另一方為被動地位
通過圖片便於理解以上知識: