Abstraktní třída vs. Konkrétní třída
Většina populárních moderních objektově orientovaných programovacích jazyků jako Java a C je založena na třídách. Pomocí tříd dosahují objektově orientovaných konceptů, jako je zapouzdření, dědičnost a polymorfismus. Třídy jsou abstraktní reprezentací objektů reálného světa. Třídy mohou být konkrétní nebo abstraktní v závislosti na úrovni implementace funkcí jejich metod. Konkrétní třída kompletně implementuje všechny její metody. Abstraktní třídu lze považovat za omezenou verzi běžné (konkrétní) třídy, kde může obsahovat částečně implementované metody. Obvykle se konkrétní třídy označují jako (jen) třídy.
Co je betonová třída?
Výchozí třída je konkrétní třída. Klíčové slovo class se používá k definování tříd (např. v Javě). A obvykle jsou jednoduše označovány jako třídy (bez přídavného jména konkrétní). Konkrétní třídy zobrazují konceptuální reprezentaci objektů reálného světa. Třídy mají vlastnosti nazývané atributy. Atributy jsou implementovány jako globální a instanční proměnné. Metody ve třídách představují nebo definují chování těchto tříd. Metody a atributy tříd se nazývají členy třídy. Typicky se zapouzdření dosáhne tak, že se atributy stanou soukromými, zatímco se vytvoří veřejné metody, které lze použít pro přístup k těmto atributům. Objekt je instancí třídy. Dědičnost umožňuje uživateli rozšířit třídy (nazývané podtřídy) z jiných tříd (nazývaných supertřídy). Polymorfismus umožňuje programátorovi nahradit objekt třídy místo objektu své nadtřídy. Obvykle se podstatná jména nalezená v definici problému přímo stávají třídami v programu. A podobně se ze sloves stávají metody. Veřejné, soukromé a chráněné jsou typické modifikátory přístupu používané pro třídy.
Co je abstraktní třída?
Abstraktní třídy jsou deklarovány pomocí klíčového slova Abstract (např. v Javě,). Abstraktní třídy, známé také jako abstraktní základní třídy (ABC), obvykle nelze vytvořit instanci (instanci této třídy nelze vytvořit). Abstraktní třídy jsou tedy smysluplné pouze v případě, že programovací jazyk podporuje dědičnost (schopnost vytvářet podtřídy z rozšíření třídy). Abstraktní třídy obvykle představují abstraktní koncept nebo entitu s částečnou nebo žádnou implementací. Abstraktní třídy proto fungují jako nadřazené třídy, z nichž jsou odvozeny podřízené třídy, takže podřízená třída bude sdílet neúplné vlastnosti nadřazené třídy a lze přidat funkce, které je doplní.
Abstraktní třídy mohou obsahovat abstraktní metody. Podtřídy rozšiřující abstraktní třídu mohou implementovat tyto (zděděné) abstraktní metody. Pokud podřízená třída implementuje všechny takové abstraktní metody, stane se konkrétní třídou. Ale pokud tomu tak není, stane se podřízená třída také abstraktní třídou. To vše znamená, že když programátorka nominuje třídu jako Abstrakt, říká, že třída bude neúplná a bude mít prvky, které je třeba doplnit dědícími podtřídami. Je to pěkný způsob, jak vytvořit smlouvu mezi dvěma programátory, což zjednodušuje úkoly při vývoji softwaru. Programátor, který píše kód ke zdědění, musí přesně dodržovat definice metod (ale samozřejmě může mít vlastní implementaci).
Jaký je rozdíl mezi abstraktní třídou a konkrétní třídou?
Abstraktní třídy mají obvykle částečnou nebo žádnou implementaci. Na druhou stranu konkrétní třídy mají vždy plnou implementaci svého chování. Na rozdíl od konkrétních tříd nelze abstraktní třídy vytvářet instance. Proto musí být abstraktní třídy rozšířeny, aby byly užitečné. Abstraktní třídy mohou obsahovat abstraktní metody, ale konkrétní třídy ne. Když je abstraktní třída rozšířena, zdědí se všechny metody (jak abstraktní, tak konkrétní). Zděděná třída může implementovat kteroukoli nebo všechny metody. Pokud nejsou implementovány všechny abstraktní metody, pak se tato třída také stane abstraktní třídou.