Trait (programmation)
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
[modifier | modifier le code]- 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
[modifier | modifier le code]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
[modifier | modifier le code]- (en) Rachid Guerraoui, ECOOP '99 : Object-Oriented Programming : 13th European Conference Lisbon, Portugal, June 14-18, 1999 Proceedings, Springer, (lire en ligne)
- (en) Harold S. Stone, 1986 proceedings, IEEE Computer Society Press, coll. « Association for Computing Machinery, IEEE Computer Society », (lire en ligne)
- (en) Peter Gutmann, Cryptographic Security Architecture : Design and Verification, Springer Science & Business Media, (lire en ligne)
- (en) G. Curry, L. Baer, D. Lipkie, and B. Lee, Traits : An approach to multiple-inheritance subclassing. In SIGOA conference on Office Information Systems, pages 1–9, Philadelphia, Pennsylvania, USA, ACM Press,
- (en) « Traits » : « traits are used to define object types by specifying the signature of the supported methods. »
- (en) « Traits » : « As of PHP 5.4.0, PHP implements a method of code reuse called Traits. »
- (en) « Traits » : « A trait is a language feature that tells the Rust compiler about functionality a type must provide. »
- (en) « fortran_proposals/20-109.txt at master · j3-fortran/fortran_proposals », sur GitHub (consulté le )