Vous êtes sur la page 1sur 215

Domaine: MI 2ième Année Licence Académique

Filière: Informatique Spécialité: systèmes Informatiques


Semestre: 5

Programmation Orientée Objet POO

Année : 2023/2024
Plan du Module
1.Introduction à la Programmation Orientée Objet
2.Classes et Objets
3.Héritage, polymorphisme et Abstraction
4.Interface, implémentation et Paquetage
5.Classes Courantes en Java
6.Gestion des Exceptions
7.Interfaces graphiques
2
A propos du cours
Ce cours est conçu comme une introduction à la programmation orientée objet.

 Pré-requis: Le cours d’algorithmique et structures des données


 Java sera utilise comme exemple de langage oriente objet pour illustrer les
notions vues en cours.
 Eclipse sera utilise comme environnement de développement.
A propos du cours
Objectifs:
• Introduire l’approche orientée objet, A l’issue du cours,
• Vous aurez pris conscience de l’importance d’appliquer les
principes de l’oriente objet (Abstraction, encapsulation, héritage,
polymorphisme..etc.).
• Vous serez capables de concevoir une petite application en utilisant
l’approche orientée objet.
• Vous serez capable de l’implémenter en java.
Bibliographie
Il existe de nombreux livres sur java…

 Claude Delannoy, « Programmer en Java », Eyrolles


http://java.sun.com/docs/books/jls/

 Thinking in Java by Bruce Eckel

 http://www.ibiblio.org/pub/docs/books/eckel/

 Lemay L, « Le Programmeur JAVA 2 », Campus Press.

 Horstmann et Cornell, « Au coeur de Java 2 Volume I - Notions fondamentales »,


Mise en œuvre d’une application
Idée

Désigne Construction Résultat

Idée

Modélisation Programmation Résultat/logiciel


Mise en œuvre d’une application
Plusieurs étapes sont nécessaires pour mettre en œuvre une application :

• Etape 1 :Définition du problème (Idée)


• Etape 2 :Modélisation d’une solution
• Etape 4 :Implémenter la solution (Programmer)
• Etape 5 :Mise au point du programme (Tester la solution)
Mise en œuvre d’une application
Un paradigme de programmation:

• Une façon d’aborder un problème.


• Une manière de penser.
• Concrétisation d’une philosophie de programmation.
• Un style de programmation.
Mise en œuvre d’une application
Idée

Modélisation Programmation Résultat/logiciel


POO POO

Génie logiciel
Paradigmes des langages de programmation
Il existe 4 principaux paradigmes de programmation:
La programmation impérative (procédurale): Pascal, C, Fortran.
(programme = algorithme + structure de données).
La programmation fonctionnelle : (adopte une approche beaucoup plus
mathématique de la programmation) Lisp, Scheme, Haskell.
La programmation logique : (la description d’un programme est sous
forme de prédicats) Prolog, GHC.
La programmation Orientée Objet : Python, C++, Java, C#
Paradigmes des langages de programmation
Comment
programmer ce
logiciel ? Procédure et fonction

Il faut choisi un Programmation


Procédurale
paradigme

Programmation
Orientée objet

Classe / objets
logiciel
Paradigmes des langages de programmation
Dans la programmation Dans La programmation
procédurale orientée objet
• On apprend à subdiviser un problème en • Un programme informatique est considéré
une série d’étapes simples (des fonctions) comme étant un ensemble d’objets
permettant de résoudre un problème. fonctionnant ensemble pour effectuer une
tâche.
• D’abord, on décide de la manière dont on
va manipuler les données, ensuite le type • On s’intéresse d’abord aux données, avant de
de structures de données les plus déterminer l’algorithme qui sera utilisé pour
appropriées pour faciliter cette opérer sur ces données.
manipulation.
• Les objets coopèrent par envois de messages
• Donne des logiciels difficiles à maintenir et (Appel de méthodes)
à réutiliser
Paradigmes des langages de programmation
Programmation Procédurale

Programme principal
- données
Fonction() Fonction()
- données

- données Fonction() Fonction() Fonction()


- données
Fonction() Fonction()
- données
Paradigmes des langages de programmation
Programmation Orientée objet

objet
objet
objet
données
données
données
Fonction()
Fonction()
Fonction()

objet
objet objet
données
données données
Fonction()
Fonction() Fonction()
La programmation Orienté objet
Définition:
La POO est une méthode d’implémentation dans laquelle les
programmes sont organisés sous formes de collections coopératives
d’objets, dont chacun représente une instance d’une classe
quelconque et dont toutes les classes sont membres d’une hiérarchie
de classes unis à travers des relations d’héritage.
La programmation Orienté objet
Un algorithme dans l’approche orienté objet sera
essentiellement vu comme un ensemble d’objets auxquels
l’utilisateur envoie des messages et qui s’en envoient pendent le
fonctionnement. Ces objets seront toujours pour l’utilisateur des boites
noires et qui contiendront des variables locales, inconnues de
l’environnement, et qui ne s’y intéressera d’ailleurs pas. Le seul moyen
d’accéder à ces objets sera l’envoie des messages qu’ils sont
capables de comprendre.
C’est quoi un Objet ?
L’objet est une entité logicielle qui représente la brique de base de la
POO:
L’objet se caractérise par :
1. Une identité (référence ou handle)
2. Un état.
3. Un comportement.
C’est quoi un Objet ?
Dans le monde réel, un objet peut être: un étudiant, un enseignant, un
téléphone, une voiture, etc.
Exemple: Une voiture
L’état = Nom, Marque, type, nombre de vitesses, Année, couleur,…
Le comportement = rouler, tourner, accélérer, changer de vitesse,
freiner,…
C’est quoi un Objet ?
Exemple: Un rectangle est défini par:
(X ,Y) Longueur

Largeur Couleur

• ses attributs : X,Y, longueur, largeur, couleur.


• son comportement déclenché par des méthodes:
 Dessiner.
 Calculer son périmètre.
 Calculer sa surface.
C’est quoi un Objet ?
Dans la POO un objet est un mélange de variables et de fonctions ou procédures.
L’objet :
 L’objet possède une identité unique qui le distingue des autres objets indépendamment
de son état et de son comportement.
 maintient son état dans des variables appelées attributs ou champs.
 Implémente son comportement à l'aide de fonctions ou procédures appelées méthodes.
