Abstraktní typ - Abstract type - Wikipedia
v programovací jazyky, an abstraktní typ je typ v nominativní typ systému to nemůže být instance přímo; typ, který není abstraktní - který umět být instancován - nazývá se a konkrétní typ. Každá instance abstraktního typu je instancí nějakého konkrétního podtyp. Abstraktní typy jsou také známé jako existenciální typy.[1]
Abstraktní typ nemusí poskytovat žádnou implementaci nebo neúplnou implementaci. V některých jazycích jsou abstraktní typy bez implementace (spíše než neúplná implementace) známé jako protokoly, rozhraní, podpisynebo typy tříd. v třídní objektově orientované programování, abstraktní typy jsou implementovány jako abstraktní třídy (také známý jako abstraktní základní třídy ) a konkrétní typy jako konkrétní třídy. v generické programování, analogická představa je a pojem, který podobně určuje syntaxi a sémantiku, ale nevyžaduje vztah podtypu: dva nesouvisející typy mohou uspokojit stejný koncept.
Abstraktní typy budou často mít jednu nebo více implementací poskytovaných samostatně, například ve formě konkrétních podtypů, které umět být instancován. V objektově orientovaném programování může abstraktní třída zahrnovat abstraktní metody nebo abstraktní vlastnosti[2] které jsou sdíleny jeho podtřídami. Mezi další názvy jazykových funkcí, které se používají (nebo mohou) použít k implementaci abstraktních typů, patří rysy, mixiny, příchutě, rolenebo tříd typu.[Citace je zapotřebí ]
Označující abstraktní typy
Abstraktní třídy lze vytvářet, označovat nebo simulovat několika způsoby:
- Použitím explicitní klíčové slovo abstraktní v definici třídy, jako v Jáva, D nebo C#.
- Zahrnutím jednoho nebo více do definice třídy abstraktní metody (volala čistý virtuální funkce v C ++ ), kterou třída deklaruje jako součást svého protokolu, ale pro kterou není poskytována žádná implementace.
- Podle dědění z abstraktního typu a nepotlačení všech chybějících funkcí nezbytných k dokončení definice třídy. Jinými slovy, podřízený typ, který neimplementuje všechny abstraktní metody od svého rodiče, se stane abstraktním sám.[2][3]
- V mnoha dynamicky psaných jazycích, jako je Pokec, libovolná třída, která odesílá konkrétní metodu tento, ale tuto metodu neimplementuje, lze ji považovat za abstraktní. (Nicméně v mnoha takových jazycích, jako Cíl-C, chyba nebude detekována, dokud nebude použita třída, a zpráva vrátí výsledky v chybové zprávě o výjimce, například „nerozpozná selektor: xxx“ jako
- [NSObject doesNotRecognizeSelector: selektor (SEL)]
je vyvolána při detekci neimplementované metody).
Příklad (Java)
// Ve výchozím nastavení jsou všechny metody ve všech třídách konkrétní, pokud není použito abstraktní klíčové slovo.abstraktní třída Ukázka { // Abstraktní třída může zahrnovat abstraktní metody, které nemají žádnou implementaci. abstraktní veřejnost int součet(int X, int y); // Abstraktní třída může také zahrnovat konkrétní metody. veřejnost int produkt(int X, int y) { vrátit se X*y; }}// Ve výchozím nastavení jsou všechny metody ve všech rozhraních abstraktní, pokud není použito výchozí klíčové slovo.rozhraní Ukázkové rozhraní { [abstraktní] int getLength(); // Zde lze použít abstrakt, i když je zcela zbytečný // Výchozí klíčové slovo lze v tomto kontextu použít k určení konkrétní metody v rozhraní výchozí int produkt(int X, int y) { vrátit se X * y; }}
Použití abstraktních typů
Důležitým prvkem jsou abstraktní typy staticky napsané Jazyky OOP. Mnoho dynamicky zadáno jazyky nemají ekvivalentní funkci (i když použití kachní psaní dělá abstraktní typy zbytečnými); nicméně rysy se nacházejí v některých moderních dynamicky zadávaných jazycích.[Citace je zapotřebí ]
Někteří autoři tvrdí, že třídy by měly být listové třídy (nemají žádné podtypy), nebo být abstraktní.[4][5]
Abstraktní typy jsou užitečné v tom, že je lze použít k definování a vynucení protokol; sada operací, které musí podporovat všechny objekty implementující protokol.[Citace je zapotřebí ]
Abstraktní typy jsou také podstatnou součástí Metoda šablony.
Viz také
Reference
- ^ Mitchell, John C .; Plotkin, Gordon D .; Abstraktní typy mají existující typ, ACM Transactions on Programming Languages and Systems, Vol. 10, č. 3, červenec 1988, s. 470–502
- ^ A b „Abstraktní metody a třídy (Návody Java ™> Výuka jazyka Java> Rozhraní a dědičnost)“. Oracle.com. Citováno 2019-08-14.
- ^ "Čisté virtuální funkce a abstraktní třídy v C ++". GeeksforGeeks.org.
- ^ Riel, Arthur (1996). Objektově orientovaná designová heuristika. Addison-Wesley Professional. str. 89. ISBN 0-201-63385-X.
- ^ Meyers, Scott (1996). Efektivnější C ++. Addison-Wesley Professional. str.258. ISBN 0-201-63371-X.
Udělejte nelistové třídy abstraktními
Další čtení
- Hlava první Java. O'Reilly Media. 2003. str.688. ISBN 0-596-00920-8.
- Core Java: Integrovaný přístup R. Nageswara Rao
externí odkazy
- „Vysvětlení abstraktních nebo skeletálních rozhraní“ [1]
- Typy a programovací jazyky Benjamin Pierce (MIT Press 2002) [2]
- Abstraktní typ na Rosettský kód