Типаж (абстрактный тип): различия между версиями
Спасено источников — 5, отмечено мёртвыми — 0. Сообщить об ошибке. См. FAQ.) #IABot (v2.0.8.9 |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
'''Типаж''' (иногда — ''трейт,'' черта/''особенность поведения'', нрав, — [[абстрактный тип данных]], используемый как «простая концептуальная модель для структурирования [[Объектно-ориентированное программирование|объектно-ориентированных]] программ» | |||
Понятие появилось вследствие конфликтов при использовании [[Класс (программирование)|классов в ООП]] для наследования. Схож по решаемым проблемам при наследовании с [[Интерфейс (объектно-ориентированное программирование)|интерфейсами]] и [[Примесь (программирование)|примесями]] и, в отличие от которых, содержит только [[Метод (объектно-ориентированное программирование)|методы]]. Также специфичны способом разрешения конфликтов — типажи не допускают совпадения названий методов. | |||
Являются основой языка [[Rust (язык программирования)|Rust]] и встроены в язык [[Scala (язык программирования)|Scala]], в вариант [[Squeak]] языка [[Smalltalk]] включены с версии 3.9, введены в [[Perl]] 6 (где они называются «роли»; для Perl 5 — реализованы как модуль в [[Moose (Perl)|Moose]]), введены в язык [[C Sharp|C#]] 8.0 (где они называются интерфейсы с реализацией методов по умолчанию), также реализованы во фреймворке [[Joose]] для [[JavaScript]]. Также планируется включение типажей в [[ActionScript|ActionScript 3.0]]. | |||
В некоторых языках программирования типажами называют типы, которые на самом деле являются примесями. Так, например, в [[PHP]] типажи могут содержать не только методы, но и [[Свойства объекта|свойства]] | |||
Пример на [[Rust]] для существующего типа, описывающего хеширование: | |||
<syntaxhighlight lang="rust"> | <syntaxhighlight lang="rust"> | ||
trait Hash { | trait Hash { | ||
| Строка 29: | Строка 32: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Категория:Структуры данных]] | [[Категория:Структуры данных]] | ||
Текущая версия от 11:49, 19 октября 2022
Типаж (иногда — трейт, черта/особенность поведения, нрав, — абстрактный тип данных, используемый как «простая концептуальная модель для структурирования объектно-ориентированных программ»
Понятие появилось вследствие конфликтов при использовании классов в ООП для наследования. Схож по решаемым проблемам при наследовании с интерфейсами и примесями и, в отличие от которых, содержит только методы. Также специфичны способом разрешения конфликтов — типажи не допускают совпадения названий методов.
Являются основой языка Rust и встроены в язык Scala, в вариант Squeak языка Smalltalk включены с версии 3.9, введены в Perl 6 (где они называются «роли»; для Perl 5 — реализованы как модуль в Moose), введены в язык C# 8.0 (где они называются интерфейсы с реализацией методов по умолчанию), также реализованы во фреймворке Joose для JavaScript. Также планируется включение типажей в ActionScript 3.0.
В некоторых языках программирования типажами называют типы, которые на самом деле являются примесями. Так, например, в PHP типажи могут содержать не только методы, но и свойства
Пример на 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
}
}
