Introduction à la Programmation Orientée ?· Programmation Orientée Objet Marc DANIEL ... • De…

  • Published on
    13-Sep-2018

  • View
    212

  • Download
    0

Embed Size (px)

Transcript

<ul><li><p>1 </p><p>Polytech Marseille , Prog. o. o. 1 </p><p>Introduction la Programmation Oriente </p><p>Objet Marc DANIEL </p><p>Ecole Polytech Marseille, Campus de Luminy, case 925, 13288 Marseille cedex 9 </p><p>Marc.Daniel@univ-amu.fr </p><p>Mars 2018 </p><p>Polytech Marseille , Prog. o. o. 2 </p><p>Plan </p><p> Les concepts de la programmation oriente objet 4 un peu dhistoire 5 de la ncessit de langages adapts 7 vers les langages objets 11 les principes gnraux 13 la notion de classe 16 quelques langages 18 </p><p> De C C++ 19 </p><p> Les concepts des langages de classes ; implmentation en C++ 55 les classes et les objets 56 les oprateurs 90 lhritage 104 </p><p> La gnricit et les modles 164 </p><p> La gestion des exceptions 175 </p></li><li><p>2 </p><p>Polytech Marseille , Prog. o. o. 3 </p><p>Plan (suite) </p><p> Quelques complments 197 La norme C++ 198 Les espaces de noms 199 Amiti, Hritage et Gnricit 205 </p><p> Les composants prdfinis 207 Les flux dE/S 210 La classe String 216 Les conteneurs 221 Les itrateurs 230 Les algorithmes 234 Les traitements numriques 235 </p><p> Au sujet de C++11 norme 2011 236 Conclusion sur C++ 251 Glossaire partiel 255 Bibliographie succincte 258 annexes 259 </p><p>Polytech Marseille , Prog. o. o. 4 </p><p>Les concepts de la programmation oriente objet </p></li><li><p>3 </p><p>Polytech Marseille , Prog. o. o. 5 </p><p>Introduction / histoire </p><p> La prhistoire : les annes 60 et les dbuts de la programmation et des langages </p><p> Les annes 70-80 : La programmation structure analyse descendante </p><p> dcomposition suivant les traitements les logiciels sont organiss autour des actions qui traitent les objets </p><p> sparation traitement et donnes interdpendance des donnes lintrieur des traitements difficile maintenir </p><p> Programme = Algorithmes + donnes </p><p>Polytech Marseille , Prog. o. o. 6 </p><p>Introduction / histoire </p><p> La programmation et la conception oriente objet Ou un besoin de qualit </p><p> depuis 1975 essor dans les annes 85 (C++, Eiffel) la conscration partir des annes 90 </p><p> La conception objet repose sur une ide apparemment lmentaire. Les systmes informatiques ralisent certaines </p><p>actions sur certains objets. Pour obtenir des systmes souples et rutilisables, il faut mieux structurer le logiciel </p><p>autour des objets que des actions </p><p> Bertrand Meyer (concepteur dEiffel) </p></li><li><p>4 </p><p>Polytech Marseille , Prog. o. o. 7 </p><p> Objectifs principaux (Gnie Logiciel) : </p><p> rutiliser ce qui a dj t crit directement (le code, les modles) adaptation (lhritage) </p><p> augmenter la qualit </p><p> rapidit de la conception facilit de maintenance </p><p> ergonomie dutilisation fonctionnement simple et efficace </p><p>Intro. / langages adapts </p><p>dveloppement </p><p>utilisation </p><p>Polytech Marseille , Prog. o. o. 8 </p><p> Le logiciel doit tre : valide robuste Modifiable (extensible) rutilisable Portable ergonomique efficace </p><p> La maintenance doit tre facile volution du logiciel (an 2000, Euro, . !!!), vos futurs stages !! correction derreurs </p><p> Le logiciel doit ncessairement tre modulaire et les modules doivent tre indpendants </p><p>Intro. / langages adapts </p></li><li><p>5 </p><p>Polytech Marseille , Prog. o. o. 9 </p><p> Dans une application, les cots les plus importants proviennent : </p><p> De la programmation De la maintenance </p><p> Modification des spcifications par le client Non respect des spcifications Tests mal ou pas raliss Bugs invitables Adaptation de nouveaux environnements </p><p> Pour la rapidit tude de la complexit Loi de Moore (1965) </p><p>Intro. / langages adapts </p><p>Polytech Marseille , Prog. o. o. 10 </p><p> Critres de modularit : Dcomposition modulaire </p><p> la mthode permet de dcomposer un problme en sous-problmes dont les solutions peuvent tre recherches sparment </p><p> Composabilit modulaire la mthode fournit des lments (modules) qui peuvent tre combins pour </p><p>traiter de nouveaux problmes </p><p> Comprhensibilit modulaire la mthode produit des modules comprhensibles isolment </p><p> Continuit modulaire une petite modification de la spcification namne des modifications que </p><p>sur un ou quelques modules. Il ne doit pas y avoir dimpact sur larchitecture du systme </p><p> Protection modulaire pas de propagation de leffet dune condition anormale </p><p>Critres proposs par Bertrand Meyer (voir bibliographie) </p><p>Intro. / langages adapts </p></li><li><p>6 </p><p>Polytech Marseille , Prog. o. o. 11 </p><p>Une socit de modules respectant les critres de modularit </p><p> module : unit syntaxique du langage </p><p> un module doit communiquer avec peu de modules </p><p> les changes entre modules doivent tre le plus rduits possibles </p><p> les changes entre les modules sont clairement explicits dans la dfinition des modules </p><p> toute information concernant un module est prive, sauf si elle est explicitement dclare publique (masquage de linformation) </p><p>Intro. / vers les objets </p><p>Polytech Marseille , Prog. o. o. 12 </p><p> les modules que lon appellera objets </p><p> parlent peu </p><p> leurs conversations tiennent en quelques mots </p><p> leurs changes sont publics, codifis, donc haute voix </p><p> la plupart des informations et des traitements sont privs </p><p>Intro. / vers les objets </p></li><li><p>7 </p><p>Polytech Marseille , Prog. o. o. 13 </p><p> premire vision des objets (modules) </p><p> dcomposition en modules sur la base de leurs structures de donnes </p><p> un module est dcrit comme une implmentation de types abstraits de donnes et des traitements associs </p><p> tout type est un module et vise versa y compris les types prdfinis (int, float, ) Une structure au sens du C est un module sans traitement : ce nest </p><p>pas la logique de lorient objet </p><p> chaque module a une interface qui dfinit comment il dialogue avec les autres Ce qui est public Ce qui est priv </p><p>Intro. / principes gnraux </p><p>Polytech Marseille , Prog. o. o. 14 </p><p> Programmation oriente objet </p><p> On sintresse aux objets avant de sintresser aux traitements le programme de plus haut niveau sera tudi le plus tard possible </p><p> La p.o.o relve de la cration dobjets et de lexcution denvois de messages entre les objets </p><p>Quels sont les objets ? (il faut dfinir les bons objets) Quels traitement doivent-ils subir ? Quels liens ont les objets entre eux ? </p><p> Plusieurs points de vue possibles : Le plus important est lutilisation de classes ou langages de classes </p><p>Intro. / principes gnraux </p></li><li><p>8 </p><p>Polytech Marseille , Prog. o. o. 15 </p><p> La classe : un moule </p><p> une classe correspond une structure de donnes abstraites </p><p> partie structurelle compose de champs (appels attributs ou membres) des traitements effectuer sur ces structures </p><p> (appels mthodes ou fonctions membres) deux mthodes importantes : crateur et destructeur </p><p> services disponibles sur la structure (partie oprationnelle) les proprits de ces services </p><p> une interface (clairement identifie) qui dfinit partie publique (ce que voit le client) les services accessibles auxquels on peut faire appel les variables visibles de lextrieur (en nombre trs rduit) </p><p> La faon dont les traitements sont raliss ne regardent pas le monde extrieur </p><p> on peut modifier les attributs et les mthodes sans modifier linterface </p><p>Intro. / la notion de classe </p><p>Polytech Marseille , Prog. o. o. 16 </p><p> Les classes sont relies entre elles par des relations dhritage on rutilise on spcialise </p><p> diffrentier les traitements prciser les attributs </p><p> Les objets sont dfinis partir des classes par moulage instanciation par moulage la classe sert de modle, de moule </p><p> On ne communique avec lobjet quen invoquant une des mthodes de son interface </p><p> On a une encapsulation des donnes et des traitements qui permet labstraction des donnes </p><p> (voir glossaire) </p><p>Intro. / la notion de classe </p></li><li><p>9 </p><p>Polytech Marseille , Prog. o. o. 17 </p><p> Une classe trs incomplte </p><p>class Triangle { Point _p1, _p2, _p3 ; // donnes prives public : ... float aire () ; float perimetre (...) ; } ; </p><p> En dehors de la classe, on peut calculer laire, le primtre, mais pas faire rfrence aux Points _p1, _p2 ou _p3. Si ncessaire : fournir ce quil faut dans linterface (accesseur get_p1, modifieur set_p1). Triangle Mon_triangle ; </p><p> float area ; </p><p> area = Mon_triangle.aire() ; </p><p> Une classe Triangle_rectangle pourrait hriter de la classe triangle </p><p>Intro. / la notion de classe </p><p>Polytech Marseille , Prog. o. o. 18 </p><p>Intro. / langages objets </p><p> Simula 1966, compil </p><p> Smalltalk annes 72-80, interprt --&gt; adapt au prototypage, aussi un systme dexploitation </p><p> C++ annes 85, norme C++ (1998) </p><p> Eiffel 1989 (un modle de langage O.O. rest au stade universitaire) </p><p> Java annes 95, interprt --&gt; adapt au prototypage </p><p> Ada 95, Lisp, CLOS (Common Lisp Object System) C# Python PHP 5 </p></li><li><p>10 </p><p>Polytech Marseille , Prog. o. o. 19 </p><p>De C C++ </p><p>Polytech Marseille , Prog. o. o. 20 </p><p>De C C++ </p><p> C++ est une amlioration compatible de C qui permet </p><p> labstraction de donnes, la programmation objet la gnricit, la gestion des exceptions ... </p><p> beaucoup plus rigoureux que C fortement typ langage de rfrence normalis peut tre aussi rapide que C (pas de mcanisme sous-jacent complexe) </p></li><li><p>11 </p><p>Polytech Marseille , Prog. o. o. 21 </p><p>De C C++ </p><p> Les moins de C++ la compatibilit avec C </p><p> langage pouvant tre totalement sotrique prsence de deux syntaxes utilisation des fonctions C </p><p> Attention, certains points du C ANSI sont incompatibles avec C++ moins permissif prototype des fonctions les constantes </p><p> langage complexe qui demande un apprentissage progressif </p><p>Polytech Marseille , Prog. o. o. 22 </p><p>De C C++ </p><p> Il nest pas possible de dcrire toutes les possibilits de C++ long fastidieux certaines techniques sont viter </p><p> Il faut utiliser la documentation le livre le langage C++ de B. Stroustrup contient un manuel de </p><p>rfrence (gros !) </p><p> Il faut explorer le langage progressivement au fur et mesure des besoins </p><p> Toutes les nouveauts de C++ ne sont pas forcment des fonctionnalits objet gnricit, exceptions, rfrences, redfinition des fonctions, </p><p>fonctions inline . </p></li><li><p>12 </p><p>Polytech Marseille , Prog. o. o. 23 </p><p> Un premier programme C++ </p><p> using namespace std ; </p><p> compilation et excution (sous Unix) </p><p>De C C++ </p><p>#include using namespace std ; int main (void) { cout ./hello hello the world libertad:~/essai_C&gt; </p><p>Remarque sur la norme . </p><p>Polytech Marseille , Prog. o. o. 24 </p><p>De C C++ </p><p> De nombreux mots cls rservs en plus bool catch class const_cast delete dynamic_cast explicit false friend inline mutable namespace new operator private protected public reinterpret_cast static_cast template this throw true try typeid typename using virtual wchar_t </p><p> Des oprateurs plus explicites and (&amp;&amp;) not (!) not_eq (!=) or (||) .. (vrifier que ceux-ci sont connus du compilateur) </p></li><li><p>13 </p><p>Polytech Marseille , Prog. o. o. 25 </p><p>De C C++ </p><p> Commentaires </p><p>x = y ; // commentaire qui va jusqua la fin de la ligne // cest aussi un commentaire /* cela marche aussi mais pas de melange SVP */ </p><p> une seule syntaxe pour les commentaires ! De limportance </p><p> des commentaires explicites, complets, nombreux </p><p> des enttes systmatiques, homognes, prcis </p><p>Polytech Marseille , Prog. o. o. 26 </p><p>De C C++ </p><p> transtypage il existe un transtypage explicite ( privilgier/ transtypage implicite) </p><p> en C en C++ </p><p> int i = 1 ; int i = 1 ; </p><p> float x = 6.28 ; float x =6.28 ; </p><p> i = (int) x; i = int (x) ; </p><p> x = (float) i ; x = float (i) ; </p><p>le transtypage de C est parfois indispensable : </p><p> ptr1 = char *(ptr2) ; // incorrect car 2 termes ptr1 = (char *) ptr2 ;// correct </p><p> le transtypage a un usage prcis et limit (C++ fortement typ) : ne pas en abuser </p><p> 4 oprateurs de transtypage usage trs spcifique </p></li><li><p>14 </p><p>Polytech Marseille , Prog. o. o. 27 </p><p>De C C++ </p><p> Les constantes oubliez le C (prprocesseur (#define), porte des constantes) </p><p>const int i = 12 ; </p><p> la porte de i est restreinte lunit de compilation contenant la dfinition. Si ncessaire dfinir i dans un .h et inclure le fichier (#include ) </p><p> cest une vraie constante Une constante peut tre dfinie par une expression qui peut tre value </p><p> la compilation const int nmax = 100 ; </p><p>const int max = 2 * nmax + 1 ; </p><p> suffixe f (ou F) (float) et u(U) unsigned </p><p>const double pi = 3.141596234134567;// les decimales ne sont pas bonnes </p><p>const float pi_court = 3.141596f ; // les constantes reelles double sinon </p><p>Polytech Marseille , Prog. o. o. 28 </p><p> Dclaration au plus prs des identificateurs dclaration en dbut de bloc (C) </p><p> dclaration au plus prs (attention ensuite au domaine de validit) </p><p>Prendre des rgles de strictes </p><p>De C C++ </p></li><li><p>15 </p><p>Polytech Marseille , Prog. o. o. 29 </p><p>De C C++ </p><p>#include int main (void) { int n = 100 ; float y ; y = 10 ; float x ; x = y ; float z = y ; // attention tout de meme ! for (int i = 0 ; i &lt; n ; i = i + 1) { int j = 10 ; n = n + i + j ; } // attention, j est maintenant inconnu // interdit d'utiliser i ainsi n = n + i + j ; return 1 ; } </p><p>libertad:~/essai_C&gt; g++ portee.c -o portee portee.c: In function `int main()': portee.c:17: warning: name lookup of `i' changed for new ANSI `for' scoping portee.c:10: warning: using obsolete binding at `i' portee.c:17: `j' undeclared (first use this function) portee.c:17: (Each undeclared identifier is reported only once : for each function it appears in.) libertad:~/essai_C&gt; </p><p>Polytech Marseille , Prog. o. o. 30 </p><p> Les entres/sorties de base : plus simples quen C disponible ! </p><p> Des flux (flots) prdfinis dans en particulier cin, cout, cerr : on envoie ou on rcupre des informations de ces flux </p><p>De C C++ : E/S </p><p> #include </p><p>using namespace std ; </p><p>int main (void) </p><p>{ </p><p> int i = 12 ; </p><p> float x, y ; </p><p> cout &gt; y ; </p><p> cerr ./impression i=12 3 4 j'avais demande des reels libertad:~/essai_C&gt; </p></li><li><p>16 </p><p>Polytech Marseille , Prog. o. o. 31 </p><p> Les entres/sorties de base : chane de caractres </p><p>De C C++ : E/S </p><p> #include using namespace std ; int main(void) { char *ptr = "c'est mieux qu'en C"; char nom [128] ; int i ; i = 1 ; cout &gt; nom &gt;&gt; i ; cout </p></li><li><p>17 </p><p>Polytech Marseille , Prog. o. o. 33 </p><p> Le type rfrence type drive de T : T &amp; type rfrence vers T </p><p> Une valeur de type rfrence est une adresse </p><p> Trois diffrences avec les pointeurs 1) initialisation obligatoire 2) toute opration sur la rfrence agit sur lobjet rfrenc (pas sur </p><p>ladresse) 3) la valeur de la rfrence (adresse) ne peut pas tre modifie </p><p> Intrt : mcanisme dchange entre fonctions et . </p><p>De C C++ : les fonctions </p><p>int ii = 0 ; </p><p>int &amp; rr = ii ; // rr fait donc rfrence ii </p><p>rr = rr + 1 ; // agit sur ce qui est rfrenc par rr. </p><p> // Donc ii vaut maintenant 1 </p><p>Polytech Marseille , Prog. o. o. 34 </p><p> Le prototypage </p><p> C++ est fortement typ contrle systmatique entre arguments et paramtres (ou paramtres </p><p>effectifs et paramtres formels) (en nombre, en type) </p><p> prototypage des fonctions est obligatoire </p><p> Utiliser le plus possible des fichiers de prototypage (.h) </p><p>De C C++ : les fonctions </p><p>// attention la fonction puiss...</p></li></ul>

Recommended

View more >