1.對象和類
(1)對象。
對象建模的目的是描述對象。
(2)階級。
通過將對象抽象成類,可以將問題抽象出來,抽象增強了模型的歸納能力。
(3)屬性。
屬性是指類中對象的屬性(數據值)。
(4)操作和方法。
操作是由類中的對象使用的函數或轉換。類中的每個對象都可以享受操作,並且每個操作都有壹個目標對象作為它的隱式參數。
方法是類操作的實現步驟。
2.關聯和鏈
關聯是建立類之間關系的手段,而鏈是建立對象之間關系的手段。
(1)聯想和連鎖的含義。
鏈表示對象之間的物理和概念連接,關聯表示類之間的關系,鏈是關聯的實例,關聯是鏈的抽象。
(2)角色。
角色描述了類在關聯中的角色,它位於關聯的端點。
(3)限制交往。
受限關聯由兩個類和壹個限定符組成。限定詞是壹個特定的屬性,用於有效減少重復關聯。限定符在相關的終端對象集中描述。
限定提高了語義準確性和查詢能力。在現實世界中,限定詞經常出現。
(4)相關性的多重性。
關聯的多重性指的是壹個類中有多少對象與關聯類的壹個對象相關。多重性通常被描述為“壹個”或“許多”。
3.階級的等級制度。
(1)聚合關系。
聚合是壹種“整體-部分”的關系。在這種關系中,有整體類和部分類。聚集最重要的性質是傳遞性和反對稱。
聚合可以有不同的層次,不同的分類可以聚合得到壹個簡單的聚合樹。聚合樹是壹種簡單的表示,比畫很多線連接壹些類要簡單得多。對象模型應該很容易反映所有級別。
⑵廣義關系。
廣義關系是壹種高度抽象的方式,在保留對象差異的同時享受對象的相似性。這是壹種“壹般-具體”的關系。壹般化的類叫做妳的類,具體的類也可以叫做子類。每個子類繼承了父類的屬性,每個子類的壹些* * *相同的屬性和操作被總結到妳的類中。所以泛化關系和繼承並存。廣義關系的符號化表示就是在類關聯的連接線上加壹個小三角形。
4.對象模型
(1)模板。模板是類、關聯和通用結構的邏輯組合。
⑵對象模型。
對象模型由壹個或幾個模板組成。模板將模型分成幾個可管理的子塊,並在整個對象模型和類及關聯的構建塊之間提供壹個集成的中間單元。模板中的類名和關聯名是唯壹的。動態模型是與時間和變化相關的系統屬性。該模型描述了系統的控制結構,代表了瞬時和行為系統控制。
自然,關註系統的控制和操作的執行順序,從對象的事件和狀態的角度來表示對象的相互行為。
該模型中描述的系統屬性是觸發事件、事件序列、狀態以及事件和狀態的組織。使用狀態圖作為描述工具。涉及到事件、狀態、操作等重要概念。
事件1
事件是在特定時刻發生的事情。
2.狀態
狀態是對象屬性值的抽象。根據影響對象顯著行為的性質,將對象的屬性值合並成壹種狀態。狀態表示對象對輸入事件的響應。
3.狀態圖
狀態圖是壹個標準的計算機概念,是有限自動機的圖形化表示。這裏,狀態圖被用作建立動態模型的圖形工具。
狀態圖反映了狀態和事件之間的關系。當接收到壹個事件時,下壹個狀態依賴於當前狀態和接收到的事件,由該事件引起的狀態變化稱為轉換。
狀態圖是壹種圖,其中節點表示狀態,節點用圓圈表示。圈裏有壹個狀態名,用箭頭連接表示狀態轉換,上面標有事件名,箭頭的方向表示轉換的方向。功能模型描述了系統的所有計算。功能模型指示發生了什麽,動態模型決定什麽時候發生,對象模型決定發生了什麽。函數模型顯示了計算如何從輸入值獲得輸出值,而不考慮計算的順序。功能模型由幾個數據流圖組成。數據流圖用於表示數據值從源對象到目標對象的流向。它不包含在動態模型中表達的控制信息。同時,數據流圖並不表示對象中值的組織,而是在對象模型中表示值的組織。
數據流圖包括處理、數據流、動作對象和數據存儲對象。
1.處理
數據流圖中的處理用於更改數據值。最低級的處理是純函數,完整的數據流圖是高級處理。
4.數據流
數據流圖中的數據流鏈接了對象的輸出和處理,對象的處理和輸入,處理和處理。在計算機中,中間數據值由數據流表示,數據流不能改變數據值。
3.動作對象
動作對象是活動對象,它通過生成或使用數據值來驅動數據流圖。
4.數據存儲對象
數據流圖中的數據存儲是壹個被動對象,用來存儲數據。它不同於動作對象。數據存儲本身不產生任何操作,只是響應存儲和訪問的需求。面向對象分析的目的是在客觀世界中對系統建模。基於以上介紹的模型概念,本節結合“銀行網絡系統”的具體實例,構建壹個準確嚴謹的客觀世界問題分析模型。
分析模型有三個目的:明確問題需求;為用戶和開發者提供明確的需求;它作為後續設計和實現的框架,為用戶和開發人員之間的協商提供了基礎。
面向對象的分析
系統分析的第壹步是陳述需求。分析師必須與用戶壹起細化需求,因為這顯示了用戶的真實意圖,包括分析需求和尋找缺失的信息。以“銀行網絡系統”為例,用面向對象的方法進行分析。
銀行網絡系統問題陳述:設計支持銀行網絡的軟件,包括分行享有的人工櫃員機站和自動櫃員機。每個分公司用壹臺分公司電腦,自己記賬,自己處理事務;各自分行的出納臺與分行計算機通信,出納臺輸入賬戶和交易數據;ATM與分支計算機通信,分支計算機與撥款分支機構結算,ATM與用戶接口接受現金卡,與分支計算機通信完成交易,分發現金和打印收據;該系統需要記錄和安全措施;系統必須正確處理同壹賬戶的並發訪問;各支行為自己的電腦準備軟件,銀行網費根據客戶數和現金卡數分攤到各支行。
(2)建立對象模型
首先,識別和聯想,因為它們影響整體結構和解決問題的方法。其次,添加屬性,進壹步描述類和關聯的基本網絡,通過繼承合並和組織類。最後,將操作添加到類中,作為構建動態模型和功能模型的副產品。
1.行列式類
構建對象模型的第壹步是從問題域中標記相關的對象類,包括物理實體和概念。所有的類都必須在應用中有意義,並不是所有的類都在問題陳述中明確給出。有些隱含在問題域或常識中。
按照圖10-19所示的流程確定班級。
找出問題陳述中的所有名詞,並生成以下暫定類。
軟件銀行網絡櫃員ATM分行
單獨處理和單獨處理計算機帳戶交易收銀臺
交易數據分行計算機現金卡用戶現金
收據系統客戶費用帳戶數據
獲取安全措施記錄保存
根據以下標準刪除不必要的類和不正確的類。
⑴冗余類:如果兩個類表達的信息相同,保留最具描述能力的類。比如用戶和客戶都是重復描述,因為客戶是描述性最強的,所以要保留。
⑵無關類:剔除與問題無關或根本無關的類。比如費用的分攤就超出了銀行網絡的範圍。
⑶模糊類:類必須是確定的,有些暫定類邊界模糊或過寬。如果保留記錄,則類是模糊的,並且它是事務的壹部分。
⑷屬性:有些名詞描述其他物體的屬性,所以從暫定類中刪除。如果壹個屬性的獨立性很重要,那麽它應該被歸類為壹個類,而不是壹個屬性。
5]操作:如果問題語句中的名詞有動作意義,則所描述的操作不是壹個類。但是有自己的屬性,需要獨立存在的操作,應該描述為類。如果只構造電話模型,撥號是動態模型的壹部分而不是壹個類,但是在電話撥號系統中,撥號是壹個重要的類,有日期、時間、接收地點等屬性。
在銀行網絡系統中,模糊類別包括系統、安全措施、記錄保存、銀行網絡等。這些屬性是:帳戶數據、收據、現金和交易數據。屬於實現,如訪問、軟件等。這些應該去掉。
4.準備數據字典。
為所有建模實體準備壹個數據字典。準確描述每個類的精確含義,描述當前問題中類的範圍,包括對類的成員和用法的假設或限制。
3.確定關聯。
兩個或多個類之間的相互依賴就是關聯。壹個依賴關系代表壹種關聯,這種關聯可以通過多種方式實現,但是在分析模型中應該刪除對實現的考慮,以便在設計上更加靈活。聯想常常用描述性動詞或動詞短語來表達,包括物理位置、傳導動作、交流、所有者關系、條件滿足等的表征。從問題陳述中提取所有可能的相關陳述並寫下來,但不要過早提煉這些陳述。
以下是銀行網絡系統中所有可能的聯想,大部分是直接提取問題中的動詞短語得到的。在陳述中,壹些動詞短語的相關性不明顯。最後,還有壹些與客觀世界或人的假設有關的聯系,因為在問題陳述中找不到,所以必須與用戶進行驗證。
銀行網絡問題陳述中的相關性;
銀行網絡包括收銀臺和自動取款機;
分行* * *享受ATM
分公司提供分公司電腦;
分支計算機帳戶;
分行計算機處理賬戶支付;
分支機構有出納臺;
出納站與分支機構之間的計算機通信;
出納員為帳戶輸入交易;
ATM接受現金卡;
自動櫃員機和用戶界面;
自動櫃員機發行現金;
自動櫃員機打印收據;
系統處理並發訪問;
分公司提供軟件;
與分公司分擔費用。
隱含動詞短語:
分公司由分公司組成;
分公司有賬戶;
分公司有分公司電腦;
該系統提供記錄保存;
系統提供安全性;
顧客有壹張現金卡。
基於問題領域知識的關聯;
分支機構出納員的雇用;
現金卡存取帳戶。
使用以下標準刪除不必要和不正確的關聯:
(1)如果壹個類已經被刪除,與它相關的關聯也必須被刪除或與其他類重述。在示例中,我們刪除了銀行網絡,相關的關聯也應該被刪除。
⑵不相關的關聯或實現階段的關聯:刪除所有問題域之外的關聯或涉及實現結構的關聯。如果系統處理並發訪問,這是壹個實現的概念。
⑶動作:關聯應該描述應用領域的結構性質,而不是瞬時事件,因此應該刪除接受現金卡的ATM、ATM和用戶界面。
⑷派生關聯:省略那些可以由其他關聯定義的關聯。因為這個關聯是多余的。銀行網絡系統的初步對象圖如圖10-20所示。它包含連接。
4.確定屬性。
屬性是單個物體的性質,通常用裝飾性名詞短語來表示。形容詞往往代表具體的、可枚舉的屬性值,屬性在問題語句中無法完整表達。它們只能通過應用領域和客觀世界的知識來發現。只考慮與具體應用直接相關的屬性,不考慮那些超出問題範圍的屬性。首先找出重要的屬性,避開那些只用於實現的,給每個屬性取個有意義的名字。根據以下標準刪除不必要和不正確的屬性:
⑴對象:如果壹個實體的獨立存在比它的價值更重要,那麽這個實體就不是屬性而是對象。比如在郵政目錄中,城市是壹個屬性,但在人口普查中,城市是作為對象的。在特定的應用中,具有自身屬性的實體必須是對象。
⑵屬性:如果屬性值依賴於特定的上下文,可以考慮將屬性重新表述為限定詞。
⑶名稱:名稱常用作限定詞而不是賓語定語。當壹個名稱不依賴於上下文時,它就是壹個對象屬性,尤其是當它不唯壹時。
⑷標識符:在考慮對象的模糊性時,引入了對象標識符,它不在對象模型中列出,而是隱含在對象模型中,只列出應用領域中存在的屬性。
5.內部值:如果壹個屬性描述了壹個不透明對象的內部狀態,它應該從對象模型中刪除。
[6]細化:忽略那些不太可能影響大多數操作的屬性。
5.使用繼承來細化類。
利用繼承* * *享受事業單位和組織輪流上課有兩種方式。
(1)自下而上,將已有類的* * *同態推廣到父類中,尋找具有相似屬性、關系或運算的類來發現繼承。例如,遠程交易和出納交易是相似的,可以概括為交易。壹些廣義的結構往往是基於客觀世界邊界的現有分類。只要有可能,盡量使用現有的概念。對稱性往往有助於發現壹些缺失的類。
⑵從上到下將已有的類細化為更具體的子類。從應用領域往往可以清楚地看到具體化。枚舉器在域中的應用是最常見的具體化來源。例如,菜單可以包括固定菜單、頂部菜單、彈出菜單、下拉菜單等。,它可以將菜單類別細分為各種特定菜單的子類。當同壹個關聯名稱多次出現且含義相同時,應盡量具體化為相關類。例如,當交易從收銀臺和ATM進入時,進入站是收銀臺和ATM的概括。在類層次結構中,您可以將屬性和關聯分配給特定的類。所有的屬性和應該被分配到最通用和最合適的類,有時需要壹些修改。
應用程序域中的枚舉是最常見的具體化來源。
6.完善對象模型。
對象建模不能保證模型壹次完全正確,軟件開發的整個過程是壹個持續改進的過程。模型的大部分不同組成部分是在不同階段完成的。如果發現了模型的缺陷,就要回到前壹階段進行修改,在動態模型和功能模型完成後就開始壹些細化工作。
(1)丟失物件的幾種可能情況及解決方法:
如果同壹個類中存在不相關的屬性和操作,則分解類使各部分相互關聯;
如果泛化系統不清晰,就有可能把扮演兩種角色的類分開。
如果有沒有目標類的操作,找出並添加沒有目標的類;
如果存在具有相同名稱和目的的冗余關聯,則通過泛化來創建丟失的父類,以將關聯組織在壹起。
⑵查找冗余類。
如果某個類缺少屬性、操作和關聯,您可以刪除該類。
⑶尋找失落的聯想。
如果操作的訪問路徑丟失,則添加壹個新的關聯來回答查詢。
(4)網絡系統的具體情況修改如下:
①現金卡有幾個獨立的特點。將其分解為兩個對象:卡權限和現金卡。
a卡權限:是銀行用來標識用戶訪問權限的卡,表示壹個或多個用戶賬戶的訪問權限;每個卡權限對象中可能有若幹張現金卡,每張卡都有壹個安全碼和壹個卡碼,附在現金卡上,以顯示銀行的卡權限。
B.現金卡:是自動櫃員機獲取的表示代碼的數據卡,也是銀行代碼和現金卡代碼的數據載體。
(2)交易不能體現賬戶間傳遞描述的概括性,因為它只涉及壹個賬戶。壹般來說,在每個賬戶中,壹次交易包括壹次或多次更新,壹次更新是對賬戶的壹個動作,是取款、存款、查詢中的壹種。更新中的所有更新都應該是原子操作。
(3)分支機構和單獨的加工者之間以及分支機構和分支加工者之間的差異似乎不影響分析。計算機的通信處理實際上是壹個實現的概念。分支機構計算機被合並到分支機構,分支機構計算機被合並到分支機構。
(3)建立動態模型
準備劇本。
動態分析從尋找事件開始,然後確定每個對象可能的事件順序。在分析階段,不考慮算法的實現,算法是實現模型的壹部分。
2.確定事件。
識別所有外部事件。事件包括來自或發往用戶的所有信息、來自外部設備的信號、輸入、轉換和動作。可以發現正常事件,但不能遺漏條件和異常事件。
3.準備事件跟蹤表。
腳本表示為事件跟蹤表,即不同對象之間的事件排序表。這些對象是表中的列,每個對象被分配壹個獨立的列。
4.結構狀態圖
為每個對象類建立壹個狀態圖,反映對象接收和發送的事件,每個事件軌跡對應狀態圖中的壹條路徑。
(四)建立功能模型
函數模型用於解釋如何計算值,並顯示值和相關函數之間的依賴關系。數據流圖有助於表達功能依賴關系,處理應基於狀態圖的活動和動作,其中數據流對應於對象圖中的對象或屬性。
1.確定輸入值和輸出值。
首先,列出輸入和輸出值,它們是系統與外界之間事件的參數。
3.建立數據流程圖。
數據流圖顯示了如何從輸入值導出輸出值。數據流圖通常是分層組織的。
(5)確定操作
建立對象模型的時候,類、關聯、結構、屬性都已經確定,但是操作還沒有確定。只有建立了動態模型和功能模型,才能最終確定類的操作。