Trait (programmation)

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Trait (type abstrait))
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Trait.

Un trait est une sous-classe abstraite, « simple modèle conceptuel pour structurer des programmes orientés objets ». Il contient des méthodes concrètes, et permet de les ajouter à 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[4].
  • Scala inclut cette fonctionnalité[5].
  • De même que PHP depuis sa version 5.4[6].
  • Les traits sont proposés pour inclusion dans Smalltalk.

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]

  1. (en) Rachid Guerraoui, ECOOP '99 - Object-Oriented Programming: 13th European Conference Lisbon, Portugal, June 14-18, 1999 Proceedings, Springer, (lire en ligne)
  2. (en) Harold S. Stone, 1986 proceedings, IEEE Computer Society Press, coll. « Association for Computing Machinery, IEEE Computer Society », (lire en ligne)
  3. (en) Peter Gutmann, Cryptographic Security Architecture: Design and Verification, Springer Science & Business Media, (lire en ligne)
  4. (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,
  5. (en) « Traits » : « traits are used to define object types by specifying the signature of the supported methods. »
  6. (en) « Traits » : « As of PHP 5.4.0, PHP implements a method of code reuse called Traits. »

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]