C++面向對象多線程學習筆記_類層次和線程處理C++組件

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

*抽象基類;

*具體類;

*節點類;

*接口類;

*容器和集合類;

*應用框架類;

*域類。

1. 抽象基類

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

2. 具體類

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

2.1 節點類:

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

2.2 線程與容器和集合類

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

*線程間通信;

*多線程服務器。

與一般情況下將數據結構用作多個進程間通信機制相比,使用面向對象組件進行線程間通信具有巨大的優點。進程間的數據通信通常位于線性數據結構中,例如隊列和管道中。這些數據結構沒有提供圖表、集和映射所提供的表達力。當在進程間傳遞數據時,程序員被迫將通信看作多個進程間的一種簡單線性數據或消息交換。

多線程類的簡單架構:

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

a.宿主類(host class);

b.線程類(thread class);

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

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

e.域類(domain class);

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

宿主類是用戶與之交互的類。有兩種常用的多線程宿主類。第一種類型是多線程應用程序框架;第二種類型是多線程服務器。宿主類被分解成兩個或更多的線程,每個線程執行宿主類的一個友元函數。當執行友元函數時,宿主類將this指針作為一個參數傳遞給該線程。this指針在友元函數中被強制轉換成指向適當類型的類。this指針形成了宿主類與位于另一個線程中的域類間的線程間通信。每個友元函數將創建一個或多個域對象來完成線程的請求。

2.3 應用框架類

在所有能夠以軟件重用為目標構建的面向對象組件中,也許面向對象應用框架最難以構建,但一旦構建后卻能提供最大好處的組件。與容器類、集合類以及類型的類層次相比,應用框架一般情況下是最易于理解的面向對象類層次。但它又是最難以構建的類層類,因為它們為思想建模。也就是說,應用框架為對象交互、工作模式、動作序列、軟件事務以及進程內容來建模。

應用框架為一般性面向對象應用。這個框架以類層次的形式捕獲應用具有的動作、工作模式和處理內容的序列。它用作整個應用的模式,具體化應用具有的基礎結構或骨架,而沒有提供應用的細節。它指定了面向對象架構中軟件部分間的關系、責任和協議。

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容