軟件工程課件:第12章 對象設(shè)計(jì)_第1頁
軟件工程課件:第12章 對象設(shè)計(jì)_第2頁
軟件工程課件:第12章 對象設(shè)計(jì)_第3頁
軟件工程課件:第12章 對象設(shè)計(jì)_第4頁
軟件工程課件:第12章 對象設(shè)計(jì)_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院1第12章對象設(shè)計(jì)對象設(shè)計(jì)則是決定在實(shí)現(xiàn)過程中使用的類和關(guān)聯(lián)的全部定義,以及用于實(shí)現(xiàn)操作的各種方法的算法和接口。在分析模型的基礎(chǔ)上完善分析模型。在OMT方法學(xué)中沒有必要從一個(gè)模型轉(zhuǎn)換到另一個(gè)模型,因?yàn)槊嫦驅(qū)ο蟮姆缎鸵呀?jīng)跨越了分析、設(shè)計(jì)和實(shí)現(xiàn)的全過程。面向?qū)ο蠓缎驮诿枋霈F(xiàn)實(shí)世界的詳細(xì)說明和基于計(jì)算機(jī)的實(shí)現(xiàn)兩方面應(yīng)用得同樣出色。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院2本章內(nèi)容:12.1對象設(shè)計(jì)綜述12.2組合三種模型12.3設(shè)計(jì)算法12.4設(shè)計(jì)優(yōu)化12.5控制實(shí)現(xiàn)12.6繼承的調(diào)整2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院312.7關(guān)聯(lián)設(shè)計(jì)12.8對象的表示12.9物理打包12.10設(shè)計(jì)決策文檔12.11什么是控制驅(qū)動(dòng)部分12.12相關(guān)技術(shù)問題12.12如何設(shè)計(jì)控制驅(qū)動(dòng)部分2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院412.1對象設(shè)計(jì)綜述對象設(shè)計(jì)是繼分析和系統(tǒng)設(shè)計(jì)之后的重要設(shè)計(jì)階段。對象設(shè)計(jì)不是從粗框的架構(gòu)開始,而是對前述的分析和系統(tǒng)設(shè)計(jì)的精工細(xì)雕。設(shè)計(jì)者根據(jù)在實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)時(shí)所選取的策略,加以豐富和完善細(xì)節(jié)。從分析中產(chǎn)生的類、屬性和關(guān)聯(lián)必須用具體的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn),引入的新對象必須在程序執(zhí)行過程中存儲(chǔ)產(chǎn)生的中間結(jié)果,以避免重復(fù)計(jì)算。設(shè)計(jì)的優(yōu)化也要適中,因?yàn)閷?shí)現(xiàn)簡捷、維護(hù)方便以及擴(kuò)充容易是重要的目標(biāo)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院512.1.1從分析和系統(tǒng)結(jié)構(gòu)著手對象模型描述系統(tǒng)中對象的類,包括它們的屬性和支撐的操作。分析對象模型中的信息必須以某種形式在設(shè)計(jì)中呈現(xiàn)出來。功能模型描述系統(tǒng)中必須實(shí)現(xiàn)的操作。在設(shè)計(jì)期間,必須確定如何實(shí)現(xiàn)每個(gè)操作,選擇操作的算法,并把復(fù)雜的操作分解成簡單的操作。動(dòng)態(tài)模型描述系統(tǒng)是如何響應(yīng)外部事件,程序的控制結(jié)構(gòu)是從動(dòng)態(tài)模型導(dǎo)出來的。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院612.1.2對象設(shè)計(jì)的步驟在對象設(shè)計(jì)期間,設(shè)計(jì)必須遵循以下步驟:(1)組合三種模型以獲取類上的操作。(2)實(shí)現(xiàn)操作的設(shè)計(jì)算法。(3)優(yōu)化數(shù)據(jù)的訪問路徑。(4)實(shí)現(xiàn)外部交互式的控制。(5)調(diào)整類結(jié)構(gòu)提高繼承性。(6)設(shè)計(jì)關(guān)聯(lián)。(7)確定對象表示。(8)把類和關(guān)聯(lián)封裝成模塊。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院712.1.3對象模型工具

對象模型工具(ObjectModelingTool,OMTool)是一個(gè)為建立對象而設(shè)計(jì)的圖形編輯器。應(yīng)用OMTool可以較方便地創(chuàng)建、裝入、編輯、保存和打印對象圖。OMTool設(shè)計(jì)的主要目的是提供簡易自然的用戶交互界面。OMTool所確定的一個(gè)主要結(jié)構(gòu)決策是同時(shí)存儲(chǔ)邏輯和圖形模型,圖形模型存儲(chǔ)畫在屏幕上的圖,包括符號(hào)表示的選擇、符號(hào)表示的位置、線的長度等等。邏輯模型存儲(chǔ)圖的基本含義,包括類、屬性、操作和它們的關(guān)系。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院812.2組合三種模型經(jīng)過分析之后,可以得到對象模型、動(dòng)態(tài)模型和功能模型,而對象模型是對象設(shè)計(jì)的主框架。設(shè)計(jì)者必須把動(dòng)態(tài)模型的動(dòng)作和活動(dòng)以及功能模型的處理轉(zhuǎn)化成對象模型中與類相關(guān)的操作。要完成這個(gè)轉(zhuǎn)換,把分析模型的邏輯結(jié)構(gòu)映射到程序的物理組織。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院9以下步驟是確定一個(gè)子操作的目標(biāo)對象:(1)如果一個(gè)處理從輸入流中抽取值,則輸入流是目標(biāo)。(2)如果一個(gè)處理有相同類型的輸入流和輸出流,而且大部分輸出值是輸入流的更新版本,那么輸入/輸出是目標(biāo)。(3)如果一個(gè)處理由幾個(gè)輸入流得出輸出值,那么該操作是一個(gè)輸出類上的類操作(構(gòu)造函數(shù))。(4)如果一個(gè)處理的輸入來自或輸出到達(dá)一個(gè)數(shù)據(jù)存儲(chǔ)或施動(dòng)者,那么數(shù)據(jù)存儲(chǔ)或施動(dòng)者是處理的一個(gè)目標(biāo)。

