簡體   English   中英

UML 類圖 - 抽象還是接口?

[英]UML Class Diagram - abstract or interface?

如何知道類 A 是接口、抽象類還是具體類(超類)?

在此處輸入圖片說明 根據答案,沒有 A 的直接實例,所以我假設它是一個抽象類。


但是,在第二張圖片中:

在此處輸入圖片說明

B 也應該是抽象的,如果第一個理論是正確的......但它不能,因為在最后一個答案中有 B 類的直接實例。

如果 A 在 image1 中是抽象的,它將顯示為斜體的名稱和/或旁邊的字符串{abstract} 這不是這里的情況。 因此 A可以有直接實例。 我猜 image1 中有錯誤。

請注意,即使 image2 中的 B 是抽象的,指定B 的實例也是有意義的。實例規范不是實例,因此可能是不完整和抽象的。 一個對象將具有完整的特性和一個具體的類。 例如,我可以有一個紅色的Basketball 在模型中,我可能有一個按Ball{abstract}分類的實例規范,並且沒有用於顏色的插槽,因為我不在乎它是哪種類型和顏色。 所以任何實例BasketballHandball將適合此實例說明

根據 UML 規范,第 9.2.3.2 節:

Classifier 的 isAbstract 屬性,當為真時,指定 Classifier 是抽象的,即沒有直接實例:抽象 Classifier 的每個實例都應是其特化之一的實例。

該符號在第 9.2.4.1 節中進一步描述:

在使用的字體允許的情況下,抽象分類器的名稱以斜體顯示。 替代地或此外,抽象分類器可以使用其名稱之后或下方的文本注釋{abstract}來顯示。

第一張圖中沒有指出這兩者,所以答案是錯誤的。

注意,抽象類的另一個間接指示(雖然沒有直接提到,只是來自一般描述)可以使用泛化集。 這里使用了幾個符號,您可以在第 9.7.4 節中閱讀它們(整個第 9.7 節都是關於泛化集)。 這種表示法也沒有這么使用 - 沒有任何東西表明A類是抽象的。

第一張圖

如果A是接口、抽象類或具體類,則不能從圖中推斷:

  • A可以是由BC進一步特化的具體類
  • A可以是抽象類, BC可以是抽象或具體的特化。 人們希望A為斜體或后跟{abstract}裝飾,但這些不是強制性的。
  • A可能是一個接口。 在這種情況下,B 和 C 將是專用接口。 人們會期望«interface»關鍵字在A之前或之上,但這種表示法不是強制性的(即使每個人都使用它)。

因此,如果以所有可能的准確性使用 UML 表示法, A將是一個具體的類,但客觀上您不能 100% 確定。

重要說明:提供的聲稱“沒有 A 實例”的答案是傳聞。 圖中沒有任何元素可以得出這個結論

第二張圖

我們已經看到第一個問題的答案是有缺陷的,同樣, B不一定是抽象類。

重要啟示:即使B是抽象的,您也需要知道b : B是可能的,因為在對象圖中,您可以任意選擇顯示一個類的成員資格,如果對象更專業,則事件:

UML 2.5 - 第 9.8.3 節:InstanceSpecification 表示建模系統中實例的可能或實際存在,並完整或部分地描述這些實例。

如有疑問,幾行后,您將閱讀:

InstanceSpecification 可以代表:
- 通過一個或多個分類器對實例進行分類,其中任何一個都可以是抽象的

記住這一點,無論 B 是否抽象,第二張圖的答案都是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM