2013-08-07 49 views
5

我遇到以下說明IsRoot,IsAbstract & IsLeaf但是不明白什麼時候可以使用它們。從http://www2.sys-con.com/itsg/virtualcd/dotnet/archives/0108/clark/index.htm何時使用UML中的IsRoot,IsAbstract和IsLeaf?

摘錄:

通過檢查IsRoot複選框,你是從其他類繼承限制類。檢查IsAbstract會限制類被實例化,並強制客戶端實例化派生類來訪問類的功能。檢查IsLeaf表示該類是密封的。密封類不可用,並有助於限制繼承鏈的深度。

我的理解

  1. IsRoot似乎表明,它是一個超
  2. IsAbstract似乎表明它是一個抽象類
  3. IsLeaf是不能被繼承,但可以實例化一個類。

有人能給我一個使用這些模型的真實世界的例子嗎?舉個例子,我可以想象一下,像汽車這樣的班級是超級班級,是抽象的,在班級之下,你可以選擇'沃爾沃','雪佛蘭'等等。

+0

有人還在使用正式的UML嗎? (除了設計草圖) –

+2

@Mitch小麥 - 您會驚訝於架構,尤其是基礎設施或軟件。它也被用於商業建模。 – PeanutsMonkey

+0

@PananutsMonkey非常好的問題 – user2019510

回答

7
  • isRoot不再存在於UML2中。在UML 1則意味着(從說明書):

isRoot:指定GeneralizableElement是否是一個根 GeneralizableElement沒有祖先。 True表示 可能沒有祖先,false表示它可能有祖先 (無論它現在是否實際上有任何祖先)。

  • isAbstract意味着該元素是不完整的,並且不能被實例化。

如果爲true,則分類器不提供完整聲明,通常不能實例化。分類器旨在由其他分類器使用(例如,作爲一般元關係的目標或概括 關係)。默認值爲false。

  • isLeaf意味着你不能重新定義元素,一樣的一些編程語言final

指示是否可以進一步重新定義RedefinableElement。如果該值爲真,則不可能 進一步重新定義RedefinableElement。默認 值爲false。

+0

謝謝Xaelis。你能給我一些真實世界的例子嗎? – PeanutsMonkey

+2

是@PananutsMonkey。忘記isRoot,不再存在。車輛是抽象的,因爲你不能實例化它。你不知道它的具體類型。是汽車,公共汽車,船嗎? IsLeaf更多的是軟件設計選擇。假設您有一個TrustedUser類,並且您想阻止任何其他架構師通過繼承來重新定義此類。然後,您將其isLeaf屬性設置爲true。 – Xaelis

2

不是現實生活中的例子,一些。

  1. isRoot:我認爲這不再是UML的一部分。那篇文章是從2004年開始的,當時UML 2出現了,我懷疑Visio是否支持它。它仍然可能不支持它。
  2. isAbstract:這是一個好主意,使所有超類抽象,以便您不能創建一個實例是而不是子類的成員。類本質上是一組實例。一個實例是超集的成員而不是子集意味着什麼?目前還不清楚這種情況的分類是什麼,它可能會隨着時間而無意中改變。創建子類disjoint(非重疊)和covering(指定所有已知的子類)也是一個好主意。在Lahman's book中使用Avians有更多的細節和真實的例子。
  3. isLeaf:本質上阻止人們覆蓋你的代碼。我無法驗證this quotation,但按說The Unified Modeling Language Reference Manual說:

    身爲葉或者被限制爲葉都沒有根本 語義特性,而是軟件工程的機制來控制 人的行爲。

這有幫助嗎?

+0

對不起。它太模糊了。善於在圖表中獲得一些真實的例子。 – PeanutsMonkey

+0

你看過拉曼的書嗎?他已經投入了巨大的工作來提供一個真實世界的例子(2)。我甚至給你一個鏈接,你可以免費閱讀它。 (1)是無關緊要的。 (3)有什麼不清楚的地方? –

+0

Jim L - 我不清楚什麼時候以及如何在UML中使用它(IsLeaf)。 – PeanutsMonkey