Remarque: Deux objets peuvent avoir le même état et le même comportement mais ont
toujours des identités différentes, et réciproquement, le comportement et l’état d’un objet
peuvent changer durant l’exécution sans que cela affecte son identité.
Cycle de vie d’un objet
Un objet en programmation orienté objet (POO) a un cycle de vie de 3
phases :

1. Construction (en mémoire).


2. Utilisation (changements d’état par affectations, comportements par
exécution de méthodes)
3. Destruction
La classe
La classe est une description d’une famille d’objets ayant une même structure
et un même comportement. Elle est caractérisée par :
• Un nom
• Une composante statique : des champs (ou attributs) nommés ayant
une valeur. Ils caractérisent l’état des objets pendant l’exécution du
programme
• Une composante dynamique : des méthodes représentant le comportement
des objets de cette classe. Elles manipulent les champs des objets
et caractérisent les actions pouvant être effectuées par les objets.
Représentation graphique d’une classe

Nom

Champs

Méthode
Classe et objet
 La classe est la machine qui fabrique les objets. Elle peut être considérée
comme un moule ou un modèle à partir duquel on peut créer des objets.
 Une classe est un modèle de définition pour des objets partageant des
caractéristiques communes, mais l'état de chaque objet est indépendant des
autres
 Des objets créés à partir de la même classe auront des aspects semblables
(mêmes attributs et même méthodes).
 Un objet d’une classe est aussi appelé instance de cette classe.
Classe et objet
 Exemple
La classe

Les objets
(instances)
Classe et objet Etudiant

 Exemple String Nom;


La classe String Prénom;
Int Age;
Char Sexe;

Boolean Etudier()
Boolean Transférer()

E3:Etudiant
E1:Etudiant E2:Etudiant

Nom: Richard Nom: Thomas Nom: Emma


Les objets Prénom: Simon Prénom: Louis Prénom: Vincent
(instances) Age: 24 Age: 21 Age:23
Sexe: M Sexe: M Sexe: F
Etudier()
Transférer() Etudier() Etudier()
Transférer() Transférer()
Classe et objet
• Les objets R1,R3 ont les mêmes valeurs d’attributs, on dit qu’ils sont
égaux car ils ont le même état. Ce sont néanmoins deux objets distincts
car ils ont des identités différentes .

• Les objets d’une même classe ont toujours une identité distincte et
généralement un état distinct.
Concepts de base de la POO
 La Programmation orienté Objet (POO) est basée sur les concepts
suivants:

• L’encapsulation
• L’héritage
• Le polymorphisme
L’encapsulation
 L’encapsulation est un principe clé dans la POO.

 Elle consiste à regrouper des données (attributs) et un


comportement (méthodes) dans une même classe et à
réglementer l’accès aux données de l’extérieur (par d’autres objets).

 Cela signifie qu’il n’est pas possible d’agir directement sur les données
d’un objet ; il est nécessaire de passer par ses méthodes.

 L’appel de la méthode d’un objet est aussi appelé envoi de message à


l’objet.
L’encapsulation
 Le principe de l’encapsulation est que, vu de l’extérieur, un objet se
caractérise uniquement par ses méthodes visibles appelée
interface. Les données, elles, restent invisibles et inaccessibles.

 Ce principe permet de concevoir des programmes (logiciels) plus


sûrs, plus lisibles et plus faciles à maintenir, car une modification
de la structure des données d’un objet ne se répercute pas sur
les objets qui communiquent avec lui (invoquent ses méthodes).
L’héritage
 L’héritage est un autre concept important en POO.
 Il permet de définir une (ou plusieurs) nouvelle classe (appelée classe
dérivée, classe fille ou sous- classe) à partir d’une classe existante
(appelée classe de base, classe mère ou super-classe), à laquelle on
ajoute de nouvelles données et de nouvelles méthodes.
 L’héritage facilite largement la réutilisation de produits existants, ce qui
est un avantage important de la POO.
Classe et objet
 Exemple

La super-classe ou bien
la classe de base (mère)

Les sous classes ou


bien les classes
dérivées (filles)
Le Polymorphisme
 Le terme polymorphisme issu du grec signifie la faculté de prendre
plusieurs formes.

 C’est un concept puissant de la POO qui vient compléter celui de


l’héritage.

 En POO, cela peut s’appliquer aussi bien aux objets qu’aux méthodes.
Le Polymorphisme
Polymorphisme d’objets
 Il permet une certaine flexibilité dans la manipulation des objets en exploitant la
relation d’héritage entre les classes.
 Il applique la règle suivante :
Si la classe B est dérivée de la classe A
alors un objet de la classe B peut aussi être considéré comme étant un objet de la
classe A.
Le Polymorphisme
Polymorphisme de méthodes, Il exprime le fait que :
 Des méthodes d’une même classe puissent avoir le même nom et des
signatures différentes (ceci est appelé surcharge ou surdéfinition de
méthodes)
 La même méthode peut se comporter différemment sur différentes classes de
la hiérarchie. Autrement dit, des méthodes peuvent avoir des noms
similaires dans une hiérarchie de classes et être différentes. Ceci est
appelé redéfinition ou spécialisation de méthodes.
Le Polymorphisme
 Exemple

Quel type de
polymorphisme?
Domaine: MI 2ième Année Licence Académique
Filière: Informatique Spécialité: systèmes Informatiques
Semestre: 5

Programmation Orientée Objet POO

Année : 2023/2024
Cours précédent
Présentation du paradigme de programmation orienté objet.
Quelques concepts de base:
• Encapsulation.
• Héritage.
• Polymorphisme.
Encapsulation
Encapsulation: est concept de base la POO. Elle consiste à regrouper des
données (attributs) et un comportement (méthodes) dans une même classe et à
réglementer l’accès aux données de l’extérieur (par d’autres objets).

→ masque les détails au niveau de l’implémentation.


La notion de classe (1)
La classe est une description d’une famille d’objets ayant une même structure
et un même comportement. Elle est caractérisée par un nom, une composante
statique (les attributs) et une composante dynamique (les méthodes).
• Le symbole – veut dire privée
Nom
• Le symbole + veut dire publique Point
-X:int
-Y:int
Attributs

