1. 程式人生 > >管道過濾器風格

管道過濾器風格

優化器 深入 學校 linu 數據交互 image 農業 異構 時間

一、 概述

(個人粗淺之見)

每個系統都有自己的體系結構,每個都和其它的不同。如Windows之於Linux,美國的資本主義三權分立行政制度之於我中國社會主義人民代表大會制度,汽車的內燃機動力系統之於電動車的電機動力系統,......軟件是計算機系統這個蔚藍星球裏的裏的某個生態系統,豐富多彩的生態系統讓這個星球充滿了生機與活力。豐富多彩的軟件世界裏,用戶眼裏軟件的區別也許只是界面不同,功能不同而已,但在設計人員的心中每個軟件都是那麽獨特精巧的存在,每個軟件的體系結構,構件,連接,約束,模塊,功能等等,都凝集了一代代碼農的汗水,心血,和期望。

如同每幢建築都有一個精巧體系結構,每個軟件也需要一個精巧的體系結構以提供足夠的效率,使之能在計算機平臺上更快,更省地跑起來,更加完美地實現用戶的需求。

科學高效的體系結構的選擇不僅僅讓程序更好地運行,還能在開發階段提高開發效率

管道過濾器風格

管道-過濾器模式的體系結構是面向數據流的軟件體系結構。它最典型的應用是在編譯系統。一個普通的編譯系統包括詞法分析器,語法分析器,語義分析與中間代碼生成器,優化器,目標代碼生成器等一系列對源程序進行處理的過程。人們可以將編譯系統看作一系列過濾器的連接體,按照管道-過濾器的體系結構進行設計。此外,這種體系結構在其它一些領域也有廣泛的應用。因此它成為軟件工程和軟件開發中的一個突出的研究領域

(以上引用自百度百科)

在管道/過濾器風格的軟件體系結構中,每個構件都有一組輸入和輸出,構件讀輸入的數據流,經過內部處理,然後產生輸出數據流。

技術分享圖片

(圖片引用自網絡)

二、 實例

以軟件工程導論的個人項目為例,講講我對管道過濾器風格的理解。

個人項目需求簡述如下

小初高題庫

1、選擇學校並輸入題目數量

2、試卷以txt格式保存到本地

3、文件名為系統時間

4、計算每道題目答案

·

我的設計

技術分享圖片

我的設計就是典型的管道過濾器風格了。從我的設計中可以看出這幾個優點:

一、 支持功能模塊級別的重用

比如我要設計一個自動儲存儲存截圖的軟件,就可以把存儲器模塊修改下拿來用;

比如我要設計一個鬧鐘,那麽就可以把獲取系統時間模塊改改拿來用

二、 易於維護和拓展

比如我要提高答案計算的速度,那麽我只需要改答案計算模塊就好了

比如我要加一個上傳功能,那麽加一個上傳功能模塊就行

三、 方便系統分析

在測試階段運行結果不正確可以單獨測試每一個或幾個模塊的運行是否正常

四、 支持並發執行

生成題目模塊和獲取系統時間模塊是並發執行的,提高了一點點效率

也可以看出幾個缺點:

一、 通過過長的管道可能會增加延遲

管道過長,一個個過濾器跑完,延遲就是管道上每個過濾器的延遲的和

比如我把獲取系統時間加進題目生成器和存儲器之間,延遲就會增加

二、 不適合處理交互的應用

因為過濾器的輸入輸出都有限制

三、 不適合需要共享數據的應用程序設計

每條管道的輸入輸出互不影響,管道裏的每個過濾器的輸入輸出也互不影響,在管道或在過濾器之間進行的數據交互需要大量數據處理空間,數據的執行將占用大量系統運行時間

三、 總結

在兩年前的我們中,大多數還只是只懂helloworld的萌新,學得深入點了,老師要實現什麽功能就新建一個源代碼或者函數,大不了復制粘貼;只要能過oj,誰管代碼浪費了多少資源和時間啊。。但作為成熟的老司機,都或早或晚地會察覺到,在一個類裏通過內部類和函數實現所有功能是多麽雞肋。比如有時候驗收了,自己看半天才能看懂自己的代碼;想要重新利用一下以前寫的代碼卻不知道要從哪一行復制到哪一行了。。

在實踐和前輩的經驗教訓下,新農業從事人員都認識到軟件體系結構對於軟件的必要性。軟件體系結構不僅僅只是在代碼上體現出來,還必須是能在抽象層面上用文字圖形描述出來。首先,這保證了軟件設計的易讀性,其次,在讀懂的基礎上才能進行維護,改良,重用等等。合理選擇軟件的體系結構,對開發維護工作的效率影響很大。

一個軟件的體系結構可能不止一種風格;每一種風格都有其優點和缺點,風格的選擇上應因地制宜。軟件體系結構風格在教材上概括為以下:管道-過濾器風格、面向對象風格、事件驅動風格、分層風格、數據共享風格、解釋器風格、反饋控制環風格。7種系統構建模式之間不僅有聯系,而且在很多情況下它們往往是配合使用的。即面對一個實際系統,單純的把它歸到哪一種類型都是很勉強的。這樣的系統可以稱為復合型系統,這樣的系統構建模式就稱為異構風格的集成。所以因地制宜選取一種或幾種風格是開發工作常常要考慮到的。

管道過濾器風格