patron de polymorphisme et signature moleculaire de l'adaptation ...
Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel...
Transcript of Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel...
Daniel Tschirhart La programmation par Objet 1
Introduction à la programmation par Objet
Daniel Tschirhart La programmation par Objet 2
Toute chose est un objet
l Il faut penser à un objet comme à une variable améliorée : l Un objet stocke des données (attributs),l Mais en plus on peut lui demander de faire
des opérations sur lui-même. l En théorie, on peut prendre n'importe
quel composant conceptuel du problème et le représenter en tant qu'objet dans un programme.
Daniel Tschirhart La programmation par Objet 3
Exemple d’objet
État
Nom de l’objet
Opérations
Donnée stockée
Daniel Tschirhart La programmation par Objet 4
Programme de type objet
l Un programme est un ensemble d'objets dialoguant entre eux en s'envoyant des messages.
l Un message est un appel de fonction appartenant à un objet particulier.l Exemple : Lampe.allumer();
Daniel Tschirhart La programmation par Objet 5
Création de nouveaux objets
l Généralement on crée un nouveau type d'objet à partir d’un paquetage contenant des objets déjà existants.
l Chaque objet a son propre espace de mémoire composé d'autres objets.
Daniel Tschirhart La programmation par Objet 6
Chaque objet est d'un type précis
l Dans le jargon de la POO, chaque objet est une instance de classe, où «classe »est synonyme de «type».
l Une caractéristique importante d'une classe est : «quels messages peut-on envoyer à un objet de cette classe ?».
Daniel Tschirhart La programmation par Objet 7
Un objet possède un type
l En programmation objet, le type d’un objet est appeléclasse «class»
l Une classe permet de décrire un ensemble d'objets partageant des caractéristiques communes
l Une fois qu'une classe est créée, on peut créer autant d'objets qu'on veut de cette classe :l Ampoule lampe1, lampe2;
l puis leur envoyer un message :l lampe1.allumer(); l lampe2.allumer();
Lampe1 Lampe2
Daniel Tschirhart La programmation par Objet 8
Un objet dispose d'une interface
Interface
Nom de la classe
Daniel Tschirhart La programmation par Objet 9
Que cache une interface
l L’interface masque :l L’implémentation : code associé aux
fonctions traitant les messages.l Les attributs : données mémorisant l’état
d’un objet.l Gain apporté par le «masquage»l Réduction des bogues en interdisant la
modification directe des données.l Permettre de changer l’implémentation sans
changer le code du client.
Daniel Tschirhart La programmation par Objet 10
Contrôler l’accès aux membres d’une classe
l Trois spécificateurs d'accès déterminent l’accès au membres d’une classe :l private : seules les fonctions membre de la
classe peuvent accéder à ses éléments.l protected : private moins restrictif. Seules
les fonctions d’une classes possédant une relation filiale peuvent utiliser ses membres.
l public : les définitions qui suivent sont disponibles pour tout le monde.
Daniel Tschirhart La programmation par Objet 11
Réutilisation des objets
l Le gain apporté par la programmation par objet concerne la réutilisation.Deux types de réutilisations sont possibles :l Réutilisation de l'implémentation :
on utilise le code d’une classe existante au sein d’un nouvel objet.
l Réutilisation de l'interface :consiste à cloner une classe, et faire des ajouts ou des modifications à ce clone.
Daniel Tschirhart La programmation par Objet 12
l La réutilisation de l’implémentation n’est pas triviale : cela demande de l'expérience et de l'anticipation pour produire un code réutilisable.
l La manière la plus simple de réutiliser une classe est d'utiliser directement un objet issu de cette classe.
Réutilisation de l'implémentation
Daniel Tschirhart La programmation par Objet 13
l On place l’objet a réutiliser à l'intérieur d'une nouvelle classe l On appelle composition ou agrégation la nouvelle classe
composée à partir de classes existantes.On se réfère souvent à la composition comme à une relation de type «possède - un», comme dans une voiture « possède un moteur ».
l Le diagramme UML ci-dessus indique la composition avec le losange rempli.
Composition
Daniel Tschirhart La programmation par Objet 14
Intérêt de la composition : simplicité
l La composition est la première approche à examiner lorsqu'on crée une nouvelle classe. La composition se caractérise par sa simplicité : l les objets membres de la nouvelle classe
sont généralement privés, ce qui les rend inaccessibles aux programmeurs clients de la classe. Cela permet de modifier ces membres sans perturber le code des clients existants.
Daniel Tschirhart La programmation par Objet 15
Intérêt de la composition : flexibilité
l La composition se caractérise également par par sa sa flexibilité : l on peut changer les objets membres lors la
phase d'exécution, pour changer dynamiquement le comportement du programme.
l L'héritage, décrit juste après, ne dispose pas de cette flexibilité car le compilateur doit placer des restrictions lors de la compilation sur les classes créées avec héritage.
Daniel Tschirhart La programmation par Objet 16
L’héritage ou la réutilisation de l'interface
l L'héritage permet de créer une classe avec les fonctionnalités similaires d’une classe existante.
l L'héritage clone une classe et permet de faire des ajouts ou des modifications à ce clone avec la restriction suivante : si la classe originale (appelée classe de base, superclasse ou classe parent) est modifiée, le «clone» (appelé classe dérivée, héritée, enfant ou sous classe) répercutera aussi ces changements.
l La classe de base contient toutes les caractéristiques et comportements partagés entre les types dérivés.
Daniel Tschirhart La programmation par Objet 17
Exemple d’héritage
l «forme» est le type de base. Chaque forme Carré, Cercle, Triangle a une taille, une couleur, une position, etc... Chaque forme peut être dessinée, effacée, déplacée, peinte, etc...
l A partir de ce type de base, des types spécifiques sont dérivés (hérités) : des cercles, des carrés, des triangles, chacun avec des caractéristiques et des comportements additionnels.
l La hiérarchie des types révèle à la fois les similarités et les différences entre les formes.
Daniel Tschirhart La programmation par Objet 18
Différencier une classe dérivée de la classe de base
l Ces nouvelles fonctions n’appartiennent pas à la classe parent. Cela veut dire que la classe de base n'était pas assez complète pour ce qu'on voulait en faire, on a donc ajouté de nouvelles fonctions.
l Cet usage simple de l'héritage se révèle souvent être une solution idéale. Cependant, il faut tout de même vérifier s'il ne serait pas souhaitable d'intégrer ces fonctions dans la classe de base qui pourrait aussi en avoir l'usage.
l En ajoutant de nouvelles fonctions à la classe dérivée.
Daniel Tschirhart La programmation par Objet 19
Changer le comportant d’une classe dérivée
l En changeant le comportement d'une des
fonctions existantes de la superclasse
l Cela s'appelle redéfinir ou surcharger cette fonction
l Pour redéfinir une fonction, il suffit d’en créer une nouvelle définition dans la classe dérivée.
Daniel Tschirhart La programmation par Objet 20
Le polymorphisme
l Intérêt des fonctions virtuelles :si dans un tableau d’objets Forme, on place des carrés des cercles et des triangles, l’appel àla méthode Dessiner se fera sur les objets réel et non sur la méthode Dessiner de la classe forme
+Dessiner()+Effacer()
Forme-Couleur-Position-Taille
+Dessiner()+Effacer()
Carre
+Dessiner()+Effacer()
Cercle-Rayon
+Dessiner()+Effacer()
Triangle
l Les fonctions Dessiner et effacer sont des fonctions dites virtuelles
l Dans Java toutes les méthodes d’instance sont virtuelles
Daniel Tschirhart La programmation par Objet 21
Quand utiliser l’héritage ou l’agrégation
l L’héritage introduit une relation de typeest comme un entre la classe dérivée et la classe parent.
l L’agrégation introduit une relation de type possède un entre la classe incorporante et la classe incorporée.
Daniel Tschirhart La programmation par Objet 22
Exemple
l Un climatiseur est unrégulateur de température
l Un régulateur de températurepossède au moins un Thermostat
l Un régulateur de températurepossède une pompe à chaleur
Daniel Tschirhart La programmation par Objet 23
Le polymorphismel Les fonctions Dessiner() et Effacer() des
différentes classes sont liés à la compilation aux objets associés.
l Le code suivant déplace un cercle.Cercle unCercle;…unCercle.Effacer();unCercle.setX(20);unCercle.setY(30);unCercle.Dessiner();
l Si on veut déplacer une figure composée de cercles, de carré et de triangles il faut écrire trois séquences similaires à celles ci-dessus.
l L’idéal serait de disposer d’une fonction générique similaire à :void deplacer(Forme& f,
int x, int y){
f.Effacer();f.setX(x); f.setY(y);f.Dessiner();
}...Deplacer(unCercle, 10,20);Deplacer(unCarre, 15, 30);
Daniel Tschirhart La programmation par Objet 24
Classes de base abstraites
l En modélisation objet, il est souvent souhaitable qu'une classe de base ne présente qu'un point de départ pour ses classes dérivées la plupart des fonctions n’étant que déclarées et non définies. l Une telle classe est appelée classe abstraitel Pour rendre une classe abstraite :
En Java on utilise le mot clef abstract associé à la classe.
l Une classe abstraire ne peut être instanciée.
Daniel Tschirhart La programmation par Objet 25
Classes interfaces
l Une classe interface et une classe ne contenant aucun attribut mais uniquement des déclarations de méthodes.
l L’intérêt d’une classe interface est d’obliger l’utilisateur de cette classe a implémenter toutes les fonctions présentes dans l’interface.Une interface est donc un contrat entre une classe et son interface.
Daniel Tschirhart La programmation par Objet 26
Qui programme quoi !
l Les programmeurs se divisent en créateurs de classes et l’utilisateur clientl Les créateurs de classes se focalisent sur la
construction de classes et en exposent quel’interface publique
l Les utilisateurs clients se focalisent sur la construction d’applications
l Au cours de la construction d’une application un utilisateur client peut devenir créateur de classes pour son propre compte