+initialiser ()
+déplacer() Méthodes
+afficher()
La notion de classe (2)
• La classe peut être considérée comme un moule ou un modèle à partir duquel on peut
créer des objets.
• Un ensemble d’objets ayant les mêmes caractéristiques et les mêmes comportements
appartient à la même classe:
 Tous les livres appartiennent à la classe livre.
 Tous les étudiants appartiennent à la classe étudiant
• Une classe ne peut pas être utilisée pour exécuter des programmes. Pour cela il faut
l’instancier (créer des objets).
• La classe sert simplement à décrire la structure des objets (leurs attributs et leurs
méthodes)
La notion de classe (3)
 Supposons qu’un point est représenté par deux coordonnées entières:
abscisse et ordonnée.
 Nous devons donc définir deux attributs dans la classe Point: X et Y
 Supposons que nous souhaitons pouvoir:
• Initialiser les coordonnées d’un point.
• Déplacer ce point dans le plan.
• Afficher les coordonnées de ce point.
 Nous devons donc disposer de trois méthodes dans la classe Point :
• Initialiser . déplacer . afficher
La notion de classe (4)
Définition d’une classe Point (code en Java)
Le modèle général de définition d’une classe en Java est :

class Point
{
// instructions de définition des champs et des méthodes de la classe
}
La notion de classe (5)
Les Attributs
• Les attributs sont les données de la classe.
• Un attribut peut être:
• de type élémentaire: entier (byte, short, int, long), réel (float, double), booléen,
caractère.
• de type objet:
• Les déclarations des attributs peuvent se faire n’importe où à l’intérieur de la classe,
mais en général on les déclare au début ou à la fin de la classe.
Point Cercle
-X:int
Composition - centre:Point
-Y:int - rayon:double

+initialiser ()
+déplacer() +déplacer()
+afficher() +afficher()
La notion de classe (6)
Définition des attributs de la classe Point (code en Java)

class Point {
private int x; // abscisse
private int y; // ordonnée
// définition des méthodes
}

Le mot clé private précise que les champs x et y ne sont pas accessibles de l’extérieur de
la classe (c à d en dehors de ses propres méthodes). A l’opposé on utilise le mot clé public.
La notion de classe (7)
Les méthodes(1)
• Une méthode est un regroupement d’instructions semblable aux fonctions et procédures sauf
qu’elle s’exécute toujours sur un objet précis.
• Seules les méthodes de la classe ont droit à l’accès aux attributs (privés) de cette classe.
• Une méthode peut être:
• publique: accessible en dehors de la classe (les autres objets)
c.à.d. visible dans l’interface.
• privée: nécessaire à l’implémentation interne de la classe mais n’est pas visible dans
l’interface.
La notion de classe (8)
Les méthodes (2)
• Les méthodes ont toujours un type retourné « TypeRetourné ».
• Le TypeRetourné indique le type de la valeur que la méthode « retourne » quand on l’invoque.
• C’est le TypeRoutourné est void signifie que la méthode ne retourne rien (pas de return à la
fin, équivalent au procédure)
• Elle peut recevoir un ou plusieurs arguments entre parenthèses, qu’elle utilisera en cours de
son exécution.
• La signature d’une méthode:
• Le nom de la méthode.
• La liste des types de ses arguments.
•Pour invoquer une méthode, il faut toujours respecter
La notion de classe (9)
Définition des méthodes de la classe Point (code en Java)

Nom de la
Mode d’accès méthode

public void initialiser (int absc, int ord)


{
x = absc;
y = ord;
Type de la
valeur de retour Les arguments
}
La notion de classe (10)
Le code complet en Java de l’exemple Point
La notion d’objet (1)
• Les objets sont les moulages fabriqués à partir de la classe.
• Un objet d’une classe est aussi appelé instance de cette classe.
• Une fois qu’on a la classe, on peut créer autant d’objets (instances) que l’on veut.
• Ces objets auront:
• Des identités différentes.
• Des états définis par les mêmes attributs mais avec des valeurs pouvant être différentes.
• Un comportement identique (Mêmes méthodes).
Classe et objet (2)
• Une classe est un modèle.
• Une classe est un texte logiciel.
• Elle existe dans le code source.
• La classe est abstraite
• Un objet est une concrétisation d’un tel modèle.
• Un objet est une structure de données créée dynamiquement.
• Il existe seulement dans la mémoire durant l’exécution
• L’objet est concret
Classe et objet (3)
L’instanciation (1)
L’instanciation est la concrétisation d’une classe en un objet « concret ».

• Dans nos programmes Java nous allons définir des classes et instancier ces classes en des
objets qui vont interagir. Le fonctionnement du programme résultera de l’interaction entre ces
objets « instanciés ».

• En Programmation Orientée Objet, on décrit des classes et l’application en elle-même va être


constituée des objets instanciés, à partir de ces classes, qui vont communiquer et agir les uns
sur les autres.
L’instanciation (2)
• Pour instancier ou créer un nouvel objet, nous devons lui allouer de l’espace mémoire.
• chaque objet aura son espace où seront stockées les valeurs de ses attributs
• Si nous créons 1000 objets de type Point, nous aurons 1000 emplacements pour la variable
x et 1000 emplacements pour la variable y.
• Les méthodes ne sont quant à elles pas dupliquées (inutile).
L’instanciation (3)
On peut instancier (crée) des objets d’une classe et leur appliquer à volonté les méthodes
publiques défini dans la classe.
Avant de créer un objet, il faut d’abord le déclarer.

Nom_de_la_classe identificateur;

Cette déclaration ne réserve pas d’emplacement pour un objet de type Nom_de_la_classe,


mais seulement un emplacement pour une référence à un objet de type Nom_de_la_classe.
L’instanciation (4)
• Pour créer un emplacement pour l’objet lui-même, il faut utiliser le mot clé new.
identificateur = new Nom_de_la_classe();
• Dans cette instruction, l’opérateur new crée un objet de type Nom_de_la_classe et fournit
sa référence. Celle-ci est affectée à la variable a déclarée auparavant:
Nom_de_la_class identificateur;
identificateur = new Nom_de_la_classe();
• Est équivalent à:
Nom_de_la_classe identificateur = new Nom_de_la_classe();
L’instanciation (5)
Exemple: la classe Point (exemple en java)
L’utilisation des objets
• Une fois l’objet créé, on peut lui appliquer n’importe quelle méthode définit dans la classe.
Exemple: p1.initialiser(-3,2);
• C’est un appel à la méthode initialiser qui va affecter la valeur -3 au champs x et la valeur 2
au champs y
Les constructeurs (1)
• Un constructeur est une méthode spéciale utilisée pour crée un nouvel objet. Le
constructeur se caractérise par:

 Il a le même nom que celui de la classe,


 Ne retourne aucune valeur,
 N’a aucun type de retour, même pas void

