如果你確定兩件物件之間是is-a的關係,那麼此時你應該使用繼承;比如菱形、圓形和方形都是形狀的一種,那麼他們都應該從形狀類繼承而不是聚合。
如果你確定兩件物件之間是has-a的關係,那麼此時你應該使用聚合;比如電腦是由顯示器、cpu、硬碟等組成的,那麼你應該把顯示器、cpu、硬碟這些類聚合成電腦類,而不是從電腦類繼承。
類間的關係
網上關於此類的討論非常多,發現對於該問題的理解各有各的說法,而各個說法中又相去甚遠。通過瀏覽這些討論以及對《o'reilly - uml 2.0 in a nutshell (2007)》的參考,發表一下自己的看法
類間關係有很多種,在大的類別上可以分為兩種:縱向關係、橫向關係。
縱向關係就是繼承關係,它的概念非常明確,也成為oo的三個重要特徵之一,這裡不過多的討論。
橫向關係較為微妙,按照uml的建議大體上可以分為四種:
依賴 (dependency)
關聯 (association)
聚合 (aggregation)
組合 (composition)
它們的強弱關係是沒有異議的:依賴 < 關聯 < 聚合 < 組合
然而它們四個之間的差別卻又不那麼好拿捏,需要好好體會。
依賴:
關聯:
聚合:
組合:
物件導向UML中類的關係
如果你確定兩件物件之間是is a的關係,那麼此時你應該使用繼承 比如菱形 圓形和方形都是形狀的一種,那麼他們都應該從形狀類繼承而不是聚合。如果你確定兩件物件之間是has a的關係,那麼此時你應該使用聚合 比如電腦是由顯示器 cpu 硬碟等組成的,那麼你應該把顯示器 cpu 硬碟這些類聚合成電腦類,而...
物件導向UML中類關係
如果你確定兩件物件之間是is a的關係,那麼此時你應該使用繼承 比如菱形 圓形和方形都是形狀的一種,那麼他們都應該從形狀類繼承而不是聚合。如果你確定兩件物件之間是has a的關係,那麼此時你應該使用聚合 比如電腦是由顯示器 cpu 硬碟等組成的,那麼你應該把顯示器 cpu 硬碟這些類聚合成電腦類,而...
UML中的關係
關係就是事物之間的聯絡。在物件導向的建模中,最重要的關係就是依賴 泛化 關聯和實現。一 依賴 是一種使用關係,說明乙個事物使用另乙個事物的資訊和服務,但反之未必可以行得通。圖形表示為一條有向的虛線。依賴的關係是所有關係當中最弱的,其他的在概念上都算是一種依賴關係,所以,依賴關係要少用,這樣才能更清楚...