Introduction à la Programmation Orientée Objet en Java
Introduction à la Programmation Orientée Objet en Java
2
L’approche objet
● L’approche objet :
– Programmation dirigé par les données et non par les traitements
● les procédures existent toujours mais on se concentre d’abord sur les
entités que l’on va manipuler avant de se concentrer sur la façon dont on
va les manipuler
– 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 champs)
– 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
3
Concept de classe
● La « classification » d’un univers qu’on cherche à modéliser
est sa distribution systématique en diverses catégories, d’après
des critères précis
● 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 instance d’une seule classe
4
La classe (1) : définition
5
La classe (2) : représentation graphique
Nom
Champs
Méthodes
6
Syntaxe de définition d’une classe
Exemple : Une classe définissant un point
Class Point Nom de la Classe
{
double x; // abscisse du point
double y; // ordonnée du point Attributs
// translate de point de (dx,dy)
void translate (double dx, double dy) {
x = x+dx;
y = y+dy;
Méthodes
}
// calcule la distance du point à l’origine
double distance() {
return [Link](x*x+y*y);
}
}
7
L’instanciation (1)
8
L’instanciation (2)
● Instance
– représentant physique d'une 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
9
Les constructeurs (1)
10
Les constructeurs (2)
11
Les constructeurs (3)
[Link] Définition d’un
Constructeur. Le
public class Personne
constructeur par défaut
{
(Personne() )n’existe plus.
public String nom;
Le code précédent occasionnera
public String prenom;
une erreur
public int age;
public Personne(String unNom,
String unPrenom,
int unAge)
{ public class Application
nom=unNom; {
prenom=unPrenom; public static void main(String args[])
age = unAge; {
} Personne jean = new Personne()
} [Link]("Jean") ;
} }
Va donner une erreur à la compilation
12
Les constructeurs (4)
13
Les constructeurs (5)
[Link]
Redéfinition d’un
public class Personne Constructeur sans paramètres
{
public String nom;
public String prenom;
public int age;
public void Personne()
{ On définit plusieurs constructeurs
nom=null; prenom=null; qui se différencient uniquement
age = 0; par leurs paramètres (on parle
} de leur signature)
public String Personne(String unNom,
String unPrenom, int unAge)
{
nom=unNom;
prenom=unPrenom; age = unAge;
} }
14
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
15
Objets, tableaux, types de base
16
Références
17
Différences entre objets et types de base
Mémoire
3
int x=3,y=3;
x == y est vrai 3
0x768
0x852
18
Accès aux attributs d’un objet (1)
[Link]
19
Accès aux attributs d’un objet (2)
[Link]
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.
20
Accès aux méthodes d’un objet (1)
[Link]
21
Accès aux méthodes d’un objet (2)
[Link]
22
Notion de méthodes et de paramètres (1)
23
Mode de passage des paramètres
24
Notion de méthodes et de paramètres (2)
25
Portée des variables (1)
26
Portée des variables (2)
27
Destruction d’objets (1)
28
Destruction d’objets (2)
29
Destruction d’objets (3)
30
L’encapsulation (1)
● Notion d'encapsulation :
– les données et les procédures 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.
31
L’encapsulation (2)
32
Contrôle d’accès (1)
33
Contrôle d’accès (2)
34
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 ( )
{[Link]("Longueur= " + longueur + " Largeur = " + largeur +
" Profondeur = " + profondeur);
}}
35
Variables de classe (1)
36
Variables de classe (2)
Variable de classe
public class UneClasse
{
public static int compteur = 0;
public UneClasse () Utilisation de la variable de classe
{ compteur dans le constructeur de
compteur++; la classe
}
}
37
Méthodes de classe (1)
38
Méthodes de classe (2)
[Link](x);
39
Composition d’objets (1)
● Un objet peut être composé à partir d’autres objets
Exemple : Une voiture composée de
– 5 roues (roue de secours) chacune composée
● d’un pneu
– d’un moteur composé
● de plusieurs cylindres
– de portières
Voiture Moteur Portière Portière
– etc…
40
Composition d’objets (2)
Syntaxe de composition d’objets
class Pneu {
private float pression
;
void gonfler();
void degonfler();}
class Roue {
private float
diametre;
Pneu pneu ;}
class Voiture {
Roue roueAVG,roueAVD, roueARG, roueARD , roueSecours ;
Portiere portiereG, portiereD;
Moteur moteur;}
41
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();}
42
Composition d’objets (4)
43
L’héritage (1) : Concept
● La modélisation du monde réel nécessite une
classification des objets qui le composent
● Classification = distribution systématique en catégories
selon des critères précis
● Classification = hiérarchie de classes
● Exemples :
– classification des éléments chimiques
– classification des êtres vivants
44
L’héritage (2) : exemple
Forme géométrique
Polygone Ellipse
Carré
45
L’héritage (3) : définition
46
L’héritage (3) : représentation graphique
Superclasse
Lien d’héritage
Sous-classe
47
L’héritage avec Java (1)
48
L’héritage avec Java (2)
class Personne
{
private String nom;
private Date date_naissance;
// ...
}
49
L’héritage en Java (3)
● 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. Attention donc dans ce cas que le constructeur sans
paramètre existe toujours dans 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.
50
L’héritage en Java (4)
51
L’héritage en Java (5)
52
Redéfinition de méthodes
53
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.
54
Recherche dynamique des méthodes (2)
Employ
e
salaire : Double
calculePrime(
)
Employe jean = new Cadre();
[Link]();
Cadre
calculePrime(
)
55
Surcharge de méthodes (1)
56
Opérateur instanceof
//...
57
Forçage de type / transtypage (1)
58
Forçage de type / transtypage (2)
59
L’autoréférence : this (1)
60
L’autoréférence : this (2)
class Personne
{
public String nom; Pour lever l’ambiguïté sur le mot « nom »
Personne (String nom) et déterminer si c’est le nom du paramètre
{ ou de l’attribut
[Link]=nom;
}
}
61
Référence à la superclasse
62
Classes abstraites (1)
63
Classes abstraites (2)
64