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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

В некоторых языках программирования типажами называют типы, которые на самом деле являются примесями. Так, например, в PHP типажи могут содержать не только методы, но и свойства[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
    }
}

Примечания[править | править код]

  1. http://web.cecs.pdx.edu/~black/publications/TR_CSE_02-012.pdf
  2. SCG: SCG Bibliography
  3. http://www.scala-lang.org/node/126 A Tour of Scala: Traits
  4. http://www.ibm.com/developerworks/java/library/j-scala04298.html The busy Java developer’s guide to Scala: Of traits and behaviors
  5. PHP: Трейты - Manual. php.net. Дата обращения 15 марта 2017.

Ссылки[править | править код]