構件

 構件是系統中實際存在的可更換部分,它實現特定的功能,符合一套接口標準並實現一組接口。構件代表系統中的一部分物理實施,包括軟件代碼(源代碼、二進制代碼或可執行代碼)或其等價物(如腳本或命令文件)。在圖中,構件表示爲一個帶有標籤的矩形。

部署構件的示例

部署構件的示例

可執行文件 例如 .exe 文件
鏈接庫 例如 .dll 文件
Applet 例如 Java 中的 .class 文件
Web 頁面 例如 .htm 和 .html 文件
數據庫表
 

工作產品構件的示例

源代碼文件 例如 C++ 和 CORBA IDL 中的 .h、.cpp 和 .hpp 文件,或 Java 中的 .java 文件
二進制文件 例如鏈接到可執行文件的 .o 文件和 .a 文件。
SOM 文件 IDL 和一些綁定
編譯文件 例如 UNIX 中的 makefile


工作產品構件的示例


源代碼文件 例如 C++ 和 CORBA IDL 中的 .h、.cpp 和 .hpp 文件,或 Java 中的 .java 文件
二進制文件 例如鏈接到可執行文件的 .o 文件和 .a 文件。
SOM 文件 IDL 和一些綁定
編譯文件 例如 UNIX 中的 makefile

使用

設計中的類和對象被作爲部署構件進行實施。您需要確定如何將設計類映射爲代碼;這應該在項目專用的設計指南中有所說明。

有關如何將設計類映射爲代碼的詳細信息,請參見活動:實施構件。另請參見指南:類。

實施構件與修改構件在項目的配置管理環境中進行。實施員在爲他們提供的專用開發工作區(請參見活動:創建開發工作區)中,按照工件:工作單所指定的內容開展工作。在該工作區中,創建源元素並將其置於配置管理之下,或者在通常的檢出、編輯、構建、單元測試、檢入週期中進行修改(請參見活動:進行變更)。完成某個構件集(根據一個或多個工作單的定義以及即將生成的工作版本要求)後,實施員將把有關新的和修改過的構件交付(請參見活動:交付變更內容)到子系統集成工作區,以便與其他實施員的工作進行集成。最後,實施員可以在方便的時候對專用開發工作區進行更新(或者重新調整基線),使該工作區與子系統集成工作區保持一致(請參見活動:更新工作區)。

當實施類時,應遵循編程指南。

實施的主要基礎是具有公有操作、屬性與關聯關係的類。務必要注意,並不是所有公有操作、屬性與關聯關係都在設計過程中定義。

實施的輔助基礎是用例實現,用例實現顯示了類和對象如何通過交互來執行用例。

最好以遞增的方式實施類;編譯、鏈接和運行一些迴歸測試,每天進行三兩次。

在從零開始實施一個類之前,可考慮修改現有的實施類(一般可通過建立子類或進行實例化來修改)。

實施操作


要實施操作,請執行以下步驟:

選擇算法
選擇適合算法的數據結構
根據需要定義新的類和操作
編寫操作代碼
選擇算法
許多操作都十分簡單,可以從該操作及其規約中立即實施。

之所以需要特殊算法,主要是爲了實施定義了規約的複雜操作,並優化那些以簡單但卻低效的算法爲定義的操作。

選擇適合算法的數據結構
選擇算法包括選擇算法所基於的數據結構。許多實施數據結構是容器類,例如數組、列表、隊列、棧、集合、無序單位組,以及這些類的各種不同形式。許多面向對象的語言和編程環境都提供了具有這些可複用構件的類庫。

根據需要定義新的類和操作
比如,可以使用新類來保存中間結果,也可對類添加新的低級操作來分解複雜操作。通常,這些操作是類的私有操作,所以在類之外看不見這些操作。

編寫操作代碼
要編寫操作的代碼,可從接口語句開始,例如 C++ 中的成員函數聲明、Ada 中的子程序規約或 Visual Basic 中的方法。請遵循編程指南。

實施構件工作流程明細



實施狀態


對象的狀態可通過引用其屬性值來實施,而不必作特殊說明。這種對象的狀態轉移將隱含於變化的屬性值中,而變化的行爲通過條件語句來編程。 但對於複雜行爲,該方法不能令人滿意,因爲它往往會導致複雜的結構;而當添加更多狀態或當行爲發生變化時,將很難更改這些結構。