• L’objet obéira à la structure définie dans la classe, c’est-à- dire qu’il aura les attributs et le
comportement définis dans la classe. Cela nécessite la réservation d’un espace mémoire
pour la mémorisation de l’état.
Les constructeurs (2)
• Le constructeur sert souvent à initialiser les différents attributs de l’objet.
• Le constructeur est exécuté à la création de l’objet.
• C’est souvent la méthode la plus surchargée de la classe.
• Une version par défaut est toujours fournie par les langages de programmation (Si le
développeur ne définit aucun constructeur, c’est le constructeur par défaut qui est exécuté).
p1 = new Point ();
• Dès qu’une classe possède au moins un constructeur, le constructeur par défaut ne peut
plus être utilisé . Sauf si un constructeur sans arguments a été définit.
Les constructeurs (3)
Retour à l’exemple: Classe Point
Les constructeurs (4)
Retour à l’exemple: Classe Point
Les constructeurs (5)
Retour à l’exemple: Classe Point
Le Destructeur
 Le destructeur est aussi une méthode spéciale de la classe mais qui est exécutée à la mort
de l’objet.
 Pour libérer l'espace mémoire occupé par l'objet un destructeur est invoqué (finaliseurs :
finalizers en java).
 Java assure la gestion automatique de la mémoire à travers le ramasse-miettes (Garbage
Collector en anglais) qui fonctionne selon le principe suivant:
 A tout instant, on connait le nombre de références à un objet.
 Lorsqu’un objet n’est plus référencé (il n’existe aucune référence sur lui), on est certain
que le programme ne pourra plus y accéder. Il est donc possible de libérer
l’emplacement correspondant
Le référent d’un objet (1)
 Chaque objet doit avoir un nom (référent) « qui lui est propre » pour l’identifier.
 La référence(handler) permet d’accéder à l’objet, mais n’est pas l’objet lui-même. Elle
contient l’adresse de l’emplacement mémoire dans lequel est stocké l’objet.
 La référence est, en quelque sorte, un pointeur sur l’espace mémoire allouer pour stocker
l’état de l’objet.
Le référent d’un objet (2)
Premier exemple
Le référent d’un objet (3)
Premier exemple: Affectation d’objets
Le référent d’un objet (4)
Premier exemple: Affectation d’objets
Le référent d’un objet (5)
Premier exemple: Comparaison d’objets
L’auto-reférence
• Dans le traitement de l’une de ses méthodes un objet peut avoir à s’envoyer un message
(pour accéder à un de ses attributs ou invoquer une de ses méthodes).
Pour cela, il utilise le mot clé this.
• L’utilisation du mot clé this permet aussi d’éviter l’ambiguité.
• Si pas d’ambiguité, this peut être omis :
Exemple: le constructeur Point
Eléments de conception de classes (1)
Parmi les méthodes que comporte une classe, on distingue:
• Les constructeurs
• Les méthodes d’accès ou bien les accesseurs (Accessor, Getter): fournissent les valeurs de
certains champs privés sans les modifier.
 Souvent on utilisent des noms de la forme getXXX
• Les méthodes d’altération ou bien les mutateurs (Mutator,Setter): Modifient les valeurs de
certains champs privés.
 Souvent on utilise des noms de la forme setXXX .
Eléments de conception de classes (2)
Pour une bonne conception de vos classes, il existe quelques règles qui ne sont pas
obligatoires mais qu’il est vivement conseillé de suivre.
1. Respecter le principe d’encapsulation en déclarant tous les champs (attributs) privés.
2. S’appuyer sur la notion de contrat qui considère qu’une classe est caractérisée par :
1. Les entêtes de ses méthodes publiques (interface)
2. Les comportements de ces méthodes.
3. Le reste (champs, méthodes privées et corps ) est appelé implémentation et doit rester privé.
4. Le contrat définit ce que fait la classe, alors que l’implémentation décrit comment elle le fait.
Les modificateurs d’accès (1)
• La déclaration d'une classe, d'une méthode ou d'un attribut peut être précédée par un
modificateur d'accès (visibilité).
• Un modificateur indique si les autres classes de l'application pourront accéder ou non à l’item
qui peut être une classe, une méthode ou un attribut.
• L'utilisation des modificateurs permet au programmeur de contrôler la visibilité des différents
items et permet d'empêcher que des actions illégales soient effectuées sur les items.
Les modificateurs d’accès (2)
• Parmi les modificateurs :
• public : toutes les classes peuvent accéder à l'item. La déclaration de variables publiques est
contraire au principe d'encapsulation.
• protected : seules les classes dérivées et les classes du
même package peuvent accéder à l'item.
• private: un item private (privé) est accessible uniquement au sein de la classe dans laquelle il
est déclaré. Ces éléments ne peuvent être manipulés qu'à l'aide de méthode spécifiques
appelés accesseur et mutateur
• (par défaut) : sans modificateur d'accès, seules les classes du même package peuvent
accéder à l'item.
Champs et méthodes de classe
• À l’instanciation d’un objet, On lui crée un exemplaire de chaque champs.
• On peut définir des champs qui n’existent qu’en un seul exemplaire pour toutes les
instances d’une même classe (donnée globale partagée par tous les objets de la classe).
• Ces champs sont appelés champs de classe ou champs statiques
• De même, on peut définir des méthodes de classe (ou statiques) qui peuvent être appelée
indépendamment de tout objet
Champs et méthodes de classe
Champs de classe

Exercice: On désire utiliser la classe Point pour créer des points à volonté, mais on veut savoir
le nombre de points créés. Classe Point
X
Y
Que faut il faire ?
nbpoints

déplacer()
afficher()
Champs et méthodes de classe
Champs de classes: Solution
Champs et méthodes de classe
Méthodes de classe

