Типаж (абстрактный тип)

Типаж (иногда — характеристика, трейт, англ. trait) — абстрактный тип данных, используемый как «простая концептуальная модель для структурирования объектно-ориентированных программ»[уточнить], аналог интерфейсов и примесей, но, в отличие от последних, содержит только методы. Также специфичны способом разрешения конфликтов — типажи не допускают совпадения названий методов. Первоначально концепция разработана в группе структурного проектирования программного обеспечения Бернского университета.

Являются основой языка Rust и встроены в язык Scala, в вариант Squeak языка Smalltalk включены с версии 3.9, введены в Perl 6 (где они называются «роли»; для Perl 5 — реализованы как модуль в Moose), также реализованы во фреймворке Joose для JavaScript. Также планируется включение типажей в ActionScript 3.0. Модульные примеси (module mixins) в Ruby в некоторой степени похож на типажи.

В некоторых языках программирования типажами называют типы, которые на самом деле являются примесями. Так, например, в PHP типажи могут содержать не только методы, но и свойства.

Пример на Rust для существующего типа, описывающего хеширование:

Реализация типажа Hash для какого-либо типа — примеры методов hash с соответствующей сигнатурой:

Источник: Википедия

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я