Un trait est une sous-classe abstraite, un modèle conceptuel pour structurer des programmes orientés objets.

C'est un ensemble de méthodes concrètes ou fonctions, pouvant être ajouté à une classe pour étendre ses fonctionnalités.

Quand un langage de programmation supporte les traits, il permet la résolution explicite des conflits qui apparaissent quand une classe utilise deux traits qui ont des méthodes qui portent le même nom (contrairement aux mixins[1]).

Les traits ne sont pas des types abstraits car ils ne capturent pas l'essence de l'objet mais celle de ses propriétés et méthodes[2],[3].

Implémentations

  • Les traits proviennent du langage Self en 1982 vérifier][4].
  • Java inclut cette fonctionnalité depuis sa version 8 sortie en mars 2014 introduisant la fonctionnalité des méthodes par défaut.
  • Scala inclut cette fonctionnalité[5].
  • PHP les propose depuis sa version 5.4[6].
  • Rust propose cette fonctionnalité et l'utilise dans l'implémentation de sa bibliothèque standard[7].
  • C++: les propose dans la STL et Boost
  • Les traits sont proposés pour inclusion dans Smalltalk.
  • Les traits sont proposés pour inclusion dans Fortran 202Y[8], qui succédera à la norme Fortran 202X attendue en 2023.

Par ailleurs, les « mixins de module » de Ruby sont comparables aux traits dans une certaine mesure. De même, le rôle en Perl 6 est une fonctionnalité inspirée du concept de trait.

Exemple

L'exemple d'utilisation suivant en PHP montre une meilleure granularité des traits en comparaison d'un héritage multiple :

trait Hello {
    public function sayHello() {
        echo 'Hello ';
    }
}
 
trait World {
    public function sayWorld() {
        echo ' World';
    }
}
 
class MyHelloWorld {
    use Hello, World;
    public function sayExclamationMark() {
        echo '!';
    }
}
 
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();

Notes et références

Voir aussi

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.