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

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

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

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

Пример на 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. . Дата обращения: 4 августа 2009. 9 августа 2017 года.
  2. . Дата обращения: 4 августа 2009. 4 мая 2009 года.
  3. от 27 сентября 2009 на Wayback Machine A Tour of Scala: Traits
  4. от 26 августа 2009 на Wayback Machine The busy Java developer’s guide to Scala: Of traits and behaviors
  5. . php.net. Дата обращения: 15 марта 2017. 14 марта 2017 года.

Ссылки

Источник —

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