• Une méthode de classe a un rôle indépendant d’un quelconque objet. C’est le cas par
exemple d’une méthode qui agit uniquement sur les champs de classe
• En java, on utilise là encore, le mot clé static.
• Une méthode de classe ne peut en aucun cas agir sur des champs usuels (non static)
puisqu’elle n’est liée à aucun objet en particulier
Champs et méthodes de classe
Méthodes de classe: retour à l’exemple Point
Champs et méthodes de classe
Méthodes de classe: retour à l’exemple Point
Champs et méthodes de classe
Exercice: Quelles erreurs ont été commises dans ce code ?
Champs et méthodes de classe
Solution
 l’affectation q=n est incorrecte, car La méthode statique f de A ne peut pas agir
sur un champ non statique ;
 Dans la méthode main, l’appel a.f(n) se réfère à un objet, ce qui est
inutile mais toléré. Il serait cependant préférable de l’écrire A.f(n).
 l’appel f(n) est incorrect puisqu’il n’existe pas de méthode f dans la classe
EssaiA1. Il est probable que l’on a voulu écrire A.f(n).
Surcharge de méthode (1)
• On parle de surcharges (ou surdéfinition) lorsqu’un symbole possède plusieurs
significations entre lesquelles on choisit en fonction du contexte.

• En java, il est possible de surcharger les méthodes d’une classe y compris celles qui sont
statiques (méthode avec static). Plusieurs méthodes peuvent porter le même nom à
condition que le nombre et le type de leurs arguments permettent au compilateur d’effectuer
son choix,
Surcharge de méthode (2)
Règles générales

