面向對象分析與設計(三、四)

三、類與對象

3.1.1什麼是對象?什麼不是對象

對象:一個可以觸摸或可以看見的東西、在智力上可以理解的東西、可以指導思考或行動的東西
一個對象具有狀態,能展示某種定義良好的行爲,且具有唯一的標識符。
一個對象是一個具有狀態、行爲和標識符的實體。結構和行爲類似的對象定義在他們共同的類中。“實例”和“對象”這兩個術語可以互換使用。

3.1.2狀態

對象的狀態包括這個對象的所有屬性(通常是靜態的)以及每個屬性當前的值(通常是動態的)。
一個對象的狀態代表了它的行爲的累積效果。

3.1.3行爲

行爲是對象在狀態改變和消息傳遞方面的動作和反應的方式。
1、操作:修改、選擇、遍歷、構造、析構(java中無)
2、角色和責任
3、對象像自動機

3.2對象之間的關係

1、鏈接
2、聚合

3.3.1什麼是類?什麼不是類

類是一組對象,它們擁有共同的結構、共同的行爲和共同的語義。

3.4類之間的關係

存在三種基本類型的類關係:第一種是一般、特殊關係,表示“是一種”關係;第二種是整體、部分關係,表示“組成部分”關係;第三種是關聯關係,表示某種語義上的依賴關係;
1、關聯
2、繼承
3、聚合
4、依賴

3.5.2類與對象在分析和設計中的角色

在分析階段和設計的早期階段,開發者主要有兩項主要任務:
1、從問題域的詞彙表中確定出類
2、創建一些結構,讓對組對象一起工作,提供滿足問題需求的行爲
我們將這樣的類和對象統稱爲問題的“關鍵抽象”,把這些協作結構稱爲實現的“機制”。
在開發這些的階段中,開發者必須關注這些關鍵抽象和機制的外部視圖。外部視圖代表了系統的邏輯框架,因此包含了系統的類結構和對象結構。
在設計階段的後期以及隨後的實現開發,開發者的任務發生了變化,其關注的焦點放在了這些抽象和機制的內部視圖上,包括它們的物理實現。

3.6.1 評判一種抽象的品質

1、耦合
2、內聚
	內聚的思想也來自於結構化設計,內聚測量了單個模塊內各個元素的聯繫程度。最不希望出現的內聚就是偶然性內聚,即將完全無關的抽象塞進同一個類或模塊中。
	最希望的內聚是功能性內聚,即一個類或模式的各元素一同工作,提供某種清晰界定的行爲。
3、充分性
	所謂充分指的是類或模塊應該記錄某個抽象足夠多的特徵,從而允許有意義的、有效的交互。否則,將使該組件變得無用。
4、完整性
	所謂完整指的是類或模塊的接口記錄了某個抽象全部有意義的特徵。
5、基礎性
	基礎性操作就是隻有訪問該抽象的底層表現形式才能夠有效地實現的那些操作。如:集合添加一個元素屬於基礎性操作,添加4個元素則不屬於。

3.6.2選擇操作

1、語義功能
	對於一個給定的類,我們的風格是讓所有的操作保持基礎性,這樣每個操作都展示出小的、定義良好的行爲。
	將一個行爲提取爲一個方法還是多個方法的決定有兩個相互競爭的原因:將一個行爲塞進一個方法中將導致更簡單的接口,但方法會更大、更復雜;將一個行爲分散到多個方法中將導致更復雜的接口,但方法會更簡單。
	好的設計者知道如何在太多契約和太少契約之間平衡折中,太多契約導致片段化,太少契約導致無法管理的大模塊。
	在面向對象開發中,通常會整體設計一個類的所有方法,因爲所有這些方法共同構成了這個抽象的完整協議。
	對於某個期望的行爲,我們需要考慮如下因素來決定將它放到哪個類中:可複用性、複雜性、適用性(這個行爲與打算放入的類相關程度如何)、實現知識(這個行爲的實現依賴類的內部細節?)
2、時間和空間語義
	決定完成操作需要的時間以及存儲空間。

3.6.3選擇關係

耦合是度量訪問程度的指標。
1、Demeter法則
	定義:類的方法不應該以任何方式依賴於任何類的結構,除了它自己類的當前結構之外。而且,每個方法只能夠對一個非常有限的類集的對象發出消息。
	從另外一個角度看,如果對象的行爲超過了它的部分之和,在相關的類之間創建聚合關係而不是繼承關係可能更好。
