Tastare implicită , tastare latentă sau tastare duck ( ing. Duck typing ) în limbaje OOP - determinând faptul că un obiect implementează o anumită interfață fără a specifica sau a moșteni în mod explicit această interfață, ci pur și simplu prin implementarea setului complet al metodelor sale .
Numele termenului provine din engleza „duck test” („ duck test ”), care în original sună astfel:
Dacă arată ca o rață, înoată ca o rață și șarlată ca o rață, atunci probabil că este o rață.
Text original (engleză)[ arataascunde] Dacă arată ca o rață, înoată ca o rață și șarlată ca o rață, atunci probabil că este o rață.Se consideră că un obiect implementează o interfață dacă conține toate metodele acelei interfețe, indiferent de relațiile din ierarhia moștenirii sau aparținând unei anumite clase. Astfel, corectitudinea utilizării unui obiect ca valoare a unei anumite interfețe este determinată fie static, de către compilator, pe baza analizei clasei căreia îi aparține obiectul și a verificării implementării setului necesar de metode de către acesta, fie dinamic, pe baza informațiilor despre tipurile de mediu de rulare.
Această abordare vă permite să lucrați polimorf cu obiecte care nu sunt legate într-o ierarhie de moștenire . Este suficient ca toate aceste obiecte să suporte setul necesar de metode .
O altă abordare apropiată este subtiparea structurală în OCaml , unde tipurile de obiecte sunt compatibile dacă semnăturile lor de metodă sunt compatibile , indiferent de moștenirea declarată, toate acestea fiind verificate în timpul compilării .
Tastarea cu rață rezolvă probleme de tastare ierarhică , cum ar fi:
Tastarea duck este practic indispensabilă în limbajele de scripting aplicate ("scripturi"), unde trebuie să lucrați cu documente externe programului (script) (pagini web, documente text și foi de calcul), a căror ierarhie de obiecte nu este disponibilă.
Tastarea cu rață este acceptată și în limbile: Prolog , D , Perl , Smalltalk , Python , Objective-C , Ruby , JavaScript , TypeScript , Groovy , ColdFusion , Boo , Lua , Go , Scala .