Partie II: Introduction à l orienté-objet Références: C++ from the Beginning, Jan Skansholm, Addison Wesley, 1997 Chapitres couverts Chapitre 6 Object-oriented Program Development Chapitre 7 Classes Chapitre 8 More about Classes Chapitre 12 Dynamic Data Structures 1
Contenu Chapitre 12 : Programmation orienté-objet Analyse Conception Programmation Chapitre 13: Classes Déclaration, définition, utilisation Constructeurs, destructeurs Opérateurs Chapitre 14: Structures de données dynamiques Allocation de mémoire Listes Applications : piles, files, listes généralisées 2
Chapitre 12 : Programmation orienté-objet L exécution d un programme OO est effectué par des objets Chaque objet a sa propre identité a ses propres données (des variables ou d autres objets) fait des requêtes aux autres objets en leur envoyant des messages a ses propres fonctions (appelées méthodes) Chaque objet est une instance d une classe: une classe «groupe» les objets qui ont le même comportement (~ types et variables) Les classes sont organisées en une structure arborescente, appelée hiérarchie d héritage (non 3 expliquée dans ce cours)
Exemple simple: une réservation de train Alice désire avoir une réservation pour aller par train à Paris dimanche prochain. Alice demande à Tom (qui travaille pour une agence de voyage) d effectuer une réservation pour un train pour Paris. Tom demande à Sally (qui travaille pour la compagnie ferrovière) l horaire et informe Alice Alice marque son accord pour l horaire à Tom Tom confirme à Sally... 4
Exemple simple: une réservation de train Interactions entre agents Alice Tom Agence de voyage Sally DB des horaires Compagnie de train Note: d autres agents 5 peuvent être impliqués
Elements de programmation OO L exécution (exemple le scenario réservation ) est réalisé par des Objets Exemple: Alice, Tom, Sally, DB,... Les objets se font des requêtes à travers l envoi de Messages. Exemple : Alice demande à Tom d effectuer une réservation pour un train pour Paris Le recepteur du message peut l accepter et effectuer l action en utilisant ses propres données et renvoie un résultat. Les comportements possibles d un objet est donné par les méthodes définies pour cet objet (~ procédures associées). 6
Encapsulation L encapsulation OO est le groupement de données et de procédures traitant ces données. Données Comportement 7
Information Hiding (Masquage d information) Technique de masquage des détails internes Seul un objet est peut modifier ses données (noninterférence) DATA BEHAVIOR Interface 8
Que peut modéliser une classe? Choses tangibles: Avion Voiture Forme Document Personne Imprimante Rôles Employé, Employeur Pilote, Passager Joueur, Supporter, Journaliste Incidents (Evénements) Décision Décollage,, Crash Intéractions Contrat Mariage 9
Exemple Classe Ascenseur Direction Etage Aller_vers( ) Stop ( ) Quel_étage ( ) Objets Asc1BatUA:ascenseur Haut 2 Asc2BatNO:ascenseur Stationnaire 8 10
Objet Un objet a: Un état (ensemble des valeurs des attributs) Un comportement Une identité La structure et le comportement des objets similaires est défini par une classe. 11
Classe (Notation UML) Attributs de données Visibilité (+ : public; # : protected; - : private) Nom Type Valeur initiale Méthodes (opérations) Visibilité Nom Arguments (paramètres) Type de retour Window + position : Coordinate = (0,0) # lenght : Integral # height : Integral - visibility : Boolean + display () : Boolean + create (position : const Point&) }Signature 12
Attributs // champs en C++ Exemple sans méthode : tableau avec clé et information satellite: typedef char TypeOfKey; typedef int TypeOfElem; class Entree { public: Attributs de la classe TypeOfElem e; TypeOfKey k; }; typedef Entree Vecteur[max]; Entree x; Vecteur v; x.e = 47; x.k = 'a'; v[3].e = 16; v[3].k = 'h'; 13
Relations entre objets Alice DB des horaires Tom Sally Agence de voyage Compagnie de train Plusieurs types de relations peuvent exister entre des objets (classes) Exemples: Anne est la mère de Julie Un bateau est un véhicule Anne est la propriétaire de cette voiture Ma voiture a 4 roues 14
4 types de relations Association Aggrégation Composition Généralisation (Héritage) (pas dans ce cours) Remarque: l exemple précédant est un diagramme d objets UML Généralement on regarde le diagramme de classe qui montre les liens entres les classes définies dans l application (UML est un langage graphique utiliser 15 pour analyser les systèmes OO à concevoir)
Association Représente la Relation connaît entre les classes (aussi appelé lien) Exemples Est marié à Travaille pour Est le propriétaire de 16
Association : notation UML Diagramme de classe Rôle Nom employé Travaille pour employeur Personne * 0..1 Société Multiplicity Multiplicité 17
Association Caractéristiques : Association nom Pour chque extrémité Multiplicité rien : non spécifié * : zéro ou plus 0..1 : optionel 1 : 1 et un seul 1 Nom de rôles Navigabilité Note: on aura les mêmes caractéristiques pour les Aggrégation & Composition (voir plus bas) 18
Association: notation UML Diagramme d objet John : Personne OA Group : Société Isabelle : Personne Alain : Personne Anne : Personne IBM : Société 19
Association: UML Notation Diagramme de classe Ordre * 1 Client Navigabilité 20
Association: other example Diagramme de classe 0..1 patron Personne 0..* employé Diagramme d objet John:Personne employé patron Mary:Personne 21
Agrégation & Composition Represente la relation est composé de ou fait partie de entre instances de classes Examples Une voiture a un moteur Un segment est formé de 2 points Un polygone est dessiné dans un certain style Avec la composition l objet faisant partie peut appartenir qu à un seul contenant (durée de vie plus petite ou égale) 22
Aggrégation & Composition : Notation Diagramme de classe Contrainte Polygone * Composition {ordered} Agrégation 3..* 1 Points Style couleur 23
Relation «est» (héritage) Une (sur)classe possède des caractéristiques communes à d autres (sous)classes Une hiérarchie peut être construite Héritage => réutilisation, librairies, Exemple d héritage Attributs communs véhicule héritage voiture bateau train vélo Attributs spécifiques 24
Analyse OO - Relation «est» Exemple d héritage Attributs: nom, prénom Personne Attributs: ceux de la personne, n inscription année Etudiant * * * Cours Professeur * * 25
Analyse OO Objectif : analyser et spécifier les besoins, comprendre et décrire ce que le programme doit faire Démarche (itérative; partie «structure statique») Trouver les objets faisant partie du modèle Définir leurs attributs Etablir les relations qui les relient 26
Analyse OO Comment trouver les objets? Considérer les entités réelles de l environnement Partir de scénarios représentatifs (partie dynamique et comportementale) et vérifier que tous les services que doivent rendre les objets sont disponibles Relations : est composé de (agrégation et composition), connaît (association), est (héritage) 27
Conception OO Le modèle de l analyse est rendu plus concret, et le «comment les problèmes doivent être résolus?» est abordé Deux parties Conception du système : modularisation du système en sous-systèmes, communication avec l environnement Conception détaillée des objets : ajouter les détails nécessaires à la couverture des fonctions désirées et des messages à traiter entre clients et classes - choix des algorithmes (opérations à effectuer) et des structures de données (construction interne) 28
Programmation OO - Un «bon» programme Correct : ne pas contenir d erreurs par rapport à ce qui a été spécifié (mais la spécification est-elle correcte?) Efficace : utiliser les ressources au mieux Réutilisable : permettre à d autres programmes d être composés sur base de modules déjà prêts et testés ; nécessite une conformité de conception, des données, des appels systèmes, et des interfaces bien définies Diminue le coût de développement Diminue le temps de développement Améliore la qualité des logiciels produits Adaptable : permettre la maintenance (correction d erreurs, ajout ou modification de fonctionnalités) ; basé sur une grande cohésion interne, un faible couplage externe, et le principe d information hiding 29
Programmation OO - 3 concepts clés Encapsulation et information hiding Cacher tout ce qui définit les propriétés des objets en un seul endroit, de telle sorte que d autres objets ne puissent ni voir ni accéder à ces informations Héritage Partir d objets existants et leur ajouter / supprimer / modifier des attributs en vue de créer de nouveaux objets Généricité Créer des codes qui puissent être utilisés avec différentes classes d objets, telles que les containers (liste, ensemble) 30