Ankkatyypitys

Ankkatyypitys (ducktyping) tietokoneohjelmoinnissa on sovellus ankkatestistä- "Jos se näyttää ankalta, ui niin kuin ankka ja vaakkuu kuin ankka, niin se on todennäköisesti ankka" -jolla voidaan määrittää, voidaanko oliota käyttää tiettyyn tarkoitukseen. Nimeämistyyppauksessa olio on annetun tyypin mukainen jos se on julistettu sellaiseksi (tai jos tyypin yhdistys olioon päätellään mekanismeilla, kuten periytymisellä). Ankkatyypityksessä olio on annetun tyypin mukainen jos sillä on kaikki kyseisen tyypin vaatimat metodit ja ominaisuudet. Olion varsinaisella tyypillä ei itsessään ole merkitystä, kunhan tyypin vaatimat metodit ja ominaisuudet täyttyvät. Tämän takia ankkatyypitys nähdään joskus ajattelutapana eikä varsinaisesti tyyppisysteeminä. Ankkatyypitystä voidaan tarkastella käyttöperusteisena rakenteellisena vastaavuutena annetun objektin ja tyypin vaatimusten välillä. 

Ankkatyypityksen etuna voidaan katsoa olevan ohjelmistokehityksen kätevyys, koska se vähentää miltein samanlaisten koodinpätkien käytön uudelleen monessa eri paikassa. Tämä tekee koodista luettavampaa sekä helpompaa korjata.

Esimerkki
Alla on yksinkertainen Python 3 esimerkki joka näyttää miten oliota voidaan käyttää missä tahansa kontekstissa, kunnes sitä käytetään tavalla mitä se ei enää tue.

class Duck:
    def swim(self):
        print("Ankka ui")

    def fly(self):
        print("Ankka lentää")

class Whale:
    def swim(self):
        print("Valas ui")

for animal in [Duck(), Whale()]:
    animal.swim()
    animal.fly()

Tulos:
Ankka ui
Ankka lentää
Valas ui
AttributeError: 'Whale' object has no attribute 'fly'

Jos oletamme, että kaikki oliot mitkä voivat uida ovat ankkoja, otaksumme valaan olevan ankka, mutta jos otaksumme olion kykenevän myös lentämään niin valas ei ole ankka.

Lähteet

Olio-ohjelmointi