• Aucun résultat trouvé

9.1. DESCRIPTION CHAPITRE 9 PERLBOOT

9.1.20 Des chevaux de couleurs di fférentes

Des chevaux qui sont tous de la même couleur sont ennuyeux. Alors ajoutons une méthode ou deux afin de choisir la couleur.

## dans Animal sub couleur { $_[0]->{Couleur} } sub set_couleur { $_[0]->{Couleur} = $_[1]; }

Remarquez un autre moyen d’utiliser les arguments : $_[0] est utilisé directement plutôt que via un shift. (Cela écono- mise un tout petit peu de temps pour quelque chose qui peut être invoqué fréquemment.) Maintenant, on peut choisir la couleur de Mr. Ed :

my $parleur = Cheval->nomme("Mr. Ed"); $parleur->set_couleur("noir-et-blanc");

print $parleur->nom, " est de couleur ", $parleur->couleur, "\n"; qui donne :

Mr. Ed est de couleur noir-et-blanc

9.1.21

Résumé

Ainsi, maintenant nous avons des méthodes de classe, des constructeurs, des méthodes d’instances, des données d’ins- tances, et également des accesseurs. Mais cela n’est que le début de ce que Perl peut offrir. Nous n’avons pas non plus commencé à parler des accesseurs qui fonctionnent à la fois en lecture et en écriture, des destructeurs, de la notation d’objets indirects, des sous-classes qui ajoutent des données d’instances, des données de classe, de la surcharge, des tests « isa » et « can » de la classe UNIVERSAL, et ainsi de suite. C’est couvert par le reste de la documentation de Perl. En espérant que cela vous permette de démarrer, vraiment.

9.2

VOIR AUSSI

Pour plus d’informations, voir perlobj (pour tous les petits détails au sujet des objets Perl, maintenant que vous avez vu les bases), perltoot (le tutoriel pour ceux qui connaissent déjà les objets, la page de manuel perltooc (qui traite les classes de données), perlbot (pour les trucs et astuces), et des livres tels que l’excellent Object Oriented Perl de Damian Conway. Citons quelques modules qui sont digne d’intérêt Class::Accessor, Class::Class, Class::Contract, Class::Data::Inheritable, Class::MethodMaker et Tie::SecureHash

9.3

COPYRIGHT

Copyright (c) 1999, 2000 by Randal L. Schwartz and Stonehenge Consulting Services, Inc. Permission is hereby granted to distribute this document intact with the Perl distribution, and in accordance with the licenses of the Perl distribution; derived documents must include this copyright notice intact.

Portions of this text have been derived from Perl Training materials originally appearing in the Packages, References, Objects, and Modulescourse taught by instructors for Stonehenge Consulting Services, Inc. and used with permission. Portions of this text have been derived from materials originally appearing in Linux Magazine and used with permission.

9.4

TRADUCTION

9.4.1

Version

Cette traduction française correspond à la version anglaise distribuée avec perl 5.10.0. Pour en savoir plus concernant ces traductions, consultezhttp://perl.enstimac.fr/.

9.4.2

Traducteur

Paul Gaborit <Paul.Gaborit @ enstimac.fr> avec la participation de Gérard Robin <robin.jag@free.fr>.

9.4.3

Relecture

Chapitre 10

perltoot

Tutoriel orienté objet de Tom.

10.1

DESCRIPTION

La programmation orientée objet se vend bien de nos jours. Certains managers préféreraient même s’arrêter de respirer plutôt que de se passer d’objets. Pourquoi cela ? Qu’est-ce qu’un objet a de si particulier ? Et plus simplement, qu’est-ce qu’un objet ?

Un objet n’est rien de plus qu’une manière de cacher des comportements complexes derrière un petit ensemble clair et simple à utiliser. (C’est ce que les professeurs appellent l’abstraction.) De brillant programmeurs qui n’ont rien à faire si ce n’est de réfléchir pendant des semaines entières sur des problèmes vraiment difficiles créent, pour les résoudre, de chouettes objets que des gens normaux peuvent utiliser (C’est ce que les professeurs appellent la réutilisation de programmes). Les utilisateurs (en fait, des programmeurs) peuvent jouer comme ils veulent avec ces objets tout prêts, mais ils n’ont pas à les ouvrir et à mettre la pagaille à l’intérieur. C’est comme un équipement coûteux : le contrat spécifie que la garantie disparaît si vous ouvrez le capot. Donc ne le faîtes pas.

Le coeur des objets est la classe, un espace de nommage protégé et un peu privé contenant données et fonctions. Une classe est un ensemble de routines relatives à un même problème. Vous pouvez aussi la considérer comme un type défini par l’utilisateur. Le mécanisme de paquetage de Perl, qui est aussi utilisé pour des modules traditionnels, sert pour les modules de classe. Les objets « vivent » dans une classe ce qui signifie qu’ils appartiennent à un paquetage.

La plupart du temps, la classe fournit à l’utilisateur de petits trucs. Ces trucs sont des objets. Ils savent à quelle classe ils appartiennent et comment se comporter. Les utilisateurs demandent quelque chose à la classe comme « donne-moi un objet ». Ou ils peuvent demander à l’un de ces objets de faire quelque chose. Demander à une classe de faire quelque chose pour vous consiste à appeler une méthode de la classe. Demander à un objet de faire quelque chose pour vous consiste à appeler une méthode d’objet. Demander soit à une classe (le cas usuel), soit à un objet (parfois) de vous retourner un objet consiste à appeler un constructeur qui est simplement une sorte de méthode.

Bon d’accord, mais en quoi un objet est-il différent de n’importe quel autre type de donnée en Perl ? Qu’est ce qu’un objet réellement? Autrement dit, quel est son type de base ? La réponse à la première question est simple. Un objet n’a qu’une seule différence avec n’importe quel autre type de donnée en Perl : vous pouvez le déréférencer non seulement par une chaîne ou un nombre comme les tables de hachage ou les tableaux, mais aussi par des appels à des routines nommées. En un mot, les méthodes.

La réponse à la seconde question est que c’est une référence, mais pas n’importe quelle référence. Une référence qui a été bénie (blessed en anglais) par une classe particulière (lire: paquetage). Quel type de référence ? Bon, la réponse a cette question est un peu moins concrète, parce qu’en Perl, le concepteur de la classe peut utiliser n’importe quel type de référence. Ce peut être un scalaire, un tableau ou une table de hachage. Cela peut même être une référence à du code. Mais de par sa flexibilité inhérente, un objet est dans la plupart des cas une référence à une table de hachage.