組合

處理物件基本系統中複雜性的主要方法,是透過物件分解。物件可以由其他物件或子物件(巢狀物件)所組成。子物件是在母項物件中定義的物件。母項物件(或擁有者)可以委派由其子物件處理的要求,子物件可以對其母項物件通訊。

每一個子物件都將 HomeHeatingSystem 辨識為其母項,HomeHeatingSystem 可以依名稱存取其每一個子物件。此 HomeHeatingSystem 視圖稱為物件結構視圖,因為它會顯示物件的內部結構。視系統本質而定,子物件可以鏈結或不鏈結彼此。

母項物件會利用組合,以值來保留子物件,而不是以指標。母項物件負責在子物件之後的起始設定及清除。如需相關資訊,請參閱起始設定子物件

依預設,子物件會指定單一實例,且實作為母項物件結構的成員。 成員的名稱及類型與子物件的名稱及類型相同。換言之,子物件會以值內嵌於母項物件中,而不是作為物件的指標。

當指定子物件的對應關係為 1 以外的數字,子物件會依預設實作為陣列。例如,theFurnacetheRooms 會實作為 HomeHeatingSystem 結構的成員。 物件 theFurnace 實作為類型 Furnace 的單一實例,而 theRooms 實作為有三個 Rooms 的陣列:

typedef struct HomeHeatingSystem HomeHeatingSystem;
struct HomeHeatingSystem {
    RiCReactive ric_reactive;
    /***    User implicit entries    ***/
    struct Furnace theFurnace;
    struct Room theRooms[3];
};

如果事先不知道子物件的對應關係,則會將它實作為鏈結的清單。例如,當您指定 theRooms 的對應關係為 *,而不是 3,它會實作為 RiCList 如下:

struct HomeHeatingSystem {
    RiCReactive ric_reactive;
    /***    User implicit entries    ***/
    struct Furnace theFurnace;
    RiCList theRooms;
};

您也可以使用其他類型的動態儲存器(如集合)來實作子物件。您可使用 CG::Relation::Implementation 內容來指定如何實作具體關係。 例如,將 theRoomsImplementation 內容設定為 UnboundedUnordered,會將 theRooms 實作為 RiCCollection,而不是作為 RiCList 或陣列。

位於主旨 RiCContainers 下面的內容,會針對各種用於實作關係的儲存器,來決定產生函數的方式。請參閱「特性」視窗的適當內容標籤上,針對這些內容所提供的定義。


回饋