Типаж (иногда — трейт, черта/особенность поведения, нрав, от англ. trait) — абстрактный тип данных, используемый как «простая концептуальная модель для структурирования объектно-ориентированных программ»[1][уточнить]. Понятие появилось вследствие конфликтов при использовании классов в ООП для наследования. Схож по решаемым проблемам при наследовании с интерфейсами и примесями и, в отличие от которых, содержит только методы. Также специфичны способом разрешения конфликтов — типажи не допускают совпадения названий методов. Первоначально концепция разработана в группе структурного проектирования программного обеспечения Бернского университета[2].
Являются основой языка Rust и встроены в язык Scala[3][4], в вариант Squeak языка Smalltalk включены с версии 3.9, введены в Perl 6 (где они называются «роли»; для Perl 5 — реализованы как модуль в Moose), введены в язык C# 8.0 (где они называются интерфейсы с реализацией методов по умолчанию), также реализованы во фреймворке Joose для JavaScript. Также планируется включение типажей в ActionScript 3.0. Модульные примеси (module mixins) в Ruby в некоторой степени похож на типажи.
В некоторых языках программирования типажами называют типы, которые на самом деле являются примесями. Так, например, в PHP типажи могут содержать не только методы, но и свойства с константами(начиная с PHP 8.2)[5].
Пример на Rust для существующего типа, описывающего хеширование:
trait Hash {
fn hash(&self) -> u64;
}
Реализация типажа Hash для какого-либо типа — примеры методов hash с соответствующей сигнатурой:
impl Hash for bool {
fn hash(&self) -> u64 {
if *self { 0 } else { 1 }
}
}
impl Hash for i64 {
fn hash(&self) -> u64 {
*self as u64
}
}
Примечания
- ↑ Источник . Дата обращения: 4 августа 2009. Архивировано 9 августа 2017 года.
- ↑ SCG: SCG Bibliography . Дата обращения: 4 августа 2009. Архивировано 4 мая 2009 года.
- ↑ http://www.scala-lang.org/node/126 Архивная копия от 27 сентября 2009 на Wayback Machine A Tour of Scala: Traits
- ↑ http://www.ibm.com/developerworks/java/library/j-scala04298.html Архивная копия от 26 августа 2009 на Wayback Machine The busy Java developer’s guide to Scala: Of traits and behaviors
- ↑ PHP: Трейты - Manual . php.net. Дата обращения: 15 марта 2017. Архивировано 14 марта 2017 года.
Ссылки

Обычно почти сразу, изредка в течении часа.