1.3.1. Dědičnost tříd

Představme si nyní situaci, že bychom chtěli v našem objednávkovém systému rozlišovat mezi firemními zákazníky a fyzickými osobami. Obě tyto skupiny zákazníků budou mít jméno, adresu a e-mail, jenže u firmy bychom potřebovali vést navíc ještě identifikační číslo organizace (IČO), daňové identifikační číslo (DIČ) a bankovní spojení. Firma je tedy více specializovaným zákazníkem.

K řešení této situace můžeme využít dědičnosti tříd, která umožňuje vytvořit novou odvozenou třídu na základě již existující bázové třídy. Odvozená třída převezme od své bázové třídy (zdědí) všechny atributy, operace a asociace. Tuto sadu zděděných vlastností však může také rozšířit o vlastní prvky. V grafickém vyjádření se vztah mezi bázovou a odvozenou třídou vyjádří prázdnou šipkou směřující od odvozené třídy k bázové, jak ukazuje příklad na Obr. 1.9. Třída Firma dědí všechny své vlastnosti od třídy zákazník a přidává k nim navíc tři atributy IČO, DIČ a čísloÚčtu.

Obrázek 1.8. Odvození třídy pomocí dědičnosti

Vztah mezi odvozenou a bázovou třídou můžeme popsat jako specializaci (odvozená třída Firma je speciálním případem bázové třídy Zákazník) nebo jako generalizaci (bázová třída Zákazník je zobecněním odvozené třídy Firma), záleží pouze na úhlu pohledu. Podstatné je ovšem to, že odvozenou třídu můžeme použít všude tam, kde je přípustné použití třídy bázové. Takže například odkazuje-li se třída Objednávka na třídu Zákazník jako na odběratele, může na jejím místě být i instance třídy Firma.

Prozatím jsme si předvedli, jak může třída dědit od jedné bázové třídy, tedy tzv. jednoduchou dědičnost. Obecně ale může třída dědit i od více než jedné bázové třídy - tomuto postupu se říká vícenásobná dědičnost a setkáme se s ní v některých programovacích jazycích (např. C++). Při použití vícenásobné dědičnosti ale vzniká mnoho dalších problémů, kvůli kterým se autoři nově vznikajících programovacích jazyků snaží této vlastnosti raději vyhnout. V jazycích jako Java nebo C# proto musíme vystačit pouze s dědičností jednoduchou, ale naštěstí nám tyto jazyky poskytují jiné nástroje, pomocí nichž můžeme situace vyžadující vícenásobnou dědičnost řešit.