2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院1012.3設(shè)計(jì)算法每個(gè)在功能模型中確定的操作必須構(gòu)成一個(gè)算法。算法的設(shè)計(jì)者必須:(1)選擇實(shí)現(xiàn)操作花費(fèi)最小的算法。(2)給算法選擇合適的數(shù)據(jù)結(jié)構(gòu)。(3)必要時(shí)定義新的內(nèi)部類和操作。(4)給合適的類指定操作響應(yīng)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院1112.3.1選擇算法

許多算法已足夠簡單,功能模型中已經(jīng)詳細(xì)說明構(gòu)造了滿意的算法,因?yàn)殛P(guān)于做什么的描述同時(shí)也表示了如何實(shí)現(xiàn)。例如,圖12-1表示了一個(gè)類矩形框?qū)ο螅粋€(gè)操作表,其中依次包含一組操作條目對象。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院12圖12-1類矩形框?qū)ο?022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院13在選取算法中需要考慮以下問題:(1)計(jì)算復(fù)雜度。(2)易于實(shí)現(xiàn)性和可理解性。(3)靈活性。(4)精細(xì)協(xié)調(diào)對象模型。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院14圖12-2圖元素和窗口之間映射的兩種設(shè)計(jì)2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院1512.3.2選擇數(shù)據(jù)結(jié)構(gòu)選擇算法包含選擇它們使用的數(shù)據(jù)結(jié)構(gòu)。分析階段的工作只集中于系統(tǒng)中的信息邏輯結(jié)構(gòu),而在對象設(shè)計(jì)階段,必須選擇滿足高效算法的數(shù)據(jù)結(jié)構(gòu)的形式。許多實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)都是容器類的實(shí)例。這樣的數(shù)據(jù)結(jié)構(gòu)包含數(shù)組、表、隊(duì)列、堆棧、集合、包、字典、關(guān)聯(lián)、樹和很多這些數(shù)據(jù)結(jié)構(gòu)的變種。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院1612.3.3定義內(nèi)部類和操作在算法擴(kuò)充時(shí),對象新類可能需要保存中間結(jié)果。在高層操作分解中可能會(huì)發(fā)現(xiàn)新的低層操作。復(fù)雜操作可以根據(jù)較簡單對象上的低層操作來定義,這些低層操作必須在對象設(shè)計(jì)階段定義,因?yàn)樗鼈兇蠖鄶?shù)都不是外部可見的。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院1712.3.4指定操作的職責(zé)許多操作有明顯的目標(biāo)對象,但某些操作可在一個(gè)算法中的幾個(gè)地方被幾個(gè)對象之一執(zhí)行,只要它們最終能完成。這樣的操作通常是帶有許多結(jié)果的復(fù)雜的高層操作的一部分。如何確定操作歸屬哪個(gè)類呢?應(yīng)該確定哪個(gè)對象在操作中起主導(dǎo)作用。提下列問題:(1)當(dāng)其他對象執(zhí)行動(dòng)作時(shí),是否有一個(gè)對象在起作用?通常,最好是把操作與操作的目標(biāo)聯(lián)系起來,而不是與初始化程序聯(lián)系起來。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院18(2)當(dāng)其他對象只查詢所包含的信息時(shí),操作是否修改另一個(gè)對象?被改動(dòng)對象是操作目標(biāo)。(3)檢查涉及操作的類和關(guān)聯(lián),看哪個(gè)類是這個(gè)對象模型的子網(wǎng)中最集中的,如果類和關(guān)聯(lián)都圍繞一個(gè)中心類形成星型,那么它就是操作的目標(biāo)。(4)如果對象不是軟件,而是在內(nèi)部表示的實(shí)際對象,應(yīng)推(push)、移動(dòng)(move)、激活(active)什么真實(shí)對象,或操縱其他什么真實(shí)對象去初始化一個(gè)操作。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院1912.4設(shè)計(jì)優(yōu)化基本設(shè)計(jì)模型把分析模型作為實(shí)現(xiàn)的框架。分析模型獲取有關(guān)系統(tǒng)的邏輯信息,而設(shè)計(jì)模型必須增加細(xì)節(jié)以支持有效的信息存取。低效而語義上正確的分析模型可以通過優(yōu)化而提高實(shí)現(xiàn)效率,但一個(gè)優(yōu)化系統(tǒng)會(huì)比較含糊而且在別的情況下的可用性會(huì)降低。設(shè)計(jì)者必須努力在效率和清晰性上加以合適的權(quán)衡。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院20優(yōu)化設(shè)計(jì)階段,設(shè)計(jì)者必須:(1)要減少訪問花費(fèi)和增大簡便性,應(yīng)添加冗余的關(guān)聯(lián)。(2)要獲得更高的效率就應(yīng)重新安排計(jì)算。(3)要避免復(fù)雜表達(dá)式的重復(fù)計(jì)算,應(yīng)保存導(dǎo)出屬性。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院2112.4.1添加冗余關(guān)聯(lián)獲取有效訪問在分析階段,關(guān)聯(lián)網(wǎng)中是不希望有冗余的,因?yàn)槿哂嚓P(guān)聯(lián)不會(huì)增加任何信息。但是在設(shè)計(jì)階段要評(píng)估實(shí)現(xiàn)的對象模型結(jié)構(gòu)。為了演示訪問路徑的分析,考慮一個(gè)公司雇員技能數(shù)據(jù)庫的設(shè)計(jì)。圖12-3表示了分析階段的對象模型的一部分。Company::find-skill操作返回一組給定技能的公司雇員的信息。例如,可能需要所有講法語的雇員信息。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院22圖12-3部分對象模型2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院23因?yàn)閮H有一小部分對象滿足測試條件,所以這種查詢的命中率很低。在這種情況下,可以給那些經(jīng)常需要檢查的對象建立索引以便改善訪問效率。例如,在公司和雇員之間增加一個(gè)資格關(guān)聯(lián)“會(huì)話語言”,如圖12-4所示改善訪問效率設(shè)計(jì)

