Zum Inhalt springen

„Trait (Programmierung)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Lichtkind (Diskussion | Beiträge)
Deutsche Übersetzung hinzugefügt
 
(44 dazwischenliegende Versionen von 33 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Ein '''Trait''' ist ein Begriff aus der [[Objektorientierte Programmierung|objektorientierten Programmierung]] und beschreibt eine wiederverwendbare Sammlung von [[Methode (Programmierung)|Methoden]] und [[Attribut (Objekt)|Attributen]], ähnlich einer Klasse. Die Idee der Traits entspringen der [[Programmiersprache]] [[Self (Programmiersprache)|Self]] und finden mittlerweile in vielen modernen, objektorientierten Sprachen Verwendung.
Ein '''Trait''' (Deutsch: ''Eigenschaft'', ''Charakteristik'') ist ein Begriff aus der [[Objektorientierte Programmierung|objektorientierten Programmierung]] und beschreibt eine wiederverwendbare Sammlung von [[Methode (Programmierung)|Methoden]] und [[Attribut (Programmierung)|Attributen]], ähnlich einer [[Klasse_(Objektorientierung)|Klasse]]. Die Idee der Traits entspringt der [[Programmiersprache]] [[Self (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 [[Mixin|Mixins]]) das [[Diamond-Problem]], eine speziell durch die Mehrfachvererbung hervorgerufene Beziehungsproblematik unter verschiedenen Klassen.
__TOC__

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 als auch ''Mixins'') das [[Diamond-Problem]], eine speziell durch die Mehrfachvererbung hervorgerufene Beziehungsproblematik unter verschiedenen Klassen.


== Traits als besondere Variante der Mixins ==
== 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 [[Aliasing|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 eines Mixins bietet ein Trait zudem die Möglichkeit, auch [[Attribut (Objekt)|Klassenattribute]] zu definieren.<ref>[http://www.kingcrunch.de/blog/2011/08/01/php5-4-traits-aka-horizontal-reuse/ kingcrunch.de: PHP5.4: Traits aka “Horizontal Reuse”]</ref>
Traits sind bei der Einbindung in andere Klassen viel flexibler als [[Mixin]]s:<ref>[http://www.kingcrunch.de/blog/2011/08/01/php5-4-traits-aka-horizontal-reuse/ kingcrunch.de: PHP5.4: Traits aka „Horizontal Reuse“]</ref>
* einzelne Methoden eines Traits lassen sich ausschließen oder durch eine andere ersetzen
* mehrere Traits können in eine Klasse inkludiert werden, wobei sich Namenskonflikte (d.&nbsp;h. gleichbenannte Methoden) mit Hilfe von [[Aliasing|Aliasen]] lösen lassen.
* ein Trait kann Methoden benutzen, die nicht in ihm selbst definiert wurden, sondern in der inkludierenden Klasse.
* ein Trait bietet die Möglichkeit, auch Klassenattribute zu definieren.


== Beispiele ==
== Beispiele ==
=== PHP ===
=== PHP ===
In der Programmiersprache [[PHP]] können Traits ab der Version 5.4 benutzt werden<ref>[http://www.php.net/manual/en/language.oop5.traits.php Einführung in Traits auf php.net]</ref>:
In der Programmiersprache [[PHP]] können Traits ab der Version 5.4 benutzt werden:<ref>[http://www.php.net/manual/en/language.oop5.traits.php Einführung in Traits auf php.net]</ref>
<syntaxhighlight highlight="15" lang="php">
<syntaxhighlight highlight="19" lang="php">
trait Hello {
trait Hello
{
public function sayHello() {
public function sayHello()
{
echo 'Hello ';
echo 'Hello ';
}
}
}
}


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


class MyHelloWorld {
class HelloWorld
{
use Hello, World;
use Hello, World;


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


$o = new MyHelloWorld();
$objHelloWorld = new HelloWorld;

$o->sayHello();
$o->sayWorld();
$objHelloWorld->sayHello();

$o->sayExclamationMark();
$objHelloWorld->sayWorld();

$objHelloWorld->sayExclamationMark();
</syntaxhighlight>
</syntaxhighlight>


Das obige Beispiel gibt "Hello World!" aus.
Das obige Beispiel gibt „Hello World! aus.


== Programmiersprachen, die Traits unterstützen ==
== Programmiersprachen, die Traits unterstützen ==
* [[C++]] <ref>[http://dotnet-snippets.de/dns/einfaches-beispiel-fuer-traits-SID877.aspx Traits in C++]</ref>
* [[Curl (Programmiersprache)|Curl]]
* [[Curl (Programmiersprache)|Curl]]
* [[Fortress (Programmiersprache)|Fortress]]<ref>[http://www.cs.cmu.edu/~aldrich/FOOL/FOOLWOOD07/Allen-slides.pdf Traits in Fortress] (''engl., [[PDF]]-Format'')</ref>
* [[Fortress (Programmiersprache)|Fortress]]<ref>[http://www.cs.cmu.edu/~aldrich/FOOL/FOOLWOOD07/Allen-slides.pdf Traits in Fortress] (englisch, PDF-Datei; 2,5&nbsp;MB)</ref>
* [[Groovy|Groovy (ab Release 2.3)]]
* [[JavaScript]] Nur mit der Zusatzbibliothek traits.js möglich<ref>[http://traitsjs.org/ traitsjs.org - Traits für JavaScript]</ref>
* [[Haxe (Programmiersprache)|Haxe]] (mit der Zusatzbibliothek Composure möglich)<ref>[http://www.tbyrne.org/introducing-composure-for-haxe-with-dependency-injection Introducing Composure for Haxe (with Dependency Injection)]</ref>
* [[Perl#Perl 6|Perl 6]] (dort ''role'' genannt) <ref>[http://chris.prather.org/traits-vs-roles.md.html Perl 6: ''roles'' und ''traits'']</ref>
* [[JavaScript#Delegationsprinzipien|JavaScript Delegation – Funktionsobjekte als Rollen (Traits und Mixins)]]
* [[Kotlin (Programmiersprache)|Kotlin]]
* [[Perl (Programmiersprache)|Perl 5]] (''roles'', durch das Modul Moose)<ref>[http://metacpan.org/module/Moose::Role Moose::Role Dokumentation]</ref>
* [[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>)
* [[Self (Programmiersprache)|Self]]
* [[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>
* [[Scala (Programmiersprache)|Scala]]
* [[Scala (Programmiersprache)|Scala]]
* [[Self (Programmiersprache)|Self]]

== Weblinks ==
* [http://scg.unibe.ch/research/traits Traits: Composable Units of Behavior] Auswahl von Artikeln über Traits (englisch)


== Einzelnachweise ==
== Einzelnachweise ==
Zeile 56: Zeile 75:
[[Kategorie:Programmierung]]
[[Kategorie:Programmierung]]
[[Kategorie:Objektorientierte Programmierung]]
[[Kategorie:Objektorientierte Programmierung]]
[[Kategorie:Skriptsprache PHP]]
[[Kategorie:PHP]]

[[en:Trait (computer programming)]]
[[es:Trait]]
[[fr:Trait (type abstrait)]]
[[kk:Типаж]]
[[pl:Cecha (programowanie obiektowe)]]
[[ru:Типаж (абстрактный тип)]]

Aktuelle Version vom 28. August 2023, 19:28 Uhr

Ein Trait (Deutsch: Eigenschaft, Charakteristik) 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

[Bearbeiten | Quelltext bearbeiten]

Traits sind bei der Einbindung in andere Klassen viel flexibler als Mixins:[1]

  • einzelne Methoden eines Traits lassen sich ausschließen oder durch eine andere ersetzen
  • mehrere Traits können in eine Klasse inkludiert werden, wobei sich Namenskonflikte (d. h. gleichbenannte Methoden) mit Hilfe von Aliasen lösen lassen.
  • ein Trait kann Methoden benutzen, die nicht in ihm selbst definiert wurden, sondern in der inkludierenden Klasse.
  • ein Trait bietet die Möglichkeit, auch Klassenattribute zu definieren.

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

[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. kingcrunch.de: PHP5.4: Traits aka „Horizontal Reuse“
  2. Einführung in Traits auf php.net
  3. Traits in Fortress (englisch, 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