2 - Notions Objets Class
2 - Notions Objets Class
2 - Notions Objets Class
A.U: 2022-2023
Objectifs du module
Introduction à la POO
Concept d’objet
• Qu’est-ce qu’un objet ?
• Le monde qui nous entoure est composé d'objets
• Ces objets ont tous deux caractéristiques
• un état
• un comportement
• Exemples d’objets du monde réel
• chien
• état : nom, couleur, race, poids....
• comportement : manger, aboyer, renifler...
• Bicyclette
• état : nombre de vitesses, vitesse courante, couleur
• comportement : tourner, accélérer, changer de vitesse
4
L’approche objet
• L’approche objet :
• Programmation dirigé par les données et non par les traitements
• Notion d’encapsulation
• les données et les procédures qui les manipulent (on parle de
méthodes) sont regroupés dans une même entité (la classe).
• Un objet informatique
• maintient son état dans des variables (appelées attributs)
• implémente son comportement à l'aide de méthodes
objet informatique = regroupement logiciel de variables et de méthodes
• Cycle de vie
• construction (en mémoire)
• Utilisation (changements d’état par affectations, comportements par
exécution de méthodes)
• destruction
5
Concept de classe
• En informatique, la classe est un modèle décrivant les
caractéristiques communes et le comportement d’un
ensemble d’objets : la classe est un moule et l’objet est ce
qui est moulé à partir de cette classe
• Mais l'état de chaque objet est indépendant des autres
• Les objets sont des représentations dynamiques (appelées
instances) du modèle défini au travers de la classe
• Une classe permet d’instancier plusieurs objets
• Chaque objet est une instance d’une seule classe
6
La classe (1) : définition
• Classe : 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
attributs des objets et caractérisent les actions pouvant être
effectuées par les objets.
7
La classe (2) : représentation graphique
Nom
Attribues
Méthodes
8
La classe (3) :
9
Modificateurs d'accès
Un modificateur indique si les autres classes de l'application pourront accéder
ou non à la classe/méthode/attribut (qualifié par la suite d'« item »).
Ces modificateurs sont au nombre de quatre :
12
L’instanciation (2)
• Instance
• Un objet constituant un exemplaire de la classe
• obtenu par moulage du dictionnaire des variables et détenant les
valeurs de ces variables.
• Son comportement est défini par les méthodes de sa classe
• Par abus de langage « instance » = « objet »
• Exemple :
• si nous avons une classe voiture, alors votre voiture est une instance
particulière de la classe voiture.
• Classe = concept, description
• Objet = représentant concret d’une classe
13
L’instanciation (3)
• Instance
• Un objet constituant un exemplaire de la classe
• obtenu par moulage du dictionnaire des variables et détenant les
valeurs de ces variables.
14
Les constructeurs (1)
• L'appel de new pour créer un nouvel objet déclenche,
dans l'ordre :
• L'allocation mémoire nécessaire au stockage de ce nouvel
objet et l'initialisation par défaut de ces attributs,
• L'initialisation explicite des attributs
• L'exécution d'un constructeur.
• Un constructeur est une méthode d'initialisation.
public classApplication
{ Le constructeur est ici celui
public static void main(String args[]) par défaut (pas de
{ constructeur défini dans
Personne jean = new Personne() la classe Personne)
jean.setNom("Jean") ;
} }
15
Les constructeurs (2)
• Le constructeur est une méthode :
• de même nom que la classe,
• sans type de retour.
• Toute classe possède au moins un constructeur. Si le
programmeur ne l'écrit pas, il en existe un par défaut, sans
paramètres, de code vide.
16
Les constructeurs (3)
18
Les constructeurs (5)
Personne.java
Redéfinition d’un
public class Personne Constructeur sans paramètres
{
public String nom;
public String prenom;
public int age;
public Personne() On définit plusieurs constructeurs
{ qui se différencient uniquement
nom=null; prenom=null; par leurs paramètres (on parle
age = 0; de leur signature)
}
public Personne(String unNom,
String unPrenom, int unAge)
{
nom=unNom;
prenom=unPrenom; age = unAge;
} }
19
Classe et objet en Java
class Personne
{ Personne jean, pierre;
String nom; jean = new Personne ();
int age; pierre = new Personne ();
float salaire;
}
L’opérateur d’instanciation en Java est new :
MaClasse monObjet = new MaClasse();
En fait, new va réserver l’espace mémoire nécessaire pour créer l’objet
« monObjet » de la classe « MaClasse »
Le new ressemble beaucoup au malloc du C
20
Objets, tableaux, types de base
21
Références
22
Accès aux attributs d’un objet (1)
Personne.java
public classApplication
{
public static void main(String args[])
{
Personne jean = new Personne()
jean.nom = "Jean" ;
jean.prenom = "Pierre" ;
}
}
Remarque :
Contrairement aux variables, les attributs d'une classe, s'ils ne sont pas initialisés, se voient
affecter automatiquement une valeur par défaut.
Cette valeur vaut : 0 pour les variables numériques, false pour les booléens, et null pour
les références.
24
Accès aux méthodes d’un objet (1)
Personne.java
Application.java
public classApplication
{
public static void main(String args[])
{
Personne jean = new Personne()
jean.setNom("Jean") ;
}
}
26
Notion de méthodes et de paramètres (1)
27
Mode de passage des paramètres
28
Notion de méthodes et de paramètres (2)
30
Surcharge de constructeur(1)
Le constructeur peut être surchargé, cela permet de construire des objets de
différentes manières.
Le constructeur approprié est appelé en fonction des paramètres spécifiés
lorsque new est exécuté.
Exemple:
Class MaClasse{
MaClasse(){…}// 1
MaClasse(int x){…}// 2
MaClasse(double d, int x){…}// 3}
int z; double k;
MaClasse mc = new MaClasse (k,z);
31
Surcharge de constructeur(2)
Une des raisons les plus courantes pour lesquelles les constructeurs sont
surchargés est de permettre à un objet d’en initialiser un autre.
Exemple:
Class Somme{
Somme(int x){….}
Somme (Somme sum){…}//construire un objet a partir d’un autre.
Class Calcule{
//dans main
Somme s1= new Somme(5);
Somme s2= new Somme(s1);}
32
Portée des variables (1)
• Les variables sont connues et ne sont connues qu’à l’intérieur
du bloc dans lequel elles sont déclarées
33
Portée des variables (2)
• En cas de conflit de nom entre des variables locales et
des variables globales, c’est toujours la variable locale
qui est considérée comme étant la variable désignée
par cette partie du programme
• Attention par conséquent à ce type de conflit quand on
manipule des variables globales.
36
Destruction d’objets (2)
37
Destruction d’objets (3)
38
L’encapsulation (1)
• Notion d'encapsulation :
• les données et les méthodes qui les manipulent sont regroupées dans
une même entité, l'objet.
• Les détails d'implémentation sont cachés, le monde extérieur n'ayant
accès aux données que par l'intermédiaire d'un ensemble d'opérations
constituant l'interface de l'objet.
• Le programmeur n'a pas à se soucier de la représentation physique
des entités utilisées et peut raisonner en termes d'abstractions.
39
L’encapsulation (2)
40
Contrôle d’accès (1)
41
Contrôle d’accès (2)
42
Contrôle d’accès (3)
public class Parallelogramme
{
private int longueur = 0; / / déclaration + initialisation explicite
private int largeur = 0; / / déclaration + initialisation explicite
public int profondeur = 0; / / déclaration + initialisation explicite
public void affiche ( )
{System.out.println("Longueur= " + longueur + " Largeur = " + largeur +
" Profondeur = " + profondeur);
}}
• Accès :
• depuis une méthode de la classe comme pour tout autre attribut,
• via une instance de la classe,
• à l'aide du nom de la classe.
44
Attributs de classe (2)
public class UneClasse Variable de classe
{
public static int compteur = 0; Utilisation de la variable de classe
public UneClasse ()
{ compteur dans le constructeur de
compteur++; la classe
}
}
public classAutreClasse
{ Utilisation de la variable de classe
public void uneMethode() compteur dans une autre classe
{
int i = UneClasse.compteur;
}
}
45
Méthodes static de classe (2)
Math.sin(x);
String String.valueOf(i);
46
Composition d’objets (1)
• Un objet peut être composé à partir d’autres objets
Exemple : Une voiture composée de
• 4 roues ,chacune composée
• d’un pneu
• d’un moteur composé
• de plusieurs cylindres
• de portières
• etc…
class Roue {
private float diametre;
Pneu pneu ;}
class Voiture {
Roue roueAVG,roueAVD, roueARG, roueARD;
Portiere portiereG, portiereD;
Moteur moteur;}
48
Composition d’objets (3)
• Généralement, le constructeur d’un objet composé doit
appeler le constructeur de ses composants
public Roue () {
pneu = new Pneu();}
public Voiture () {
roueAVG = new Roue();
roueAVD = new Roue();
roueARG = new Roue();
roueARD = new Roue();
portiereG = new Portiere();
portiereD = new Portiere();
moteur = new Moteur();}
49
Composition d’objets (4)
50
L’héritage (1) : Concept
51
L’héritage (2) : exemple
Forme géométrique
Polygone Ellipse
Carré
52
L’héritage (3) :
définition
Héritage : mécanisme permettant 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.
La classe parente est la superclasse.
La classe qui hérite est la sous-classe.
53
L’héritage (3) : représentation graphique
Superclasse
Lien d’héritage
Sous-classe
55
L’héritage avec Java (2)
class Personne
{
private String nom;
private Date date_naissance;
// ...
}
Constructeurs et héritage
par défaut le constructeur d’une sous-classe appelle le constructeur "par
défaut" (celui qui ne reçoit pas de paramètres) de la superclasse.
Pour forcer l'appel d'un constructeur précis, on utilisera le mot réservé super.
Cet appel devra être la première instruction du constructeur.
57
L’héritage en Java (4)
60
Recherche dynamique des méthodes (1)
Le polymorphisme
Capacité pour une entité de prendre plusieurs formes.
En Java, toute variable désignant un objet est potentiellement
polymorphe, à cause de l'héritage.
Polymorphisme dit « d’héritage »
le mécanisme de "lookup" dynamique :
déclenchement de la méthode la plus spécifique d’un objet, c'est-à-
dire celle correspondant au type réel de l'objet, déterminé à
l'exécution uniquement (et non le type de la référence, seul type
connu à la compilation, qui peut être plus générique).
Cette dynamicité permet d'écrire du code plus générique.
61
Recherche dynamique
des méthodes (2)
Employe
salaire : Double
calculePrime()
calculePrime()
62
Surcharge de méthodes (1)
63
Opérateur instanceof
L'opérateur instanceof confère aux instances une capacité
d'introspection : il permet de savoir si une instance est instance
d'une classe donnée.
Renvoie une valeur booléenne
if ( ... )
Personne jean = new Etudiant();
else
Personne jean = new Employe();
//...
64
Forçage de type /
transtypage (1)
Lorsqu'une référence du type d'une classe désigne une instance
d'une sous-classe, il est nécessaire de forcer le type de la
référence pour accéder aux attributs spécifiques à la sous-classe.
Si ce n'est pas fait, le compilateur ne peut déterminer le type réel
de l'instance, ce qui provoque une erreur de compilation.
On utilise également le terme de transtypage
Similaire au « cast » en C
65
Forçage de type / transtypage (2)
class Personne
A ce niveau pour le
{
compilateur dans la
private String nom;
variable « jean » c’est
private Date date_naissance;
un objet de la classe
// ...
Personne, donc qui
}
n’a pas d’attribut
« salaire »
class Employe extends Personne
{
public float salaire; On « force » le type
// ... de la variable « jean »
} pour pouvoir accéder
à l’attribut « salaire ».
Personne jean = new Employe (); On peut le faire car c’est
float i = jean.salaire; // Erreur de compilation bien un objet Employe
float j = (Employe) jean .salaire; // OK qui est dans cette
variable
66
L’autoréférence : this
(1)
Le mot réservé this, désigne la référence de l'instance à laquelle
le message a été envoyée (donc celle sur laquelle la méthode est
« exécutée »).
Il est utilisé principalement :
lorsqu'une référence à l'instance courante doit être passée en paramètre à
une méthode,
pour lever une ambiguïté,
dans un constructeur, pour appeler un autre constructeur de la même classe.
67
L’autoréférence : this (2)
class Personne
{ Pour lever l’ambiguïté sur le mot « nom »
public String nom;
Personne (String nom) et déterminer si c’est le nom du paramètre
{ ou de l’attribut
this.nom=nom;
}
}
public MaClasse(int a, int b) {...}
Appelle le constructeur
public MaClasse (int c) MaClasse(int a, int b)
{
this(c,0);
}
Appelle le constructeur
public MaClasse () MaClasse(int c)
{
this(10);
}
68
Référence à la superclasse
Le mot réservé super permet de faire référence au constructeur de
la superclasse directe mais aussi à d’autres informations
provenant de cette superclasse.
70
Classes abstraites (2)