2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院24會(huì)話語言是以基本關(guān)聯(lián)為基礎(chǔ)的一個(gè)導(dǎo)出關(guān)聯(lián)。導(dǎo)出關(guān)聯(lián)沒有給網(wǎng)絡(luò)增添任何信息,但它允許模型信息以更有效的方式訪問。在關(guān)聯(lián)網(wǎng)絡(luò)中路徑使用的分析如下:檢測每個(gè)操作,看看什么樣的關(guān)聯(lián)必須遍歷才能獲取信息。注意那些雙向遍歷的關(guān)聯(lián)(通常不是一個(gè)操作)以及那些單向遍歷的關(guān)聯(lián),后者能用單向指針有效地實(shí)現(xiàn)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院25對每個(gè)操作需注意下列各項(xiàng):(1)如何經(jīng)常調(diào)用這個(gè)操作?執(zhí)行的花費(fèi)如何?(2)沿通過網(wǎng)絡(luò)的路徑的“扇出”(Fan-out)是什么?估計(jì)路徑上碰到的“多”端關(guān)聯(lián)的平均數(shù)目,把各個(gè)“扇出數(shù)”相乘得到整個(gè)路徑的扇出數(shù),它表示了路徑中最后一個(gè)類的訪問數(shù)目。(3)最終類上的“命中”部分是什么?也就是說滿足標(biāo)準(zhǔn)的對象及其上的操作。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院2612.4.2重新安排執(zhí)行次序以獲得效率調(diào)整對象模型的結(jié)構(gòu)以便優(yōu)化經(jīng)常的遍歷后,下一件事就是優(yōu)化算法本身。實(shí)際上,數(shù)據(jù)結(jié)構(gòu)和算法直接相互有關(guān),但通常首先考慮數(shù)據(jù)結(jié)構(gòu)。優(yōu)化算法的關(guān)鍵是盡早消除死路徑。例如,假設(shè)要查找所有會(huì)講法語的雇員。假定5個(gè)雇員講法語,100個(gè)雇員講英語。最好先檢查和查找講法語的,然后檢查他們是否講英語。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院2712.4.3保存導(dǎo)出屬性避免重復(fù)計(jì)算冗余的數(shù)據(jù),因?yàn)樗鼜钠渌麛?shù)據(jù)導(dǎo)出,所以為了避免重復(fù)計(jì)算,減少計(jì)算機(jī)的總開銷,可以在它的計(jì)算形式中“緩存”或存儲(chǔ)。新的對象或類可定義為保留這個(gè)信息。如果所依賴的對象改變,包含緩存數(shù)據(jù)的類必須更新。如圖12-5所示表示使用關(guān)聯(lián)作為緩存的情形。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院28圖12-5關(guān)聯(lián)作為緩存2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院29導(dǎo)出屬性必須在基值改變時(shí)被更新。當(dāng)需要修改時(shí),有三種方法可辨認(rèn):顯式代碼、定期重算和使用激活值。(1)顯式代碼。每個(gè)導(dǎo)出屬性按一個(gè)或幾個(gè)基本的基對象定義。(2)定期重算?;A(chǔ)值經(jīng)常批量更新。(3)激活值。激活值是一個(gè)有依賴值的值。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院3012.5控制實(shí)現(xiàn)設(shè)計(jì)者必須改進(jìn)實(shí)現(xiàn)動(dòng)態(tài)模型中提出的狀態(tài)-事件模型的策略。作為系統(tǒng)設(shè)計(jì)的一部分,將選擇實(shí)現(xiàn)動(dòng)態(tài)模型的一個(gè)基本策略。在對象設(shè)計(jì)中,現(xiàn)在必須豐富這一策略。實(shí)現(xiàn)動(dòng)態(tài)模型有三種基本方法:(1)在程序內(nèi)設(shè)置地址保持狀態(tài)(過程驅(qū)動(dòng)系統(tǒng))。(2)狀態(tài)機(jī)機(jī)制的直接實(shí)現(xiàn)(事件驅(qū)動(dòng)系統(tǒng))。(3)使用并發(fā)任務(wù)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院3112.5.1在程序內(nèi)進(jìn)行狀態(tài)設(shè)置這是用程序表示控制的一種傳統(tǒng)方法。程序內(nèi)控制位置隱含地定義了程序狀態(tài),任何有限狀態(tài)機(jī)能作為一個(gè)程序?qū)崿F(xiàn)(很容易用GOTO語句實(shí)現(xiàn),用嵌套程序結(jié)構(gòu)實(shí)現(xiàn)有點(diǎn)難)。把狀態(tài)圖轉(zhuǎn)換成代碼的技術(shù)如下:(1)識(shí)別主控路徑。從初始狀態(tài)開始,識(shí)別每條通過期望的事件序列的圖的路徑。以線性序列沿這一路徑寫出狀態(tài)名稱,這就成為程序中的語句序列。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院32(2)識(shí)別從主路徑分支出去,并在以后重新結(jié)合的備用路徑。這將成為程序內(nèi)的條件語句。(3)識(shí)別從主循環(huán)轉(zhuǎn)移出去又重新在前面結(jié)合的反向路徑,這會(huì)成為程序內(nèi)的循環(huán)。如有不交叉的多條反向路徑,它們將成為程序內(nèi)的嵌套循環(huán)。(4)余下的狀態(tài)和變遷相對應(yīng)于例外條件。它們可以用幾種技術(shù)處理,包括錯(cuò)誤處理子程序、語言支持的異常例外處理或狀態(tài)標(biāo)志設(shè)置和檢測。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院3312.5.2狀態(tài)機(jī)器引擎實(shí)現(xiàn)控制最直接的方法是有顯式表示和執(zhí)行狀態(tài)機(jī)的一些方式。每個(gè)對象實(shí)例包含它自己獨(dú)立的狀態(tài)變量,但要調(diào)用狀態(tài)引擎去決定下一個(gè)狀態(tài)和動(dòng)作(狀態(tài)機(jī)是對象但不是應(yīng)用對象,它們是支持應(yīng)用對象語義的語言構(gòu)造的一部分)。通過定義對象模型的類、動(dòng)態(tài)模型的狀態(tài)機(jī)和建立動(dòng)作例行程序,這種方法允許用戶快速地由分析模型獲得系統(tǒng)的框架原型。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院3412.5.3控制作為并發(fā)任務(wù)在編程語言或操作系統(tǒng)中的對象可以當(dāng)作一個(gè)任務(wù)來實(shí)現(xiàn)。這是一個(gè)通用的方法,因?yàn)樗A袅藢?shí)際對象的內(nèi)在并發(fā)性。某些語言,諸如并發(fā)的Pascal,支持并發(fā)操作,但在生產(chǎn)環(huán)境中采納這些語言仍受到限制。雖然運(yùn)行時(shí)間花費(fèi)較高,Ada支持并發(fā)性,提供一個(gè)對象是與一個(gè)Ada任務(wù)等同看待。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院3512.6繼承的調(diào)整隨著對象設(shè)計(jì)的深入,經(jīng)??梢杂谜{(diào)整類和操作的定義來增強(qiáng)繼承的數(shù)量。設(shè)計(jì)者應(yīng)當(dāng):(1)重新安排和調(diào)整類及操作以增強(qiáng)繼承性。(2)從類組合中抽象出共同特性。(3)當(dāng)繼承的語義不正確時(shí),使用授權(quán)的共享行為。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院3612.6.1重新安排類和操作有時(shí),相同的操作在多個(gè)類中定義并能很容易從公共祖先中繼承,但更經(jīng)常的操作是在不同的類中是相似的,但不相同。對操作或類的定義稍作改動(dòng),就可使這些操作變得一致,從而用一條所繼承的操作就可覆蓋它們。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院37下列調(diào)整類型可增加繼承的機(jī)會(huì):(1)某些操作的參數(shù)可能比其他的少,可以添加失去的操作,但不能忽略。(2)某些操作可能有較少的參數(shù),因?yàn)樗鼈兏ǔ5氖菂?shù)可能有特定的情況。(3)不同類中的相似屬性可以有不同的名字。(4)一個(gè)操作可以在同組的幾個(gè)不同類中定義,而不能在其他類中定義。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院3812.6.2抽象出公共的行為使用繼承的機(jī)會(huì)并不總是在開發(fā)的分析階段認(rèn)識(shí)到,因此需要重新檢查對象模型,尋找類與類之間的共同性。另外,新類和操作通常是在設(shè)計(jì)中添加的。如果一組操作和屬性看起來像是在兩個(gè)類中重復(fù),那么當(dāng)高層抽象觀察時(shí),這兩類實(shí)際上可能是同一事物的特殊變化。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院3912.6.3使用授權(quán)共享實(shí)現(xiàn)繼承是實(shí)現(xiàn)概括的機(jī)制,其中超類的行為可被它所有的子類共享。只有當(dāng)確實(shí)存在概括聯(lián)系發(fā)生時(shí),即僅當(dāng)子類是超類的一種形式時(shí)行為共享才是合法的。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院40舉一個(gè)實(shí)現(xiàn)繼承的例子。假設(shè)要實(shí)現(xiàn)一個(gè)Stack(棧)類,且已存在有可用的List(表)類??梢試L試從List得到Stack,把一個(gè)元素壓入??梢酝ㄟ^表尾添加一個(gè)元素實(shí)現(xiàn),從堆棧中彈出一個(gè)元素又對應(yīng)于從表尾移出一個(gè)元素。但也繼承了任意位置增加、移動(dòng)元素的不必要的表操作。如果用到這些操作(因錯(cuò)誤或短路),那么棧類將不能正常運(yùn)行。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院41棧的安全實(shí)現(xiàn)授權(quán)給表類,如圖12-6所示。每個(gè)棧的實(shí)例包含一個(gè)表的私有實(shí)例。Stack::push操作通過調(diào)用最后和添加操作在表尾添加元素,彈出(pop)操作使最后和刪除操作與壓棧(push)操作相類似方式實(shí)現(xiàn),它是通過添加、移去任意元素等非堆棧能力對棧類用戶是隱含的。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院42圖12-6把一個(gè)類作為其他類的屬性或關(guān)聯(lián)2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院4312.7關(guān)聯(lián)設(shè)計(jì)關(guān)聯(lián)是對象模型的紐帶,提供對象之間的訪問路徑。關(guān)聯(lián)是用于建模和分析的有用的概念實(shí)體。在對象設(shè)計(jì)階段,必須系統(tǒng)地闡述對象模型中關(guān)聯(lián)實(shí)現(xiàn)策略。用戶既可選擇實(shí)現(xiàn)所有關(guān)聯(lián)的整體策略,也可為每一個(gè)關(guān)聯(lián)選擇一個(gè)特殊技術(shù),考慮它在應(yīng)用中的實(shí)際使用。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院4412.7.1分析關(guān)聯(lián)遍歷一直把關(guān)聯(lián)看作是雙向的。從抽象意義來說當(dāng)然是對的。但如果在應(yīng)用中某些關(guān)聯(lián)只是單向遍歷,可以簡化實(shí)現(xiàn)。由于應(yīng)用需求可能要改變,可能以后要增加需要反向關(guān)聯(lián)的操作。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院4512.7.2單向關(guān)聯(lián)如果一個(gè)關(guān)聯(lián)是單向遍歷的,那么它可以用指針來實(shí)現(xiàn),指針是一個(gè)包含對象引用的屬性。如果重?cái)?shù)是“1”,如圖12-7所示,那么它是一個(gè)簡單指針;如果重?cái)?shù)是“多”,那么它是指針集合。如果“多”結(jié)尾被排序,那么表可以用一個(gè)集合替代。

