C++面向?qū)ο蠖嗑€程學習筆記_類層次和線程處理C++組件

類層次(class hierarchy)是一些通過繼承(inheritance)相關(guān)聯(lián)的類的集合。它的一些常見類類型有:

*抽象基類;

*具體類;

*節(jié)點類;

*接口類;

*容器和集合類;

*應用框架類;

*域類。

1. 抽象基類

抽象基類為所有后代提供藍圖,它作為從它派生的所有類的一套原則和接口策略。為了使用抽象類,用戶必須首先從基類派生出一個新類,并為抽象類中聲明的所有純虛函數(shù)提供實際的定義。抽象類在C++語言結(jié)構(gòu)中的身份是純虛函數(shù),對于一個抽象類,它必須至少有一個純虛函數(shù)。

2. 具體類

具體類作為純結(jié)類來設計和實現(xiàn)。它表示祖先-后代世系中的結(jié)束。它沒有虛函數(shù),不打算用來被繼承,只是按現(xiàn)在的樣子進行直接使用。

2.1 節(jié)點類:

它提供繼承和多態(tài)的基礎(chǔ)。與抽象基類一樣,節(jié)點類設計用于被繼承,但它不包含純虛函數(shù)。節(jié)點類可以立即使用,不過節(jié)點類的設計還同時著眼于未來,它的設計具有可重用性,同時提供可以在派生類中覆蓋的虛成員函數(shù)。它還提供可以被派生類繼承的受保護數(shù)據(jù)成員和成員函數(shù)。它使用基類的指針和引用使得可以操縱后代類中的成員函數(shù)。

2.2 線程與容器和集合類

與大部分C++組件類型一樣,在多線程程序中,集合和容器類與線程交互的主要途徑有兩種:

*線程間通信;

*多線程服務器。

與一般情況下將數(shù)據(jù)結(jié)構(gòu)用作多個進程間通信機制相比,使用面向?qū)ο蠼M件進行線程間通信具有巨大的優(yōu)點。進程間的數(shù)據(jù)通信通常位于線性數(shù)據(jù)結(jié)構(gòu)中,例如隊列和管道中。這些數(shù)據(jù)結(jié)構(gòu)沒有提供圖表、集和映射所提供的表達力。當在進程間傳遞數(shù)據(jù)時,程序員被迫將通信看作多個進程間的一種簡單線性數(shù)據(jù)或消息交換。

多線程類的簡單架構(gòu):

為了設計多線程類,我們至少需要6個基本組件:

a.宿主類(host class);

b.線程類(thread class);

c.互斥和事件類(mutex and event class);

d.友元成員函數(shù)(friend member function);

e.域類(domain class);

f.強制轉(zhuǎn)換基本元素(casting primitive)。

宿主類是用戶與之交互的類。有兩種常用的多線程宿主類。第一種類型是多線程應用程序框架;第二種類型是多線程服務器。宿主類被分解成兩個或更多的線程,每個線程執(zhí)行宿主類的一個友元函數(shù)。當執(zhí)行友元函數(shù)時,宿主類將this指針作為一個參數(shù)傳遞給該線程。this指針在友元函數(shù)中被強制轉(zhuǎn)換成指向適當類型的類。this指針形成了宿主類與位于另一個線程中的域類間的線程間通信。每個友元函數(shù)將創(chuàng)建一個或多個域?qū)ο髞硗瓿删€程的請求。

2.3 應用框架類

在所有能夠以軟件重用為目標構(gòu)建的面向?qū)ο蠼M件中,也許面向?qū)ο髴每蚣茏铍y以構(gòu)建,但一旦構(gòu)建后卻能提供最大好處的組件。與容器類、集合類以及類型的類層次相比,應用框架一般情況下是最易于理解的面向?qū)ο箢悓哟?。但它又是最難以構(gòu)建的類層類,因為它們?yōu)樗枷虢!R簿褪钦f,應用框架為對象交互、工作模式、動作序列、軟件事務以及進程內(nèi)容來建模。

應用框架為一般性面向?qū)ο髴谩_@個框架以類層次的形式捕獲應用具有的動作、工作模式和處理內(nèi)容的序列。它用作整個應用的模式,具體化應用具有的基礎(chǔ)結(jié)構(gòu)或骨架,而沒有提供應用的細節(jié)。它指定了面向?qū)ο蠹軜?gòu)中軟件部分間的關(guān)系、責任和協(xié)議。

應用框架的目標是成功一般化工作模式。應用框架的設計需要對軟件分解有一個全面的理解,因為設計者必須將框架分解成提供者實現(xiàn)和客戶實現(xiàn)部分。在多線程應用框架中,框架執(zhí)行的工作模式必須分解成一套線程??蚣艿膶嵸|(zhì)是需要分解成它的一般性部分以及特定應用的部分。

應用框架由相關(guān)類的集合組成。它的成員函數(shù)有一個預設計的、內(nèi)置的交互模式這套相關(guān)類和預設計交互模式為程序員提供一些一般性問題的特定解決方案。

應用框架總是至少分解為兩個主要組件。第一個組件為框架設計者提供的框架部分。這個組件包含按一般性方式捕獲的特定動作序列以及對象間的關(guān)系,它表示某問題類別的一種常用解決方案。第二個組件稱做ensemble,它具體表現(xiàn)域知識、專家知識、規(guī)則以及特定解決方案的策略。ensemble由框架的用戶提供,而框架本身提供了應用的形式,ensemble提供應用的具體內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容