Dědičnost (objektově orientované programování)

Tento článek je o dědičnosti v objektově orientovaném programování. O biologické dědičnosti pojednává článek Dědičnost.

Dědičnost je v objektově orientovaném programování způsob, jak ustanovit is-a vztah mezi objekty. V třídové dědičnosti, kde jsou objekty definované třídami, mohou třídy zdědit atributy a chování od předem existujících tříd, které se nazývají rodičovské třídy, základní třídy nebo super třídy. Výsledné třídy jsou nazývány odvozené třídy, podtřídy nebo potomek třídy. Koncept dědičnosti byl poprvé zaveden pro jazyk Simula v roce 1968.

Podtřídy a super třídy

Podtřída je modulární, odvozená třída, která dědí jednu nebo více jazykových entit od jedné nebo více tříd (super tříd). Sémantika dědičnosti se v různých programovacích jazycích liší, ale obvykle podtřída dědí instanční proměnné a členské funkce svého rodiče. Některé jazyky podporují dědičnost i jiné konstrukce. Rodičovská třída zavádí společné rozhraní a základní funkcionalitu, kterou specializovaná podtřída může zdědit, modifikovat nebo potlačit. Reference na třídu, může odkazovat na jednu z jeho podtříd. Jaká třída je odkazována je nemožné předpovídat během kompilace. Pro volání funkcí objektů více různých tříd je použito uniformní rozhraní.

Překrytí

(angl. overriding) Mnoho objektově orientovaných jazyků dovoluje objektu nebo třídě nahrazení funkce, která byla zděděná. Tento proces je nazýván překrytí.[1][2] Toto přináší komplikaci: kterou verzi funkce instance zděděné třídy používá – tu co je součástí vlastní třídy, nebo tu co je z rodičovské třídy? Odpověď se liší jazyk od jazyka, nějaké jazyky obsahují deklarace pro určení, že určité metody nemohou být překryty, některé obsahují deklarační slova pro označení překrytých metod.

Dědičnost je mechanizmus kde podtřída znovu použije kód rodičovské třídy. V základu si podtřída zachovává všechny operace rodičovské třídy.

V následujícím příkladu v jazyce Python, podtřída CubeSumComputer přepisuje metodu transform() rodičovské třídy SquareSumComputer. Podtřída znovu používá všechen kód rodičovské třídy, až na metodu transform().

class SquareSumComputer:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def transform(self, x):
        return x * x

    def inputs(self):
        return range(self.a, self.b)

    def compute(self):
        return sum(self.transform(value) for value in self.inputs())

class CubeSumComputer(SquareSumComputer):
    def transform(self, x):
        return x * x * x

Třídy, které nelze dědit

V některých programovacích jazycích může být třída prohlášena za neděditelnou přidáním modifikátorů do deklarace třídy. Například v jazyce Java klíčové slovo „final“, nebo v jazyce C# slovo „sealed“. Podobné modifikátory se v deklaraci píší před slovo „class“. Tyto třídy zakazují jejich znovupoužitelnost, což se používá převážně v případě, že se kód distribuuje jako předkompilované binární soubory a ne jako zdrojový kód.

Metody, které nemohou být překryty

Stejně jako třídy mohou být neděditelné, metody/funkce mohou být vyhlášeny za nepřekrytelné (nahrazeny novou funkcí stejného jména v podtřídě). Metody deklarované jako private jsou nepřekrytelné jednoduše proto, že nejsou přístupné z jiných tříd než jejich hlavní. Pro nepřekrytelné funkce (které jsou dostupné potomkům) se používají stejná klíčová slova jako u třídy (final, sealed).

Virtuální metody

Pokud je metoda v rodičovské třídě deklarovaná jako virtuální, potom její volání z rodičovské třídy bude automaticky přesměrováno na metodu potomka (pokud existuje). Některé jazyky požadují, aby byly virtuální funkce specificky deklarovány (C++), v jiných jazycích jsou všechny metody virtuální (Java).

Reference

  1. PECINOVSKÝ, Rudolf. Java 7: učebnice objektové architektury pro začátečníky. Praha : Grada, 2012. S. 278 Dostupné online.
  2. PROCHÁZKA, David. Základy programování objektových aplikací v C++ (ESF). Brno : Mendelova univerzita v Brně. kap. Dědičnost, část Přetížení a překrytí metody Dostupné online.

V tomto článku byl použit překlad textu z článku Inheritance (object-oriented programming) na anglické Wikipedii.


Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Dědičnost_(objektově_orientované_programování)
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.