Kacsa gépelés

Implicit gépelés , látens gépelés vagy duck typing ( eng.  Duck typing ) az OOP nyelveken  – annak meghatározása, hogy egy objektum egy bizonyos interfészt anélkül valósít meg, hogy kifejezetten megadná vagy örökölné ezt a felületet, hanem egyszerűen a metódusai teljes készletének megvalósításával .

Cím

A kifejezés neve az angol "kacsateszt" (" kacsateszt ") szóból származik, amely az eredetiben így hangzik:

Ha úgy néz ki, mint egy kacsa, úszik, mint egy kacsa, és hápog, mint egy kacsa, akkor valószínűleg kacsa.

Eredeti szöveg  (angol)[ showelrejt] Ha úgy néz ki, mint egy kacsa, úszik, mint egy kacsa, és hápog, mint egy kacsa, akkor valószínűleg kacsa.

Alapelv

Egy objektum akkor tekinthető interfészt megvalósítónak, ha tartalmazza az adott interfész összes metódusát , függetlenül az öröklődési hierarchiában lévő kapcsolatoktól vagy egy adott osztályhoz való tartozástól. Így egy objektum egy adott interfész értékeként való felhasználásának helyességét vagy statikusan, a fordító határozza meg, annak az osztálynak az elemzése alapján, amelyhez az objektum tartozik, és ellenőrzi a szükséges metóduskészlet megvalósítását, vagy dinamikusan, a futási környezet típusaira vonatkozó információk alapján.

Ez a megközelítés lehetővé teszi , hogy polimorf módon dolgozzon olyan objektumokkal , amelyek nincsenek kapcsolatban az öröklődési hierarchiában . Elég, ha ezek az objektumok mindegyike támogatja a szükséges metóduskészletet .

Egy másik közeli megközelítés az OCaml strukturális altípusa , ahol az objektumtípusok akkor kompatibilisek, ha metódusaláírásaik kompatibilisek , függetlenül a deklarált öröklődéstől, és mindezt a fordításkor ellenőrzik .

Problémák a hierarchikus gépeléssel

A kacsagépelés megoldja a hierarchikus gépelési problémákat , például:

A kacsagépelés gyakorlatilag nélkülözhetetlen az alkalmazott szkriptnyelvekben ("script"), ahol a programon kívüli dokumentumokkal (script) kell dolgozni (weboldalak, szöveges és táblázatos dokumentumok), amelyek objektumhierarchiája nem érhető el.

Kacsa gépelési nyelvek

A kacsagépelés a következő nyelveken is támogatott: Prolog , D , Perl , Smalltalk , Python , Objective-C , Ruby , JavaScript , TypeScript , Groovy , ColdFusion , Boo , Lua , Go , Scala .

Linkek