CM rappels-objet

1 369 vues

Publié le

Publié dans : Formation
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 369
Sur SlideShare
0
Issues des intégrations
0
Intégrations
718
Actions
Partages
0
Téléchargements
40
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

CM rappels-objet

  1. 1. Yannick Prié <br />Département Informatique - UFR Sciences et Techniques <br />Université Claude Bernard Lyon 1<br />2011-2012<br />Rappels sur l’objet<br />
  2. 2. Objectifs de ce cours<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />2<br />Rappels sur les concepts fondamentaux liés à la programmation orientée objet<br />TP noté pour remettre en action tous ces concepts<br />
  3. 3. Objets<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />3<br />Objets du monde<br />objets « concrets » <br />cette pierre, ma télévision, ta voiture<br />plus ou moins coopératifs<br />objets « abstraits », « conceptuels » <br />mon compte bancaire, le langage de programmation que j’utilise<br />Catégories d’objets<br />les pierres, les télévisions, les langages de programmation, les comptes bancaires, etc.<br />Toujours relatifs à un certain contexte <br />Choix de découpage du réel<br />
  4. 4. Objets et abstraction<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />4<br />Objets <br />tout ce qui nous permet de réfléchir, parler, manipuler des concepts du domaine, avec <br />un certain nombre de propriétés les caractérisant <br />un certain nombre de comportements connus<br />Abstraction <br />passage du particulier au général<br />« abstraire » des propriétés, des comportements<br />Classes d’objets<br />propriétés et comportements similaires<br />
  5. 5. En informatique<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />5<br />Programme classique<br />structures de données <br />tableau, arbre, etc.<br />opérations sur ces structures de données <br />fonctions<br />Difficultés<br />faire évoluer structures de données et fonctions en même temps<br />réutiliser des structures/fonctions en les spécialisant<br />...<br />
  6. 6. Idée objet en informatique<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />6<br />Regrouper dans un composant <br />des caractéristiques qui concernent une entité informatique <br />structure de données<br />ensemble d’attributs<br />variables avec nom, type, valeur<br />les opérations liées à cette entité<br />ensemble de fonctions <br />appelées méthodes<br />avec : nom, valeur de retour, paramètres<br />
  7. 7. Objet informatique<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />7<br />Etat<br />Ce qu’est l’objet à un instant donné<br />+ Comportement<br />Comment l’objet réagit aux sollicitations<br />+ ...<br />
  8. 8. Etat d’un objet<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />8<br />Ensemble des valeurs des attributs de l’objet à un instant donné <br />L’état d’un objet change pendant sa vie<br />Ma_voiture<br />Ma_voiture<br />Marque : « Fiat »<br />Couleur : bleu<br />Masse : 943 kg<br />Volume essence : 32 l<br />Marque : « Fiat »<br />Couleur : bleu<br />Masse : 943 kg<br />Volume essence : 31 l<br />
  9. 9. Comportement d’un objet<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />9<br />Actions et réactions possibles<br />ensemble d’opérations / méthodes<br />démarrer, rouler, stopper, ajouter_essence<br />Stimulation<br />demander à un objet d’effectuer une méthode = lui envoyer un message<br />Dans un programme<br />ok = ma_voiture.démarrer()<br />vol = ma_voiture.ajouter_essence(15)<br />
  10. 10. Etat et opérations<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />10<br />L’état dépend des opérations effectuées<br />Ex. ma_voiture.volume_essence si ma_voiture.rouler() a été appelée<br />Les opérations dépendent de l’état courant<br />Ex. ma_voiture.démarrer() ne marchera pas si ma_voiture.volume_essence == 0<br />
  11. 11. Représentation d’un objet<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />11<br />Ma_voiture<br />UML : Nom de l’objet<br />(souligné)<br />Marque : « Fiat »<br />Couleur : bleu<br />Masse : 943 kg<br />Volume essence : 32 l<br />Attributs<br />Démarrer()Ajouter_essence(entier v)<br />...<br />Méthodes<br />Formalisme graphique UML (Unified Modeling Language)<br />
  12. 12. Messages et collaboration d’objetsPassage du flot de contrôle<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />12<br />1- Démarrer()<br />2- Mettre_en_route()<br />3- Essence?()<br />Le conducteur<br />Réservoir<br />4- Quantite?()<br />Ma voiture<br />Le moteur<br />13- Température()<br />Le frein roue AvDr<br />14- Mesure_temp()<br />
  13. 13. Accès aux attributs/méthodes <br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />13<br />Accès depuis un autre objet<br />Attribut/méthode public <br />tout objet peut y accéder<br />Attribut/méthode privé<br />aucun autre objet ne peut y accéder<br />seul l’objet lui-même peut utiliser ses attributs et méthodes <br />comme un programme « indépendant »<br />Attribut/méthode protégé<br />accès limité <br />
  14. 14. Objet informatique<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />14<br />État<br />Ce qu’est l’objet à un instant donné<br />+ Comportement<br />Comment l’objet réagit aux sollicitations<br />+ Identité<br />Ce qui identifie l’objet<br />
  15. 15. Identité d’un objet<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />15<br />Existence propre de l’objet<br />identification non ambiguë<br />indépendante de l’état<br />géré par le système informatique <br />Une_de_plus<br />ref23<br />ref56<br />ref15<br />Marque : «Fiat»<br />Couleur : rouge<br />Masse : 943 kg<br />Volume essence : 32 l<br />Ma_voiture<br />ref3<br />Marque : « Fiat »<br />Couleur : bleu<br />Masse : 943 kg<br />Volume essence : 32 l<br />Sa_voiture<br />Marque : « Fiat »<br />Couleur : rouge<br />Masse : 943 kg<br />Volume essence : 56 l<br />Encore-une<br />Marque : « Peugeot »<br />Couleur : rouge<br />Masse : 867 kg<br />Volume essence : 12 l<br />
  16. 16. Liens entre objets<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />16<br />Pour pouvoir envoyer un message à un objet, il faut le « connaître »<br />Ex. l’objet Le_conducteur connaît l’objet Ma_voiture<br />Connaître un objet revient à avoir une référence qui lui correspond<br />Attributs, variables, paramètres de méthodes…<br />ref15<br />ref67<br />Ma_voiture<br />Le_conducteur<br />ref3<br />Encore-une<br />Marque : « Fiat »<br />Couleur : bleu<br />Masse : 943 kg<br />Volume essence : 32 l<br />Conducteur : ref67<br />Sexe : M<br />Couleur_yeux : bleu<br />Age : 45Voitures : (ref15, ref3)<br />Marque : « Peugeot »<br />Couleur : rouge<br />Masse : 867 kg<br />Volume essence : 12 l<br />
  17. 17. En bref<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />17<br />Cohérence interne des objets<br />données + traitements<br />Faible couplage entre l’objet et l’environnement<br />envoi de messages entre objets qui se connaissent<br />Insertion dans un scénario de communication par envoi de messages<br />objets clients : à l’origine d’une interaction<br />objets serveurs : répondent à la sollicitation<br />en général : client et serveur<br />
  18. 18. Que nous manque-t-il ? <br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />18<br />Soient 2 objets :<br />même structures de données (attributs)<br />même comportement (opérations)<br />Il faut les décrire abstraitement de la même manière<br />Ma R12<br />Ta 205<br />Marque : Renault<br />Couleur : bleu<br />Marque : Peugeot<br />Couleur : rouge<br />Démarrer()<br />Démarrer()<br />
  19. 19. Notion de classe<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />19<br />Les objets sont regroupés à l’aide aux classes<br />Une classe est une abstraction décrivant les propriétés communes des objets qui en sont des instances<br />Une classe décrit une infinité d’instances<br />Un objet sait toujours à quelle classe il appartient<br />
  20. 20. Classification<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />20<br />Ta 205<br />Marque : Peugeot<br />Couleur : rouge<br />Voiture<br />Démarrer()<br />Marque : String<br />Couleur : [bleu, rouge, …]<br />Ma R12<br />: Voiture<br />Marque : Renault<br />Couleur : bleu<br />Démarrer()<br />Démarrer()<br />UML : nom de la classe<br />Instanciation<br />…<br />
  21. 21. Dans un programme OO<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />21<br />On définit des classes <br />leur attributs, privés et publics<br />leurs méthodes, privées et publiques<br />On instancie des objets à partir des classes<br />On lance/gère la collaboration<br />envoi de messages à des objets<br />Exécution du programme : des objets <br />qui s’envoient des messages<br />qui changent d’état<br />
  22. 22. Résumé<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />22<br />Objet = état + comportement + identité<br />Attributs<br />Méthodes<br />(référence)<br />Classe <br />Abstraction <br />Définit une infinité d’objets instances<br />
  23. 23. Liens entre objets <br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />23<br />UML : nom de lien<br />Ottawa<br />Canada<br />A-pour-capitale <br />SNCF<br />Luc<br />employeur<br />employé<br />employeur<br />Luc<br />employé<br />UML : noms de rôle<br />
  24. 24. Associations entre classes<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />24<br />Associations simples<br />Liens entre objets  associations entre classes<br />Ville<br />Pays<br />A-pour-capitale<br />1<br />1<br />Entreprise<br />Personne<br />1..n<br />employeur<br />employé<br />1<br />UML : cardinalités de l’association<br />
  25. 25. Associations entre classes<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />25<br />Agrégation <br />Association<br />non symétrique<br />non nommée<br />sémantique peu claire : éviter<br />Composition <br />Association<br />non symétrique<br />nom nommée<br />sémantique claire <br />composition au sens strict : les composants n’ont aucune indépendance par rapport au composé<br />attention à ne pas sur-utiliser<br />*<br />Moteur<br />Voiture<br />1<br />Patient<br />Médecin<br />*<br />1<br />FenêtreGraphique<br />Zone boutons<br />Zone dessin<br />…<br />BArrêter<br />BLancer<br />
  26. 26. Spécialisation / généralisation entre classes<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />26<br />Véhicule est une généralisation de voiture<br />Bicyclette est une spécialisation de véhicule<br />Véhicule<br />Marque : String<br />Couleur : [bleu, rouge, …]<br />Démarrer()<br />Vitesse()<br />Bicyclette<br />Voiture<br />Marque : String<br />Couleur : [bleu, rouge, …]<br />Nb_plateaux : integer<br />Marque : String<br />Couleur : [bleu, rouge, …]<br />Volume_essence : integer<br />Démarrer()<br />Freiner_avec_les_pieds()<br />Vitesse()<br />Démarrer()<br />Ajouter_essence(integer)<br />Vitesse()<br />
  27. 27. Généralisation / spécialisation<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />27<br />Mise en place d’une hiérarchie de classes<br />Voiture est une sous-classe de Véhicule <br />Implémentation : partage d’attributs et héritage<br />Une sous-classe hérite des attributs et des méthodes de sa super-classe<br />Héritage multiple : plusieurs super-classes<br />à manipuler avec beaucoup de précautions<br />possibilité d’implémenter avec des interfaces<br />Ajout d’éléments propres <br />Une sous-classe peut ajouter des attributs et méthodes à ceux qu’elle possède par héritage<br />Surcharge<br />Une sous-classe peut redéfinir les attributs et méthodes de sa sur-classe<br />
  28. 28. Exemple<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />28<br />Véhicule<br />Voiture<br />Marque : String<br />Couleur : [bleu, rouge, …]<br />Marque : String<br />Couleur : [bleu, rouge, …]<br />Volume_essence : integer<br />Freiner()<br />CalculVitesse()<br />Freiner()<br />Ajouter_essence(integer)<br />CalculVitesse()<br />Bicyclette<br />Attributs hérités<br />Marque : String<br />Couleur : [bleu, rouge, …]<br />Nb_plateaux : integer<br />Nouvel attribut <br />Surcharge de méthode<br />Freiner()<br />ChangerPlateau()<br />CalculVitesse()<br />Nouvelle méthode<br />Méthode héritée<br />
  29. 29. Polymorphisme<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />29<br />Ma R12<br />Marque : Renault<br />Couleur : bleu<br />Démarrer()<br />Une même opération peut se comporter différemment pour différentes classes / objets<br />Suivant l’objet, le langage sélectionne la méthode à utiliser pour la classe en cours<br />Il n’y a pas besoin de connaître toutes les méthodes existantes pour en implanter une nouvelle <br />Mon vélo<br />Marque : Peugeot<br />Couleur : bleu<br />Nb_vitesse : 21<br />Démarrer()<br />
  30. 30. Exemple polymorphisme<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />30<br />Exemple d’utilisation<br />Def Envoyer_au_lit():<br /> For a in Animaux:<br /> a.dormir()<br />Gardien<br />Animal<br />1<br />n<br />Animaux<br />Envoyer_au_lit()<br />dormir()<br />Paresseux<br />Tigre<br />Lion<br />dormir()<br />dormir()<br />dormir()<br />Tout le temps<br />Sur le dos<br />Sur le ventre<br />
  31. 31. Classe abstraite<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />31<br />Classe qui n’est pas utilisée pour l’instanciation, et regroupe des propriétés et comportements<br />Une classe dont certaines méthodes seront obligatoirement redéfinies dans les classes utilisées<br />Méthodes abstraites<br />Utilisation : pas d’instances directes, mais des instances directes de sous-classes<br />Animal (méthode dormir)<br />Vehicule (méthode freiner)<br />Intérêt majeur pour une évolution maîtrisée du système de classes<br />
  32. 32. Contrôle d’accès des attributs et méthodes<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />32<br />3 types :<br />privé : limitation à la classe<br />public : accès pour toute classe<br />protégé : accès limité aux sous-classes<br />A<br />C<br />publique m1()<br />protégé m2()<br />privé m3()<br />B<br />a.m1() OK<br />a.m2() NON<br />a.m3() NON<br />instanciation<br />self.m1() OK<br />self.m2() OK<br />self.m3() NON<br />a:A <br />
  33. 33. Organisation de classes<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />33<br />Regroupement/organisation de l’ensemble des classes de l’application<br />hiérarchie de classe<br /> + associations entre ces classes <br />Provenance<br />certaines classes sont livrées avec le système<br />certaines proviennent de paquetages additionels, récupérés ou achetés<br />certaines sont fabriquées par le programmeur<br />Organisation en paquetages <br />ensemble de classes fortement liées (collaboration)<br />qui rendent des services (interfaces)<br />
  34. 34. Définition d’une classe<br />Déclaration<br />éventuellement sous-classe d’une ou plusieurs autres classes<br />éventuellement implémentant une interface<br />Attributs<br />types simples<br />autres objets<br />Méthodes<br />constructeur utilisé à l’instanciation <br />initialiser les attributs<br />réserver de la mémoire<br />appeler le constructeur de la super-classe si besoin<br />destructeur : utilisé à la destruction<br />libération de la mémoire<br />autres<br />sélecteurs : renvoient une partie de l’état de l’objet<br />modificateurs : modifient l’état<br />calcul<br />..<br />34<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />
  35. 35. Attributs et méthodes de classes<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />35<br />Accessibles au niveau de la classe et non des objets<br />Voiture<br />Nombre de marques : int<br />Marque : String<br />Couleur : [bleu, rouge, …]<br />Volume_essence : integer<br />getNbMarques()<br />Freiner()<br />Ajouter_essence(integer)<br />CalculVitesse()<br />
  36. 36. Instances objets<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />36<br />Création de l’objet <br />avec des paramètres ou non<br />appel du constructeur adapté <br />allocation mémoire<br />Vie de l’objet <br />réception et traitement de messages<br />envoi de messages à d’autres objets<br />Mort de l’objet<br />appel du destructeur<br />
  37. 37. Critères caractéristiques de l’OO<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />37<br />Encapsulation données / traitements<br />Identité <br />Abstraction / classification <br />Généralisation / héritage<br />Polymorphisme<br />
  38. 38. TP noté<br />2010-2011 - Yannick Prié - Université Claude Bernard Lyon 1 <br />38<br />JAVA<br />Jeu de dames<br />

×