Otevřít hlavní menu

Objektová kompozice (anglicky object composition) je v informatice způsob, jak v objektově orientovaném programování kombinovat jednoduché (základní) objekty nebo typy dat do složitějších. Objektová kompozice (tj. složení, skladba) je důležitý nástroj pro vytváření pokročilých datových struktur, jako je například spojový seznam nebo binární strom. Tyto složené datové struktury jsou dále používány stejným způsobem, jako základní objekty.[1]

Obsah

PodrobnostiEditovat

Když jsou v programovacím jazyce vytvořeny objekty jako datové typy, mohou být často děleny na složené a nesložené datové typy. Složení může být považováno za vztah mezi typy: objektově složený typ (např. auto) „obsahuje“ objekt jednoduššího typu (např. kola).

Uvažujme o vztahu automobilu konkrétně: automobil je složen z objektů, jako je volant, sedadla, převodovka a motor. Tento „vztah“ může být stanoven v počítačovém programu jako složení vztahů. V reálném světě je samotná „podstata složení“ chápána jinak. Motor v automobilu může být nahrazen motorem z jiného automobilu, což znamená, že vztah je lepší popsat jako agregace (viz níže) než složení. Obecně řečeno, jak plyne čas, tak co vypadá jako kompozice, tak má tendenci se proměnit v shluky a shluky mají tendenci se proměnit ve volnější sdružení.

Složení musí být odlišné od subtypování, což je proces přidání detailu k obecnému typu dat k vytvoření více konkrétních datových typů. Například automobily mohou být konkrétní typem vozidla: auto je vozidlo. Dělení nepopisuje vztah mezi různými objekty, ale místo toho říká, „že objekty jednoho typu, jsou zároveň objekty jiného typu“.

V programovacích jazycích, jsou kompozitní objekty obvykle vyjádřeny pomocí odkazů z jednoho objektu na jiný. V závislosti na jazyku, mohou být tyto odkazy známé jako atributy, pole, členy nebo vlastnosti, a výsledná kompozice jako kompozitní typ, uložený záznam, struktura, n-tice, nebo uživatelem definovaný typ (UDT). Pole jsou uvedeny jedinečným názvem, takže každé z nich může být odlišeno od ostatních. Nicméně z těchto odkazů nemusí nutně znamenat, že objekt je kompozice. Kompozici nazýváme pouze, pokud objekty nemají žádnou nezávislou existenci. Pro podrobnosti viz dále kapitola Agregace.

UML notaceEditovat

 
UML notace pro kompozici (horní) a agregaci (dolní). Všimněte si, že příklady ukazují abstrahované datové modely, bez ohledu na skutečnost, že v reálném světě asociace „karburátor ⇒ auto“ znamená, že karburátor může být z auta vytažen a bude dále existovat, i když je auto zničeno.

V UML, existují dva způsoby modelování kompozice: kompozice a agregace. Dejte si pozor na to, že v UML má kompozice užší význam než v běžném jazyce.

C++ kód níže ukazuje, jak by měl zdrojový kód vypadat.

// Kompozice
class Auto
{
private:

 // Auto má karburátoru.
 // Karburátor je vytvořen, když je vytvořeno Auto,
 // Pokud zničíme (smažeme) auto, je zničen (smazán) i karburátor
 Karburátor karb;

};
// Agregace
třída Rybník
{
private:

 // Rybník není vlastníkem kachny,
 // má odkazy na jiné kachny které jsou někde jinde
 std::vector<Kachna*> kachny;
};

Kompozitní typy v CEditovat

Toto je příklad kompozice v C.

struct Person
{
 int age;
 char *name;
 enum {job_seeking, professional, non_professional, retired, student} employment;
};


Rekurzivní kompoziceEditovat

Objekty mohou být složené rekurzivně pomocí rekurzivních typů, nebo odkazů.

Jedna implementace pro rekurzivní kompozici je taková, kde každý objekt má odkazy na ostatní stejného typu.

ReferenceEditovat

V tomto článku byl použit překlad textu z článku Object composition na anglické Wikipedii.

  1. Michelle Yaiser. Object-oriented programming concepts: Composition and aggregation [online]. Adobe [cit. 2015-03-11]. Dostupné online. (anglicky) 

Související článkyEditovat