630
La programmation orientée objet Cours et exercices en UML 2, avec Java 5, C# 2, C++, Python, PHP 5 et LINQ Hugues Bersini La programmation orientée objet Cours et exercices en UML 2 avec Java 5, C# 2, C++, Python, PHP 5 et LINQ

La programmation orientée objet - 4e édition : Cours et ...ressources.unisciel.fr/algoprog/s00aaroot/aa00module1/res/[Bersini... · techniques informatiques qui en sont dérivées,

Embed Size (px)

Citation preview

  • Lapproche objet est enseigne dans les universits ds les premiers niveaux des cursus informatiques, car sacomprhension est le prrequis indispensable toute pratique conome, fiable et lgante de la plupart destechniques informatiques qui en sont drives, depuis Java et Python, jusqu UML 2, en passant par C# et C++.Lobjet par la pratique avec Python, Java, C# et C++ et PHP 5 en UML 2Cette quatrime dition de louvrage Lorient objet dcortique lensemble des mcanismes de la programmation objet(classes et objets, interactions entre classes, envois de messages, encapsulation, hritage, polymorphisme, modlisation)en les illustrant dexemples empruntant aux technologies les plus populaires : Java et C#, C++, Python, PHP 5, UML 2, maisaussi les services web, RMI, les bases de donnes objet, diffrentes manires de rsoudre la mise en correspondance relationnel/objet par le langage innovant de requte objet LINQ et enfin les design patterns. Chaque chapitre est introduit parun dialogue vivant, la manire du matre et de llve, et se complte de nombreux exercices en UML 2, Java, Python, PHP 5, C# et C++.

    qui sadresse ce livre ? Ce livre sera lu avec profit par tous les tudiants de disciplines informatiques lies lapproche objet (programmation oriente

    objet, modlisation UML, Java, Python, PHP 5, C#/C++) et pourra tre utilis par leurs enseignants comme matriel de cours. Il est galement destin tous les dveloppeurs qui souhaitent approfondir leur comprhension des concepts objet sous-

    jacents au langage quils utilisent.

    Au sommairePrincipes de base : Lobjet, version passive, version active Notion de classe Interaction et hirarchie des objets Polymorphisme Hritage. La classe, module fonctionnel et oprationnel La classe garante de son bon usage Premier programme complet en Java, PHP 5 et Python, C# et C++. Du procdural lorient objet : Mise en pra-tique Analyse Conception. Les objets parlent aux objets : Envois de messages Association de classes Dpendance de classes. Collaboration entre classes : Compilation Java et effet domino En PHP 5, Python, C# et enC++ Association unidirectionnelle/bidirectionnelle Auto-association Assemblage. Mthodes ou messages :Passage darguments prdfinis dans les messages Arguments objets. Lencapsulation des attributs : Accs aux attri-buts dun objet. Les classes et leur jardin secret : Encapsulation des mthodes Niveaux intermdiaires dencapsu-lation viter leffet papillon. Vie et mort des objets : C++, ou le programmeur seul matre bord Java, PHP 5,Python et C#, ou la chasse au gaspi. UML : Reprsentation graphique standardise Diagrammes de classe et de squen-ce. Hritage Regroupement en superclasses Hritage des attributs Composition : Hritage des mthodes Encapsulation protected Hritage public en C++ Multihritage. Redfinition des mthodes : Un match de footballpolymorphique. Abstraite, cette classe est sans objet : De Canaletto Turner Abstraction syntaxique Supplment de polymorphisme. Clonage, comparaison et assignation dobjets : La classe Object galit, clonageet affectation dobjets en C++ et C#. Interfaces : Favoriser la dcomposition et la stabilit Java, PHP 5 et C# : inter-face via lhritage C++ : fichiers .h et .cpp. Distribution dobjets sur le rseau : RMI Corba Services web.Multithreading : Implmentation en Java, PHP 5, Python et C# Multithreading et diagrammes de squence UML Vers les applications distribues Des threads quirpartis et synchroniss. Programmation vnementielle : Desobjets qui sobservent En Java, PHP 5, Python et C#. Persistance dobjets : Sauvegarde sur fichier La srialisation Bases de donnes relationnelles et objet La bibliothque LINQ. Simulation dun flipper. Les graphes : Liste lie Gnricit en C++ et en Java, PHP 5 et Python Les design patterns.

    Le code source des exercices et leurs corrections sont fournis sur le site daccompagnement www.editions-eyrolles.com.

    Code

    dite

    ur :

    G124

    41

    ISBN

    : 97

    8-2-

    212-

    1244

    1-5

    H. B

    ersi

    ni

    Hugues Bersini Ingnieur physicien, directeur du Laboratoire dintelligence artificielle de lUniversit libre deBruxelles, Hugues Bersini enseigne linformatique et la programmation aux facults polytechniqueet Solvay de cette mme universit.Ivan Wellesz est dveloppeur Java indpendant et formateur Unix, C et Java chez Orsys. Il a travaill treize anschez Tektronix o il a particip la conception dinterfaces homme-machine et de systmes darmes DCN-BREST.

    Prog

    ram

    mat

    ion

    obje

    t

    35

    97

    82

    21

    21

    24

    41

    5

    La programmation

    orienteobjet

    Cours et exercices en UML 2,avec Java 5, C# 2, C++, Python, PHP 5 et LINQ

    Hugues Bersini

    La programmationoriente

    objetCours et exercices en UML 2

    avec Java 5, C# 2, C++, Python, PHP 5 et LINQ

    bersini 2008 25/11/08 12:26 Page 1

  • La programmationoriente

    objet

    bersini2008 titre 20/11/08 13:38 Page 1

  • Dans la mme collection

    c. Delannoy. Programmer en Java. Java 5 et 6. N12232, 5e dition, 2007, 800 pages avec CD-Rom.

    J.-B. Boichat. Apprendre Java et C++ en parallle. N 12403, 4e dition, 2008, 600 pages avec CD-Rom.

    a. tasso. Le livre de Java premier langage. Avec 80 exercices corrigs. N12376, 5e dition, 2008, 520 pages avec CD-Rom.

    c. DaBancourt. Apprendre programmer. Algorithmes et conception objet - BTS, Deug, IUT, licence N12350, 2e dition, 2008, 296.

    P. roques. UML 2 par la pratique. tude de cas et exercices corrigs. N12322, 6e dition, 2008, 368.

    a. tasso. Apprendre programmer en ActionScript 3. N12199, 2008, 438 pages.

    a. Brillant. XML. Cours et exercices. N12151, 2007, 282 pages.

    c. Delannoy. C++ pour les programmeurs C. N12231, 6e dition, 2007, 602 pages.

    c. soutou. UML 2 pour les bases de donnes. Avec 20 exercices corrigs. N12091, 2007, 314 pages.

    X Blanc, i. mounier. UML 2 pour les dveloppeurs. N12029, 2006, 202 pages

    h. sutter (trad. t. Petillon). Mieux programmer en C++ N09224, 2001, 215 pages.

    P. haggar (trad. t. thaureauX). Mieux programmer en Java N09171, 2000, 225 pages.

    chez le mme Diteur

    B. meyer. Conception et programmation orientes objet. N12270, 2008, 1222 pages (Collection Blanche).

    t. ziaD. Programmation Python. N11677, 2006, 530 pages (Collection Blanche).

    P. roques. UML 2. Modliser une application web. N11770, 2006, 236 pages (coll. Cahiers du programmeur).

    P. roques, F. Valle. UML 2 en action. De lanalyse des besoins la conception. N12104, 4e dition 2007, 382 pages.

    e. PuyBaret. Swing. N12019, 2007, 500 pages (coll. Cahiers du programmeur)

    e. PuyBaret. Java 1.4 et 5.0. N11916, 3e dition 2006, 400 pages (coll. Cahiers du programmeur)

    S Powers. Dbuter en JavaScript N12093, 2007, 386 pages

    T. temPlier, a. gougeon. JavaScript pour le Web 2.0 N12009, 2007, 492 pages

    J. zelDman. Design web : utiliser les standards, CSS et XHTML. N12026, 2e dition 2006, 444 pages.

    X. BriFFault, s. Ducasse. Programmation Squeak N11023, 2001, 328 pages.

    J.-L. BnarD, l. BossaVit , r.mDina , D. williams. LExtreme Programming, avec deux tudes de cas. N11051, 2002, 300 pages.

    P. rigauX, a. rochFelD. Trait de modlisation objet. N11035, 2002, 308 pages.

  • Hugues Bersini

    La programmationoriente

    objet

    bersini2008 titre 20/11/08 13:38 Page 2

  • DITIONS EYROLLES61, bd Saint-Germain75240 Paris Cedex 05

    www.editions-eyrolles.com

    Le code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment la photocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sest gnralise notamment dans les tablissements denseignement, provoquant une baisse brutale des achats de livres, au point que la possibilit mme pour les auteurs de crer des uvres nouvelles et de les faire diter correctement est aujourdhui menace.En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le

    prsent ouvrage, sur quelque support que ce soit, sans autorisation de lditeur ou du Centre Franais dExploitation du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris. Groupe Eyrolles, 2009, ISBN : 978-2-212-12441-5

    Cet ouvrage est la quatrime dition avec mise jour et changement de titre de louvrage de Hugues Bersini et Ivan Wellesz paru lorigine sous le titre LOrient objet (ISBN 978-2-212-12084-8)

  • Table des matires

    Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    Lorientation objet en deux mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    Objectifs de louvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    Plan de louvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    qui sadresse ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    CHAPITRE 1

    Principes de base : quel objet pour linformatique ? . . . . . . . . . . . . . . . . . . 9

    Le trio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    Stockage des objets en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    Lobjet dans sa version passive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    Lobjet dans sa version active . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    Introduction la notion de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    Des objets en interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    Des objets soumis une hirarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    Polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    Hritage bien reu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    CHAPITRE 2

    Un objet sans classe na pas de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    Constitution dune classe dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    La classe comme module fonctionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    La classe comme garante de son bon usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    La classe comme module oprationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    Bersini 4e.book Page V Mardi, 2. dcembre 2008 7:58 07

  • Lorient objetVI

    Un premier petit programme complet dans les cinq langages . . . . . . . . . . . . . . . . 39La classe et la logistique de dveloppement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    CHAPITRE 3

    Du faire savoir au savoir-faire du procdural lOO . . . . . . . . . . . . . . . . 57

    Objectif objet : les aventures de lOO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Impacts de lorientation objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    CHAPITRE 4

    Ici Londres : les objets parlent aux objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    Envois de messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Association de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Dpendance de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Raction en chane de messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    CHAPITRE 5

    Collaboration entre classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    Pour en finir avec la lutte des classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74La compilation Java : effet domino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76En C#, en Python, PHP 5 et en C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77De lassociation unidirectionnelle lassociation bidirectionnelle . . . . . . . . . . . . . 79Auto-association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82Package et namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    CHAPITRE 6

    Mthodes ou messages ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

    Passage darguments prdfinis dans les messages . . . . . . . . . . . . . . . . . . . . . . . . . 88Passage dargument objet dans les messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95Une mthode est-elle doffice un message ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102La mondialisation des messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

    Bersini 4e.book Page VI Mardi, 2. dcembre 2008 7:58 07

  • Table des matiresVII

    CHAPITRE 7

    Lencapsulation des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

    Accs aux attributs dun objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Encapsulation : pourquoi faire ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

    CHAPITRE 8

    Les classes et leur jardin secret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

    Encapsulation des mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Les niveaux intermdiaires dencapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Afin dviter leffet papillon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    CHAPITRE 9

    Vie et mort des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

    Question de mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136C++ : le programmeur est le seul matre bord . . . . . . . . . . . . . . . . . . . . . . . . . . . 145En Java, C#, Python et PHP 5 : la chasse au gaspi . . . . . . . . . . . . . . . . . . . . . . . . . 148Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

    CHAPITRE 10

    UML 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

    Diagrammes UML 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161Reprsentation graphique standardise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162Du tableau noir lordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Programmer par cycles courts en superposant les diagrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164Diagrammes de classe et diagrammes de squence . . . . . . . . . . . . . . . . . . . . . . . . 165Diagramme de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165Les bienfaits dUML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Diagramme de squence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

    CHAPITRE 11

    Hritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

    Comment regrouper les classes dans des superclasses . . . . . . . . . . . . . . . . . . . . . . 212Hritage des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    Bersini 4e.book Page VII Mardi, 2. dcembre 2008 7:58 07

  • Lorient objetVIII

    Hritage ou composition ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

    conomiser en rajoutant des classes ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

    Hritage des mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

    La recherche des mthodes dans la hirarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

    Encapsulation protected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

    Hritage et constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

    Hritage public en C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

    Le multihritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

    Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

    CHAPITRE 12

    Redfinition des mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

    La redfinition des mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

    Beaucoup de verbiage mais peu dactes vritables . . . . . . . . . . . . . . . . . . . . . . . . . 255

    Un match de football polymorphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

    Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

    CHAPITRE 13

    Abstraite, cette classe est sans objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

    De Canaletto Turner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

    Des classes sans objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

    Du principe de labstraction labstraction syntaxique . . . . . . . . . . . . . . . . . . . . . 301

    Un petit supplment de polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

    Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

    CHAPITRE 14

    Clonage, comparaison et assignation dobjets . . . . . . . . . . . . . . . . . . . . . . . . 325

    Introduction la classe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

    Dcortiquons la classe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

    Test dgalit de deux objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

    Le clonage dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

    galit et clonage dobjets en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

    galit et clonage dobjets en PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

    galit, clonage et affectation dobjets en C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

    En C#, un cocktail de Java et de C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

    Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

    Bersini 4e.book Page VIII Mardi, 2. dcembre 2008 7:58 07

  • Table des matiresIX

    CHAPITRE 15

    Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

    Interfaces : favoriser la dcomposition et la stabilit . . . . . . . . . . . . . . . . . . . . . . . 363Java, C# et PHP 5 : interface via lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Les trois raisons dtre des interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364Les Interfaces dans UML 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378En C++ : fichiers .h et fichiers .cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379Interfaces : du local Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

    CHAPITRE 16

    Distribution gratuite dobjets : pour services rendus sur le rseau . . . . . 387

    Objets distribus sur le rseau : pourquoi ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388RMI (Remote Method Invocation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391Corba (Common Object Request Broker Architecture) . . . . . . . . . . . . . . . . . . . . . 397Rajoutons un peu de flexibilit tout cela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404Les services Web sur .Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

    CHAPITRE 17

    Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

    Informatique squentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427Implmentation en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428Implmentation en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430Implmentation en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433Limpact du multithreading sur les diagrammes de squence UML . . . . . . . . . . . 434Du multithreading aux applications distribues . . . . . . . . . . . . . . . . . . . . . . . . . . . 435Des threads quirpartis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435Synchroniser les threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445

    CHAPITRE 18

    Programmation vnementielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

    Des objets qui sobservent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450En Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451En C# : les dlgus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454

    Bersini 4e.book Page IX Mardi, 2. dcembre 2008 7:58 07

  • Lorient objetX

    En Python : tout reste faire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462Un feu de signalisation plus raliste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

    CHAPITRE 19

    Persistance dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

    Sauvegarder ltat entre deux excutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470Simple sauvegarde sur fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471Sauvegarder les objets sans les dnaturer : la srialisation . . . . . . . . . . . . . . . . . . . 478Les bases de donnes relationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483Rservation de places de spectacles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495Les bases de donnes relationnelles-objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Les bases de donnes orientes objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Linq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

    CHAPITRE 20

    Et si on faisait un petit flipper ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511

    Gnralits sur le flipper et les GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513Retour au Flipper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522

    CHAPITRE 21

    Les graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

    Le monde regorge de rseaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536Tout dabord : juste un ensemble dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538Liste lie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539La gnricit en C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546La gnricit en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549Passons aux graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560

    CHAPITRE 22

    Petites chimie et biologie OO amusantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565

    Pourquoi de la chimie OO ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566Les diagrammes de classe du racteur chimique . . . . . . . . . . . . . . . . . . . . . . . . . . 567Quelques rsultats du simulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581La simulation immunologique en OO ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583

    Bersini 4e.book Page X Mardi, 2. dcembre 2008 7:58 07

  • Table des matiresXI

    CHAPITRE 23

    Design patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589

    Introduction aux design patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590Les patterns truc et ficelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592Les patterns qui se jettent lOO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599

    Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

    Bersini 4e.book Page XI Mardi, 2. dcembre 2008 7:58 07

  • Bersini 4e.book Page XII Mardi, 2. dcembre 2008 7:58 07

  • Avant-propos

    Dans les tout dbuts de linformatique, le fonctionnement intime des processeurs dcidait toujours, en finde compte, de la seule manire efficace de programmer un ordinateur. Alors que lon acceptait tout pro-gramme comme une suite logique dinstructions, il tait admis que lorganisation du programme et la naturemme de ces instructions ne pouvaient sloigner de la faon dont le processeur les excutait : pour lessentiel,des modifications de donnes mmorises, des dplacements de ces donnes dun emplacement mmoire unautre, et des oprations darithmtique et de logique lmentaire.

    La mise au point dalgorithmes complexes, dpassant les simples oprations mathmatiques et les simplesoprations de stockage et de rcuprations de donnes, obligea les informaticiens effectuer un premier sautdans labstrait, en inventant un style de langage dit procdural, auquel appartiennent les langages Fortran,Cobol, Basic, Pascal, C... Ces langages permettaient ces informaticiens de prendre quelques distances parrapport au fonctionnement intime des processeurs (en ne travaillant plus directement partir des adressesmmoire et en vitant la manipulation directe des instructions lmentaires) et dlaborer une criture deprogrammes plus proches de la manire naturelle de poser et de rsoudre les problmes. Les codes critsdans ces langages devenant indpendants en cela des instructions lmentaires propres chaque type deprocesseur. Ces langages cherchaient se positionner quelque part entre lcriture des instructions lmen-taires et lutilisation tant du langage naturel que du sens commun. Il est incontestablement plus simpledcrire : c = a + b quune suite dinstructions telles que : "load a, reg1", "load b, reg2", "add reg3,reg1, reg2", "move c, reg3", ayant pourtant la mme finalit. Une opration de traduction automatique,dite de compilation, se charge alors de traduire le programme, crit au dpart dans ce nouveau langage, dansles instructions lmentaires, seules comprises par le processeur. Cette monte en abstraction permise parces langages de programmation prsente un double avantage : une facilitation dcriture et de rsolutionalgorithmique, ainsi quune indpendance accrue par rapport aux diffrents types de processeur existantaujourdhui sur le march.

    Plus les problmes affronter gagnaient en complexit comptabilit, jeux automatiques, comprhension ettraduction des langues naturelles, aide la dcision, bureautique, conception et enseignement assists, pro-grammes graphiques, etc. , plus larchitecture et le fonctionnement des processeurs semblaient contraignants, etplus il devenait vital dinventer des mcanismes informatiques simples mettre en uvre, permettant unerduction de cette complexit et un rapprochement encore plus marqu de lcriture des programmes desmanires humaines de poser et de rsoudre les problmes.

    Avec lintelligence artificielle, linformatique sinspira de notre mode cognitif dorganisation des connaissances,comme un ensemble dobjets conceptuels entrant dans un rseau de dpendance et se structurant de maniretaxonomique. Avec la systmique ou la bioinformatique, linformatique nous rvla quun ensemble dagentsau fonctionnement lmentaire, mais sinfluenant mutuellement, peut produire un comportement mergentdune surprenante complexit. La complexit affiche par le comportement dun systme observ dans sa

    Bersini 4e.book Page 1 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet2

    globalit ne tmoigne pas systmatiquement dune complexit quivalente lorsque lattention est porte surchacune des parties composant ce systme et prise isolment. Ds lors, pour comprendre jusqu reproduire cecomportement par le biais informatique, la meilleure approche consiste en une dcoupe adquate du systmeen ses parties et une attention limite au fonctionnement de chacune dentre elle.

    Tout cela mis ensemble : la ncessaire distanciation par rapport au fonctionnement du processeur, lavolont de rapprocher la programmation du mode cognitif de rsolution de problme, les perces de lintel-ligence artificielle et de la bio-informatique, le dcoupage comme voie de simplification des systmes appa-rement complexes, conduisit graduellement un deuxime style de langage de programmation, un tout petitpeu plus rcent, bien que ftant ses 45 ans dexistence (lantiquit lchelle informatique) : les langagesorients objets, tels Simula, Smalltalk, C++, Eiffel, Java, C#, Delphi, Power Builder, Python et biendautres...

    Lorientation objet en deux mots la diffrence de la programmation procdurale, un programme crit dans un langage objet rpartit leffort dersolution de problmes sur un ensemble dobjets collaborant par envoi de messages. Chaque objet se dcritpar un ensemble dattributs (partie statique) et un ensemble de mthodes portant sur ces attributs (partie dyna-mique). Certains de ces attributs tant ladresse des objets avec lesquels les premiers collaborent, il leur estpossible de dlguer certaines des tches leurs collaborateurs. Le tout sopre en respectant un principe dedistribution des responsabilits on ne peut plus simple, chaque objet soccupant de ses propres attributs.Lorsquun objet exige de sinformer ou de modifier les attributs dun autre, il charge cet autre de sacquitter decette tche. Cette programmation est fondamentalement distribue, modularise et dcentralise. Pour autantquelle respecte galement des principes de confinement et daccs limit (dit dencapsulation) que nousdcrirons dans louvrage, cette rpartition modulaire a galement linsigne avantage de favoriser la stabilitdes dveloppements, en restreignant au maximum limpact de modifications apportes au code au cours dutemps. Ces impacts seront limits aux seuls objets quils concernent et aucun de leurs collaborateurs, mmesi le comportement de ces derniers dpend en partie des fonctionnalits affectes.

    Ces amliorations, rsultant de la prise de conscience des problmes poss par lindustrie du logiciel ces der-nires annes, complexit accrue et stabilit dgrade, ont enrichi la syntaxe des langages objet.. Un autremcanisme de modularisation inhrent lorient objet est lhritage qui permet la programmation de refl-ter lorganisation taxonomique de notre connaissance en une hirarchie de concepts du plus au moins gnral. nouveau, cette organisation modulaire en objets gnriques et plus spcialistes est lorigine dune simpli-fication de la programmation, dune conomie dcriture et de la cration de zone de code aux modificationsconfines. Tant cet hritage que la rpartition des tches entre les objets permet, tout la fois, une dcompo-sition plus naturelle des problmes,une rutilisation facilite des codes dj existants, et une maintenance faci-lite et allge de ces derniers. Lorientation objet simpose, non pas comme une panace universelle, maisune volution naturelle, au dpart de la programmation procdurale, qui facilite lcriture de programmes, lesrendant plus grables, plus comprhensibles, plus stables et rexploitables.

    Lorient objet inscrit la programmation dans une dmarche somme toute trs classique pour affronter lacomplexit de quelque problme qui soit : une dcoupe naturelle et intuitive en des parties plus simples. Afortiori, cette dcoupe sera dautant plus intuitive quelle sinspire de notre manire cognitive de dcou-per la ralit qui nous entoure. Lhritage, reflet fidle de notre organisation cognitive, en est le tmoignagele plus clatant. Lapproche procdurale rendait cette dcoupe moins naturelle, plus force . Si de nom-breux adeptes de la programmation procdurale sont en effet conscients quune manire incontournable de

    Bersini 4e.book Page 2 Mardi, 2. dcembre 2008 7:58 07

  • Avant-propos3

    simplifier le dveloppement dun programme complexe est de le dcouper physiquement, ils souffrent delabsence dune prise en compte naturelle et syntaxique de cette dcoupe dans les langages de program-mation utiliss. Dans un programme imposant, lOO permet de tracer les pointills que les ciseaux doiventsuivre l o il semble le plus naturel de les tracer : au niveau du cou, des paules ou de la ceinture, et nonpas au niveau des sourcils, des biceps ou des mollets. De surcrot, cette pratique de la programmation incite cette dcoupe suivant deux dimensions orthogonales : horizontalement, les classes se dlguant mutuelle-ment un ensemble de services, verticalement, les classes hritant entre elles dattributs et de mthodes ins-talls diffrents niveaux dune hirarchie taxonomique. Pour chacune de ces dimensions, reproduisantfidlement nos mcanismes cognitifs de conceptualisation, en plus de simplifier lcriture des codes, il estimportant de faciliter la rcupration de ces parties dans de nouveaux contextes et dassurer la robustesse deces parties aux changements survenus dans dautres. Un code OO, idalement, sera aussi simple crerqu maintenir, rcuprer et faire voluer.

    Il est parfaitement inconsquent dopposer le procdural lOO car, in fine, toute programmation des mtho-des (cest--dire la partie active des classes et des objets) reste totalement tributaire des mcanismes proc-duraux. On y rencontre des variables, des arguments, des boucles, des arguments de fonction, des instructionsconditionnelles, tout ce que lon trouve classiquement dans les botes outils procdurales. LOO ne permeten rien de faire lconomie du procdural, simplement, il complmente celui-ci, en lui superposant un systmede dcoupe plus naturel et facile mettre en uvre. Il nest gure surprenant que la plupart des langages pro-cduraux comme le C, Cobol ou, plus rcemment, PHP, se soient relativement aisment enrichi dune couchedite OO sans que cette addition ne remette srieusement en question lexistant procdural. Cependant,limpact de cette couche additionnelle ne se limite pas quelques structures de donnes supplmentaires afinde mieux organiser les informations manipules par le programme. Il va bien au-del. Cest toute une manirede concevoir un programme et la rpartition de ses parties fonctionnelles qui est en jeu. Les fonctions et lesdonnes ne sont plus dun seul tenant mais clates en un ensemble de modules reprenant, chacun, une sous-partie de ces donnes et les seules fonctions qui les manipulent. Il faut rapprendre programmer ensessayant au dveloppement dune succession de micro-programmes et au couplage soign et rduit au mini-mum de ces micro-programmes. En substance, la programmation OO pourrait reprendre son compte ce slo-gan devenu trs clbre parmi les adeptes des courants altermondialistes : agir localement, penserglobalement . Se pose alors la question de stratgie pdagogique, question trs controverse dans lenseigne-ment de linformatique aujourdhui, sur lordre chronologique donner au procdural et lOO. De nom-breux enseignants de la programmation, soutenus en cela par de trs nombreux manuels de programmation,considrent quil faut dabord passer par un enseignement intensif et une matrise parfaite du procdural,avant de faire le grand saut vers lOO. Quinze annes denseignement de la programmation des tudiants detout ge et de toute condition (de 7 77 ans, issus des sciences humaines ou exactes) nous ont convaincu quilny a aucun ordre donner. De mme quhistoriquement, lOO est n quasiment en mme temps que le pro-cdural et en complment de celui-ci, lOO doit senseigner conjointement et en complment du procdural.Il faut enseigner les instructions de contrle en mme temps que la dcoupe en classe. Tout comme un coursde cuisine sattardant sur quelques ingrdients culinaires trs particulier paralllement la manire dont cesingrdients doivent sharmoniser, ou un cours de mcanique automobile se focalisant sur quelques pices oumcanismes en particulier en mme temps que le plan et le fonctionnement densemble, lenseignement de laprogrammation doit mlanger loisir la perception micro des mcanismes procduraux la vision macro de la dcoupe en objets. Aujourdhui, tout projet informatique de dimension consquente dbutepar une analyse des diffrentes classes qui le constituent. Il faut aborder lenseignement de la programmationtout comme dbute la prise en charge de ce type de projet, en enseignant au plus vite la manire dont ces classeset les objets qui en rsultent oprent lintrieur dun programme.

    Bersini 4e.book Page 3 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet4

    Lorient objet sest trouv lorigine ces dernires annes, comptition oblige, dune explosion de technolo-gies diffrentes, mais toutes intgrant leur manire les mcanismes de base de lOO : classes, objets, envoisde messages, hritage, encapsulation, polymorphisme... Ainsi sont apparus une multitude de langages de pro-grammation, qui intgrent ces mcanismes de base leur manire, partir dune syntaxe dont les diffrencessont soit purement cosmtiques, soit lgrement plus subtiles. Ils sont autant de variations sur le ou les thmescrs par leurs trois principaux prcurseurs : Simula, Smalltalk et C++.

    LOO a galement permis de repenser trois des chapitres les plus important de linformatique de ces deux der-nires dcennies. Tout dabord, le besoin dune mthode de modlisation graphique dbouchant sur un niveaudabstraction encore supplmentaire (on ne programme plus, on dessine un ensemble de diagrammes, le codetant gnr automatiquement partir de ceux-ci) (rle jou par UML 2) ; ensuite, les applications informati-ques distribues (on ne parlera plus dapplications distribues mais dobjets distribus, et non plus dappelsdistants de procdures mais denvoi de messages travers le rseau) ; enfin, le stockage des donnes qui doitmaintenant compter avec les objets. Chaque fois, plus quun changement de vocabulaire, un changement dementalit sinon de culture simpose.

    Aujourdhui, force est de constater que lOO constitue un sujet dune grande attractivit pour tous lesacteurs de linformatique. Microsoft a dvelopp un nouveau langage informatique purement objet, C#, atrs intensment contribu au dveloppement dun systme dinformatique distribue, bas sur des envoisde messages dordinateur ordinateur, les services web, et a plus rcemment propos un nouveau langagedinterrogation des objets, LINQ, qui sinterface naturellement avec le monde relationnel et le mondeXML. Tous les langages informatiques intgrs dans sa nouvelle plate-forme de dveloppement, VisualStudio .Net (aux dernires nouvelles, ils seraient 22), visent une uniformisation (y compris les nouvellesversions de Visual Basic et Visual C++) en intgrant les mmes briques de base de lOO. Aboutissementconsidrable sil en est, il devient trs simple de faire communiquer ou hriter entre elles des classes critesdans des langages diffrents. Quelques annes auparavant, Sun avait cr Java,une cration dterminantecar lorigine de ce nouvel engouement pour une manire de programmer qui pourtant existait depuis tou-jours sans que les informaticiens dans leur ensemble en reconaissent lutilit et la pertinence. Depuis, enpartant de son langage de prdilection, Sun cr RMI, Jini, et sa propre version des services Web, tousbass sur les technologies OO. Ces mmes services Web font lobjet de dveloppements tout autant aboutischez HP ou IBM. la croise de Java et du Web, originellement, la raison sinon du dveloppement de Javadu moins de son succs, on dcouvre une importante panoplie doutils de dveloppement et de conceptionde sites Web dynamiques.

    IBM et Borland, en rachetant respectivement Rational et Together, mnent la danse en matire doutil dana-lyse du dveloppement logiciel, avec la mise au point de puissants environnements UML, technologie OOcomme il se doit. Au dpart de dveloppements chez IBM (qui soutient et parie sur Java plus encore que SUNne le fait), la plate-forme logicielle Eclipse est sans doute, ce jour, laventure Open Source la plus aboutie enmatire dOO. Comme environnement de dveloppement Java, Eclipse est aujourdhui le plus pris et le plususit et gagne son pari dclipser tous les autres. Borland a rendu Together intgrable tant dans Visual Stu-dio.Net que dans Eclipse comme outil de modlisation UML synchronisant au mieux et au plus la program-mation et la ralisation des diagrammes UML. Enfin, lOMG, organisme de standardisation du mondelogiciel, na pas comme lettre initiale de son acronyme la lettre O pour rien. UML et Corba sont ses premiresproductions : la version OO de lanalyse logicielle et la version OO de linformatique distribue. Cet orga-nisme plaide de plus en plus pour un dveloppement informatique dtach des langages de programmationainsi que des plates-formes matrielles, par lutilisation intensive des diagrammes UML. Au dpart de cesmmes diagrammes, les codes seraient gnrs automatiquement dans un langage choisi et en adquation avec

    Bersini 4e.book Page 4 Mardi, 2. dcembre 2008 7:58 07

  • Avant-propos5

    la technologie voulue. Par le nouveau saut dans labstraction quil autorise, UML se profilerait comme le lan-gage de programmation de demain. Il jouerait ce titre le mme rle que jourent les langages de programma-tion au temps de leur apparition, en relguant ceux-ci la mme place que le langage assembleur auquel ils sesont substitus jadis : un pur produit de traduction automatise. Au mme titre quUnix pour les dveloppe-ments en matire de systme dexploitation, lOO donc apparat comme le point dorgue et de convergence dece qui se fait de plus rcent en matire de langages et doutils de programmation.

    Objectifs de louvrageToute pratique conome, fiable et lgante de Java, C++, C#, Python, .Net ou UML requiert, pour dbuter, unebonne matrise des mcanismes de base de lOO. Et, pour y pourvoir, rien de mieux que dexprimenter lestechnologies OO dans ces diffrentes versions, comme un bon conducteur qui se sera frott plusieurs typesde vhicule, un bon skieur plusieurs styles de ski et un guitariste plusieurs modles de guitare.

    Plutt quun voyage en profondeur dans lun ou lautre de ces multiples territoires, ce livre vous proposedexplorer plusieurs dentre eux, mais en tentant chaque fois de dvoiler ce quils reclent de commun. Carce sont ces ressemblances qui constituent en dernier ressort les briques fondamentales de lOO, matire debase, qui se devrait de perdurer encore de nombreuses annes, y compris sous de nouveaux dguisements.Nous pensons que la mise en parallle de C++, de Java, C#, Python, PHP 5 et UML est une voie privilgiepour lextraction de ces mcanismes de base.

    Il nous a paru pour cette raison indispensable de discuter et comparer la faon dont ces cinq langages de pro-grammation grent, par exemple, loccupation mmoire par les objets ou leur manire dimplmenter le poly-morphisme, pour en comprendre, in fine, toute la problmatique et les subtilits indpendamment de lune oulautre implmentation. Rajoutez une couche dabstraction, ainsi que le permet UML, et cette comprhensionne pourra sen trouver que renforce. Chacun de ces cinq langages offrent des particularits amenant les pra-ticiens de lun ou lautre le prtendre mordicus suprieur aux autres : la puissance du C++, la compatibilitWindows et lintgration XML de C#, lanti-Microsoft et le leadership de Java en matire de dveloppementWeb, les vertus pdagogiques et laspect scripting de Python, le succs incontestable de PHP 5 pour lamise en place de solution Web dynamique et capable de sinterfacer aisment avec les bases de donnes. Nousnous dsintresserons ici compltement de ces guerres de religion (qui partagent avec les guerres de langagesinformatiques pas mal dirrationalit), a fortiori car notre projet pdagogique nous conduit bien davantage nous pencher sur ce qui les runit plutt que ce qui les diffrencie. Cest leur multiplicit qui a prsid cetouvrage et qui en fait, nous lesprons, son originalit. Nous nallons pas nous en plaindre et dfendons enrevanche lide que le choix dfinitif de lun ou lautre de ces langages dpend davantage dhabitude, denvi-ronnement professionnel ou denseignement, de questions sociales et conomiques et surtout de la raisonconcrte de cette utilisation (pdagogie, performance machine, adquation Web ou base de donnes, ). Deplus, le succs dUML, assimilable un langage universel OO lintersection de tous les autres et automati-quement traduisible dans chacun, ou des efforts, tels ceux de Microsoft, dhomognisation des langages OO,rend ces discordes quelque peu obsoltes et un peu drisoires, tant il va devenir facile de passer de lun lautre. Enfin, nous souhaitions que cet ouvrage, tout en tant suffisamment dtach de toutes technologies,couvre lessentiel des problmes poss par la mise en uvre des objets en informatique, y compris le pro-blme de leur stockage sur le disque dur et leur interfaage avec les bases de donnes, de leur fonctionnementen parallle, et leur communication travers Internet. Un ouvrage donc qui dcouvrirait lOO de trs haut, cequi lui permet videmment de balayer trs large, et qui accepte ce faisant de perdre un peu en prcision, pertedont nous il apparat ncessaire de mettre en garde le lecteur.

    Bersini 4e.book Page 5 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet6

    Plan de louvrageLes 23 chapitres de ce livre peuvent se rpartir en cinq grandes parties.

    Le premier chapitre constitue une partie en soi car il a pour importante mission dintroduire aux briques debase de la programmation oriente objet, sans aucun dveloppement technique : une premire esquisse, teintede sciences cognitives, et toute en intuition, des lments essentiels de la pratique OO.

    La deuxime partie intgre les quatorze chapitres suivants. Il sagit pour chacun dentre eux de dcrire, plustechniquement cette fois, ces briques de base que sont : objet, classe (chapitres 2 et 3), messages et communi-cation entre objets (chapitres 4, 5 et 6), encapsulation (chapitres 7 et 8), gestion mmoire des objets (chapi-tre 9), modlisation objet (chapitre 10), hritage et polymorphisme (chapitres 11 et 12), classe abstraite(chapitre 13), clonage et comparaison dobjets (chapitre 14), interface (chapitre 15).

    Chacune de ces briques est illustre par des exemples en Java, C#, C++,Python, PHP 5 et UML. Nous y fai-sons le pari que cette mise en parallle est la voie la plus naturelle pour la comprhension des mcanismes debase : extraction du concept par la multiplication des exemples.

    La troisime partie reprend, dans le droit fil des ouvrages ddis lun ou lautre langage objet, des notionsjuges plus avances : les objets distribus, Corba, RMI, Services Web (chapitre 16), le multithreading ou pro-grammation parallle (ou concurrentielle, chapitre 17), la programmation vnementielle (chapitre 18) etenfin la sauvegarde des objets sur le disque dur, y compris linterfaage entre les objets et les bases de donnesrelationnelles (chapitre 19). L encore, le lecteur se trouvera le plus souvent en prsence de plusieurs versionsdans les quatre langages de ces mcanismes.

    La quatrime partie dcrit plusieurs projets de programmation objet totalement aboutis, tant en UML quenJava. Elle inclut dabord le chapitre 20, dcrivant la modlisation objet dun petit flipper et les problmes deconception oriente objet que cette modlisation pose. Le chapitre 21, li au chapitre 22, dcrit la maniredont les objets peuvent sorganiser en liste lie ou en graphe, mode de mise en relation et de regroupementdes objets que lon retrouve abondamment dans toute linformatique. Le chapitre 22 marie la chimie et labiologie la programmation OO. Il contient tout dabordla programmation dun racteur chimique gnrantde nouvelles molcules partir de molcules de base, et ce, tout en suivant la trace lvolution de laconcentration des molcules dans le temps. La chimie une chimie lmentaire acquise bien avant luniver-sit nous est apparue tre une plate-forme pdagogique idale pour lassimilation des concepts objets.Nous ne surprendrons personne en affirmant que les atomes et les molcules sont deux types de composantschimiques, et que les secondes sont composes des premiers. Dans ce chapitre, nous traduisons ces connais-sances en UML et en Java. Dans la suite de la chimie, nous proposons aussi dans le chapitre une simulationlmentaire du systme immunitaire, comme nouvelle illustration de combien linformatique OO se prtefacilement la reproduction informatise des concepts de science naturelle, tels ceux que lon rencontre enchimie ou en biologie.

    Enfin la dernire partie, se ramne au seul dernier chapitre, le chapitre 23, dans lequel sont prsents unensemble de recettes de conception OO, solutionnant de manire fort lgante un ensemble de problmesrcurrents dans la ralisation de programme OO. Ces recettes de conception, dnommes Design Pattern, sontdevenues fort clbres dans la communaut OO. Leur comprhension accompagne une bonne matrise desprincipes OO et sinscrit dans la suite logique de lenseignement des briques et des mcanismes de base delOO. Elle fait souvent la diffrence entre lapprenti et le compagnon parmi les programmeurs OO. Nous lesillustrons en partie sur le flipper,la chimie et la biologie des chapitres prcdents.

    Bersini 4e.book Page 6 Mardi, 2. dcembre 2008 7:58 07

  • Avant-propos7

    qui sadresse ce livre ?Cet ouvrage ayant pour objet de traiter de nombreuses technologies, nul doute quil est destin tre lu par unpublic assez large. En clair, il sadresse tous les adeptes de chacune de ces technologies, industriels, ensei-gnants et tudiants, qui pourront le confronter utilement ltat de lart en la matire. La vocation premire decet ouvrage nen reste pas moins une initiation la programmation oriente objet, prrequis indispensable lassimilation de nombreuses autres technologies.

    Ce livre sera un compagnon dtude utile et, nous lesprons, enrichissant pour les tudiants qui comptent laprogrammation objet dans leur cursus dtude (et toutes technologies sy rapportant : Java, C++, C#, Python,PHP, Corba, RMI, Services Web, UML). Il devrait les aider, le cas chant, voluer de la programmationprocdurale la programmation objet, pour aller ensuite vers toutes les technologies sy rapportant.

    Nous ne pensons pas, en revanche, que ce livre peut seul prtendre une mme porte dentre dans le mondede la programmation tout court. Comme dit prcdemment, nous pensons quil est idal daborder lesmcanismes OO en mme temps que procduraux. Pour des raisons videntes de place et car les librairiesinformatiques dj en regorgent, nous avons fait limpasse dun enseignement de base des mcanismes proc-duraux : variables, boucles, instructions conditionnelles, lments fondamentaux et compagnons indispensa-bles lassimilation de lOO. Nous pensons, ds lors, que ce livre sera plus facile aborder pour des lecteursayant dj un peu de pratique de la programmation dite procdurale, et ce, dans un quelconque langage de pro-grammation. Aujourdhui, linformatique est un sujet si vaste, existant tant de niveaux dabstraction, et pourtant de raisons diffrentes, quil nest pas tonnant quil faille laborder muni de plusieurs guides. Ce livre enest un. Il na rien dexhaustif, ne se spcialise dans aucune des technologies voques, mais fournit les basesncessaires lassimilation dun grand nombre dentre elles et de celles venir.

    Bersini 4e.book Page 7 Mardi, 2. dcembre 2008 7:58 07

  • Bersini 4e.book Page 8 Mardi, 2. dcembre 2008 7:58 07

  • 1Principes de base :

    quel objet pour linformatique ?

    Ce chapitre a pour but une introduction aux briques de base de la conception et de la programmation orien-te objet (OO). Il sagit pour lessentiel des notions dobjet, de classe, de message et dhritage. ce stade,aucun approfondissement technique nest effectu. Les quelques bouts de code seront crits dans unpseudo langage trs proche de Java. De simples petits exercices de pense permettent une mise enbouche, toute en intuition, des lments essentiels de la pratique OO.

    Sommaire : Introduction la notion dobjet Introduction la notion et au rle durfrent Lobjet dans sa version passive et active Introduction la notion declasse Les interactions entre objets Introduction aux notions dhritage et depolymorphisme

    Doctus Tu as lair bien remont, aujourdhui !

    Candidus Je cherche un objet, mon vieux ! Cest lobjet que je cherche partout.

    Doc. Ce nest pourtant pas ce qui manque Tiens, prends donc ma valise

    Cand. Non, je cherche un objet autrement plus encombrant Cest ce sacr objet logiciel dont tout le monde parle. Ilme fait penser au Yti Je me demande si quelquun en a vraiment rencontr un

    Doc. Quelle ide, il na rien daussi mystrieux notre objet.. Il sagit simplement de petits soldats qui vont nous librerde bien des contraintes du monde procdural.

    Cand. Justement ! Dis-moi ce quest cette guerre Procdural contre Objet.

    Doc. Au commencement il y avait lordinateur, avec toutes ses faiblesses de nouveau-n. Cest nous qui tions sonservice pour le pouponner. Il fallait tre sacrment malin pour en tirer quelque chose.

    Cand. Et maintenant il a grandi et je parie quil veut jouer avec des petits objets.

    Doc. Il a effectivement pris du plomb dans la tte et il comprend beaucoup mieux ce quon attend de lui. On peut luiparler en adulte, lui expliquer les choses dune faon plus structure

    Cand. Veux-tu dire quil serait capable de comprendre ce que nous voulons sous forme de spcification ?

    Bersini 4e.book Page 9 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet10

    Doc. Doucement ! Je dis simplement que nous ne passerons plus tout notre temps considrer ce que nos proces-seurs attendent pour faire le travail demand. Cest la premire des tapes que nous avons dj franchies.

    Cand. Quelles sont les autres tapes ?

    Doc. Et bien notre bb est aujourdhui capable de manipuler lui-mme les informations quon lui confie. Il ases propres mthodes dutilisation et de rangement. Il ne veut mme plus quon touche ses jouets.

    Un rapide coup dil par la fentre et nous apercevons des voitures, des passants, des arbres, un immeuble,un avion Cette simple perception est rvlatrice dun ensemble de mcanismes cognitifs des plus subtils,dont la comprhension est une porte dentre idale dans le monde de linformatique oriente objet. En effet,pourquoi navoir pas cit lair ambiant , la temprature , la bonne ambiance ou, encore, la lumiredu jour , que lon peroit tout autant ? Pourquoi les premiers se dtachent-ils de cette toile de fond parcouruepar nos yeux ?

    Tout dabord, leur structure est singulire, complique, ils prsentent une forme alambique, des dimensionsparticulires, parfois une couleur uniforme et distincte du dcor qui les entoure. Nous dirons que chacun secaractrise par un ensemble dattributs structuraux, prenant pour chaque objet une valeur particulire : unedes voitures est rouge, plutt longue, ce passant est grand, assez vieux, courb, etc. Ces attributs structuraux et leur prsence conjointe dans les objets sont la raison premire de lattrait perceptif quils exercent. Cestaussi la raison de la segmentation et de la nette sparation perceptive qui en rsulte, car si les voitures et lesarbres se dtachent en effet de larrire plan, nous ne les confondons en rien.

    Le trio Nous avons lhabitude de dcrire le monde qui nous entoure laide de ce trio que les informaticiens se plaisent nommer : , par exemple : , ,, . Si ce sont les entits et non pas leurs attributs qui vous sautentaux yeux, cest bien parce que chacune de ces entits ou objets, la voiture et le passant, se caractrise parplusieurs de ces attributs, couleur, ge, taille, prenant une valeur particulire, uniforme sur tout lobjet .

    Lobjet est peru, de fait, car il est au croisement de ces diffrents attributs. Il nat partir de leur rencontre.Les attributs en tant que tels ne sont pas des objets, puisquils servent justement la caractrisation de cesobjets, les faire exister et les rendre prgnants.

    La nature des attributs est telle quils se retrouvent attribut dun nombre important dobjets, pourtant trsdiffrents. La voiture a une taille comme le passant. Larbre a une couleur comme la voiture. Le monde desattributs est beaucoup moins diversifi que le monde des objets. Cest une des raisons qui nous permettent deregrouper les objets en classes et les classes en diffrentes sous-classes, comme nous le dcouvrirons plustard. Que ce soit comme rsultat de nos perceptions ou dans notre pratique langagire, les attributs et les objetsjouent des rles trs diffrents. Les attributs structurent nos perceptions et ils servent, par exemple, sous formedadjectifs, qualifier les noms qui les suivent ou les prcdent. La premire consquence de cette simplefacult de dcoupage cognitif sur linformatique daujourdhui est la suivante :

    Objets, attributs, valeurs

    Il est possible dans tous les langages informatiques de stocker et de manipuler des objets en mmoire, comme autantdensembles de couples attribut/valeur.

    Bersini 4e.book Page 10 Mardi, 2. dcembre 2008 7:58 07

  • Principes de base : quel objet pour linformatique ?CHAPITRE 1

    11

    Stockage des objets en mmoireDans la figure qui suit, nous voyons apparatre ces diffrents objets dans la mmoire de lordinateur. Chacunoccupe un espace mmoire qui lui est propre et allou lors de sa cration. De faon se faciliter la vie, lesinformaticiens ont admis un ensemble de types primitifs dattribut, dont ils connaissent lavance la taillerequise pour encoder la valeur.

    Il sagit, par exemple, de types comme rel qui occupera 64 bits despace (dans le codage des rels en base 2 etselon une standardisation reconnue) ou entier, qui en occupera 32 (l encore par sa traduction en base 2), ou fina-lement caractre qui occupera 16 bits dans le format unicode (qui code ainsi chacun des caractres de lamajorit des critures rpertories et les plus pratiques dans le monde). Dans notre exemple, les dimensionsseraient types en tant quentier ou rel. Tant la couleur que la marque pourraient se rduire une valeur num-rique (ce qui ramnerait lattribut un entier) choisie parmi un ensemble fini de valeurs possibles, indiquantchacune une couleur ou une marque. Ds lors, le mcanisme informatique responsable du stockage de lobjet saura , la simple lecture structurelle de lobjet, quel est lespace mmoire requis par son stockage.

    Figure 1-1

    Les objets informatiques et leur stockage en mmoire.

    Bersini 4e.book Page 11 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet12

    Types primitifs

    laide de ces types primitifs, le stockage en mmoire de ces diffrents objets se transforme comme reproduitdans la figure 1-2. Ce mode de stockage de donnes est une caractristique rcurrente en informatique, prsentdans pratiquement tous les langages de programmation, et se retrouvant dans les bases de donnes dites rela-tionnelles. Dans ces bases de donnes, chaque objet devient un enregistrement. Les voitures sont stockes laide de leurs couples attribut/valeur dans des bases encodant des voitures, et gres, par exemple, par unconcessionnaire automobile (comme montr la figure 1-3).

    La place de lobjet en mmoire

    Les objets seront structurellement dcrits par un premier ensemble dattributs de type primitif, tels quentier, rel ou caractre,qui permettra, prcisment, de dterminer lespace quils occupent en mmoire.

    Figure 1-2

    Les objets avec leur nouveau mode de stockage o chaque attribut est dun type dit primitif ou prdfini , comme entier, rel, caractre

    Bersini 4e.book Page 12 Mardi, 2. dcembre 2008 7:58 07

  • Principes de base : quel objet pour linformatique ?CHAPITRE 1

    13

    Les arbres, quant eux, chacun galement avec leurs couples attribut/valeur, senregistrent dans des bases dedonnes gres par un botaniste. Cette faon de procder na rien de novateur et nest en rien lorigine decette pratique informatique dsigne comme oriente objet. La simple opration de stockage et manipulationdobjet en soi et pour soi nest pas ce qui distingue fondamentalement linformatique oriente objet de celledsigne comme procdurale ou fonctionnelle . Nous la retrouvons dans pratiquement tous les langagesinformatiques. Patience ! Nous allons y venir

    De tout temps galement, les mathmaticiens, physiciens, ou autres scientifiques, ont manipul des objets math-matiques caractriss par un ensemble de couples attribut/valeur. Ainsi, un point dans un espace trois dimensionsse caractrise par les valeurs relles prises par ses attributs x,y,z. Lorsque ce point bouge, on peut y adjoindre troisnouveaux attributs pour reprsenter sa vitesse. Il en est de mme pour une espce animale, caractrise par lenombre de ses reprsentants, dun atome, caractris par son nombre atomique, et dune molcule par le nombredatomes qui la composent et par sa concentration au sein dun mlange chimique. Mme chose pour la santconomique dun pays, caractrise par le PIB par habitant, la balance commerciale ou le taux dinflation.

    Le rfrent dun objet

    Observons nouveau les figures 1-1 et 1-2. Chaque objet est nomm et ce nom doit tre unique. Le nom delobjet est son seul et unique identifiant. Comme cest en le nommant que nous accdons lobjet, il est clairque ce nom ne peut tre partag par plusieurs objets. En informatique, le nom correspondra de manire uni-voque ladresse physique de lobjet en mmoire. Rien de plus unique quune adresse, sauf supposer quedeux objets puissent occuper le mme espace mmoire. Pas dinquitude pour eux, nos objets ont les moyensde ne pas squatter la mmoire ! Le nom premire-voiture-vue-dans-la-rue est en fait une variable infor-matique, que nous appellerons rfrent par la suite, stocke galement en mmoire, mais dans un espace ddi

    Figure 1-3

    Table dune base de donnes relationnelle de voitures, avec quatre attributs et six enregistrements.

    Bases de donnes relationnelles

    Il sagit du mode de stockage des donnes sur support permanent le plus rpandu en informatique. Les donnes sont stoc-kes en tant quenregistrement dans des tables, par le biais dun ensemble de couples attribut/valeur dont une cl primaireessentielle la singularisation de chaque enregistrement. Des relations sont ensuite tablies entre les tables par un mca-nisme de jonction entre la cl primaire de la premire table et la cl dite trangre de celle laquelle on dsire la relier. Lefait, par exemple, quun conducteur puisse possder plusieurs voitures se traduit en relationnel par la prsence dans la tablevoiture dune cl trangre qui reprend les valeurs de la cl primaire prsente dans la table des conducteurs. La disparition deces cls dans la pratique OO fait de la sauvegarde des objets dans ces tables un problme pineux de linformatiquedaujourdhui, comme nous le verrons au chapitre 19.

    Marque Modle Srie Numro

    Renault 18 RL 4698 SJ 45

    Renault Kangoo RL 4568 HD 16

    Renault Kangoo RL 6576 VE 38

    Peugeot 106 KID 7845 ZS 83

    Peugeot 309 chorus 7647 ABY 82

    Ford Escort Match 8562 EV 23

    Bersini 4e.book Page 13 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet14

    uniquement aux noms symboliques. cette variable on assigne comme valeur ladresse physique de lobjetque ce nom symbolique dsigne. En gnral, dans la plupart des ordinateurs aujourdhui, ladresse mmoirese compose de 32 bits, ce qui permet de stocker jusqu 232 informations diffrentes. Un rfrent est donc unevariable informatique particulire, associe un nom symbolique, code sur 32 bits, et contenant ladressephysique dun objet informatique.

    Plusieurs rfrents pour un mme objetUn mme objet peut-il porter plusieurs noms ? Plusieurs rfrents, qui contiennent tous la mme adresse physique,peuvent-ils dsigner en mmoire un seul et mme objet ? Oui, sil est ncessaire de nommer, donc daccder lobjet, dans des contextes diffrents et qui signorent mutuellement.

    Dans la vie courante, rien ninterdit plusieurs personnes, tout en dsignant le mme objet, de le nommerde manire diffrente. Le livre que vous vous devez dacheter en vingt exemplaires pour le faire connatre autourde vous, le livre dont tous les informaticiens raffolent, le best-seller de lanne, le chef-duvre absolu, autant derfrents diffrents pour dsigner cet unique ouvrage que vous tenez prcieusement entre les mains. Les nomsdes objets seront distincts, car utiliss dans des contextes distincts. Cest aussi faisable en informatique orienteobjet, grce ce mcanisme puissant et souple de rfrence informatique, dnomm adressage indirect par lesinformaticiens qui permet, sans difficult, doffrir plusieurs voies daccs un mme objet mmoire. Comme lapratique orient objet saccompagne dune dcoupe en objets et que chacun dentre eux peut tre sollicit parplusieurs autres qui signorent entre eux, il est capital que ces derniers puissent dsigner ce premier leurguise en lui donnant un nom plus conforme lutilisation quils en feront.

    Espace mmoire

    Le rfrent contient ladresse physique de lobjet, code sur 32 bits dans la plupart des ordinateurs aujourdhui. Le nombredespaces mmoire disponibles est li la taille de ladresse de faon exponentielle. Ces dernires annes, de plus en plusde processeurs, tant chez Sun, Apple ou Intel, ont fait le choix dune architecture 64 bits, ce qui implique notamment unervision profonde de tous les mcanismes d'adressage dans les systmes d'exploitation. Depuis, les informaticiens peuventvoir l'avenir avec confiance et se sentir l'aise pour des sicles et des sicles face l'immensit de lespace d'adressage quisouvre eux. Celui-ci devient de 264, soit 18.446.744.073.709.551.616 octets. Excusez du peu. Aura-t-on jamais suffisammentde donnes et de programmes y installer ?

    Rfrent vers un objet unique

    Le nom dun objet informatique, ce qui le rend unique, est galement ce qui permet dy accder physiquement. Nous appelleronsce nom le rfrent de lobjet . Linformation reue et contenue par ce rfrent nest rien dautre que ladresse mmoire ocet objet se trouve stock.

    Adressage indirect

    Cest la possibilit pour une variable, non pas dtre associe directement une donne, mais plutt une adresse physiquedun emplacement contenant, lui, cette donne. Il devient possible de diffrer le choix de cette adresse pendant lexcution duprogramme, tout en utilisant naturellement la variable. Et plusieurs de ces variables peuvent alors pointer vers un mmeemplacement. Une telle variable est dnomme un pointeur, en C et C++.

    Bersini 4e.book Page 14 Mardi, 2. dcembre 2008 7:58 07

  • Principes de base : quel objet pour linformatique ?CHAPITRE 1

    15

    Nous verrons dans la section suivante quun attribut peut servir de rfrent vers un autre objet, et quil y a lun mcanisme idal pour permettre ces deux objets de communiquer, par envoi de messages, du premier versle deuxime. Mais nallons pas trop vite en besogne

    Lobjet dans sa version passive

    Lobjet et ses constituants

    Voyons plus prcisment ce qui amne notre perception privilgier certains objets plutt que dautres. Certainsdentre eux se rvlent tre une composition subtile dautres objets, objets videmment tout aussi prsents queles premiers, et que, pourtant, il ne vous est pas venu lide de citer lors de notre premire dmonstration.

    Plusieurs rfrents pour un mme objet

    Dans le cours de lcriture dun programme orient objet, on accdera couramment un mme objet par plusieurs rfrents,gnrs dans diffrents contextes dutilisation. Cette multiplication des rfrents sera un lment dterminant de la gestionmmoire associe lobjet. On acceptera ce stade-ci quil est utile quun objet sjourne en mmoire tant quil est possiblede le rfrer. Sans rfrent un objet est bon pour la poubelle puisque inaccessible. Vous tes mort, je jour o vous ntesmme plus un numro dans aucune base de donnes.

    Figure 1-4

    Plusieurs rfrents dsignent un mme objet grce au mcanisme informatique dadressage indirect.

    Bersini 4e.book Page 15 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet16

    Vous avez dit la voiture et non pas la roue de la voiture ou sa portire , vous avez dit larbre , etnon pas la branche ou le tronc de larbre . De nouveau, cest lagrgat qui vous saute aux yeux, et nonpas toutes ses parties. Vous savez pertinemment que lobjet voiture ne peut fonctionner en labsence de sesobjets roues ou de son objet moteur . Nanmoins, pour citer ce que vous observiez, vous avez faitlimpasse sur les diffrentes parties constitutives des objets relevs.

    Objet compositeEn tant que banal utilisateur de lobjet voiture , vous vous proccuperez des roues et du moteur comme delan 40. moins que vous en ayez un besoin direct et incontournable, le garagiste se chargera bien tout seulde vous ruiner ! Que les objets sorganisent entre eux, en composite et composant, est une donne de notreralit que les informaticiens ont jug important de reproduire. Comme indiqu dans la figure suivante, unobjet stock en mmoire peut tre plac lintrieur de lespace mmoire rserv un autre.

    Premire distinction : ce qui est utile soi et ce qui lest aux autres

    Lorient objet, pour des raisons pratiques que nous voquerons par la suite, encourage sparer, dans la description de toutobjet, la partie utile pour tous les autres objets qui y recouront de la partie ncessaire son fonctionnement propre. Il fautsparer physiquement ce que les autres objets doivent savoir dun objet donn, afin de solliciter ses services, et ce que cedernier requiert pour son fonctionnement, cest--dire la mise en uvre de ces mmes services.

    Figure 1-5

    Lobjet moteur devient un composant de lobjet voiture.

    Bersini 4e.book Page 16 Mardi, 2. dcembre 2008 7:58 07

  • Principes de base : quel objet pour linformatique ?CHAPITRE 1

    17

    Son accs ne sera ds lors possible qu partir de celui qui lui offre cette hospitalit et, sil le fait, cest quil sait quelexistence de lhte est totalement conditionne par lexistence de lhte (la langue franaise est ainsi faite quellepermet cette ambigut terminologique !). Lobjet moteur, dans ce cas, nexiste que comme seul attribut de lobjetvoiture. Si vous vous dbarrassez de la voiture, vous vous dbarrasserez dans le mme temps de son moteur.

    Dpendance sans composition

    Vous comprendrez aisment que ce type de relation entre objets ne suffit pas pour permettre une descriptionfidle de la ralit qui nous entoure. En effet, si la voiture possde bien un moteur, occasionnellement elle contientgalement des passagers, qui naimeraient pas tre ports disparus lors de la mise la casse de la voiture...Dautres modes de mise en relation entre objets devront tre considrs, qui permettent un premier de seconnecter facilement un deuxime, mais sans que lexistence de celui-ci ne soit entirement conditionnepar lexistence du premier. Mais nous en reparlerons plus tard.

    Lobjet dans sa version active

    Activit des objets

    Afin de poursuivre cette petite introspection cognitive dans le monde de linformatique oriente objet, jetez nouveau un coup dil par la fentre et dcrivez-nous quelques scnes observes : une voiture sarrte unfeu rouge , les passants traversent la route , un passant entre dans un magasin , un oiseau senvole delarbre . Que dire de toutes ces observations bouleversantes que vous venez dnoncer ? Dabord, que lesobjets ne se bornent pas tre statiques. Ils bougent, se dplacent, changent de forme, de couleur, dhumeur,et ce, souvent, suite une interaction directe avec dautres objets. La voiture sarrte car le feu est devenurouge, et elle redmarre ds quil passe au vert. Les passants traversent car les voitures sarrtent. Lpicier dit bonjour au client qui ouvre la porte de son magasin. Les objets inertes sont par essence bien moins intres-sants que ceux qui se modifient constamment. Certains batraciens ne dtectent leur nourriture favorite que sielle est en mouvement. Placez-la, immobile, devant eux, et lanimal ne la verra simplement pas. Ainsi, lobjetsera dautant plus riche dintrt quil est sujet des transitions dtats nombreuses et varies.

    Les diffrents tats dun objet

    Les objets changent donc dtat, continment, mais tout en prservant leur identit, en restant ces mmesobjets quils ont toujours t. Les objets sont dynamiques, la valeur de leurs attributs change dans le temps,soit par des mcanismes qui leur sont propres (tel le changement des feux de signalisation), soit en raisondune interaction avec un autre objet (comme dans le cas de la voiture qui sarrte au feu rouge).

    Du point de vue informatique, rien nest plus simple que de modifier la valeur dun attribut. Il suffit de se rendredans la zone mmoire occupe par cet attribut et de remplacer la valeur qui sy trouve actuellement stockepar une nouvelle valeur. La mise jour dune partie de sa mmoire, par lexcution dune instruction approprie,est une des oprations les plus frquentes effectues par un ordinateur. Le changement dun attribut naffecte

    Une composition dobjets

    Entre eux, les objets peuvent entrer dans une relation de type composition, o certains se trouvent contenus dans dautres etne sont accessibles qu partir de ces autres. Leur existence dpend entirement de celle des objets qui les contiennent.

    Bersini 4e.book Page 17 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet18

    en rien ladresse de lobjet, et donc son identit. Tout comme vous, qui restez la mme personne, humeurchangeante ou non. Lobjet, en fait, prservera cette identit jusqu sa pure et simple suppression de lammoire informatique. Pour lordinateur : Partir, cest mourir tout fait. . Lobjet nat, vit une successionde changements dtats et finit par disparatre de la mmoire. Et voil expdi le rsum dune vie, quelle soitdigne dun roman ou dun simple fait divers. Pas vraiment enviable la vie des objets dans ce monde impitoyablede linformatique !

    Les changements dtat : qui en est la cause ?Mais qui donc est responsable des changements de valeur des attributs ? Qui a la charge de rendre les objetsmoins inertes quils napparaissent premire vue ? Qui se charge de les faire voluer et, ce faisant, de les rendreun tant soit peu intressants ? Reprenons lexemple des feux de signalisation voqu plus haut, et comme indiqu la figure 1-6, stockons-en un, celui-que-vous-avez-vu-dans-la-rue , dans la mmoire de lordinateur (noussupposerons que la couleur est bien reprsente par un entier ne prenant que les valeurs 1, 2 ou 3). Installonsdans cette mme mmoire, mais un peu plus loin, une opration, qui sera responsable du changement de couleur.Dans la mmoire dite centrale, RAM ou vive, dun ordinateur, ne se trouvent toujours installs que ces deuxtypes dinformation, des donnes et des instructions qui utilisent et modifient ces donnes, rien dautre. Nousappellerons la simple opration de changement de couleur : change . Comme chaque attribut, chaque op-ration se doit dtre nomme afin de pouvoir y accder. Il sagira pour elle, le plus banalement du monde,dincrmenter lentier couleur et de ramener sa valeur 1 ds que celui-ci atteint 4. Cest cette oprationtriviale qui mettra un peu danimation dans notre feu de signalisation.

    Changement dtats

    Le cycle de vie dun objet, lors de lexcution dun programme orient objet, se limite une succession de changementsdtats, jusqu sa disparition pure et simple de la mmoire centrale.

    Figure 1-6

    Le changement dtat du feu de signalisation par lentremise de lopration change .

    Bersini 4e.book Page 18 Mardi, 2. dcembre 2008 7:58 07

  • Principes de base : quel objet pour linformatique ?CHAPITRE 1

    19

    Comment relier les oprations et les attributs ?Alors que nous comprenons bien linstallation en mmoire, tant de lobjet que de lopration qui pourra le modifier,ce qui nous apparat moins vident, cest la liaison entre les deux. Comment lopration et les deux instructions dechangement (lincrmentation et le test), installes dans la mmoire droite, savent-elles quelles portent sur le feude signalisation install, lui, dans la mmoire gauche ? Plus concrtement encore, comment loprationchange, qui incrmente et teste un entier, sait-elle que cet entier est, de fait, celui qui code la couleur du feu et non lge du capitaine ? La rponse cette question vous fait entrer de plain-pied dans le monde de lorientobjet Mais vous tes sans doute un peu mu. Alors, avant de vous donner la rponse tant attendue, permettez-nous de vous souhaiter un chaleureux welcome dans ce monde de lOO, car vous ntes pas prs de le quitter.

    Introduction la notion de classeMthodes et classesPlace la rponse. Elle sarticule en deux temps. Dans un premier temps, il faudra que lopration change quenous appellerons dornavant mthode ne soit attache qu des objets de type feu de signalisation. Seuls cesobjets possdent cet entier lendroit o ils le possdent, et sur lesquels peut sexercer cette mthode. Appliquer lamthode change sur tout autre type dobjet, tel que la voiture ou larbre, na pas de sens, car on ne saurait de quelentier il sagit. De surcrot, ce double incrment pour revenir la valeur de base est totalement dnu de signifi-cation pour ces autres objets. Le subterfuge qui permet dassocier, jamais, les mthodes avec les objets qui leurcorrespondent consiste les unir tous deux par les liens, non pas du mariage, mais de la classe .

    La classe devient ce contrat logiciel qui lie vie les attributs de lobjet et les mthodes qui utilisent ces attributs. Parla suite, tout objet devra imprativement respecter ce qui est dit par sa classe, sinon gare au compilateur !

    Comme cest lusage en informatique sagissant de variables manipules, on parlera dornavant de lobjetcomme dune instance de sa classe, et de la classe comme du type de cet objet. Chacun des attributs de lobjetsera typ comme il est indiqu dans sa classe, et toutes les mthodes affectant lobjet seront uniquementcelles prvues dans sa classe. Do lintrt, bien sr, de garder une dfinition de la classe spare mais parta-ge par toutes les instances de celles-ci. Non seulement cest la classe qui dterminera les attributs sur lesquelsles mthodes pourront oprer mais, plus encore, et nous accrotrons dans les prochains chapitres la svrit dece principe, seules les mthodes dclares dans la classe pourront de facto manipuler les attributs des objetstyps par cette classe. La classe Feu-de-signalisation pourrait tre dfinie plus ou moins comme suit :

    class Feu-de-signalisation { int couleur ; change() { couleur = couleur + 1 ; if (couleur ==4) couleur = 1 ; }}

    Classe

    Une nouvelle structure de donnes voit le jour en OO : la classe, qui, de fait, a pour principale raison dtre dunir en son seintous les attributs de lobjet et toutes les oprations qui y accdent et qui portent sur ceux-l. Opration que lon dsignera parle nom de mthode, et qui regroupe un ensemble dinstructions portant sur les attributs de lobjet. Pour les programmeurs enprovenance du procdural, les attributs de la classe sont comme des arguments implicites passs la mthode ou encoredes variables dont la porte daction se limite la seule classe.

    Bersini 4e.book Page 19 Mardi, 2. dcembre 2008 7:58 07

  • Lorient objet20

    Chaque objet feu de signalisation rpondra de sa classe, en faisant en sorte, ds sa naissance, de ntremodifi que par les mthodes dclares dans sa classe (ici la seule mthode change, mais il pourrait y en avoirbien dautres comme met-le-feu-en-stand-by, change-la-dure-dune-des-couleurs, et il faudraitalors rajouter quelques attributs comme la dure de chaque couleur). Gardez bien lesprit ce principe fondateurde lOO quaucune autre mthode, jamais, que celles prvues par la classe, ne pourra saventurer changer lavaleur des attributs des objets de cette classe. Ce qui permet aux objets de se modifier leur est aussi propre queles attributs qui les dcrivent structurellement. Un objet existe, par lentremise de ses attributs, et se modifie,par lentremise de ses mthodes (et nous disons bien ses et non ces ou vous risquez dtre bout jamais hors du royaume merveilleux de lOO).

    Sur quel objet prcis sexcute la mthode

    Dans un second temps, il faudra signaler la mthode change (qui maintenant, grce la dfinition de laclasse, sait quelle nopre exclusivement que sur des feux de signalisation) lequel, parmi tous les feux possi-bles et stocks en mmoire, est celui quil est ncessaire de changer. Cela se fera par le simple appel de lamthode sur lobjet en question, et, plus encore, par lcriture dune instruction de programmation de type :

    feu-de-signalisation-en-question.change()

    Nous appliquons la mthode change() (nous expliquerons plus tard la raison dtre des parenthses) surlobjet feu-de-signalisation-en-question. Cest le point dans cette instruction qui permet ici la liaisonentre lobjet prcis et la mthode excuter sur cet objet. Noubliez pas que le rfrent feu-de-signalisation-en-question possde effectivement ladresse de lobjet et, de l, automatiquement, de lattribut entier/cou-leur sur lequel la mthode change() doit sappliquer.

    Voil, cest aussi simple que cela, et cest le dpart dun grand voyage dans le monde de lOO, un voyage quinous rserve encore de nombreuses surprises.

    Dfinition : type entier

    Le type primitif entier est souvent appel dans les langages de programmation int (pour integer), le type rel double oufloat, le caractre char. Eh oui ! langlais reste lespranto de linformatique.

    Lier la mthode lobjet

    On lie la mthode f(x) lobjet a , sur lequel elle doit sappliquer, au moyen dune instruction comme : a.f(x). Par cette cri-ture, la mthode f(x) saura comment accder aux seuls attributs de lobjet, ici les attributs de lobjet a , quelle peut manipuler.

    Diffrencier langage orient objet et langage manipulant des objets

    De nombreux langages de programmation, surtout de scripts pour le dveloppement web (JavaScript, VB Script), rendentpossible lexcution de mthodes sur des objets dont les classes prexistent au dveloppement. Le programmeur ne crejamais de nouvelles classes mais se contente dexcuter les mthodes de celles-ci sur des objets. Supposons par exempleque vous vouliez agrandir un font particulier de votre page web. Vous crirez f.setSize(16) mais jamais dans votrecode, vous naurez cr la classe Font (vous utilisez lobjet f issu de cette classe) et sa mthode setSize(). Vous vouslimitez les utiliser comme vous utilisez les bibliothques dun quelconque langage de programmation. Les classes incluesdans ces librairies auront t dveloppes par dautres programmeurs et mis votre disposition.

    Bersini 4e.book Page 20 Mardi, 2. dcembre 2008 7:58 07

  • Principes de base : quel objet pour linformatique ?CHAPITRE 1

    21

    Des objets en interactionParmi les sayntes voques plus haut, certaines dcrivaient une interaction entre deux objets, comme le feu qui,passant au vert, permet la voiture de dmarrer, ou lpicier qui salue le nouveau client. Ce serait bien qu lins-tar de cette ralit observe, les objets informatiques puissent interagir de la sorte. Vous allez tre contents. Cestnon seulement possible, mais cest la base de linformatique OO. Rien dautre, en effet, ne se passe dans cetteinformatique-l que des objets interagissant entre eux. Dans le monde, un objet esseul nest pas grand-chose,en OO galement. Cest ensemble, mais aussi et paradoxalement chacun pour soi (ce paradoxe sera rsolu plustard), quils commencent nous tre utiles. Tentons dimaginer comment la premire scne, dcrivant leffet duchangement de couleur du feu sur le dmarrage de la voiture, pourrait tre reproduite informatiquement. Nousconsidrerons que les deux objets, feu-de-signalisation et voiture-vue-dans-la-rue, instance pour lepremier dune classe Feu-de-signalisation (notez la majuscule de la premire lettre) et pour le deuximedune classe Voiture, sont chacun caractriss par un attribut, lentier couleur pour le feu, et, pour la voiture, unentier vitesse pouvant prendre jusqu 130 valeurs possibles (en tout cas en France, le traducteur allemandsadaptera).

    Comment les objets communiquent

    Faisons simple, quitte faire irraliste, en supposant que le changement de couleur du feu induise dansla voiture lacclr