在UML類別之間的關係當中,聚合(aggregation)和組合(composition)的區別讓我一開始很疑惑,後來查了些資料後,比較可以分得出這兩個的差別。
Aggregation和Composition都是
表達一個物件包含另外一個物件的關係(has-a)。比如說:一個公司包含一些員工、一艘船中包含幾個引擎、一個飛機場中包含數架飛機等等。
Aggregation是Association的一個特例(specialization),用來表達兩個物件之【整體和部分(whole-part)】的關係。當B物件與A物件之間是Aggregation的關係時,代表A物件消失時,B物件還可以給C物件繼續使用。
舉例來說,機場與飛機之間的關係就是Aggregation。A機場裡面會有很多台飛機,當A機場不再存在時,裡面的飛機還可以屬於(停靠在)C機場,不會因為A機場消失了,本來停靠的飛機也跟著消失。
Composition所表達的是更進一步的aggregation。除了代表兩個物件之間的whole-part關係之外,還代表這兩個物件之間是
有相同的生命周期(life-cycle)。白話一點的說,若是B物件與A物件之間是composition的關係時,代表當A物件消失的時候,B物件也要跟著消失。
舉例來說,一個員工和員工薪資資料就是composition的關係,當A員工離職後,它所對應的員工薪資資料也會跟著無效。