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].
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.
↑(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. »