POO - JAVA Partie 01
POO - JAVA Partie 01
POO - JAVA Partie 01
Java
3ème année
Brahim BAKKAS
ENSAM -Mekness
Version 1.0/23
Programmation Orientée Objet: javapour modifier le style du titre
Cliquez
• Livres
⚫Introduction à la POO
⚫Introduction au langage JAVA
⚫Bases du langage
⚫Classes et objets
⚫Héritage
⚫Héritage et polymorphisme
⚫Les indispensables : package, collections et exception
⚫Les interfaces graphiques (GUI)
6
Brahim BAKKAS Programmation Orientée Objet Java 6
INTRODUCTION
À LA POO
7
Introduction Cliquez pour modifier le style du titre
⚫ L’extensibilité : Les programmes doivent s’adapter facilement aux changements de spécification afin
d’intégrer facilement de nouvelles fonctionnalités
⚫ L’efficience : Temps d’exécution, taille mémoire, etc.
⚫ La portabilité : C’est la facilité avec laquelle on peut exploiter un même logiciel dans différentes
implémentations.
⚫ La réutilisabilité : C’est la possibilité d’utiliser certaines parties du logiciel pour résoudre un autre
problème.
8
Brahim BAKKAS Programmation Orientée Objet Java 8
Programmation Procédurale (PP)Cliquez pour modifier le style du titre
simples. main()
Données
init() calcule()
Données
trie()
factorise()
6
compare() permute()
Brahim BAKKAS Programmation Orientée Objet Java 9
Programmation Orientée
CliquezObjet (POO)
pour modifier le style du titre
Données Données
⚫ Objectifs de la POO
⚫ Facilité la réutilisation de code, encapsulation et abstraction
⚫ Facilité de l’évolution du code
⚫ Améliorer la conception et la maintenance des grands systèmes
⚫ Programmation par « composants ». Conception d’un logiciel à la manière de la fabrication d’une
voiture.
⚫ Programmation Procédurale
⚫ Unité logique : le module
⚫ Une zone pour les variables
⚫ Une zone pour les fonctions
⚫ Chaque fonction résout une partie du problème
⚫ Structuration « descendante » du programme
⚫ Un Objet a :
⚫Ses propres données (attributs) qui peuvent être des données simple (entier, texte, …)
ou d’autres objets.
⚫Ses propres méthodes (fonctions membres) qui représente son comportement.
➔Ce sont les traitements qu'on peut appliquer aux données.
⚫Une identité qui permet de l'identifier parmi les autres objets.
⚫ Exemple :
▪ Marque : Renault
▪ Modèle : Megane
▪ Couleur : Noir
Moteur : Diesel; 85 Cheveaux
▪ Etat : En Marche
Démarrer() Arrêter() Peindre(NouvColor) GetEtat () …
➔Formule à retenir :
⚫Classe :
⚫généralisation de la notion de type.
⚫décrit les caractéristiques générales d’un ensemble (famille) d’objets similaires :
➔Les objets similaires sont des instances (exemplaires) de la même classe.
⚫Possède des membres :
⚫ Attributs : les éléments données de la classe
⚫ Méthodes : fonctions qui donne accès ou modifie les attributs.
⚫Exemple :
Classe Livre
- titre Germinal
E. Zola Le seigneur des anneaux
- auteur J.R.R.Tolkien
⚫Masquage de l’information :
⚫Consiste à limiter l'accès aux données d’une classe.
⚫Normalement, les valeurs des attributs d’un objet ne sont pas
accessibles directement par un autre objet.
➔On dit que les attributs sont masqués à l’intérieur d’un objet.
➔Les attributs masqués sont dits privés.
➔Ceux qui ne sont pas masqués sont appelés attributs publiques.
➔L'accès aux attributs privés est effectué via des méthodes.
Données
Méthodes
⚫ Stratégie de développement OO :
1. Identifier les objets et leurs attributs Exemple :
CompteBancaire
2. Identifier les opérations (Exemple: Verser, Retirer, …).
3. CompteBancaire on pourra
Établir la visibilité. Par exemple, pour un objet
avoir accès à toutes les actions (Verser, Retirer, …) mais ne pourra pas voir
l'accès directement au solde pour le modifier.
4. Établir l’interface : description de chaque opération avec ses arguments (Exemple :
boolean Verser( float M) )
5. Implanter chaque objet.
⚫Interprété :
⚫ Avantage au développement.
⚫ Mais est pour l'instant un inconvénient à l'exécution (performances).
⚫Indépendant de l'architecture :
⚫ C'est la machine virtuelle qui assure cette indépendance.
⚫Portable :
⚫ Contrairement au C/C++ Java n'est pas dépendant de l'implémentation, les types de base ont des tailles
fixes.
⚫Multithread :
⚫ C'est la possibilité d'exécuter plusieurs tâches simultanément.
⚫Dynamique :
⚫ Java a été conçu pour fonctionner dans un environnement évolutif.
⚫Compact :
⚫ L'interpréteur Java n'a besoin que de 215Ko.
⚫ Chargement dynamique des classes.
⚫ Informations Générales
⚫ Conçu par Sun Microsystems (Write Once RunAnywhere)
⚫ Langage orienté objet, inspiré de C+ +
⚫ De nombreuses fonctionnalités Réseau et Internet
⚫ Langage fortement typé
⚫ Gestion du multitâche
⚫ Gestion mémoire réalisée par un Garbage Collector
⚫ Langage compilé vers du pseudo code binaire nommé "ByteCode", interprété au sein d'une
machine virtuelle (VM)
• ➔Portabilité = disponibilité de la machine virtuelle Java
ByteCode
Compilation MachineVirtuelle
21
Brahim BAKKAS Programmation Orientée Objet Java 24
BASES DU LANGAGE
JAVA
25
Premier exemple de programme enleJava
Cliquez pour modifier style du titre
⚫ Initialisation
⚫ Une variable peut recevoir une valeur au moment de sa déclaration :
int n = 15;
boolean b = true; Penser à l’initialisation au risque d’une erreur de
compilation int n;
⚫ Cette instruction joue le même rôle : System.out.println(" n = " + n);
int n;
n = 15;
boolean b;
b = true;
⚫ Constantes
⚫ Ce sont des variables dont la valeur ne peut affectée qu'une fois
⚫ Elles ne peuvent plus être modifiées
⚫ Elles sont définies avec le mot clé final
final int n = 5;
final int t;
...
t = 8;
n = 10; // erreur : n est déclaré final
} }else {
...
⚫ choix imbriqués }
if condition {
... ⚫ Sélection bornée
} else { Switch var{
if condition { case val0:
... case val1:
}else { case val2:
... . . .
} default : ….
} }
Brahim BAKKAS Programmation Orientée Objet Java 30
Structure de contrôle : Itérations
Cliquez pour modifier le style du titre
⚫ Pour
for (initialisation;condition; modification){ ...}
⚫ For each
for (Type var : Collection) { ...}
while(condition) { do{
... ...
} } while(condition)
28
Brahim BAKKAS Programmation Orientée Objet Java 32
Opérateurs sur les types primitifs
Cliquez pour modifier le style du titre
⚫ Opérateurs arithmétiques.
▪ Unaires : +a, -b
▪ Binaires : a+b, a-b, a*b, a%b
▪ Incrémentation et décrémentation : a++, b—
▪ Affectation élargie : +=, -=, *=, /=
⚫ Opérateurs comparaisons
▪ a==b, a!=b, a>b, a<b, a>=b, a<=b
⚫ Opérateurs logiques
▪ Et : a && b, a & b
▪ Ou : a || b, a | b
⚫ Conversion de type explicite (cast)
▪ (NouveauType)variable
1. Déclaration
⚫La déclaration précise simplement le type des éléments du tableau
int[] monTableau;
⚫Peut s’écrire également
int monTableau[];
2. Dimensionnement
⚫Le nombre d’éléments du tableau sera déterminé quand l’objet tableau sera
effectivement créé en utilisant le mot clé new
⚫La taille déterminée à la création du tableau est fixe, elle ne pourra plus être
modifiée par la suite
⚫Longueur d’un tableau :
monTableau.length
⚫La création d’un tableau par new
▪ Alloue la mémoire en fonction du type de tableau et de la taille
▪ Initialise le contenu du tableau à 0 pour les types simples
3. Initialisation
⚫ Comme en C/ C++ les indices commencent à zéro
⚫ L’accès à un élément d’un tableau s’effectue suivant cette forme:
monTab[varInt]; // varInt >= 0 et <monTab.length
• Initialisation
monTableau[0] = 1;
for (int current : monTableau) {
monTableau[1] = 2; System.out.println(current);
}
monTableau[2] = 3;
36
Brahim BAKKAS Programmation Orientée Objet Java 40
Les tableaux en Java :Cliquez
Multidimensionnels
pour modifier le style du titre
Instanciation Objet :
Classe :
Voiture
Voiture
rouge
Objet :
Voiture
CLASSES ET OBJETS verte
43
Classe et définition Cliquez pour modifier le style du titre
⚫ Conventions de noms
⚫CeciEstUneClasse
⚫celaEstUneMethode(…)
⚫jeSuisUneVariable
⚫JE_SUIS_UNE_CONSTANTE
⚫ Un fichier par classe, une classe par fichier
⚫ Classe "Voiture" décrite dans le fichier Voiture.java
⚫ Il peut exceptionnellement y avoir plusieurs classes par fichier (cas des Inner classes)
⚫Affecter un objet
▪ a = b : signifie a devient identique à b
▪ Les deux objets a et b sont identiques et toute modification de a entraîne
celle de b
⚫Comparer deux objets
▪ a == b retourne true si les deux objets sont identiques
▪ C’est-à-dire si les références sont les mêmes, cela ne compare pas les
attributs
class ExempleEgale {
private int x,y;
public static void main(String[] args) {
ExempleEgale a, b, c;
a=new ExempleEgale();
b=new ExempleEgale();
a.x=1; a.y=2;
b.x=3; b.y=4;
System.out.println(a.x +" "+a.y);
System.out.println(b.x +" "+b.y);
a=b;
b.x=30; b.y=40;
System.out.println(a.x +" "+a.y +"\n");
System.out.println(b.x +" "+b.y+"\n");
System.out.println(" objet a egal b:"+ (a==b));
}
}
⚫Création
⚫Usage d’un Constructeur
⚫L’objet est créé en mémoire et les attributs de l’objet sont initialisés
⚫Utilisation
⚫Usage des Méthodes et des Attributs (non recommandé)
⚫Les attributs de l’objet peuvent être modifiés
⚫Les attributs (ou leurs dérivés) peuvent être consultés
⚫ La création d’un objet à partir d’une classe est appelée une instanciation
⚫ L’objet créé est une instance de la classe
⚫ Déclaration
⚫ Définit le nom et le type de l ’objet
⚫ Un objet seulement déclaré vaut « null » (mot réservé du langage)
⚫ Création et allocation de la mémoire
⚫ Appelle de méthodes particulières : les constructeurs
⚫ La création réserve la mémoire et initialise les attributs
⚫ Renvoi d’une référence sur l’objet maintenant créé
monObjet != null
⚫ Actuellement
⚫ On a utilisé le constructeur par défaut sans paramètre
⚫ On ne sait pas comment se construit la « Voiture »
⚫ Les valeurs des attributs au départ sont indéfinies et identique pour chaque objet
(puissance, etc.)
⚫ Rôle du constructeur en Java
⚫ Effectuer certaines initialisations nécessaires pour le nouvel objet créé
⚫ Toute classe Java possède au moins un constructeur
⚫ Si une classe ne définit pas explicitement de constructeur, un constructeur par
défaut sans arguments et qui n’effectue aucune initialisation particulière est
invoquée
Les constructeurs portent le
même nom que la classe et
n’ont pas de valeur de retour
⚫ Création de laVoiture
⚫ Déclaration de la variable maVoiture
⚫ Création de l’objet avec la valeur 7 en paramètre du constructeur
Voiture maSecVoiture;
// Sous entendu qu’il existe
// explicitement un constructeur : Voiture(int)
maSecVoiture = new Voiture(); // Erreur
}
}
⚫Intérêts
⚫Possibilité d’initialiser un objet de plusieurs manières différentes
⚫On parle alors de surchage (overloading)
⚫Le compilateur distingue les constructeurs en fonction
⚫de la position des arguments public class Voiture {
//...
⚫du nombre public Voiture() {
puissance = 4; //...
⚫du type }
public Voiture(int p) {
puissance = p; //...
}
public Voiture(int p, boolean estDemaree) {
Chaque constructeur possède
//...
le même nom (le nom de la classe)
}
}
⚫Pour accéder aux données d’un objet on utilise une notation pointée
idObjet.nomAttribut
public class TestMaVoiture {
public static void main (String[] argv) {
// Déclaration puis création
Voiture v1 = new Voiture();
Voiture v2 = new Voiture();
// Accès aux attributs en écriture
v1.puissance = 110;
// Accès aux attributs en lecture
System.out.println("Puissance de v1 = " + v1.puissance);
}
}
Il n’est
70
pas recommandé d’accéder directement aux attributs d’un objet
Brahim BAKKAS Programmation Orientée Objet Java 70
Envoi de messages : appel demodifier
Cliquez pour méthodes
le style du titre
73
Brahim BAKKAS Programmation Orientée Objet Java 73
Envoi de messages : passage de paramètres
Cliquez pour modifier le style du titre
74
Brahim BAKKAS Programmation Orientée Objet Java 74
L’objet « courant » Cliquez pour modifier le style du titre
75
Brahim BAKKAS Programmation Orientée Objet Java 75
L’objet « courant » : attributs et méthodes
Cliquez pour modifier le style du titre
⚫Il peut être nécessaire que les deux objets en composition s'échangent
des messages :
Solution 2
⚫L’objet Voiture « voit » l’objet Moteur
⚫ Il peut être nécessaire que les deux objets en composition s'échangent des messages :
Solution 2
⚫L’objet Moteur « voit » l’objet Voiture
System.out.println(maVoiture) // Voiture@119c082
+ public - private
classe La classe peut être utilisée Utilisable uniquement par les classes
par n’importe quelle définies à l’intérieur d’une autre classe.
classe Une classe privée n’est utilisable
que par sa classe englobante
attribut Attribut accessible Attribut restreint à la classe où est faite
partout où sa classe est la déclaration
accessible. N’est pas
recommandé du point de
vue encapsulation
méthode Méthode accessible Méthode accessible à
partout où sa classe est l’intérieur de la définition
accessible. de la classe
⚫ Longueur
maChaine.length(); // Avec les parenthèses car c'est une méthode
⚫ Comparaison
maChaine.equals("Bonjour!"); // Renvoi vrai
⚫ Concaténation
String essai = "ess" + "ai";
String essai = "ess".concat("ai"); Faites attention à la comparaison
de chaînes de caractères.
maChaine == "toto";
84 Comparaison sur les références !!
Brahim BAKKAS Programmation Orientée Objet Java 92
Les Chaînes modifiables «pour
Cliquez StringBuffer
modifier le style»du titre
85
Brahim BAKKAS Programmation Orientée Objet Java 93
Les chaînes décomposables
Cliquez pour:« StringTokenizer
modifier le style du titre »
⚫ Exemple :
import java.util.StringTokenizer;
public class chaine {
public static void main(String[] args) {
StringTokenizer st =
new StringTokenizer("Bonjour, le monde|de|Java",", |");
while(st.hasMoreElements())
System.out.println("Element : " + st.nextElement());
}
}
Brahim BAKKAS Programmation Orientée Objet Java 94
Variables de classe Cliquez pour modifier le style du titre
⚫Il peut être utile de définir pour une classe des attributs
indépendamment des instances : nombre deVoitures créées
⚫Utilisation des Variables de classe comparables aux « variables globales »
⚫Usage des variables de classe
⚫Variables dont il n’existe qu’un seul exemplaire associé à sa classe de
définition
⚫Variables existent indépendamment du nombre d’instances de la classe
qui ont été créés
⚫Variables utilisables même si aucune instance de la classe n’existe
⚫ Usage
⚫ Ce sont des constantes liées à une classe
Une constante de classe est
⚫ Elles sont écrites en MAJUSCULES généralement toujours visible
⚫ Usage
⚫ Ce sont des méthodes qui ne s'intéressent pas à un objet particulier
⚫ Utiles pour des calculs intermédiaires internes à une classe
⚫ Utiles également pour retourner la valeur d'une variable de classe en
visibilité private
⚫ Elles sont définies comme les méthodes d'instances, mais avec le
mot clé static
public static double vitesseMaxToleree() {
return vitesseMaxAutorisee*1.10;
}
91
Brahim BAKKAS Programmation Orientée Objet Java 99
Méthodes de classe Cliquez pour modifier le style du titre
⚫ Rappel : les types simples (int, double, etc.) possède un alter-ego objet
disposant de méthodes de conversion
⚫ Par exemple la classe Integer « encapsule » le type int
⚫ Constructeur à partir d’un int ou d’une chaîne de caractères
public Integer(int value);
public Integer(String s);
⚫ Des méthodes de classe très utiles qui permettent à partir d’une chaîne de
caractères de transformer en type simple ou type object
String maValueChaine = new String("12313");
int maValuePrimitif = Integer.parseInt(maValueChaine);
1. Déclaration ⚫ Ou 1, 2 et 3
Voiture[] monTableau; Voiture[] monTab = {
new Voiture(5),
1. Dimensionnement new Voiture(7),
monTableau = new Voiture[3]; new Voiture(8)
};
2. Initialisation
monTableau[0] = new Voiture(5);
monTableau[1] = new Voiture(7);
monTableau[2] = new Voiture(8);
⚫ Du côté de la méthode où le varargs est défini, les données sont manipulées comme
un tableau
public ajouterPassager(String... tab) {
for (String current : tab) {
System.out.println(current)
}
}
⚫ Du côté client qui fait un appel à la méthode, les données peuvent être envoyées comme
un
⚫ Tableau
⚫ Ensemble de paramètres