Académique Documents
Professionnel Documents
Culture Documents
programmation orienté
objet (POO) en Java
Concepts élémentaires
Encapsulation
Méthodes et attributs
Constructeurs
….
Encapsulation
Exemple 1:
Fenêtre
position, taille, bordure, titre,
État
couleur,...
Comportement dessiner, déplacer, agrandir...
(Opérations)
Exemple 2:
Fichier
nom, répertoire, protections,
État
contenu, ...
Comportement
ouvrir, fermer, supprimer,
(Opérations)
Classes et Objets (2)
Classe : Une classe c’est la description d’un ensemble d’objets ayant
une structure de données commune et disposant des mêmes
méthodes.
Exemple 1:
Personne
-Nom : String
-Prenom : String
-Age : int
+affiche() : void
+calculeAge() : int
Exemple 2:
Materiel
-Nom :String
-Prix : double
-Nombre : int
+affiche() : void
+achete() : void
Classes et Objets (3)
Classe Instances
NomDeClasse NomDeVariable ;
ainsi :
if(demande == 1){
Objet1 o1 = new Objet1();
o1.initialiser();
}
else{
Objet2 o2 = new Objet2();
o2.initialiser();
}
Classes et Objets (13)
Réutilisation d'objets
• Il faut proscrire la création d'objets à l'intérieur d'une boucle.
– Cette création peut être désastreux en terme de consommation de
la mémoire.
– Préférer la réutilisation d'objet, qui sera instancié avant la boucle,
et modifié à l'intérieur.
La destruction d'objets
a 3 x
a = new Point(3,5); 5 y
b 2 x
b= new Point(2,0) 0 y
a 3 x
5 y
b 2 x
0 y
Chaînes de caractères :
classe String
• Attention String n’est pas un type de base. Il s'agit d'une classe
défini dans l’API Java (package java.lang), permettant de manipuler
les chaines de caractères.
String s="salut"; // s contient la chaîne "salut"
String s=new String("salut"); // s contient aussi la chaîne "salut".
• La concaténation
– L’opérateur + entre deux String les concatène :
String str1 = "Bonjour ! ";
String str2 = "Comment vas-tu ?";
String str3 = str1 + str2; / * Concaténation de chaînes : str3
contient " Bonjour ! Comment vas-tu ? " */
Classe String (2)
• L'avantage des objets immuables est qu’ils peuvent être partagés sans
risque. Mais si on utilise fréquemment ce type d’objets à l'intérieur des
boucles, par exemple, on peut avoir la création de plusieurs d'objets
(temporaires) avec un coût non négligeable (mémoires, temps
d'exécution).
• Dans ce cas, il est préférable de déclarer et utiliser des objets modifiables
qui sont de type StringBuffer ou StringBuilder.
Classe StringBuffer
• Contrairement à la classe String, la classe StringBuffer permet de créer
des chaînes de caractères modifiables (la taille et le contenu peuvent
varier durant l'exécution de l'application).
• La notion de capacité représente la taille du buffer interne qui
mémorise la chaîne de caractères (nombre total de caractères
disponibles avant de devoir agrandir la taille du buffer interne).
• La capacité est automatiquement augmentée lorsque c'est nécessaire.
La capacité initiale peut être définie lors de la création d'un objet
StringBuffer (paramètre du constructeur, 16 par défaut).
• Ne pas confondre la capacité et la longueur d'un objet StringBuffer
Classe StringBuffer (2)
• Pour créer un objet de type StringBuffer, on doit utiliser l’opérateur
new (…), car il n’y a pas de syntaxe simplifiée.
StringBuffer ch = new StringBuffer ("Bonjour")
2- Dans une méthode, this permet d'éviter les conflits des noms lorsque
les noms d’arguments d’une méthode et les variables locales sont
identiques à des noms d’attributs d’une classe.
Polymorphisme
Interfaces
Classes abstraites
…
Héritage
Caractéristiques de l’héritage
L'héritage est une propriété importante de la programmation orientée
objet Java.
Ce concept permettant d'ajouter des nouvelles fonctionnalités à une
classe à partir de la création d’une sous-classe héritant des propriétés
de la classe de base et à laquelle s’ajoutent des nouvelles propriétés.
La classe héritée s’appelle sous-classe (classe dérivée) de la classe
mère (super-classe).
L'héritage permettant à une classe dérivée d'étendre les propriétés de
la classe de base tout en héritant des attributs et des méthodes de cette
classe de base.
L’héritage en Java, ne permet à une classe d’hériter que d'une seule
classe de base, on parle d’héritage simple. En effet, pas d’héritage
multiple.
Héritage (2)
Toutes les classes Java dérivent automatiquement d'une seule et
même classe ancêtre : la classe Object.
Donc, l’héritage permet de définir une nouvelle classe à partir d’une
classe existante, à laquelle on ajoute de nouvelles données et
méthodes.
Exemple 1:
Personne
-Nom : String
-Prenom : String
-Age : int
+affiche() : void
+calculeAge() : int
Etudiant Enseignant
-cne : int -ppr: int
+affiche() : void +affiche() : void
Héritage (3)
Exemple 2:
L'héritage induit une relation arborescente entre les classes.
Vehicule
marque
couleur
vitesse
etat
demarrer()
arreter()
accelerer()
freiner()
Héritage (5)
Définition de la classe Vehicule
public class Vehicule {
private String marque;
private String couleur;
private double vitesse; // Vitesse actuelle
private int etat; // 0:arrêt, 1:marche, ...
public Vehicule(String marque, String couleur) {
this.marque = marque;
this.couleur = couleur;
vitesse = 0.0;
etat = 0;
}
public void demarrer() { etat = 1; }
public void arreter() { if (vitesse == 0) etat = 0; }
public void accelerer() {if (etat == 1) vitesse += 5.0;}
public void freiner() {
if (vitesse >= 5.0) vitesse -= 5.0;
else vitesse = 0.0;}
}
Héritage (6)
Classes dérivées de « Vehicule »
De nouvelles classes « Voiture » et « Camion » peuvent être crées, en utilisant
l'héritage, à partir de « Vehicule ». Elles la spécialisent en y ajoutant de nouvelles
propriétés.
Un tel diagramme, dans le langage UML, est appelé "Diagramme de classes". Il
montre les relations entre les classes d'une application.
Vehicule
marque
couleur
vitesse
etat
demarrer()
arreter()
accelerer()
freiner()
Camion Voiture
chargeMax modele
poidsChargement nbPortes
charger()
decharger()
Héritage (7)
Classes dérivées: Camion et Voiture
La classe Camion est une classe dérivée de Vehicule. Elle hérite tous ses
méthodes et attributs. Elle étend la classe mère Vehicule en lui ajoutant deux
nouveaux attributs chargeMax et poidsChargement, ainsi que deux
nouvelles méthodes charger() et decharger()).
La classe Voiture est une classe dérivée de Vehicule et hérite tous les
méthodes et les attributs de Vehicule en lui ajoutant deux nouveaux attributs
modele et nbPortes.
On peut utiliser, dans les classes dérivées Camion et Voiture, les attributs
et les méthodes héritées (par exemple couleur ou freiner()) comme si ces
membres ont été déclarés dans chacune des sous-classes (sous réserve,
naturellement, que les droits d'accès le permettent).
Héritage (8)
Implémentation de la classe Voiture
La déclaration d'une classe dérivée se fait en utilisant le mot clé «extends»
suivi du nom de la classe de base.
Lorsque le mot «extends» est omis, alors la classe hérite automatiquement
de la classe « Object ».
Exemple 1
Exemple 2