Утиная типизация
Латентная, неявная или утиная типизация (калька с англ. Duck typing) — вид динамической типизации, применяемой в некоторых языках программирования (Smalltalk, Objective-C, Python, Ruby, Groovy, ColdFusion, Boo,C# ,C++ (для шаблонов)), когда границы использования объекта определяются его текущим набором методов и свойств, в противоположность наследованию от определённого класса. То есть считается, что объект реализует интерфейс, если он содержит все методы этого интерфейса, независимо от связей в иерархии наследования и принадлежности к какому-либо конкретному классу.
Название термина пошло от английского «duck test» («тест на утку»), который в оригинале звучит как:
- «If it walks like a duck and quacks like a duck, it must be a duck»
- («Если что-то ходит, как утка, и крякает, как утка, то это должно быть уткой»).
Утиная типизация решает такие проблемы иерархической типизации, как:
- невозможность явно указать (путем наследования) на совместимость интерфейса со всеми настоящими и будущими интерфейсами, с которыми он идейно совместим
- чрезмерное увеличение числа связей в иерархии типов при хотя бы частичной попытке это сделать.
Шаблоны в Си++ реализуют статическую форму неявной типизации. Различные итераторы, например, не обязаны наследоваться от общего класса, но могут быть использованы в единой манере, если реализуют соответствующие методы.
Другим близким подходом является структурные подтипы в OCaml, где типы объектов совместимы, если совместимы сигнатуры их методов, независимо от объявленного наследования, причём всё это проверяется во время компиляции программы.
Смотри также
Ссылки
- Утиная типизация в Python(англ.).
- Утиная типизация в Boo(англ.).
de:Duck-Typing en:Duck typing fa:تایپدهی اردکی fr:Duck typing gl:Tipado Pato it:Duck typing ja:ダック・タイピング ko:덕 타이핑 nl:Duck-typing pl:Duck typing zh:Duck typing
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....