考慮一下這個來自YT教程視頻的UML圖(觀察者模式):
IObservable對IObserver有依賴性,因為其方法需要一個該型別的引數。Concrete*類當然要實作它們各自的介面。ConcreteObserver依賴于ConcreteObservable(而不是IObservable,請注意),因為它在其建構式中把它作為一個引數。
我覺得不對的是,ConcreteObservable需要實作IObservable的方法,所以它也直接 "使用"IObserver。在圖中,這些之間不是應該有一個依賴關系嗎,就像這樣?
我知道它只是實作了IObservable的方法,并且ConcreteObservable和IObserver之間的關系有點間接地由圖上的其他箭頭顯示出來,但是就像我提到的那樣,我感覺不對,因為這些之間存在is的直接依賴關系,并且它沒有顯示在圖上。
澄清一下 - 我不是在說這個具體的 UML 圖 - 這種方法("缺失 "的依賴關系)似乎是大多數/所有類似類關系的 UML 圖的規范。這是為什么呢?
uj5u.com熱心網友回復:
為什么?
首先,該圖與敘述不完全對應:該圖顯示了一個ConcreteObservable,它是IObservable的特化(即,它繼承而不只是實作)。對于 ConcreteObserver 和 IObserver 也是如此。
UML的語意是非常明確的:如果ConcreteObserver 繼承自IConcreteObserver,它不僅繼承它的公共操作和屬性,也繼承它的關系。 因此,紅色箭頭將是多余的,因為它已經是隱式的。 此外,這種冗余會帶來歧義:專業的讀者會想,這到底是同一個關聯還是在現有關聯之上的另一個關聯。 在這種情況下,你需要更多的元素來消除歧義(例如,紅色關聯和原始關聯之間的繼承箭頭)。
對于介面的實作(到超類的那條線應該是點狀的),情況類似:實作介面的類必須實作介面指定的內容,包括其關聯。 所以它不是繼承的,但是同樣,關聯是隱含的。
習慣了吧!
但是,與其在圖中添加不必要的元素,使用高級UML功能來消除歧義,從而使圖更加難以閱讀,我建議習慣于這種表示方式:你將在你的職業生活中看到很多,認識到 "模式"(不一定是這里的觀察者模式,而是使用介面或概括/專門化來解開抽象的更多技術)很重要。轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/320094.html
標籤:
上一篇:繼承自兩個成員相同的父母

