Abstraktní třída vs Betonová třída
Většina populárních moderních objektově orientovaných programovacích jazyků, jako je Java a C #, je založena na třídě. Dosahují objektově orientovaných konceptů, jako je zapouzdření, dědičnost a polymorfismus pomocí tříd. Třídy jsou abstraktní reprezentace objektů skutečného světa. Třídy mohou být konkrétní nebo abstraktní v závislosti na úrovni implementace jejich funkčních metod. Konkrétní třída implementuje všechny své metody. Abstraktní třídu lze považovat za omezenou verzi běžné (konkrétní) třídy, kde může obsahovat částečně implementované metody. Konkrétní třídy jsou obvykle označovány jako (pouze) třídy.
Co je třída betonu?
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 betonu). Konkrétní třídy znázorňují konceptuální reprezentaci objektů skutečného světa. Třídy mají vlastnosti nazývané atributy. Atributy jsou implementovány jako globální a instance 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 je zapouzdření dosaženo tím, že atributy jsou soukromé, zatímco vytvoří veřejné metody, které mohou být použity 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 super třídy). Polymorfismus umožňuje programátorovi nahradit objekt třídy místo objektu jeho super třídy. Zpravidla se podstatná jména nalezená v definici problému stanou přímo třídami v programu. A podobně se slovesa stávají metodami. Typické modifikátory přístupu používané pro třídy jsou veřejné, soukromé a chráněné.
Co je abstraktní třída?
Abstraktní třídy jsou deklarovány pomocí abstraktní klíčové slovo (např. V Javě). Typicky nelze abstraktní třídy, také známé jako ABC (Abstract Base Classes), vytvořit instanci (instanci této třídy nelze vytvořit). Takže abstraktní třídy mají smysl pouze tehdy, pokud programovací jazyk podporuje dědičnost (schopnost vytvářet podtřídy z rozšiřování třídy). Abstraktní třídy obvykle představují abstraktní pojem nebo entitu s částečnou nebo žádnou implementací. Proto abstraktní třídy 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é funkce nadřazené třídy a lze je doplnit funkčností.
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í, třída dítěte se také stává třídou abstraktní. To vše znamená, že když programátor nominuje třídu jako abstrakt, říká, že třída bude neúplná a bude mít prvky, které musí být doplněny zděděný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, aby zdědil, musí přesně dodržovat definice metod (ale samozřejmě může mít i vlastní implementaci).
Jaký je rozdíl mezi abstraktní třídou a betonovou třídou?
Abstraktní třídy mají obvykle částečnou nebo žádnou implementaci. Na druhé straně 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 konkretizovat. Proto je třeba abstraktní třídy rozšířit, aby byly užitečné. Abstraktní třídy mohou obsahovat abstraktní metody, ale konkrétní třídy nemohou. Při rozšíření abstraktní třídy se zdědí všechny metody (abstraktní i konkrétní). Zděděná třída může implementovat jakoukoli nebo všechny metody. Pokud nejsou implementovány všechny abstraktní metody, stává se tato třída také abstraktní třídou.