2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院4612.7.3雙向關(guān)聯(lián)許多關(guān)聯(lián)是雙向遍歷的,其實(shí)現(xiàn)有三種方法:(1)作為單向?qū)傩詫?shí)現(xiàn),當(dāng)需要反向遍歷時(shí)僅執(zhí)行搜索。(2)作為雙向?qū)傩詫?shí)現(xiàn),使用前一節(jié)列出的技術(shù),如圖12-8所示。(3)作為獨(dú)立的關(guān)聯(lián)對象實(shí)現(xiàn),與其他類無關(guān)。一個(gè)關(guān)聯(lián)對象是存儲(chǔ)在單邊的大小可變的對象中的一對關(guān)聯(lián)對象的集合。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院47圖12-8雙向關(guān)聯(lián)2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院4812.7.4鏈接屬性如果關(guān)聯(lián)具有鏈接屬性,那么它的實(shí)現(xiàn)與重?cái)?shù)有關(guān)。如果關(guān)聯(lián)是一對一的,那么鏈接屬性可作為其中一個(gè)對象的屬性存儲(chǔ);如果關(guān)聯(lián)是多對一的,鏈接屬性可作為“多”端對象的屬性存儲(chǔ),因?yàn)槊總€(gè)多端對象關(guān)聯(lián)中只出現(xiàn)一次;如果關(guān)聯(lián)是多對多的,鏈接屬性不可能是與一個(gè)對象關(guān)聯(lián),最好的辦法通常是用特殊類實(shí)現(xiàn)關(guān)聯(lián),其中每個(gè)實(shí)例代表一個(gè)鏈接和它的屬性。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院4912.8對象的表示對象的實(shí)現(xiàn)幾乎都是簡單明了的,但設(shè)計(jì)者必須選擇何時(shí)使用簡單類型表示對象,何時(shí)組合相關(guān)對象。類可以用其他類定義,但最終必須根據(jù)內(nèi)置原始的數(shù)據(jù)類型來實(shí)現(xiàn),諸如整數(shù)、字符串、枚舉類型。例如,考慮雇員對象中的社會(huì)保險(xiǎn)號(hào)的實(shí)現(xiàn),如圖12-9所示。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院50圖12-9用簡單類型表示對象2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院51同樣,設(shè)計(jì)者常常必須選擇是否組合相關(guān)對象。圖12-10表示了二維直線的兩種通用的實(shí)現(xiàn),一個(gè)作為獨(dú)立類來實(shí)現(xiàn),另一個(gè)作為點(diǎn)類(pointclass)屬性嵌入來實(shí)現(xiàn)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院52圖12-10組合相關(guān)對象2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院5312.9物理打包程序由離散的物理單元組成,這些單元能被編輯、編譯、輸入或其他操縱。在某些語言中,諸如C和FORTRAN,單元就是源文件。在Ada語言中,包是顯式模塊化語言結(jié)構(gòu)。面向?qū)ο笳Z言有不同程度的打包。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院54包的封裝包含以下問題:(1)對外界隱藏內(nèi)部信息。(2)實(shí)體相關(guān)性。(3)構(gòu)造物理模塊。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院5512.9.1信息隱藏設(shè)計(jì)的一個(gè)目的是把類看作“黑箱”來處理,它的外部界面是公共的(public),而內(nèi)部細(xì)節(jié)則是對外界隱蔽的。在分析階段,沒有涉及到信息隱藏。每個(gè)操作應(yīng)當(dāng)對整個(gè)模型的了解有所限制,包括類的結(jié)構(gòu)、關(guān)聯(lián)和操作。操作了解得越少,就越不會(huì)受到改變的影響。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院56下面的設(shè)計(jì)原則有助于限制操作的范圍:(1)給每個(gè)類分配執(zhí)行操作的責(zé)任并提供與之相關(guān)的信息。(2)調(diào)用操作來訪問屬于其他類的對象的屬性。(3)避免遍歷與當(dāng)前類無關(guān)的關(guān)聯(lián)。(4)在盡可能高的抽象層次上定義界面。(5)用定義抽象界面類來隱藏在系統(tǒng)邊界上的外部對象,即系統(tǒng)和原外部對象之間的中間類。(6)避免把一個(gè)方法應(yīng)用到另一個(gè)方法的結(jié)果,除非得到的類已經(jīng)提供要調(diào)用的方法。替代的解決方法是考慮寫一個(gè)方法來組合兩種操作。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院5712.9.2實(shí)體的相關(guān)性一個(gè)重要的設(shè)計(jì)原則是實(shí)體的相關(guān)性。一個(gè)實(shí)體,諸如類、操作或模塊,如果是用一致性計(jì)劃組織并且各部分針對同一目標(biāo)組合在一起,那么該實(shí)體是相關(guān)的。一個(gè)方法應(yīng)該較好地做一件事。單個(gè)方法不能既包含策略又包含實(shí)現(xiàn)。策略是形成上下關(guān)系的決策,實(shí)現(xiàn)是對完整說明的算法的執(zhí)行。策略包括形成決策、收集全面信息和外界交互以及解釋特殊情況。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院5812.9.3構(gòu)造模塊在分析和系統(tǒng)設(shè)計(jì)階段,把對象模型分成模塊(因屏幕或紙張的大小受限,還可以進(jìn)一步分解成頁)。這個(gè)初始化組織對最后系統(tǒng)實(shí)現(xiàn)的打包,可能不適合也不是最理想的優(yōu)化。設(shè)計(jì)中增加的新類不是加到已有的模塊或?qū)哟紊?,就是可以組成分析中沒有獨(dú)立的模塊或?qū)哟巍?022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院5912.10設(shè)計(jì)決策文檔本章所討論的設(shè)計(jì)決策在完成以后必須用文檔記錄下來,否則會(huì)造成混亂。如果是與其他開發(fā)者一起工作,則文檔就更為重要了。記住所有重要軟件系統(tǒng)的設(shè)計(jì)內(nèi)容幾乎是不太可能的,文檔通常是把設(shè)計(jì)傳達(dá)給其他人來作為維護(hù)期間參考資料的最好辦法。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院6012.11什么是控制驅(qū)動(dòng)部分控制流(ControlFlow)是一個(gè)在處理機(jī)上順序執(zhí)行的動(dòng)作序列。在目前的實(shí)現(xiàn)技術(shù)中,一個(gè)控制流就是一個(gè)進(jìn)程或者一個(gè)線程,在UML的文獻(xiàn)中稱之為控制流。在OOD中,把系統(tǒng)中所有的主動(dòng)對象表示清楚,就抓住了系統(tǒng)中每個(gè)控制流的源頭,就可以把并發(fā)執(zhí)行的所有的控制流梳理出清晰的脈絡(luò),所有的主動(dòng)對象都用主動(dòng)類描述,所有的主動(dòng)類構(gòu)成OOD模型的控制驅(qū)動(dòng)部分。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院6112.12相關(guān)技術(shù)問題12.12.1系統(tǒng)總體方案要開發(fā)一個(gè)較大的計(jì)算機(jī)應(yīng)用系統(tǒng),首先要制定一個(gè)系統(tǒng)總體方案。系統(tǒng)總體方案的內(nèi)容包括:(1)項(xiàng)目的背景、目標(biāo)與意義。(2)系統(tǒng)的應(yīng)用范圍。(3)對需求的簡要描述,采用的主要技術(shù)。(4)使用的硬件設(shè)備、網(wǎng)絡(luò)設(shè)施和商品軟件。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院62(5)選擇的軟件體系結(jié)構(gòu)風(fēng)格。(6)規(guī)劃中的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。(7)子系統(tǒng)劃分。(8)系統(tǒng)分布方案。(9)經(jīng)費(fèi)預(yù)算、工期估計(jì)、風(fēng)險(xiǎn)分析。(10)售后服務(wù)措施,對用戶的培訓(xùn)計(jì)劃。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院63總體方案的基本實(shí)現(xiàn)條件:(1)計(jì)算機(jī)硬件。(2)操作系統(tǒng)。(3)軟件體系結(jié)構(gòu)。(4)網(wǎng)絡(luò)方案。(5)編程語言。(6)其他商品軟件。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院6412.12.2軟件體系結(jié)構(gòu)軟件體系結(jié)構(gòu)是對系統(tǒng)的組成與組織結(jié)構(gòu)較為宏觀的描述,它按照功能部件和部件之間的聯(lián)系與約束來定義系統(tǒng),著重于軟件系統(tǒng)自身的整體結(jié)構(gòu)和部件間的交互。本質(zhì)上,軟件體系結(jié)構(gòu)提供了一種自頂向下實(shí)現(xiàn)基于部件的軟件開發(fā)途徑,其中主要包括:體系結(jié)構(gòu)風(fēng)格及其分類、體系結(jié)構(gòu)描述語言、體系結(jié)構(gòu)的形式化基礎(chǔ)、特定領(lǐng)域的體系結(jié)構(gòu)等。軟件體系結(jié)構(gòu)設(shè)計(jì)包括系統(tǒng)結(jié)構(gòu)的總體設(shè)計(jì)、各計(jì)算單元功能分配、各單元間的高層交互等。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院65幾種典型的軟件體系結(jié)構(gòu)風(fēng)格:

