物件導向的幾種關係

2021-07-27 22:26:10 字數 728 閱讀 3350

如果你確定兩件物件之間是is-a的關係,那麼此時你應該使用繼承;比如菱形、圓形和方形都是形狀的一種,那麼他們都應該從形狀類繼承而不是聚合。

如果你確定兩件物件之間是has-a的關係,那麼此時你應該使用聚合;比如電腦是由顯示器、cpu、硬碟等組成的,那麼你應該把顯示器、cpu、硬碟這些類聚合成電腦類,而不是從電腦類繼承。

類間的關係

網上關於此類的討論非常多,發現對於該問題的理解各有各的說法,而各個說法中又相去甚遠。通過瀏覽這些討論以及對《o'reilly - uml 2.0 in a nutshell (2007)》的參考,發表一下自己的看法

類間關係有很多種,在大的類別上可以分為兩種:縱向關係、橫向關係。

縱向關係就是繼承關係,它的概念非常明確,也成為oo的三個重要特徵之一,這裡不過多的討論。

橫向關係較為微妙,按照uml的建議大體上可以分為四種:

依賴    (dependency)

關聯    (association)

聚合    (aggregation)

組合    (composition)

它們的強弱關係是沒有異議的:依賴 < 關聯 < 聚合 < 組合

然而它們四個之間的差別卻又不那麼好拿捏,需要好好體會。

依賴

關聯

聚合:  

組合

C 面向過程和物件導向的關係

如何大象裝進冰箱?面向過程 為了把大象裝進冰箱,需要3個過程。把冰箱門開啟 得到開啟門的冰箱 把大象裝進去 開啟門後,得到裡面裝著大象的冰箱 把冰箱門關上 開啟門 裝好大象後,獲得關好門的冰箱 每個過程有乙個階段性的目標,依次完成這些過程,就能把大象裝進冰箱。物件導向 為了把大象裝進冰箱,需要做三個...

物件導向繼承的幾種方式

類式繼承 一般類式繼承是繼承私有屬性,呼叫父類通過call改變子類this指向 function person1 name,age function coder1 name,age,job let p1 new person1 阿凡達 2009 let c1 new coder1 卡梅隆 56,導演...

Js物件導向的幾種方式

1.物件的字面量 var obj 2.建立例項物件 var obj new object 3.建構函式模式 function fn new fn 4.工廠模式 用乙個函式,通過傳遞引數返回物件 function fn params fn params 5.原型模式 function clock ho...