Programmation Orientée
Objet (POO)
Abir ZEKRI BEN YAHIA
Plan du cours
1. Introduction à la Programmation Orientée Objet
2. Les principes fondamentaux de la POO
2.1. Encapsulation
2.2. Héritage
2.3. Polymorphisme
2.4. Absraction
2
Objectifs du cours POO
1. Appréhender les concepts de l'approche objet afin d’être
capable de comprendre toute technologie basée sur
l’objet.
Objet
Classe Héritage
…
2. S’initier à la programmation en java
3
Bref historique
Langages machine (0/1) Langages symboliques
(Assembleur) Langages de haut niveau ou indépendants du
matériel (Basic, Fortran, Cobol, etc.)
Programmation structurée Programmation procédurale
Programmation modulaire Programmation objet ..
4
Bref historique
•Simula a été le premier langage de programmation à
implémenter le concept de classes en 1967 !
Ole-Johan Kristen
Dahl Nygaard
5
Bref historique
•Smalltalk, en plus d’implémenter les principaux concepts
de base (classe, objet, héritage, polymorphisme), introduit
la notion d'objet persistant, de traitement des exceptions et
le principe Modèle-Vue-Contrôleur. (les années 70).
6
Paradigmes de programmation
Un paradigme est une manière de programmer.
2 exemples : programmations Impérative et Orientée Objet
Procédurale Orientée Objet
• Que doit faire ce programme ? • Quelles sont les entités de ce
programme ?
•De quelles procédures ai-je • Quels sont les objets
besoin ? fondamentaux de l’application ?
Autres exemples : programmation Déclarative
-HTML, XML, etc. (descriptive),
- Lisp, etc. (fonctionnelle),
-Prolog, etc. (Logique), etc.
7
Principes de l’approche objet
•La programmation objet systématise la modularité et
permet la réutilisation de composants logiciels
•Maîtrise de la complexité d’un système, repose sur :
• L’abstraction
• La décomposition
• La connexion
8
Les raisons du succès de la POO
La programmation orientée objet (POO) offre de nombreux avantages
qui expliquent son utilisation répandue :
•Modularité : La POO permet de diviser efficacement un programme
en modules ou classes réutilisables, ce qui facilite la gestion et la
maintenance du code.
•Réutilisabilité : Avec la POO, il est possible de créer des objets qui
peuvent être utilisés plusieurs fois dans un programme ou même dans
différents programmes, ce qui permet d'économiser du temps et des
ressources lors du développement.
•L’héritage
•Le polymorphisme …
9
Les raisons du succès de la POO
•la POO reste populaire et largement utilisée dans de nombreux
langages de programmation, tels que Java, C#, Python, C++, etc.
•Bien qu'il existe d'autres paradigmes de programmation émergents,
tels que la programmation fonctionnelle, la POO continue d'être
pertinente et tendance dans le domaine du développement logiciel.
•La Poo est particulièrement adaptée au développement
d'applications mobiles car elle permet de structurer efficacement le
code en classes et en objets, facilitant ainsi la maintenance et
l'extension des applications.
•Les principaux langages de programmation utilisés pour le
développement d'applications mobiles, tels que Java (pour Android)
et Swift (pour iOS), sont basés sur la Poo.
10
Plan du cours
1. Introduction à la Programmation Orientée Objet
2. Les principes fondamentaux de la POO
2.1. Encapsulation
2.2. Héritage
2.3. Polymorphisme
2.4. Absraction
11
La notion d’objet
Un objet est une abstraction d’un élément du monde réel.
Il possède un ensemble d'attributs caractérisant son état,
et un ensemble d'opérations (les méthodes) qui permettent
son comportement.
Un objet est l'instance d'une classe.
12
La notion d’objet
• Un objet est une variable (presque) comme les autres. Il
faut notamment qu’il soit déclaré avec son type.
• Le type d’un objet est un type complexe (par opposition
aux types primitifs entier, caractère, ...) qu’on appelle
une classe.
13
La notion de classe
• Une classe est un type de données qui regroupe un
ensemble de propriétés (qui peuvent être des attributs et
des méthodes) communes à des objets.
14
La notion de classe
• Par exemple, si on veut modéliser des voitures, on
pourrait créer une classe "Voiture" qui aurait des
attributs comme la marque, le modèle, la couleur, etc.
et des méthodes comme démarrer, accélérer, freiner,
etc.
• À partir de cette classe, on peut ensuite créer
plusieurs objets différents de voitures, chacun avec
ses propres valeurs d'attributs spécifiques.
15
La notion de classe
En résumé, une classe en POO est une structure qui permet
de regrouper des variables et des fonctions liées à un même
concept, et de créer des objets à partir de cette structure.
Classe = attributs + opérations
Objet = état (attributs) + comportement (méthodes)
• On parle d’encapsulation pour désigner le regroupement
de données dans une classe.
16
L‘encapsulation
• L'encapsulation est l'un des principes fondamentaux de la
programmation orientée objet (POO).
• Il s'agit de regrouper des données et des méthodes
(fonctions) connexes en une seule entité appelée classe.
• L'objectif principal de l'encapsulation est de cacher les
détails internes et de protéger les données de la classe
contre les accès non autorisés ou les modifications
inattendues.
• Pour mettre en œuvre l'encapsulation, les classes ont
généralement des attributs privés, qui ne peuvent être
accédés directement depuis l'extérieur de la classe, mais
uniquement à l'aide de méthodes spéciales appelées
getters et setters.
17
L‘encapsulation
• Les getters permettent d'obtenir la valeur d'un attribut
privé, tandis que les setters permettent de modifier la
valeur de l'attribut privé.
• L'encapsulation permet donc de garantir l'intégrité des
données en contrôlant strictement l'accès à celles-ci.
• Elle facilite également la maintenance et l'évolution du
code, car les détails internes peuvent être modifiés sans
affecter le code externe qui utilise la classe.
18
L‘encapsulation
L’encapsulation de données dans un objet permet de cacher
ou non leur existence
aux autres objets du programme. Une donnée peut être
déclarée en accès :
● public : les autres objets peuvent accéder à la valeur de
cette donnée ainsi que la modifier ;
● privé : les autres objets n’ont pas le droit d’accéder
directement à la valeur de cette donnée
(ni de la modifier). En revanche, ils peuvent le faire
indirectement par des méthodes de
l’objet concerné (si celles-ci existent en accès public).
19
Etude de cas 1 : gestion d’une bibliothèque
Vous êtes chargé de développer un système de gestion pour une
bibliothèque. Le système doit permettre de gérer les livres, les membres de
la bibliothèque et les emprunts de livres. Voici les fonctionnalités attendues :
1. Gestion des livres :
- Chaque livre a un titre, un auteur, une année de publication et un statut
(disponible ou emprunté).
- Le système doit permettre d'ajouter de nouveaux livres, de les supprimer et
de les mettre à jour.
- Il doit également être possible de rechercher des livres par titre, auteur ou
année de publication.
2. Gestion des membres :
- Chaque membre de la bibliothèque a un nom, une adresse et un identifiant
unique.
- Le système doit permettre d'ajouter de nouveaux membres, de les
supprimer et de les mettre à jour.
- Il doit également être possible de rechercher des membres par nom ou
identifiant.
20
Etude de cas 1 : gestion d’une bibliothèque
3. Gestion des emprunts :
- Un membre peut emprunter un livre s'il est disponible.
- Le système doit enregistrer la date d'emprunt et la date de retour prévue.
- Il doit également permettre de prolonger la durée de l'emprunt si
nécessaire.
- Lorsqu'un livre est emprunté, son statut doit être mis à jour.
Votre tâche consiste à concevoir et implémenter les classes nécessaires
pour ce système de gestion de bibliothèque en utilisant la programmation
orientée objet.
21
Etude de cas 1 : gestion d’une bibliothèque
Liste des Attributs Méthodes
classes
22
Etude de cas 2: Gestion de réservation de billets d'avion
Vous devez concevoir un système de réservation de billets d'avion pour une compagnie
aérienne. Le système devrait permettre aux passagers de rechercher, réserver et
annuler des vols. Vous devez utiliser la POO pour modéliser ce système. Voici
quelques exigences :
1.Vol : Chaque vol a un numéro de vol, une destination, une heure de départ,
un nombre de places disponibles, et un prix. Les vols sont répertoriés dans une
base de données.
2. Passager : Chaque passager a un nom, un numéro de passeport et un âge.
3. Réservation : Les passagers peuvent réserver un vol en fournissant leur nom,
numéro de passeport, numéro de vol et nombre de places souhaitées. Une réservation
doit vérifier la disponibilité de places sur le vol.
a. Annulation : Les passagers peuvent annuler leur réservation en
fournissant leur numéro de réservation. Cela libère les places réservées
pour d'autres passagers.
b. Affichage : Le système doit permettre d'afficher la liste des vols
disponibles, les détails d'un vol spécifique (y compris les passagers
réservés), et la liste des réservations pour un vol donné.
Votre tâche consiste à identifier les classes nécessaires pour modéliser ce système de
réservation de billets d'avion en utilisant les principes de la POO.
23
Etude de cas 3 : Gestion des informations des élèves dans une
école
L'école XYZ souhaite moderniser et optimiser la gestion des informations des élèves.
Description du système : Le système de gestion des informations des élèves sera basé
sur plusieurs éléments, tels que :
Élève : Cette classe représentera un élève et contiendra les attributs tels que le nom, le
prénom, l'adresse, le numéro de téléphone, la date de naissance, etc. Elle fournira
également des méthodes pour mettre à jour ces informations, afficher les détails de
l'élève et récupérer les résultats scolaires.
RésultatScolaire : Cette classe stockera les résultats scolaires d'un élève, tels que les
notes obtenues dans chaque matière, la moyenne générale, les appréciations, etc. Elle
permettra également de calculer la moyenne des notes et d'ajouter des commentaires
supplémentaires.
Absence : Cette classe enregistrera les absences d'un élève, incluant la date, le motif
et les éventuelles sanctions. Elle permettra de gérer et d'afficher les informations sur
les absences.
Paiement : Cette classe permettra de gérer les informations sur les paiements
effectués par les élèves, tels que les frais de scolarité, les activités parascolaires, etc.
Elle enregistrera les montants payés, les dates et les méthodes de paiement.
24
Méthode constructeur
• Chaque classe doit définir une ou plusieurs méthodes particulières appelées des
constructeurs.
• Un constructeur est une méthode invoquée lors de la création d’un objet.
• Cette méthode, qui peut être vide, effectue les opérations nécessaires à
l’initialisation d’un objet.
• Chaque constructeur doit avoir le même nom que la classe où il est défini et n’a
aucune valeur de retour (c’est l’objet créé qui est renvoyé).
• Plusieurs constructeurs peuvent être définis s’ils acceptent des paramètres d’entrée
différents.
25
Méthode constructeur
Fichier "Carre.java"
class Carre{
int x;
int y;
Carre(){ x=1;y=1 }
Carre(int a, int b, double l){ x=a;y=b; }
UABB-Tlemcen – Département 26
d’Informatique - cours de POO
Instanciation d’une classe
• Un objet est une instance (anglicisme signifiant « cas » ou « exemple ») d’une classe
et est référencé par une variable ayant un état (ou valeur).
• Pour créer un objet, il est nécessaire de déclarer une variable dont le type est la
classe à instancier, puis de faire appel à un constructeur de cette classe.
//déclaration de l’objet mon_caree de type Caree
Carre mon_caree ;
/*instanciation de l’objet mon_caree en utilisant le
constructeur de la classe Caree sans paramètre*/
mon_caree = new Caree();
27
Instanciation d’une classe
• Un objet est une instance (anglicisme signifiant « cas » ou « exemple ») d’une classe
et est référencé par une variable ayant un état (ou valeur).
• Pour créer un objet, il est nécessaire de déclarer une variable dont le type est la
classe à instancier, puis de faire appel à un constructeur de cette classe.
//déclaration de l’objet mon_caree de type Caree
Carre mon_caree ;
/*instanciation de l’objet mon_caree en utilisant le
constructeur de la classe Caree possédant deux
paramètres*/
mon_caree = new Caree(4,4);
28
Accès aux variables et aux méthodes
• Pour accéder à une variable associée à un objet, il faut préciser l’objet qui la
contient. Le symbole ’.’ sert à séparer l’identificateur de l’objet de l’identificateur de la
variable. Une copie de l’abscisse d’un carrée s’écrit :
• La même syntaxe est utilisée pour appeler une méthode d’un objet.
Carre mon_caree ; Appel de la propriété x de
la classe Carree
mon_caree = new Caree(4,4);
int abs=mon_caree.x;
Appel de la méthode
Mon_caree.depalcer(); depalcer() de la classe
Carree
29
Accès aux variables et aux méthodes
• Pour qu’un tel appel soit possible, il faut que trois conditions soient remplies :
1.La variable ou la méthode appelée existe !
2.Une variable désignant l’objet visé existe et soit instanciée.
3.L’objet, au sein duquel est fait cet appel, ait le droit d’accéder à la méthode ou à
la variable
30
Ce qu’il faut savoir sur java
Fichier de code source: .java
Fichier compilé (code intermédiaire ou byte code) : .class
Outils nécessaires : JRE, JDK, etc.
Environnement utilisé en TP : eclipse
Qualités essentielles : Portabilité (JVM) et Facilité d’utilisation
31
Ce qu’il faut savoir sur java
Conventions de nommage
• Organisation des fichiers
-Le fichier .java doit avoir le même nom que la classe publique qu’il
décrit
- 1 fichier .java par classe, même pour celle contenant le main() ,
exception pour les inner classes
• Eléments de base
- paquetages minuscules
- classes Majuscule Pour La Premiere Lettre De Chaque Mot
- interface Majuscule Pour La Premiere Lettre De Chaque Mot
- méthodes minuscule Pour La Premiere Lettre
- constantes MAJUSCULES
- variables minuscule Pour La Premiere Lettre
32
Ce qu’il faut savoir sur java
Exemple :
fichier Club.java
Class Club {
public static void main(String[] args) {
System.out.println("Club POO !");
}
}
33
Classes et objets
Définition d’une classe en java
class NomClasse {
// définition des Attributs
// définition des Méthodes
34
Classes et objets
Les attributs de classe
Fichier "Cercle.java"
class Cercle {
Point2D centre;
double rayon;
}
Fichier « Point2D.java"
class Point2D {
double x,y;
}
35
Classes et objets
Les méthodes
Fichier "Cercle.java"
class Cercle {
Point2D centre;
double rayon;
void deplacer (Vecteur2D vecteur) {
centre.x += vecteur.x;
centre.y += vecteur.y;
}
}
36
Classes et objets
Les méthodes
Fichier "Cercle.java"
class Cercle {
Point2D centre;
double rayon;
void deplacer (Vecteur2D vecteur) {
centre.x += vecteur.x;
centre.y += vecteur.y;
}
}
Fichier "Vecteur2D.java"
class Vecteur2D {
double x,y;
}
37
Classes et objets
La surcharge de méthodes
Fichier "Cercle.java"
class Cercle {
Point2D centre;
double rayon;
void deplacer (Vecteur2D vecteur) {
centre.x += vecteur.x;
centre.y += vecteur.y;
}
void deplacer (double x, double y) {
centre.x += x;
centre.y += y;
}
}
38
Classes et objets
Les méthodes
Fichier « Point2D.java"
class Point2D {
double x,y;
void afficher(){
System.out.print("[" + x + ", " + y + "]");
}
39
Classes et objets
Appel de méthodes
Fichier "Cercle.java"
class Cercle {
Point2D centre; double rayon;
void deplacer (Vecteur2D vecteur) { centre.x += vecteur.x; centre.y += vecteur.y; }
void deplacer (double x, double y) { centre.x += x; centre.y += y; }
void deplacerH(double x) { centre.x += x; }
void deplacerV(double y) { centre.y += y; }
void afficher(){
System.out.print("Objet Cercle :\n\tcentre : ");
centre.afficher();
System.out.println("\n\trayon : " + rayon);
}
}
40
Instanciation d’objets
On instancie un objet en appliquant l'opérateur new sur
un constructeur de classe.
Classe – Objet - Constructeur
Cercle monCercle = new Cercle();
41
Classes et objets
Classe principale
Fichier « Demarrer.java"
class Demarrer {
public static void main(String args[]){
Cercle c1=new Cercle();
Point2D c=new Point2D(5,4);
Cercle c2=new Cercle(c,3);
c1.afficher();
c2.afficher();
}
}
42
Quelques règles sur les constructeurs
•Si aucun constructeur n'est spécifié, dans la définition de la
classe, un constructeur par défaut vous est obligatoirement
fourni, celui-ci n'admettant aucun paramètre.
•Si vous en définissez au moins un, le constructeur par défaut
(qui n'admet pas de paramètres) n'est plus fourni. Si vous en
avez l'utilité il vous faudra alors le définir explicitement.
43
Destructeur
class Point2D {
//…
public void finalize() {
System.out.println(" Objet Point2D détruit");
}
}
Le ramasse-miettes
Le ramasse-miettes (ou GC [Garbage Collector]) se charge de
repérer les objets inutiles et de libérer leurs espaces mémoires
Il fonctionne en permanence dans un thread de faible priorité.
44
Méthodes et attributs statiques
Toute propriété (attribut ou méthode) statique existe indépendamment
de toute instanciation d'objet.
class Demarrer {
static int a = 3;
static public void main(String args[]){
a += 5;
System.out.println("a^2 = " + carre(a));
}
static int carre(int v){ return v*v; }
}
45
Méthodes et attributs statiques
class Demarrer {
static int a = 6;
static public void main(String args[]){
Demarrer d1=new Demarrer(), d2=new Demarrer();
d1.a++; d2.a++;
System.out.println("a = " + Demarrer.a);
}
}
>java Demarrer
8
>
46
Méthodes et attributs statiques
Les propriétés statiques d'une classe sont partagées par toutes les
instances de cette classe.
•Si une méthode est statique, et si elle doit utiliser des attributs ou des
méthodes de sa classe, il faut alors que ces propriétés soient elles aussi
déclarées static.
47