2、機制和可見性
	決定對象之間的關係主要是設計這些對象進行交互的機制。

3.6.4選擇實現

當我們使某個類或對象的外部視圖穩定下來之後,纔會轉向它的內部視圖。這個視圖涉及兩個不同的決定:爲類或對象選擇表示形式,以及將類和對象放入一個模塊。
1、表示形式
2、打包

四、分類

沒有所謂的“完美”的類結構,也沒有一組“正確”的對象。像所有工程學科一樣,我們設計選擇是對許多競爭因素的折中。
即使在十分嚴格的科學學科中,分類也高度取決於進行分類的原因。
發現一種秩序不是容易的任務,但是一旦秩序被發現,瞭解它是沒有什麼難度的。

4.1.2 分類的增量與迭代本質

分類之所以很難是因爲:不存在“完美”的分類,任何分類都與進行分類的觀察者的視角有關;明智的分類要求大量的創造性思維。

4.2 .1經典方法和現代方法

1、經典分類
	所有具有某一個或某一組共同屬性的實體構成的一個分類
2、概念聚集
	在這種方法中,類(一些實體的聚集)的產生首先是形成類的概念描述,然後再根據這些描述對實體進行分類。
3、原型理論
對象的類是由一個原型對象來代表的,如果一個對象與這個原型表現出重要的相似性,那麼這個對象就被認爲是這個類中的一員。
在概念聚集中,我們根據明確的概念對事物進行分組。在原型理論中,我們根據事物與具體原型的關係對他們進行分組。

4.2.2面向對象分析ooa

分析關注的重點是分析面臨的問題域,從問題域的詞彙表中發現類和對象,實現
對真實世界的建模。
設計時我們在模型中發明一些抽象和機制,爲要構建的解決方案提供設計。
分析方法:
1、經典方法
實物、角色、事件、交互
數據庫建模角度:人、地點、物、組織、概念、事件
結構、其他系統、設備、要記住的事件、扮演的角色、位置、組織機構單位
2、行爲分析
經典方法關注問題領域中實實在在的事物,但面向對象分析的另一種思路是關注
動態的行爲,將這些行爲作爲類和對象的主要來源。這類方法更像是概念聚集
對象的責任是針對它支持的所有契約而提供的全部服務,在這種方式中,我們將
具有共同責任的事物劃分爲一組,讓超類包含一般的責任,讓子類包含特殊的行爲,
從而構成類的層次結構。
根據系統的功能來確定類和對象,將系統的行爲分配到系統的各個部分,並試圖理解
誰發起了活動,誰參與了活動,扮演重要角色的發起者和參與者被確定爲對象。
3、領域分析
定義:確定對象、操作和關係的嘗試,領域專家認爲這些對象、操作和關係對這個領域很重要
4、用例分析
定義:一個執行者通過與系統進行對話的方式執行的一個行爲上相關的事物序列,目的是爲執行
者提供某種可度量的價值。
5、crc卡
6、非正式英語描述
7、結構化分析

4.3關鍵抽象與機制

關鍵抽象是一個類會對象,它是問題域詞彙表的一部分。確定這樣的抽象的主要價值在於,它們給出了問題的邊界,突出了系統中的事物。
機制是描述對象協作的結構,這些對象協作結構提供了某種行爲,滿足了問題的一項需求。
一個類的設計包含了單個對象如何行爲的知識,而一種機制則是關於一組對象如何協作的設計決策,機制代表了行爲的模式。

4.3.1確定關鍵抽象

確定關鍵抽象與具體領域高度相關,正確選擇對象當然取決於應用的目的,以及要操作信息的粒度。
1、精華關鍵抽象
這個類的對象是如何創建的?可以被複制或銷燬嗎?在這樣的對象上可執行什麼操作?
2、命名關鍵抽象
合適的名詞詞組、常見的名詞詞組、儘量使用領域專家使用的名詞、修改操作應該用動詞詞組、選擇操作應該表示出查詢的意思

4.3.2識別機制

關鍵抽象反映了問題域的抽象,而機制是設計的靈魂。
1、機制即模式
2、機制示例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章