introduction à la programmation par objetdaniel.tschirhart.free.fr/java/cours/introduction...daniel...

26
Daniel Tschirhart La programmation par Objet 1 Introduction à la programmation par Objet

Upload: others

Post on 15-Mar-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

Daniel Tschirhart La programmation par Objet 1

Introduction à la programmation par Objet

Page 2: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 3: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

Daniel Tschirhart La programmation par Objet 3

Exemple d’objet

État

Nom de l’objet

Opérations

Donnée stockée

Page 4: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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();

Page 5: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 6: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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 ?».

Page 7: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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

Page 8: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

Daniel Tschirhart La programmation par Objet 8

Un objet dispose d'une interface

Interface

Nom de la classe

Page 9: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 10: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 11: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 12: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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

Page 13: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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

Page 14: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 15: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 16: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 17: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 18: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 19: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 20: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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

Page 21: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 22: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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

Page 23: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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);

Page 24: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 25: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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.

Page 26: Introduction à la programmation par Objetdaniel.tschirhart.free.fr/java/Cours/Introduction...Daniel TschirhartLa programmation par Objet 20 Le polymorphisme l Intérêt des fonctions

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