Zum Inhalt springen

„Trait (Programmierung)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Keine Bearbeitungszusammenfassung
Zeile 55: Zeile 55:
* [[Kotlin (Programmiersprache)|Kotlin]]
* [[Kotlin (Programmiersprache)|Kotlin]]
* [[Perl (Programmiersprache)|Perl 5]] (''roles'', durch das Modul Moose)<ref>[http://metacpan.org/module/Moose::Role Moose::Role Dokumentation]</ref>
* [[Perl (Programmiersprache)|Perl 5]] (''roles'', durch das Modul Moose)<ref>[http://metacpan.org/module/Moose::Role Moose::Role Dokumentation]</ref>
* [[Perl (Programmiersprache)#Perl 6|Perl 6]] (auch dort ''roles'' genannt)<ref>{{Webarchiv|url=http://chris.prather.org/traits-vs-roles.md.html |wayback=20110921112151 |text=Perl 6: ''roles'' und ''traits'' |archiv-bot=2019-05-19 04:21:15 InternetArchiveBot }}</ref>
* [[Pharo (Programmiersprache)|Pharo Smalltalk]]
* [[Pharo (Programmiersprache)|Pharo Smalltalk]]
* [[PHP]] ab Version 5.4
* [[PHP]] ab Version 5.4
* [[Python (Programmiersprache)|Python]] (z.&nbsp;B. durch das Modul Traits<ref>[http://pypi.python.org/pypi/traits PyPI: traits 4.4.0]</ref>)
* [[Python (Programmiersprache)|Python]] (z.&nbsp;B. durch das Modul Traits<ref>[http://pypi.python.org/pypi/traits PyPI: traits 4.4.0]</ref>)
* [[Raku (Programmiersprache)|Raku]] (auch dort ''roles'' genannt)<ref>{{Webarchiv|url=http://chris.prather.org/traits-vs-roles.md.html |wayback=20110921112151 |text=Perl 6: ''roles'' und ''traits'' |archiv-bot=2019-05-19 04:21:15 InternetArchiveBot }}</ref>
* [[Rust (Programmiersprache)|Rust]]<ref>[https://doc.rust-lang.org/reference/items/traits.html Rust Reference Manual: ''Traits'']</ref>
* [[Rust (Programmiersprache)|Rust]]<ref>[https://doc.rust-lang.org/reference/items/traits.html Rust Reference Manual: ''Traits'']</ref>
* [[Scala (Programmiersprache)|Scala]]
* [[Scala (Programmiersprache)|Scala]]

Version vom 17. März 2020, 08:21 Uhr

Ein Trait ist ein Begriff aus der objektorientierten Programmierung und beschreibt eine wiederverwendbare Sammlung von Methoden und Attributen, ähnlich einer Klasse. Die Idee der Traits entspringt der Programmiersprache Self und findet mittlerweile in vielen modernen objektorientierten Sprachen Verwendung.

Die Verwendung von Traits erlaubt das horizontale Wiederverwenden einer Methodensammlung. Bei dem Prinzip der Mehrfachvererbung, das einige objektorientierte Programmiersprachen anbieten, ist das gleiche Vorgehen möglich; jedoch umgehen Traits (so wie auch Mixins) das Diamond-Problem, eine speziell durch die Mehrfachvererbung hervorgerufene Beziehungsproblematik unter verschiedenen Klassen.

Traits als besondere Variante der Mixins

Im Gegensatz zu einem Mixin sind Traits bei der Einbindung in andere Klassen sehr viel flexibler. So lassen sich einzelne Methoden eines Traits ausschließen oder durch eine andere ersetzen. Auch können mehrere Traits in eine Klasse inkludiert werden, wobei sich Namenskonflikte mit Hilfe von Aliasen lösen lassen, um die Verwendung gleichbenannter Methoden zu garantieren. Ein Trait kann dabei auch Methoden benutzen, die nur Teil der inkludierenden Klasse sind und nicht im Trait selbst definiert wurden. Gegenüber einem Mixin bietet ein Trait zudem die Möglichkeit, auch Klassenattribute zu definieren.[1]

Beispiele

PHP

In der Programmiersprache PHP können Traits ab der Version 5.4 benutzt werden:[2]

trait Hello
{
    public function sayHello()
    {
        echo 'Hello ';
    }
}

trait World
{
    public function sayWorld()
    {
        echo 'World';
    }
}

class HelloWorld
{
    use Hello, World;

    public function sayExclamationMark()
    {
        echo '!';
    }
}

$objHelloWorld = new HelloWorld;

$objHelloWorld->sayHello();

$objHelloWorld->sayWorld();

$objHelloWorld->sayExclamationMark();

Das obige Beispiel gibt „Hello World!“ aus.

Programmiersprachen, die Traits unterstützen

Einzelnachweise

  1. kingcrunch.de: PHP5.4: Traits aka „Horizontal Reuse“
  2. Einführung in Traits auf php.net
  3. Traits in Fortress (engl., PDF-Datei; 2,5 MB)
  4. Introducing Composure for Haxe (with Dependency Injection)
  5. Moose::Role Dokumentation
  6. PyPI: traits 4.4.0
  7. Perl 6: roles und traits (Memento des Originals vom 21. September 2011 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/chris.prather.org
  8. Rust Reference Manual: Traits