1)管道與過濾器風(fēng)格(PipeandFilterStyle)。2)客戶-服務(wù)器風(fēng)格(Client-serverStyle)。3)面向?qū)ο箫L(fēng)格(Object-orientedStyle)。4)隱式調(diào)用風(fēng)格(ImplicitInvocationStyle)。5)倉庫風(fēng)格(RepositoryStyle)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院666)進(jìn)程控制風(fēng)格(ProcesscontrolStyle)。7)解釋器模型(InterpreterModel)。8)黑板風(fēng)格(BlackboardStyle)。9)層次風(fēng)格(LayeredStyle)。10)數(shù)據(jù)抽象風(fēng)格(DataAbstractionStyle)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院6712.12.3分布式系統(tǒng)的體系結(jié)構(gòu)風(fēng)格

分布式系統(tǒng)至少在以下兩個(gè)方面可以解決集中式系統(tǒng)難以解決的問題:一是使用戶可以跨越地理位置的障礙,在不同的地點(diǎn)使用系統(tǒng)完成其業(yè)務(wù)處理,包括多地區(qū)協(xié)作的業(yè)務(wù)處理;二是使一個(gè)系統(tǒng)能夠利用多臺(tái)計(jì)算機(jī)的資源,包括CPU、內(nèi)存、外存等硬件資源和各種軟件資源。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院68分布式系統(tǒng)對軟件開發(fā)提出了許多新的技術(shù)問題,并促使了適應(yīng)此類系統(tǒng)的軟件體系結(jié)構(gòu)的產(chǎn)生。在歷史上,分布式系統(tǒng)的體系結(jié)構(gòu)出現(xiàn)過幾種不同的風(fēng)格,下面一一給予介紹。1.主機(jī)+仿真終端體系結(jié)構(gòu)以一臺(tái)計(jì)算機(jī)為主機(jī),其他計(jì)算機(jī)只作為它的遠(yuǎn)程仿真終端。

