Утиная типизация
Материал из Википедии — свободной энциклопедии
Латентная, неявная или утиная типизация (калька с англ. Duck typing) — вид динамической типизации применяемой в некоторых языках программирования (Smalltalk, Python, Ruby, ColdFusion, Boo), когда значение переменой определяет то, что она может делать. То есть объект реализует интерфейс, если он содержит все методы этого интерфейса, независимо от связей в иерархии наследования.
Английское название ссылается на «утиный тест» — «If it walks like a duck and quacks like a duck, it must be a duck» («Если он ходит как утка и крякает, как утка, будем относиться к нему как к утке»).
Шаблоны в Си++ реализуют статическую форму неявной типизации. Различные итераторы, например, не обязаны наследоваться от общего класса, но могут быть использованы в единой манере, если реализуют соответствующие методы.
Другим близким подходом является структурные подтипы в OCaml, где типы объектов совместимы если совместимы сигнатуры их методов, независимо от объявленного наследования, причём всё это проверяется во время компиляции программы.