日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《OOD启思录》—第2章2.6节角色与类

發布時間:2025/3/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《OOD启思录》—第2章2.6节角色与类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節書摘來自異步社區《OOD啟思錄》一書中的第2章2.6節角色與類,作者【美】Arthur J.Riel,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。

2.6 角色與類
OOD啟思錄
經驗原則2.11
確保你為之建模的抽象概念是類,而不只是對象扮演的角色。

“母親”或者“父親”是不是類,還是某個“人”對象所扮演的角色?答案取決于設計者為之建模的領域是什么。如果在給定的領域中,母親和父親具有不同的行為,那么或許他們應當被建模為類。如果他們的行為相同,那么他們只是“人”類的對象所扮演的不同角色。例如,我們可以把家庭看作“父親”類的對象、“母親”類的對象和幾個“子女”類的對象所構成的對象,也可以把家庭看作一個稱為“父親”的“人”對象、一個稱為“母親”的“人”對象和一組稱為“子女”的“人”對象構成的對象(參見圖2.11)。區分只在于不同的行為。在創建不同的類之前,請確保它們的行為確實是不同的,而不是每個角色只使用“人”的能力的一個子集。請記住,一個對象只用到它的類的行為的一個子集是毫無問題的。




有些設計者的做法是,測試一下公有接口中有沒有哪個成員對于特定的角色無法使用。如果有這樣的成員,那么就意味著需要另一個類。如果它只是沒有被用到,那么它只是被用作多個角色的同一個類。例如,如果“母親”的一個操作是go_into_labor()(分娩),那么“父親”最好實現為另一個獨立的類,因為父親是無法分娩的。但是,如果這個家庭生活在一個父系社會中,只有母親才會執行change_diaper()(換尿布)方法,那么“母親”只是“人”類所扮演的一個角色。得出這一結論的理由是因為如果有必要的話,父親也可以執行change_diaper()方法。但是,在更抽象的領域,若那個領域中“無法執行”與設計者或者領域選擇“不去執行”的差異并不明顯,那么這種方法就難以奏效了。

在設計過程中,面向對象設計者需要決定是否把一個特定的角色塑造成一個類。這就意味著我們還需要一條經驗原則來指導這一決定。下面的章節將嘗試給出這樣的經驗原則,但我對結果并不完全滿意,因為這條經驗原則并不是在所有領域中都適用的。

術語表
Abstract class

抽象類。不知道如何實例化自身對象的類。

Class

類。以雙向聯系的方式封裝數據和行為的構造。與現實世界中的一個概念對應。抽象數據類型(ADT)是類的同義詞。

Concrete class

具體類。知道如何實例化自身對象的類。

Constructor

構造函數。類的一個特殊的操作,負責創建/初始化該類的對象。

Destructor

析構函數。類的一個特殊的操作,負責銷毀/清除該類的對象。

Dynamic semantic

動態語義。類的對象所能具有的所有可能狀態,以及這些狀態之間被允許的轉換的集合。常用狀態轉換圖來表示。

Information hiding

信息隱藏。類向該類的對象的使用者隱藏它的實現細節的能力。

Instantiation relationship

實例化關系。類和它的對象之間的關系。我們說類實例化對象。

Key abstraction

關鍵抽象。關鍵抽象被定義成領域模型中的一個主要實體。關鍵抽象經常表現為領域詞匯中的一個名詞。

Message

消息。類中定義的操作的名稱。在強類型語言中,消息可以包含名稱、返回類型以及操作參數類型(也即操作的原型)。

Method

方法。消息的實現。

Object

對象。屬于它的類的一個樣例,包含它自己的標識、類的行為、類的接口、類的數據的一份拷貝。也稱為類的實例。

Overloaded function

重載函數。系統中的兩個函數可以有相同的名字的能力,只要它們的參數類型不同(類內重載)或者所屬的類不同(類間重載)。

Protocol

協議。類能響應的消息列表。

Self object

Self對象。控制位于方法內部時,接受消息的對象的引用。

經驗原則小結
經驗原則2.1 所有數據都應當隱藏在它所在的類內部。

經驗原則2.2 類的使用者必須依賴類的公有接口,但類不能依賴它的使用者。

經驗原則2.3 盡量減少類的協議中的消息。

經驗原則 2.4 實現所有類都理解的最基本公有接口[例如,拷貝操作(深拷貝與淺拷貝)、相等性判斷、正確輸出內容、從ASCII描述解析等]。

經驗原則2.5 不要把實現細節(例如放置共用代碼的私有函數)放到類的公有接口中。

經驗原則2.6 不要以用戶無法使用或不感興趣的東西擾亂類的公有接口。

經驗原則 2.7 類之間應該零耦合,或者只有導出耦合關系。也即,一個類要么同另一個類毫無關系,要么只使用另一個類的公有接口中的操作。

經驗原則2.8 類應當只表示一個關鍵抽象。

經驗原則2.9 把相關的數據和行為集中放置。

經驗原則2.10 把不相關的信息放在另一個類中(也即:互不溝通的行為)。

經驗原則2.11 確保你為之建模的抽象概念是類,而不只是對象扮演的角色。

本文僅用于學習和交流目的,不代表異步社區觀點。非商業轉載請注明作譯者、出處,并保留本文的原始鏈接。

總結

以上是生活随笔為你收集整理的《OOD启思录》—第2章2.6节角色与类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。