2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院692.文件共享體系結(jié)構(gòu)在這種體系結(jié)構(gòu)中,系統(tǒng)功能分布到網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn)上,數(shù)據(jù)存放在一個(gè)被稱作文件服務(wù)器的主機(jī)上。3.客戶-服務(wù)器體系結(jié)構(gòu)這種體系結(jié)構(gòu)把分布在不同節(jié)點(diǎn)上的系統(tǒng)組成部分之間的關(guān)系處理為請求服務(wù)和提供服務(wù)的關(guān)系,提供服務(wù)的計(jì)算機(jī)稱作服務(wù)器,請求服務(wù)的計(jì)算機(jī)稱作客戶機(jī)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院70隨著應(yīng)用領(lǐng)域的擴(kuò)大和相關(guān)技術(shù)的進(jìn)步,客戶-服務(wù)器體系結(jié)構(gòu)衍生出了一些特點(diǎn)各異的變種,以下略作介紹。(1)兩層客戶-服務(wù)器體系結(jié)構(gòu)。早期最典型的客戶-服務(wù)器體系結(jié)構(gòu)。其特點(diǎn)是明顯地區(qū)分客戶機(jī)和服務(wù)器(2)對等式客戶-服務(wù)器體系結(jié)構(gòu)。這種體系結(jié)構(gòu)觀點(diǎn)把客戶機(jī)和服務(wù)器看成是相對的。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院71(3)三層客戶-服務(wù)器體系結(jié)構(gòu)。這種體系結(jié)構(gòu)是在兩層客戶-服務(wù)器體系結(jié)構(gòu)基礎(chǔ)上改進(jìn)和發(fā)展的結(jié)果(4)瘦客戶-服務(wù)器體系結(jié)構(gòu)。這種體系結(jié)構(gòu)的思想是把分布到客戶機(jī)上的功能盡可能減少。(5)瀏覽器-服務(wù)器體系結(jié)構(gòu)。瘦客戶-服務(wù)器的思想發(fā)展到極端,應(yīng)用系統(tǒng)分布到客戶機(jī)上的軟件成分就只剩下了一個(gè)瀏覽器。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院7212.12.4系統(tǒng)的并發(fā)性1.相關(guān)術(shù)語1)在OOA和OOD中用主動(dòng)對象的一個(gè)主動(dòng)服務(wù)來描述一個(gè)任務(wù),用主動(dòng)類來描述一類主動(dòng)對象。2)在從用戶需求的角度或者在較高的抽象層次上討論和認(rèn)識(shí)系統(tǒng)的并發(fā)性時(shí),使用任務(wù)的概念,以明確系統(tǒng)中客觀上要求有哪些任務(wù)并發(fā)執(zhí)行。3)從邏輯上看問題,忽略實(shí)現(xiàn)細(xì)節(jié),可以說2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院73OOD模型中的一個(gè)主動(dòng)對象的主動(dòng)服務(wù)描述了一個(gè)控制流。4)在實(shí)現(xiàn)階段,主動(dòng)對象、主動(dòng)類的概念仍然存在,但是已被實(shí)現(xiàn)為程序代碼中的對象和類,它們的每個(gè)主動(dòng)服務(wù)將被具體地實(shí)現(xiàn)為進(jìn)程或者線程。5)把“任務(wù)”和“控制流”作為討論問題、解釋概念或陳述設(shè)計(jì)策略時(shí)使用的詞匯,而把“主動(dòng)對象”、“主動(dòng)類”、“進(jìn)程”作為模型或程序中的元素或技術(shù)術(shù)語。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院742.順序程序和并發(fā)程序順序程序中只有一件事在進(jìn)行處理,即使程序中包括多項(xiàng)工作,也不會(huì)在一個(gè)時(shí)間段同時(shí)做兩項(xiàng)(或以上)工作。如果說系統(tǒng)要在同一段時(shí)間內(nèi)執(zhí)行多個(gè)任務(wù),而這些任務(wù)之間又沒有確定的時(shí)間關(guān)系,這種系統(tǒng)就是并發(fā)系統(tǒng)。描述并發(fā)系統(tǒng)的程序叫做并發(fā)程序。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院753.進(jìn)程和線程把一個(gè)并發(fā)程序分解成若干能夠順序執(zhí)行的程序單位。每一個(gè)這樣的程序單位的一次執(zhí)行就叫做一個(gè)順序進(jìn)程。為了提高計(jì)算速度,把這個(gè)任務(wù)分解成可以在多個(gè)處理機(jī)上同時(shí)計(jì)算的子任務(wù),這就要求在一個(gè)進(jìn)程內(nèi)部定義一些能夠分別占用處理機(jī),而且能夠同時(shí)進(jìn)行計(jì)算的執(zhí)行單位。每個(gè)這樣的單位就是一個(gè)線程。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院764.當(dāng)前應(yīng)用系統(tǒng)的并發(fā)性在20世紀(jì)60年代和70年代,一提到并發(fā)系統(tǒng)人們首先就會(huì)想到操作系統(tǒng)。后來,其他許多系統(tǒng)軟件(如編譯系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)等)也越來越多地需要被設(shè)計(jì)成并發(fā)系統(tǒng)。隨著計(jì)算機(jī)網(wǎng)絡(luò)、多處理機(jī)系統(tǒng)、分布式處理、并行計(jì)算等計(jì)算機(jī)軟硬件技術(shù)的發(fā)展以及計(jì)算機(jī)應(yīng)用領(lǐng)域的擴(kuò)大,大量的應(yīng)用系統(tǒng)也都需要被設(shè)計(jì)成并發(fā)系統(tǒng)了。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院7712.13如何設(shè)計(jì)控制驅(qū)動(dòng)部分設(shè)計(jì)OOD模型中控制驅(qū)動(dòng)部分的關(guān)鍵是識(shí)別系統(tǒng)中所有并發(fā)執(zhí)行的任務(wù),然后用主動(dòng)對象來表示這些任務(wù)。然而在網(wǎng)絡(luò)環(huán)境下,系統(tǒng)中需要哪些并發(fā)執(zhí)行的任務(wù),其答案與軟件體系結(jié)構(gòu)風(fēng)格的選擇和系統(tǒng)分布方案的確定等問題有關(guān)。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院7812.13.1選擇軟件體系結(jié)構(gòu)風(fēng)格一個(gè)用面向?qū)ο蠓椒ㄩ_發(fā)的系統(tǒng),其軟件體系結(jié)構(gòu)當(dāng)然是采用了面向?qū)ο箫L(fēng)格。但是面向?qū)ο篌w系結(jié)構(gòu)風(fēng)格只體現(xiàn)了系統(tǒng)的基本構(gòu)成元素以及它們之間的關(guān)系。對于分布式系統(tǒng)而言,分布在不同處理機(jī)上的系統(tǒng)成分之間的通信方式則是由其他體系結(jié)構(gòu)風(fēng)格所決定的。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院79選擇體系結(jié)構(gòu)風(fēng)格所考慮的因素包括:(1)被開發(fā)系統(tǒng)的特點(diǎn)。(2)網(wǎng)絡(luò)協(xié)議。(3)可用的軟件產(chǎn)品。(4)成本及其他,包括購置相應(yīng)硬件及軟件的成本、新開發(fā)軟件的成本、系統(tǒng)的安裝與維護(hù)成本。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院8012.13.2確定系統(tǒng)分布方案設(shè)計(jì)者通常要從兩個(gè)方面考慮系統(tǒng)的分布方案,即數(shù)據(jù)分布和功能分布,分別決定如何將系統(tǒng)的數(shù)據(jù)和功能分布到各個(gè)節(jié)點(diǎn)上。對于分布式應(yīng)用系統(tǒng)的建模,在考慮對象分布問題之前,不妨?xí)簳r(shí)把它當(dāng)作一個(gè)集中式的系統(tǒng),忽略它在網(wǎng)絡(luò)與硬件平臺(tái)上的分布情況,只注重問題域和系統(tǒng)責(zé)任,從而建立一個(gè)集中式的類圖。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院811.對象的分布1)由數(shù)據(jù)決定對象分布有如下幾個(gè)要點(diǎn):(1)當(dāng)應(yīng)用系統(tǒng)中一個(gè)類的對象實(shí)例需要在文件或關(guān)系數(shù)據(jù)庫中存儲(chǔ)時(shí),則定義與這個(gè)類的數(shù)據(jù)結(jié)構(gòu)一致的文件或數(shù)據(jù)庫表。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院82(2)該類的每個(gè)對象實(shí)例用文件的一個(gè)記錄或者用數(shù)據(jù)庫的一個(gè)元組保存。當(dāng)一個(gè)類有大量的對象實(shí)例時(shí),通常只把當(dāng)前正在被處理的對象讀到內(nèi)存,所以一般只需要為該類定義少量的內(nèi)存空間的對象。(3)需要設(shè)計(jì)一個(gè)名為“對象存取器”的對象類,其功能是負(fù)責(zé)把內(nèi)存中的對象實(shí)例保存到文件或數(shù)據(jù)庫表中以及把文件或數(shù)據(jù)庫表中的對象數(shù)據(jù)恢復(fù)成內(nèi)存中的一個(gè)對象2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院832)由功能決定對象分布在面向?qū)ο蟮南到y(tǒng)中,系統(tǒng)的所有功能都是由對象通過其服務(wù)提供的。有些對象直接向系統(tǒng)邊界以外的活動(dòng)者提供了外部可見的功能,有些對象只是提供了可供系統(tǒng)內(nèi)部的其他對象使用的內(nèi)部功能。3)追蹤消息通過在一個(gè)集中式的類圖中追蹤控制流內(nèi)部的消息,也可以幫助決定如何分布系統(tǒng)中的對象。

