假設我們有一個必須與角色相關聯的用戶類,角色可以是 DogLover 或 CatLover。
我們還有另一個名為 Animal 的抽象類,它有兩個實作,Dog 和 Cat。
用戶有一個名為 pet 的屬性,該屬性將是 Cat 或 Dog,具體取決于所選擇的角色。
我怎樣才能在圖表上顯示這個?

我無法將每個動物的實作與角色聯系起來,因為動物必須與用戶相關聯
uj5u.com熱心網友回復:
在這個設計中Role和Animal是協變的,因為Role專業化表達了對相應Animal專業化的熱愛。不幸的是,沒有簡單的方法可以對此進行建模。
一種設計方法是使用pet:Animal關聯并對其建模。那么你有兩個選擇:
- 只需為 定義一個約束
User,這將需要寵物型別和角色型別匹配。為了便于這種設計,我什至會考慮將角色的專業化為模板類,即Lover<T:Animal> - 或使角色關聯成為派生關聯(其名稱應以 開頭
/)。推導將基于寵物的真實型別。因此,如果寵物發生變化,派生也可能發生變化。
更好的設計方法是將寵物User從Role. 用戶沒有動物,但在他/她的角色中,DogLover他/她可以擁有(Dog或)。然后,您可以使用關聯專業化來清楚地顯示協方差。
話雖這么說,在現實生活中,DogLover也不CatLover一定是不相容的,甚至可能Dog因為歷史原因而成為CatLover. 將所有權和偏好的關注點分開,將是一個更好的設計。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/528248.html
標籤:遗产微升协会类图类设计
上一篇:如何在鏈接文本上覆寫Bootstrap的CSS強制下劃線?
下一篇:通過方法設定類屬性的值