如果構件(或其組成部分)的行爲隨狀態而定,則通常會有一個或多個狀態圖來說明組成該構件的模型元素的行爲。這些狀態圖可用作實施過程中的重要輸入。有關詳細信息,請參見指南:狀態圖。

狀態圖中所示的狀態機將表現對象的狀態,並詳盡說明狀態轉移及所需的行爲。可以通過以下幾種方法來實施狀態機:

對於簡單的狀態機,定義一項列舉可能狀態的屬性,然後使用該屬性在 Java 或 C++ 中的 switch 語句中選擇進入消息的行爲。但這種方法不太適用於複雜的狀態機,它可能會導致運行時性能降低。如需此方法的示例,請參見 [DOUG98],第 4 章 4.4.3
對於較複雜的狀態機,可使用狀態模式。有關狀態模式的說明,請參見 [GAM94]。[DOUG98],第 6 章 6.2.3 狀態模式也說明了這種方法
表驅動法對於極複雜的狀態機十分有效,其特點是易於變更。當使用這種方法時,各個狀態在表中都有相應的條目,這些條目將輸入映射到後繼狀態和相關的轉移動作。如需此方法的示例,請參見 [DOUG98],第 6 章 6.2.3 狀態表模式。
要實施具有並行子狀態的狀態機,可以將狀態管理委派給主動對象(每個對象都被委派一個並行子狀態),因爲並行子狀態代表了獨立的計算(但仍可能進行交互)。每個子狀態均可通過上述方法之一來進行管理。

通過委託關係複用實施


如果一個類或一個類的某些部分可通過複用現有類來實施,則應通過委託關係(而不要繼承)來實現。

委託表示一個類藉助於其他類來得以實施。該類通過使用變量來引用其他類的對象。當調用某操作時,該操作將調用被引用對象(屬於被複用的類)中的操作,以實際執行該操作。這樣,它就將職責委派給了其他類。

實施關聯關係


單向關聯關係將作爲指針(包含對象引用的屬性)來進行實施。如果多重性爲一,則將單向關聯關係當作簡單指針來實施。如果多重性爲多個,則將其當作指針集來實施。但如果“多”端是有序排列的,則可以使用列表,而不使用集合。

雙向關聯關係將作爲屬性,使用單向關聯關係的技術在兩個方向上實施。

限定關聯關係將作爲限定對象中的查詢表(如一個 Smalltalk Dictionary 類)來實施。查詢表中的選擇器值是限定詞,而目標值是另一個類的對象。

如果必須按順序訪問限定詞的值,就應將限定詞組織成經過排序的數組或樹。在這種情況下,訪問時間將與 log N 成比例,其中 N 爲限定詞值的數目。

如果限定詞取自於一個緊湊的有限集,就可以將限定詞的值映射到一個整數範圍,並將關聯關係當作數組來有效地進行實施。如果關聯關係已基本上填滿(而不是稀疏填充),此方法會更加有效;而對於完全填滿的有限集,它可以算是理想的方法。

許多面向對象的語言和編程環境都提供了具有可複用構件的類庫,可用於實施不同種類的關聯關係。

實施屬性


可以作爲內置基本變量、可複用的構件類或定義一個新類來實現屬性。定義新類通常是較爲靈活的方法,但它卻會帶來不必要的間接性。例如,實施僱員的社會保障號時,既可將它作爲類型“字符串”的屬性,也可將它作爲一個新類。



屬性的備選實施。

另一種可能的情況是:屬性組組成了新類,如下例所示。這兩種實施都是正確的。



將 Line 中的屬性當作 Point 類的關聯關係來實施。

向設計提供反饋


在以上任何步驟中,如果發現了設計錯誤,都必須向設計提供返工反饋。如果所需的變更較小,就可以由同一個人來設計並實施類,而無需提出正式的變更請求。他可在設計中進行變更。

如果所需的變更影響到幾個類(例如在公有操作中的變更),則應向 CCB(變更控制委員會)提交正式的變更請求。請參見活動:修復缺陷。

評估代碼


在開始單元測試之前,可以先作一些檢查。測試是一項花費較多的工作,因此最好先執行以下幾項檢查:

始終對代碼進行編譯。將編譯器的警告等級設置到最詳細的程度。
通過想像對操作進行檢查。通讀代碼,儘可能考慮到所有情況,發現各種異常情況。一旦進行了新的實施活動,就需進行此項工作。
使用工具檢查代碼中是否存在錯誤。例如,使用靜態代碼規則檢查程序。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章