Ankan kirjoittaminen

Implisiittinen kirjoittaminen , piilevä kirjoittaminen tai ankkakirjoitus ( eng. Duck typing ) OOP-kielillä  - määrittää sen tosiasian, että objekti toteuttaa tietyn rajapinnan määrittelemättä tai perimättä tätä rajapintaa, vaan yksinkertaisesti toteuttamalla sen kaikki menetelmät .  

Otsikko

Termin nimi tulee englannin kielestä "duck test" (" duck test "), joka alkuperäisessä kuulostaa tältä:

Jos se näyttää ankalta, ui kuin ankka ja quacks kuin ankka, se on luultavasti ankka.

Alkuperäinen teksti  (englanniksi)[ näytäpiilottaa] Jos se näyttää ankalta, ui kuin ankka ja puostelee kuin ankka, se on luultavasti ankka.

Periaate

Objektin katsotaan toteuttavan rajapinnan , jos se sisältää kaikki kyseisen rajapinnan menetelmät riippumatta periytymishierarkian suhteista tai kuulumisesta johonkin tiettyyn luokkaan. Siten objektin käytön oikeellisuus tietyn rajapinnan arvona määräytyy joko staattisesti, kääntäjän toimesta, analysoimalla luokkaa, johon objekti kuuluu, ja tarkistamalla sen suorittaman vaaditun menetelmäjoukon toteutuksen, tai dynaamisesti ajonaikaisen ympäristön tyyppejä koskevien tietojen perusteella.

Tämän lähestymistavan avulla voit työskennellä polymorfisesti objektien kanssa , jotka eivät liity periytymishierarkiaan . Riittää, että kaikki nämä objektit tukevat vaadittua menetelmäjoukkoa .

Toinen läheinen lähestymistapa on rakenteellinen alatyypitys OCamlissa , jossa objektityypit ovat yhteensopivia, jos niiden menetelmä- allekirjoitukset ovat yhteensopivia , riippumatta ilmoitetusta periytymisestä, jotka kaikki tarkistetaan käännösvaiheessa .

Ongelmia hierarkkisessa kirjoittamisessa

Ankkakirjoitus ratkaisee hierarkkiset kirjoitusongelmat , kuten:

Ankkakirjoitus on käytännössä välttämätön sovelletuissa komentosarjakielissä ("skriptit"), joissa on työskenneltävä ohjelman ulkopuolisten asiakirjojen kanssa (skripti) (verkkosivut, teksti- ja taulukkoasiakirjat), joiden objektihierarkia ei ole käytettävissä.

Ankkakirjoituskielet

Ankkakirjoitusta tuetaan myös seuraavilla kielillä: Prolog , D , Perl , Smalltalk , Python , Objective-C , Ruby , JavaScript , TypeScript , Groovy , ColdFusion , Boo , Lua , Go , Scala .

Linkit