A la rencontre d’un appel de méthode, le compilateur cherche toutes les méthodes acceptables
et choisit la meilleure si elle existe.
Pour qu’une méthode soit acceptable il faut:
 Qu’elle dispose du nombre d’arguments voulus
 Que les types des arguments effectifs (valeur fournie lors de l'appel) soit compatible avec
les types des arguments muets
 Qu’elle soit accessible (une méthode privée ne sera pas acceptable à l’extérieur de la
classe)
Le choix de la méthode se fait comme suit:
 Si aucune méthode n’est acceptable Erreur de compilation
 Si une seule méthode est acceptable, elle sera utilisée
 Si plusieurs méthodes sont acceptables, il choisit la meilleure
 Si il y a ambigüité Erreur de compilation
Surcharge de méthode (3)
Exemple de surcharge d’une méthode
Surcharge de méthode (4)
Exemple de surcharge d’une méthode
Surcharge de méthode (5)
Exemple de surcharge d’une méthode
Passage de paramètres (1)
 Dans les langages de programmation on rencontre deux façons d’effectuer le transfert
d’information
 Par valeur: la méthode reçoit une copie de la valeur de l’argument effectif, elle travaille
sur cette copie et la modifie sans que cela ne modifie l’argument effectif
 Par adresse (ou par référence): la méthode reçoit l’adresse de l’argument effectif sur
lequel elle travaille directement et peut modifier sa valeur
 Java transmet toujours les informations par valeur.
 Que se passe t-il dans le cas où une variable est de type objet ?
 Qu’est ce qui est transmis et qu’est ce qui peut être modifié ?
Passage de paramètres (2)
Variable de type Objet

Dans le cas où la variable manipulée est de type Objet, son nom représente sa référence, donc
la méthode reçoit une copie de sa référence. La méthode peut donc modifier l’objet concerné.
Exercice: Qu'affiche le programme suivant
public class Interro {
static void f( int[] T, int x , int y) { T[0] = 7; x
= 8; y= 9;
}
}
public class Test{
public static void main(String[] args){
int[] T = new int[] {1,2,3,4};
int x = 5; int y =6; Interro.f(
T , x, y);
System.out.println( T[0]+" , "+x+", "+y);
}
}
Exemple création et utilisation d’un objet
imaginons que nous souhaitons créer une classe Cercle permettant de représenter des cercles
définis par un centre (objet de type Point) et un rayon de type flottant.
Les fonctionnalités de cette classe se limitent à :
• L’affichage des caractéristiques d’un cercle (coordonnées du point du centre et le rayon)
• Le déplacement du centre
Exemple création et utilisation d’un objet
Exemple classe cercle: code en java
Domaine: MI 2ième Année Licence Académique
Filière: Informatique Spécialité: systèmes Informatiques
Semestre: 5

Programmation Orientée Objet POO

Année : 2023/2024
Relation entre les classes
Héritage
Chapitre 3
La relation d’héritage:
• L’héritage constitue l’un des fondements de base de la POO.
• Il permet le partage et la réutilisation de propriétés entre les objets.
• La relation d’héritage est une relation de généralisation /spécialisation.
• L’héritage permet de définir des classes sous forme d’une hiérarchie (les
fils héritent de leurs parents).
• Une classe dérivée permet de préciser le comportement d’un sous-ensemble
d’objet.
• Une classe peut avoir plusieurs sous classes.
• Une classe ne peut avoir qu'une seule classe mère.
Intérêts de l’héritage
• Supprime les redondances dans le code.
• On peut très facilement rajouter, après coup, une classe, et ce à moindre
coup, étant donné que l'on peut réutiliser le code des classes parentes.
• Si vous n'aviez pas encore modélisé un comportement dans une classe
donnée, et que vous vouliez maintenant le rajouter, une fois l'opération
terminée, ce comportement sera alors directement utilisable dans
l'ensemble des sous-classes de celle considérée
La relation d’héritage:
La classe dérivée:
• hérite de tous les membres de sa superclasse (classe mère).
• Elle permet de les spécialiser (redéfinir).
• Elle permet d’ajouter de nouveaux attributs et/ou de nouvelles méthodes.
Dans JAVA:
• il s'agit d'indiquer, dans la sous-classe, le nom de la superclasse dont elle
hérite précéder par le mot réservé

extends
• Par défaut toutes classes Java hérite de la classe
Object.
La relation d’héritage:

Classe_fille extends Class_mère()

Exemple:
Class Etudiant extends Personne
Class Salariée extends Personne
Class Enseignant extends Salariée
personne
String nom;
String prenom
int age
Char Sexe;
void communiquer()
void déplacer()

Salariée
double Salaire;
void Démissionner()
void Mutation()
void Consulter_comp()

Etudiant
int Matricule; Enseignant Chef_département
Boolean Etudier()
Boolean Transférer() void Enseigner() void Demander_Réunion()
Remarque: Héritage
L’héritage permet de créer une relation de type
« A est un B » ou « A est une sorte de B »
Pour créer une relation d’héritage on doit poser la question ?
Est-ce que A est une sorte de B ?
Est-ce que A est un B ?
Exemple:
Est-ce que Etudiant est une Personne ?
Est-ce que Salariée est une Personne ?
Est-ce que Enseignant est une Salariée ?
Est-ce que Chef_département est une Salariée ?
Remarque: Héritage
Supposons que nous disposons de la classe Point et nous souhaitons
créer une classe PointCol afin de manipuler des points colorés dans un
plan.
Héritage
Supposons que nous disposons de la classe Point et nous souhaitons
créer une classe PointCol afin de manipuler des points colorés dans un
plan.

La classe PointCol peut disposer des mêmes attributs et


fonctionnalités que la classe Point auxquels on ajoute un
attribut couleur représentant la couleur d’un point et une
méthode colorer permettant d’attribuer une couleur à un point.
Remarque: Héritage

Relation non-réflexive, non-symétrique !


Héritage multiple
Une classe peut avoir plusieurs classes parents. On parle alors
d'héritage multiple.

Incompatible avec java


langage C++ est un des langages objet permettant son implantation
effective.
La redéfinition (overriding)

La redéfinition (overriding ) signifie avoir deux méthodes


avec le même nom et les mêmes paramètres, l’une des
méthodes est dans la classe parente et l’autre dans la classe
fille.

La redéfinition permet à une classe fille de fournir une


implémentation spécifique d’une méthode déjà fournie à sa
classe parente.
Exemple 1: La redéfinition (overriding)
Exemple 1: La redéfinition (overriding)
Exemple 1: La redéfinition (overriding)
Exemple 2: La redéfinition (overriding)
Exemple 2: La redéfinition (overriding)
La redéfinition (overriding)
Utilisation de Super et this
La redéfinition (overriding)
Utilisation de Super et this
La redéfinition (overriding)
Utilisation de Super et this
La redéfinition (overriding)
Utilisation de Super et this

super sert à accéder les définitions de classe au niveau de la


classe parente de la classe considérée

this sert à accéder à la classe courante.


Différence entre surcharge et reféfinition
La surcharge (overloading ) survient lorsque deux méthodes
ou plus dans une classe ont le même nom de méthode mais avec des
paramètres différents.

La redéfinition (overriding ) signifie avoir deux méthodes


avec le même nom et les mêmes paramètres, l’une des
méthodes est dans la classe parente et l’autre dans la classe fille.
Règles sur l'utilisation de la surcharge et La redéfinition
• La redéfinition d'une méthode héritée doit impérativement
conserver la déclaration de la méthode de base (type et nombre
de paramètres et la valeur de retour doivent être identiques) et
fournir dans une sous-classe une nouvelle implémentation de la
méthode.
• Si la signature de la méthode change, ce n'est plus une
redéfinition mais une surcharge (surdéfinition).

La surcharge + La redéfinition = polymorphisme


OOP avec Héritage : Constructeur des Objets dérivés
JAVA
OOP avec Héritage : Constructeur des Objets dérivés
JAVA
OOP avec Héritage : Constructeur des Objets dérivés
JAVA
OOP avec Héritage : Constructeur des Objets dérivés
JAVA
OOP avec Héritage : Constructeur des Objets dérivés
JAVA
OOP avec Héritage : Constructeur des Objets dérivés
JAVA
Règles sur l'utilisation des constructeurs de la classe mère
Règle 1 : si vous invoquez super(…), cela signifie que le constructeur en cours
d‘exécution passe la main au constructeur de la classe parente pour commencer à
initialiser les attributs définis dans cette dernière. Ensuite il continuera son
exécution.
Règle 2 : un appel de constructeur de la classe mère peut uniquement se faire
qu'en première instruction d'une définition de constructeur.
Règle 3 : si la première instruction d'un constructeur ne commence pas par le mot
clé super le constructeur par défaut de la classe mère est appelé.
Règle 4 : si vous invoquez this(), le constructeur considéré passe la main à un
autre constructeur de la classe considérée.
Empêcher l’héritage avec le mot clé final

Il est possible d’empêcher qu’une classe soit héritée par une


autre classe, pour cela, il suffit d’utiliser le mot-clé " final",
pris en compte à la compilation.

X Erreur
Exercice:
Trouvez et corriger les sept (07) erreurs pour que ce
programme fonctionne
Solution :
Soit une méthode F () définie dans A et redéfinie dans les classes
C et D

Appel de f dans A conduit à l'appel de f de . . .


Appel de f dans B conduit à l'appel de f de . . .
Appel de f dans C conduit à l'appel de f de . . .
Appel de f dans D conduit à l'appel de f de . . .
Appel de f dans E conduit à l'appel de f de . . .
Appel de f dans F conduit à l'appel de f de . . .
Soit une méthode f définie dans A et redéfinie dans les classes
C et D

Appel de f dans A conduit à l'appel de f de . . . A


Appel de f dans B conduit à l'appel de f de . . . A
Appel de f dans C conduit à l'appel de f de . . . C
Appel de f dans D conduit à l'appel de f de . . . D
Appel de f dans E conduit à l'appel de f de . . . A
Appel de f dans F conduit à l'appel de f de . . . C
Polymorphisme
Polymorphisme
c’est quoi Polymorphisme ?

Poly: Plusieurs
Signifier Plusieurs
Polymorphisme Formes
Morphe: Forme

Un objet peut prendre plusieurs formes


Polymorphisme Casting
c’est quoi Casting ?
Implicite

Up Casting
Explicite
Polymorphisme Implicite
Down Casting

Explicite

Casting c’est l’attribution des rôles


Polymorphisme Casting

Règles de transtypage ou de Casting (UpCasting + DownCasting)


Dans une instruction d'affectation (refVar1 = refVar2;),
le compilateur vérifie que :
le type de la variable refVar1 est le même que celui de refVar2
ou un type parent du type de la variable refVar2.
"UpCasting" implicite/explicite : permet de convertir le type
d'une référence vers un type parent.
Polymorphisme UP Casting
Exemple: Parent

Child

Up casting: conversion sous


classe vers Super classe est
toujours Autorisé dans java
explicite Or implicite
Polymorphisme UP Casting
Exemple: Parent

Child

Up casting: conversion sous


classe vers Super classe est
toujours Autorisé dans java
explicite Or implicite
Polymorphisme Down Casting
Exemple: Parent

Down casting: conversion


Super classe vers sous classe
Child
Down casting explicite:
interdit erreur de compilation

Down casting implicite:


autorisé par compilateur mais
JVM déclenchera une
exception
Polymorphisme Down Casting
Exemple: Parent

Child
Polymorphisme Down Casting
Exemple:
Animal
a

b
Oiseaux Chien Serpent

Animal a=new Animal()


Oiseaux b=new Oiseaux()
a=b implicite
Aigle a= (Animal) b explicite
Polymorphisme Down Casting
Exemple:
a Animal

b
Oiseaux Chien Serpent

Animal a=new Animal()


Oiseaux b=new Oiseaux()
b=a implicite (erreur)
Aigle b= (Oiseaux) a explicite (erreur)
le mot clé final

Attribut: on ne peut pas changer (constante)


dans cette classe ou dans les sous classes
final
Méthode: on ne peut pas redéfinir dans les
sous classes
Classe: on ne peut pas hériter
le mot clé final
Soit B une classe dérive de A

Final int v=8 B B b=new B() X


A
b.v=10;
final B
A Final int m(int a) int m(int b) X
{ return a+1;} { return b+4;}
A B
Final class A class B extends A X
La class Objet

• Racine de l’arbre d’héritage des classes : java.lang.Object ‰


• Héritée par toutes les classes sans exception
• Object n’a pas de variable d’instance ni de variable de classe
• Object fournit plusieurs méthodes Couramment utilisées sont
les méthodes toString et equals
La class Objet méthode toString() et hashcode()

toString() renvoie:
•Description de l’objet sous la forme d’une chaîne de caractères ‰
•Nom de la classe, suivie de "@" et de la valeur de la méthode
hashcode():
•hashcode() renvoie la valeur hexadécimale de
l’adresse mémoire de l’objet
equals() : comparaison de l’objet courant avec un autre
La class Objet méthode toString() et hashcode()

Exemple:
Domaine: MI 2ième Année Licence Académique
Filière: Informatique Spécialité: systèmes Informatiques
Semestre: 5

Programmation Orientée Objet POO

Année : 2023/2024
Classes abstraites et Interfaces

Chapitre 4
Classes abstraites
Méthode abstraite

Il peut donc, dans certains cas, être utile de définir une


méthode sans en donner le code. Utilisation du mot clé
abstract
Exemple:
abstract double surface();

au lieu de

double surface(){ return 0; }


Classe abstraite

Si une méthode est déclarée comme abstract la classe au


quelle définit cette méthode doit forcement déclarer comme
abstract mais l’inverse est faux.
Exemple:
Classe abstraite

Si une méthode est déclarée comme abstract la classe au quelle


définit cette méthode doit forcement déclarer comme abstract mais
l’inverse est faux.
Exemple:

Une classe abstraite pas forcement ses méthodes sont abstraits.


Classe abstraite

• Une classe déclare comme abstraite on ne peut pas créer des

objets à partir de cette classe.

• Définit une classe comme abstraite nécessite des classes fille

pour l’utiliser

• Les méthodes déclarés avec le mot clé « abstract » elles sont

hérites par les classes filles mais elles nécessitent une

redéfinitions.
Classes interfaces
Classe interface

• Une classe déclare comme interface est une cas particulier d’une classe

abstraite

• Une interface est une classe 100% abstraite

C’est-à-dire:

• Toutes ses méthodes sont déclarés public abstract

• Toutes ses attributs sont déclarés static final

• Pour utiliser une interface on doit utiliser le mot clé « implements » au

lieu de « extends »
Remarque

• Soit une Classe 1 déclare comme interface avec des méthodes

abstraites.

• Si une classe 2 implémente la classe 1 elle doit forcément redéfinit

toutes ces méthodes

• Sinon si la classe 2 implémente (redéfinit) partiellement les

méthodes de la Classe 1, cette dernier doit être déclarer comme

abstract
Rappel

• Une Classe peut implémenté plusieurs interfaces.

• Une interface pas d’un constructeur

• Une classe n’hérite pas d’un interface elle implémente.


Représentation des classes
Héritage
Association
Agrégation
Composition
Idée

UML Programmation logiciel


Langage de représentation JAVA
Graphique
UML c’est quoi ?

• Langage graphique: ensemble de diagrammes permettant

de modéliser le logiciel.

• Modélisation orientée objet : modélisation du système

comme un ensemble d'objets interagissant


Correspondance UML /JAVA
Représentation d’une classe

• Public (il est noté par +)


• Privé (il est noté par -)
• Protégé (il est noté par #)
Classe abstraite

Représentation d’une classe


abstraite
Interface

Représentation d’une classe


interface
Implémentation
Lien entre les classes
Héritage
Correspondance UML /JAVA
Représentation d’une relation d’héritage
Correspondance UML /JAVA

Représentation d’une relation d’héritage


Lien entre les classes
Association
Association
Nom de relation

multiplicité
Direction
1
0..1
0..∗
1..∗
n..m
Association

Association bidirectionnelle

Association unidirectionnelle
Correspondance UML /JAVA
Correspondance UML /JAVA
Exercice
compléter l’association suivante:

Travailler
Lien entre les classes
Agrégation
Agrégation

Une agrégation est un cas particulier d’association


non symétrique exprimant une relation de
contenance d’un élément dans un ensemble.
Les agrégations n’ont pas besoin d’être nommées :
implicitement elles signifient « contient », « est
composé de ».
On représente l’agrégation par l’ajout d’un losange
vide du côté de l’agrégat (l’ensemble).
Correspondance UML /JAVA
Lien entre les classes
Composition
Composition

Une composition est une agrégation plus forte


impliquant que :
un élément ne peut appartenir qu’à un seul agrégat
composite (agrégation non partagée) ;
la destruction de l’agrégat composite (l’ensemble)
entraîne la destruction de tous ses éléments (les
parties)
Notation UML: losange plein
Correspondance UML /JAVA
Exercice 1:

Pour chaque exemple ci-dessous, indiquez si la


relation présentée est un héritage, une agrégation
ou une association :
Un pays a une capitale
Une transaction boursière est un achat ou une vente
Les fichiers contiennent des enregistrements
Une personne utilise un langage de programmation
Les modems et les claviers sont des périphériques
d’entrées/sorties
Exercice 2:

Un ordinateur est composé d’un ou plusieurs


moniteurs
Un ordinateur possède toujours au moins un lecteur
de disquette ou un disque dur.
Exercice
compléter le diagramme suivant:
Domaine: MI 2ième Année Licence Académique
Filière: Informatique Spécialité: systèmes Informatiques
Semestre: 5

Programmation Orientée Objet POO

Année : 2023/2024
Classe en Java

Chapitre 5
Classe String

•Permet de gérer les chaînes de caractères


•Une quarantaine de méthodes, et quelques caractéristiques
importantes :
oDéclarée final  non extensible et comportement nominal
o Un objet String contient un tableau de char
oImmuable (immutable) , ce qui signifie que la donnée qu'elle
contient est en "lecture seule". Une fois qu‘elle a été définie,
sa valeur ne peut être modifiée
Classe String

Exemple : Construction d'un objet String

String s1 = "Bonjour le monde !" ;


String s11 = "Bonjour le monde !" ;
String s2 = new String("Bonjour le monde !") ;

(s1 == s11) // true, un seul objet a été créé (optimisation)

(s1 == s2) // false, new a forcé la création d’un nouveau objet


Classe String

s.equals(Object o)
a été redéfinit et renvoie true si l'objet donné "o" représente
une chaîne équivalente à celle de "s" , false sinon.

s.length()
Renvoie la longueur de la chaîne s

s.charAt(int index)
renvoie le caractère qui occupe la position index.
Le premier caractère occupe la position 0 et
Le dernier caractère occupe la position length() – 1 :
Classe StringBuffer

un StringBuffer peut être utilisé partout où un String est utilisé.


Il est simplement plus flexible : on peut modifier son contenu.

Exemple
StringBuffer sb = new StringBuffer();
sb.append("Cours "); sb.append("de "); sb.append(" POO.");

System.out.print (sb) ; // affichera Cours de POO.


Les collections

Définition
Une collection est un objet qui contient d’autres objets

Exemple
Un tableau est une collection

Classes
• AbstractCollection,ArrayList,Arrays, Collections, HashSet,
LinkedList, TreeSet, Vector…
Interfaces
• List, Map, Set, SortedMap, SortedSet

Ces classes et interfaces se trouvent dans le paquetage java.util


ArrayList

Description
• ArrayList fournit un tableau dynamique et
• spécifieAbstractList et implémente List.

Déclaration
public classArrayList<E> extendsAbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
ArrayList

Quelques caractéristiques

La classe java.util.ArrayList est la classe la plus utilisée

• UnArrayList se comporte comme un tableau, il contient


plusieurs objets (de la classe Object uniquement)
• Ne peut contenir des types primitifs
• Accède à ses éléments à l’aide d'un index
• Pas de taille prédéfinie
• Existe des méthodes pour ajouter ou enlever un élément
ArrayList

Création d’une instance ArrayList

Il y a des constructeurs :
ArrayList()
ArrayList(int initialCapacity)

Il y a deux manières d’ajouter un élément :


• à la fin d'un ArrayList : boolean add(Object newElement)
• à une position donnée : void add(int index, Object newElement)
le paramètre index indique où insérer le nouvel élément
ArrayList

Autres méthodes d’ArrayList

• Pour remplacer un objet à une position donnée Object :


set(int index, Object newElement)
• Pour accéder à un élément Object get(int index)
• Pour tester le contenu boolean isEmpty()
• pour connaître le nombre d’éléments dans la liste
int size()
• Pour savoir si un objet est présent ou non dans une liste
boolean contains(Object obj)
• Pour supprimer un élément à une position
donnée, remove(int index)
ArrayList

Exemple

public class Etudiant{

private String leNom;

public Etudiant(String unNom){


leNom = unNom;
}

public void setNom(String nom) { leNom = nom; }


public String getNom() { return leNom; }
}
Ar rayLis
Exemple (utilisant la classe Object) t

public static void main(String [] args) {


ArrayList <Object> tableauEtudiants= newArrayList<Object>();
Etudiant e1 = new Etudiant("Bachir")
Etudiant e2 = new Etudiant("Nadir");
tableauEtudiants.add(e1);
tableauEtudiants.add(e2);

if (! tableauEtudiants.isEmpty()) {
for (int i = 0; i< tableauEtudiants.size();i++)
System.out.println(((Etudiant) tableauEtudiants.get(i)).getNom());

tableauEtudiants.remove(1);}
}
ArrayList

Exemple (utilisant la classe Etudiant )


public static void main(String [] args) {
ArrayList<Etudiant> tableauEtudiants =
newArrayList<Etudiant> ();
Etudiant emp1 = new Etudiant(« Bachir ");
Etudiant emp2 = new Etudiant("Nadir");
tableauEtudiants.add(emp1);
tableauEtudiants.add(emp2);
if (!tableauEtudiants.isEmpty()) {
for (int i = 0; i< tableauEtudiants.size(),i++)
System.out.println((Etudiant) tableauEtudiants.get(i).getNom());

tableauEtudiants.remove(1);}
}
ArrayList
Boucles

Exemple

Utilisation d’un index


for (int i = 0; i< tableauEtudiants.size();i++)
System.out.println( tableauEtudiants.get(i).getNom());
ArrayList

Boucle for-each

Répéter des actions pour chaque objet d'une collection donnée


ArrayList

Exemple

Boucle for-each
for (Etudiant e : tableauEtudiants)
System.out.println( e.getNom());
ArrayList
Exercice

Ecrire une classe TestClientIterato qui

1- Remplira les 03 objets suivant dans un objet ArrayList.


Elément Type Valeur
1 Integer 42
2 String "test"
3 Double -12.34

2- Parcourir cette liste, afin d’afficher ces trois


éléments.
LinkedList

CommeArrayList, LinkedList implémentent l'interface List

• ArrayList utilise un tableau extensible


• Utilise efficacement les méthodes get() et set().

• LinkedList est implémentée sous forme d'une liste chaînée,


• Ces performances d'ajout et de suppression sont plus
meilleures que celles deArrayList, mais mauvaises pour les
méthodes get() et set().
Les Exceptions en Java

Vous aimerez peut-être aussi