2010-09-24 63 views
3

或者「extends」是繼承另一個用例嗎?UML用例「擴展」和inherance之間是否有區別?

--update

剛剛澄清,我讀過書,做了很多圖表。但是我看不出在UML和Inherance之間的區別。正如比爾所說,UML 延伸表示可選行爲,但在inherance或者你得到新的行爲,你可以或不可以使用。那麼,有什麼區別?

回答

0

擴展用於向正在擴展的用例添加額外的可選行爲,但不會更改基用例中的任何行爲。

繼承用例將替換爲繼承用例的一個或多個行爲。換句話說,改變基本用例的行爲,而不是簡單地添加新的功能。請注意,用例繼承與類繼承並不完全相同。

請參閱this article

+1

擴展大小寫是一種可以使用或不可使用的行爲。就像我擴展一個類時,我可以使用它的行爲或不... – 2010-09-24 20:11:39

+0

我不同意 - 作爲您提供的鏈接狀態「一個用例(擴展)擴展了另一個用例的行爲」這是繼承的基礎。 – Doug 2010-09-24 20:13:23

2

我認爲在UML中的區別在於「擴展」基於擴展點,這意味着在擴展將被應用的用例中必須有一個命名點。語義對此不太精確。用例的繼承意味着改變一些行爲,而不是在特定的地方指定。

另一個重點是關於繼承和Liskov替代原則。您應該可以使用一個用例,它可以從另一個用例繼承,在任何可以使用另一個用例的地方。這並不適用於「擴展」的理解。當一個用例被另一個用例擴展時,這意味着一個用例可能會被另一個用戶修改,但它仍然包含主要的場景路徑,這可能是由擴展用例分支和加入的。我認爲,這是關於結構和行爲繼承之間的區別的。繼承是爲了實現相同的目標並且滿足相同的利益 - 相同的責任和行爲約束,其中擴展是關於情景路徑結構的修改,其可能由額外興趣觸發 - 例如錯誤檢查。

繼承實際上並不是一個非常好的用於用例的機制,再加上演員繼承,這更有意義,它可能會導致不必要的矛盾。根據Alistair Cockburn(編寫有效用例)的建議,繼承應僅用於表示特定用例的技術細節或數據格式的變化。

1

在我公司使用的工具中,我們有建模限制。

繼承: 從Actor到Actor,從UseCase到Usecase,從System到System。您的圖表中不能有其他繼承,因爲我收到了禁止的標誌。

延伸只能在兩個Usecase之間完成,而不能在其他元素之間完成。

我真的沒有看到繼承和擴展兩個用例之間的區別。 我會繼續閱讀下一篇文章,因爲在閱讀所有答案後,我仍然不明白:-)

相關問題