2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院844)UseCase對OOA中定義的每個(gè)UseCase,系統(tǒng)中將有一組緊密合作的對象來完成它所描述的功能。原則上,這組對象應(yīng)該分布到提供該項(xiàng)功能的那個(gè)節(jié)點(diǎn)上。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院852.類的分布關(guān)于類的分布,具體做法如下:(1)如果整個(gè)系統(tǒng)只需要在一個(gè)節(jié)點(diǎn)上創(chuàng)建某個(gè)類的對象實(shí)例,那么這個(gè)類就分布在這個(gè)節(jié)點(diǎn)上。(2)如果系統(tǒng)需要在多個(gè)節(jié)點(diǎn)上創(chuàng)建同一個(gè)類的對象實(shí)例,那么這個(gè)類主要分布在每個(gè)需要它的節(jié)點(diǎn)上。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院863.類圖的劃分具體策略有以下兩種:第一種策略是把每個(gè)節(jié)點(diǎn)的主題看成是在整個(gè)系統(tǒng)的類圖上劃分出來的一個(gè)局部。第二種策略是把每個(gè)節(jié)點(diǎn)上的主題看成一個(gè)獨(dú)立的子系統(tǒng),用一個(gè)定義完整的類圖表示。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院874.在類描述模板中的表示下面給出類描述模板的描述格式:對象實(shí)例:{處理機(jī):<節(jié)點(diǎn)名>{,<節(jié)點(diǎn)名>};內(nèi)存對象:{<名稱>[n元數(shù)組][<文字描述>]};外存對象:{<名稱>[<文字描述>]};}2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院88語義如下:第一行和第五行的大括號(hào)表明,一個(gè)類可有重復(fù)0次到多次的對象實(shí)例說明。每一次重復(fù)說明在一種類型的節(jié)點(diǎn)上創(chuàng)造對象實(shí)例的情況,0次表明不在任何節(jié)點(diǎn)創(chuàng)建任何對象實(shí)例。第二行指出本項(xiàng)描述所適應(yīng)的節(jié)點(diǎn),它可以是一個(gè),也可以是多個(gè),但都是同一類型的節(jié)點(diǎn),列出每一個(gè)節(jié)點(diǎn)的名稱。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院89第三行給出在這種類型的節(jié)點(diǎn)內(nèi)存空間創(chuàng)建的每一項(xiàng)單獨(dú)的或成組的對象實(shí)例,給出其名稱。成組的對象實(shí)例用一個(gè)有名稱的對象數(shù)組表示,n是數(shù)組的元素?cái)?shù)目。第四行表明在這種類型的節(jié)點(diǎn)上創(chuàng)建的外存對象,它可以有0到多項(xiàng),給出存儲(chǔ)這些對象實(shí)例的文件或數(shù)據(jù)庫表的名稱。2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院9012.13.3識(shí)別控制流1.以節(jié)點(diǎn)為單位識(shí)別控制流2.從用戶需求出發(fā)認(rèn)識(shí)控制流3.從UseCase認(rèn)識(shí)控制流通常,在以下情況下應(yīng)考慮針對一個(gè)UseCase設(shè)計(jì)相應(yīng)的控制線程:2022/11/3廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院91

(1)用戶希望一個(gè)UseCase所描述的功能在必要時(shí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論