|
|
| Строка 1: |
Строка 1: |
| {{о|типаже (характеристике, трейте) в программировании|типаже в театре|сценический характер|других значения термина «характеристика»|характеристика}}
| |
| '''Типаж''' (иногда — ''трейт,'' черта/''особенность поведения'', нрав, от {{lang-en|trait}}) — [[абстрактный тип данных]], используемый как «простая концептуальная модель для структурирования [[Объектно-ориентированное программирование|объектно-ориентированных]] программ»<ref>{{Cite web |url=http://web.cecs.pdx.edu/~black/publications/TR_CSE_02-012.pdf |title=Источник |access-date=2009-08-04 |archive-date=2017-08-09 |archive-url=https://web.archive.org/web/20170809134035/http://web.cecs.pdx.edu/~black/publications/TR_CSE_02-012.pdf |deadlink=no }}</ref>{{Уточнить}}<!-- это не определение, а только характеристика…-->. Понятие появилось вследствие конфликтов при использовании [[Класс (программирование)|классов в ООП]] для наследования. Схож по решаемым проблемам при наследовании с [[Интерфейс (объектно-ориентированное программирование)|интерфейсами]] и [[Примесь (программирование)|примесями]] и, в отличие от которых, содержит только [[Метод (объектно-ориентированное программирование)|методы]]. Также специфичны способом разрешения конфликтов — типажи не допускают совпадения названий методов. Первоначально концепция разработана в группе структурного проектирования программного обеспечения [[Бернский университет|Бернского университета]]<ref>{{Cite web |url=http://scg.unibe.ch/cgi-bin/scgbib.cgi?query=nathanael+traits+composable+units+ecoop |title=SCG: SCG Bibliography<!-- Заголовок добавлен ботом --> |access-date=2009-08-04 |archive-date=2009-05-04 |archive-url=https://web.archive.org/web/20090504002137/http://scg.unibe.ch/cgi-bin/scgbib.cgi?query=nathanael+traits+composable+units+ecoop |deadlink=no }}</ref>.
| |
|
| |
|
| Являются основой языка [[Rust (язык программирования)|Rust]] и встроены в язык [[Scala (язык программирования)|Scala]]<ref>http://www.scala-lang.org/node/126 {{Wayback|url=http://www.scala-lang.org/node/126 |date=20090927080703 }} A Tour of Scala: Traits</ref>
| | '''Типаж''' (иногда — ''трейт,'' черта/''особенность поведения'', нрав, — [[абстрактный тип данных]], используемый как «простая концептуальная модель для структурирования [[Объектно-ориентированное программирование|объектно-ориентированных]] программ» |
| <ref>http://www.ibm.com/developerworks/java/library/j-scala04298.html {{Wayback|url=http://www.ibm.com/developerworks/java/library/j-scala04298.html |date=20090826151357 }} The busy Java developer’s guide to Scala: Of traits and behaviors</ref>, в вариант [[Squeak]] языка [[Smalltalk]] включены с версии 3.9, введены в [[Perl 6]] (где они называются «роли»; для Perl 5 — реализованы как модуль в [[Moose (Perl)|Moose]]), введены в язык [[C Sharp|C#]] 8.0 (где они называются интерфейсы с реализацией методов по умолчанию), также реализованы во фреймворке [[Joose]] для [[JavaScript]]. Также планируется включение типажей в [[ActionScript|ActionScript 3.0]]. Модульные примеси (''module mixins'') в [[Ruby]] в некоторой степени похож на типажи.
| |
|
| |
|
| В некоторых языках программирования типажами называют типы, которые на самом деле являются примесями. Так, например, в [[PHP]] типажи могут содержать не только методы, но и [[Свойства объекта|свойства]]<ref>{{Cite web|url=http://php.net/manual/ru/language.oop5.traits.php#language.oop5.traits.properties|title=PHP: Трейты - Manual|publisher=php.net|lang=ru|accessdate=2017-03-15|archive-date=2017-03-14|archive-url=https://web.archive.org/web/20170314202244/http://php.net/manual/ru/language.oop5.traits.php#language.oop5.traits.properties|deadlink=no}}</ref>.
| | Понятие появилось вследствие конфликтов при использовании [[Класс (программирование)|классов в ООП]] для наследования. Схож по решаемым проблемам при наследовании с [[Интерфейс (объектно-ориентированное программирование)|интерфейсами]] и [[Примесь (программирование)|примесями]] и, в отличие от которых, содержит только [[Метод (объектно-ориентированное программирование)|методы]]. Также специфичны способом разрешения конфликтов — типажи не допускают совпадения названий методов. |
|
| |
|
| Пример на [[Rust (язык программирования)|Rust]] для существующего типа, описывающего хеширование:
| | Являются основой языка [[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> |
|
| |
|
| == Примечания ==
| |
| {{примечания}}
| |
|
| |
| == Ссылки ==
| |
| * [http://www.iam.unibe.ch/~scg/Research/Traits/ Traits]
| |
| * [http://citeseer.ist.psu.edu/566972.html Traits: Composable Units of Behavior]
| |
|
| |
| {{rq|style}}
| |
|
| |
| {{Типы данных}}
| |
| {{rq|sources|refless|stub|topic=ИТ}}
| |
|
| |
|
| [[Категория:Типы данных]]
| |
| [[Категория:Структуры данных]] | | [[Категория:Структуры данных]] |
| [[Категория:Теория типов]]
| |
Типаж (иногда — трейт, черта/особенность поведения, нрав, — абстрактный тип данных, используемый как «простая концептуальная модель для структурирования объектно-ориентированных программ»
Понятие появилось вследствие конфликтов при использовании классов в ООП для наследования. Схож по решаемым проблемам при наследовании с интерфейсами и примесями и, в отличие от которых, содержит только методы. Также специфичны способом разрешения конфликтов — типажи не допускают совпадения названий методов.
Являются основой языка 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
}
}