next up previous contents index
Next: Vícenásobná dědičnost Up: Hierarchie tříd a dědičnost Previous: Hierarchie tříd a dědičnost   Obsah   Index


Dědičnost pomocí změny a vynechání atributů nebo metod

Pluto rovněž dovoluje úpravy a vynechání definic atributů, implicitních hodnot a metod, které třída zdědila od svého předka.

Mějme následující definice tříd:

class pacient[osetruje $\Rightarrow$ lekar]
class alkoholik isa pacient[osetruje $\Rightarrow$ psychiatr]

První definice říká, že o pacienty se starají lékaři. Druhá definice upřesňuje, že alkoholici jsou pacienti, ale v rukou psychiatrů. Třída alkoholik zavádí novou definici pro atribut osetruje, který vznikl změnou deklarace atributu osetruje zděděného ze třídy pacient.

Následující příklad ukazuje, jak změnit implicitní hodnoty atributů, aniž bychom měnili jejich definici.

class student isa osoba[rok_narozeni default 1975;
pohlavi default 'M'; navstevuje $\Rightarrow$ {kurz};
prihlasit(kurz){prihlasit(C):- insert navstevuje $\rightarrow$ $\langle$C$\rangle$}
odhlasit(kurz){odhlasit(C):- delete navstevuje $\rightarrow$ $\langle$C$\rangle$}]

Třída student jako podtřída třídy osoba zdědila veškeré instance atributů a metody této třídy. Zděděné implicitní hodnoty byly změněny na hodnoty 1975 a M. Třída student má oproti svému předku ještě atribut navstevuje a metody prihlasit a odhlasit.

Následující příklad ukazuje, jak vynechat atributy a metody zděděné z nadtřídy:

class celibat isa osoba[druh $\Rightarrow$ none; ozen(osoba) $\rightarrow$ none; rozved() $\rightarrow$ none]

Vestavěná třída none umožňuje vynechat ze třídy celibat zděděné atributy a metody ze třídy osoba. V důsledku toho nemá instance třídy celibat atribut druh a nemůže používat metody ozen a rozved.

Protože Pluto podporuje přetížení metod, je na tomto místě kvůli vynechávání nutné specifikovat signatury metod. Definice atributů a jejich implicitní hodnoty jsou svázány i při dědičnosti. Což znamená, že zdědí-li podtřída od svého předka definici atributů, pak zdědí i implicitní hodnoty (jsou-li nějaké definovány) odpovídajících atributů, pokud tyto nebyly procesem dědění změněny. Pokud byla definice atributu při dědění změněna nebo vynechána, je pochopitelně vynechána i implicitní hodnota tohoto atributu. Metody používající atributy a metody, které nebyly zděděny, mohou způsobit i run-time chybu, pokud tento zděděn byl.

System Pluto používá vztahy závislostí k určení toho, co může být zděděno automaticky.


next up previous contents index
Next: Vícenásobná dědičnost Up: Hierarchie tříd a dědičnost Previous: Hierarchie tříd a dědičnost   Obsah   Index
Tomáš Kubíček 2002-05-19