Absztrakt típus - Abstract type
| Típusrendszerek |
|---|
| Általános fogalmak |
| Főbb kategóriák |
| Kisebb kategóriák |
| Lásd még |
A programozási nyelvekben az absztrakt típus a nominatív típusú rendszer olyan típusa , amelyet nem lehet közvetlenül példányosítani ; olyan típus, amely nem elvont - ami lehet példányosítható - nevezzük konkrét típus . Az absztrakt típus minden példánya valamilyen konkrét altípus példánya . Az absztrakt típusokat egzisztenciális típusoknak is nevezik .
Előfordulhat, hogy egy absztrakt típus nem nyújt megvalósítást, vagy nem teljes. Egyes nyelveken a végrehajtás nélküli (nem a befejezetlen megvalósítás helyett) absztrakt típusokat protokolloknak , interfészeknek , aláírásoknak vagy osztálytípusoknak nevezik . Az osztályalapú objektum-orientált programozás során az absztrakt típusokat absztrakt osztályként (más néven absztrakt alaposztályként ), a konkrét típust pedig konkrét osztályként valósítják meg . Az általános programozás során az analóg fogalom olyan fogalom , amely hasonlóan határozza meg a szintaxist és a szemantikát, de nem igényel altípus -kapcsolatot: két független típus kielégítheti ugyanazt a fogalmat.
Gyakran előfordul, hogy absztrakt típus lesz egy vagy több megvalósítását külön-külön, például formájában konkrét altípusok is besorolják. Az objektum-orientált programozás során az absztrakt osztály tartalmazhat absztrakt módszereket vagy absztrakt tulajdonságokat , amelyeket az alosztályai osztanak meg. Egyéb elnevezések nyelvi funkciók, amelyek (vagy lehet) végrehajtásához alkalmazott absztrakt típusok közé vonások , mixinek , ízek , szerepek , illetve típusú osztályok .
Az absztrakt típusokat jelöli
Absztrakt osztályok többféleképpen is létrehozhatók, jelölhetők vagy szimulálhatók:
- Az explicit kulcsszó
abstracthasználatával az osztály definíciójában, például Java , D vagy C# esetén . - Az osztálydefinícióba egy vagy több absztrakt metódus ( a C ++ -ban tiszta virtuális függvényeknek nevezett ) bevonásával , amelyet az osztály a protokollja részeként elfogadottnak nyilvánít, de amelyhez nincs megvalósítás.
- By örökli egy absztrakt típus, és nem kényszerítő minden hiányzó funkciók elvégzéséhez szükséges az osztály definíciója. Más szóval, az a gyermek típus, amely nem hajt végre minden elvont módszert a szülőjétől, maga is elvont lesz.
- Sok dinamikusan gépelt nyelvben, mint például a Smalltalk , absztraktnak tekinthető minden olyan osztály, amely egy adott módszert küld erre , de nem valósítja meg ezt a módszert. (Azonban sok ilyen nyelven, például az Objective-C esetében , a hiba nem észlelhető, amíg az osztály nincs felhasználva, és az üzenet kivételes hibaüzenetet eredményez, például "Nem ismeri fel a választót: xxx", ahogy a
- [NSObject doesNotRecognizeSelector:(SEL)selector]rendszer észleli nem megvalósított módszer).
Példa (Java)
//By default, all methods in all classes are concrete, unless the abstract keyword is used.
abstract class Demo {
// An abstract class may include abstract methods, which have no implementation.
abstract public int sum(int x, int y);
// An abstract class may also include concrete methods.
public int product(int x, int y) { return x*y; }
}
//By default, all methods in all interfaces are abstract, unless the default keyword is used.
interface DemoInterface {
[abstract] int getLength(); //Abstract can be used here, though is completely useless
//The default keyword can be used in this context to specify a concrete method in an interface
default int product(int x, int y) {
return x * y;
}
}
Absztrakt típusok használata
Az absztrakt típusok fontos jellemzői a statikusan gépelt OOP nyelveknek. Sok dinamikusan gépelt nyelv nem rendelkezik ezzel egyenértékű jellemzővel (bár a kacsa gépelés használata szükségtelenné teszi az absztrakt típusokat); a vonások azonban megtalálhatók néhány modern, dinamikusan gépelt nyelven.
Egyes szerzők azzal érvelnek, hogy az osztályoknak levélosztályoknak kell lenniük (nincsenek altípusaik), vagy pedig absztraktnak.
Az absztrakt típusok hasznosak, mivel protokollok meghatározására és kikényszerítésére használhatók ; műveletek halmaza, amelyet a protokollt megvalósító összes objektumnak támogatnia kell.
Az absztrakt típusok szintén a Template Method Pattern lényeges részét képezik .
Lásd még
Hivatkozások
További irodalom
- Irány az első Java . O'Reilly Media. 2003. 688. o . ISBN 0-596-00920-8.
- Core Java: R. Nageswara Rao integrált megközelítése
Külső linkek
- "Absztrakt vagy csontváz interfészek magyarázata" [1]
- Típusok és programozási nyelvek , Benjamin Pierce (MIT Press 2002) [2]
- Absztrakt típus a Rosetta Code -ban