Trait

Ein Trait ist eine Gruppe von Methoden, die zusammen mit anderen Traits als Bausteine für Klassen dienen kann.

Die Klasse enthält dabei den nötigen "Glue Code" für das korrekte Zusammenspiel der Traits und definiert die Instanzvariablen. Traits selbst definieren keine Instanzvariable.

Ein Trait kann Methoden benötigen. Diese Methoden parametrisieren das Verhalten des Traits. Die benötigten Methoden können von einer Klasse oder von anderen Traits bereitgestellt werden.

Ein Trait stellt eine Menge von Methoden bereit, die das Verhalten von Objekten implementieren. Die bereitgestellten Methoden greifen nicht direkt auf Instanzvariable zu. Die Methoden verwenden dafür die oben erwähnten benötigten Methoden, bei denen es sich auch um Getter oder Setter handeln kann.

Traits können kombiniert werden. Die Kombination ist symmetrisch und Methoden mit Namenskonflikten werden aus der Kombination ausgeschlossen.

Bei der Verwendung eines Traits als Baustein für eine Klasse können Methoden weggelassen oder umbenannt werden, um Konflikte aufzulösen.


Quelle

Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, Andrew Black
"Traits: Composable Units of Behavior"
http://web.cecs.pdx.edu/~black/publications/TR_CSE_02-012.pdf