Vztahy mezi třídami lze rozdělit následovně
- Vztahy mezi třídami jako datovými typy
- Generalizace
- Realizace
- Vztahy mezi třídami jako instancemi
- Asociace
- Agregace
- Kompozice
Generalizace
Neboli specializace nastává při dědění třídy. V Javě se používá klíčové slovo extends. Třída tímto zdědí metody a atributy třídy od které dědíme.Generalizace je jednosměrná, takže vytváří hierarchii tříd (rodič -> potomek). Třída může dědit pouze od jedné třídy, ale rozhraní může dědit od více rozhraní.
Realizace
Zde se jedná o implementaci rozhraní. Tzv. rozhraní (interface) definuje metody, které potom musíme ve třídě implementovat. Odkaz na rozhraní se u této třídy provádí klíčovým slovem implements. Realizace je jednosměrný vztah, stejně jako generalizace. Realizovat je možné více rozhraní. Omezením tohoto vztahu je, že vždy na jedné straně vztahu musí být rozhraní a na druhé straně třída. Z toho vyplývá, že graf realizace musí mít vždy právě dvě úrovně (rozhraní a třída).Asociace
Jedná se o poměrně obecný způsob vztahu mezi dvěmi instancemi. Příkladem může být použití jedné třídy v jiné třídě jako parametru metody, atributu třídy apod. Následující vztahy jsou specifičtější.Tento vztah může (ale nemusí) být obousměrný. Tedy pokud zakreslíme tento vztah mezi třídami do grafu, můžeme v grafu získat cykly. Z toho vyplývá, že grafem nemusí být strom, jak tomu bylo v předchozích případech. Tato vlastnost platí i pro agregaci a kompozici.
Případ na obrázku může nastat, pokud položka menu (MenuItem) obsahuje zpátky referenci na menu, do kterého patří.
Agregace
Tento druh vztahu vytváří mezi třídami volnou vazbu - mohou bez sebe existovat. Například třída PC používá třídu Tiskarna. Pokud bude vztah ukončen, stále můžou jednotlivé třídy fungovat.Kompozice
Kompozice je opak agregace. Tímto vztahem rozumíme silnou vazbu, tedy že jedna třída bez druhé nemůže existovat neboť ztrácí smysl. Jako příklad si můžeme vzít třídu obdelník a bod. Body definují umístění a velikost obdélníku, bez této třídy nemůže obdélník existovat.Zdroje:
http://www.milosnemec.cz/clanek.php?id=199
http://www1.osu.cz/~hunka/vyuka/javaOOP/obop1/jvcv04/OOP_04.pdf
http://java.vse.cz/pdf/skripta-rozhrani.pdf
rozdíly druhů asociací: http://stackoverflow.com/questions/19606720/uml-class-diagram-association-implemented-in-java-classes
http://www.uml-diagrams.org/association.html