Vous êtes sur la page 1sur 62

1

PROGRAMMATION
ORIENTEE
OBJET

Par Ir. Michée TSHIMANGA PARTIE 3


2

CHAP 2 :
PRINCIPES FONDAMENTAUX DE LA POO
3

I. HISTORIQUE
4
Evolution de la programmation

Premiers ordinateurs
Ordinateurs plus puissants
Matériels informatique
Matériels moins coûteux
coûteux

Langage orienté Programmation Programmation


matériel structurée Orientée Objet

Ordinateurs
de plus en plus puissants
?
POO - UDBL - 2024
5

II. DEFINITION DE LA POO


6
Définition de la POO

 La programmation orientée objet (POO), ou


programmation par objet, est un paradigme de
programmation informatique qui consiste en la définition
et l’interaction de briques logicielles appelées objets.
 Un objet représente un concept, une idée ou toute entité
du monde physique, comme une voiture, une personne
ou une page d’un livre.

POO - UDBL - 2024


7
La modélisation Objet

 La modélisation objet consiste à créer un modèle du


système informatique à réaliser.
 Le modèle créé représente aussi bien des objets du
monde réel que des concepts abstraits propres au métier
ou au domaine dans lequel le système sera utilisé.
 Un langage de modélisation tel que UML (Unified
Modeling Language) sera nécessaire pour représenter ce
modèle.
POO - UDBL – 2024
8
La modélisation Objet (Suite 1)

 La modélisation objet joue un rôle important dans les


phases du SDLC :

Phase de l’analyse et
de conception
Système
Phase d’implémentation
d’Information

Phase de maintenance ou de
migration

POO - UDBL – 2024


9
Remarques :

 La programmation objet passe par l’utilisation d’un


langage orienté objet (support du paradigme).
 Il y a une différence entre utiliser un langage orienté
objet et implémenter une solution orientée objet.
 L’Orientée Objet n’est pas liée uniquement à la
programmation, mais c’est une manière de voir et de
présenter les choses.

POO - UDBL – 2024


10
Principes de la POO

 Comme vu précédemment, un paradigme permet de résoudre un problème en


se basant sur trois principes : l’abstraction, la décomposition et
l’organisation.
 L’orientée objet propose quatre principes pour appliquer les principes d’un
paradigme.
 Un langage orienté objet doit prendre en charge ces quatre principes :
 L’abstraction

 L’encapsulation

 L’héritage

 Le polymorphisme
POO - UDBL – 2024
11

III. L’ABSTRACTION
12
Définition

 En informatique, le concept d’abstraction identifie et regroupe


des caractéristiques et traitements communs applicables à des
entités ou concepts variés.
 Une représentation abstraite commune de tels objets permet
d’en simplifier et d’en unifier la manipulation.
 En POO, l’abstraction est un mécanisme, ou une pratique, servant à
réduire le code d’un niveau détail, autrement dit, regrouper un
certain nombre de classes selon des caractéristiques communes.

POO - UDBL – 2024


13
Principes de l’abstraction

 L’abstraction se base sur deux notions à savoir :


la généralisation et
la spécification
 Le niveau d’abstraction permet de définir le niveau de
généralisation et le niveau de spécification.

POO - UDBL – 2024


14
Principes de l’abstraction (suite)

SPECIFICATION
GENERALISATION

ABSTRACTION

POO - UDBL – 2024


15
Classes et Objets

 Une classe est une représentation abstraite d’un ensemble


d’objets possédant les mêmes caractéristiques.
 Exemple : Voiture, Personne, Animal
 Un objet est une entité aux frontières biens définies,
possédant une identité et encapsulant un état et un
comportement.
 Un objet est une instance (ou occurrence) d’une classe.
 Exemple : Un objet voiture et une instance de la classe Voiture
POO - UDBL – 2024
16
Attributs et Méthodes

 Un attribut représente un type d’information contenu dans


une classe.
 Exemple : prénom, nom et date de naissance sont des attributs de la classe
Personne.
 Une méthode représente un élément de comportement (un service)
contenu dans une classe.
 Exemple : marcher, parler et sauter sont des méthodes de la classe Personne
 Les attributs et les méthodes sont regroupés dans une classe et
constituent les propriétés ou caractéristiques des objets instanciés à
partir de cette classe.
POO - UDBL – 2024
17
Représentation UML

Identificateur

Attributs

Propriétés/Caractéristiques
Méthodes

POO - UDBL – 2024


18
Représentation Java

 public class Personne {


private String prenom;
private String nom;
private String codePostal;
private int age;

public void voyager(){}


public void etudier(){}
}
POO - UDBL – 2024
19
Objets et références

 Les objets dans un programme ont une vie propre :


 Ils naissent (ils sont créés ou alloués)
 Ils agissent (ils s’envoient des messages grâces à leurs méthodes)
 Ils meurent (ils sont désalloués)
 La création d’un objet porte un nom : instanciation
 En Java l’instanciation se fait en deux étapes :
 La déclaration d’identificateur de variable typée qui contiendra la référence
 La création de la structure de données elle-même (bloc objet de données) avec le
mot clé « new »

POO - UDBL – 2024


20
Objets et références (Suite)

 L’instanciation d’un objet de la classe Personne se fera de la manière


suivante :
Personne person1; //déclaration
person1 = new Personne(); //instanciation
 La déclaration de l’identificateur et la création du bloc objet de données
peuvent être combinées en une seule opération :
Personne person1 = new Personne();

POO - UDBL – 2024


21
Les constructeurs
 Un constructeur est une méthode spéciale d’une classe dont la seule fonction est
d’instancier un objet (créer le bloc de données).
 Il existe deux types de constructeurs :
 Le constructeur par défaut (sans paramètres formels)
 Le constructeur initialisant ou personnalisé (permet d’initialiser les attributs de la classe)
 Il existe quelques règles à respecter pour la création d’un constructeur en Java:
 Un constructeur peut ou ne pas avoir de paramètres formels
 Un constructeur doit obligatoirement porter le même nom que la classe (Majuscules et minuscules
comprises)
 Pas de type de retour (le mot clef « void » n’est pas non plus utilisé)
 Le mot clé public doit être utilisé (sauf exception)
POO - UDBL – 2024
22
Les constructeurs (Exemple)
public class Personne {
private String prenom;
private String nom;
public Personne(){//par defaut
}
public Personne(String prenom, String nom){//initialisant
this.prenom = prenom;
this.nom = nom;
}
}
POO - UDBL – 2024
23
Instanciation

 Constructeur par défaut :


Personne person1 = new Personne();
 Constructeur initialisant ou personnalisé :
Personne person1;
person1 = new Personne(“John”,”Kasongo”);

POO - UDBL – 2024


24
Affectation des références

 Pour deux attributs d’objets (x et y) issus de la même classe,


l’affectation x=y ne recopie pas le bloc de données de y dans
celui de x, mais seulement la référence (l’adresse) de y dans la
référence de x :

x=y

POO - UDBL – 2024


25
Méthodes et attributs

 En java les méthodes et les attributs sont classés en deux


catégories :
 Les attributs et méthodes d’instance
 Les attributs et méthodes de classe

POO - UDBL – 2024


26
Attributs et méthodes d’instance

 A chaque instanciation d’un nouvel objet d’une classe donnée, la JVM


enregistre le p-code des méthodes de la classe dans la zone de stockage
des méthodes, et elle alloue dans le segment de mémoire autant
d’emplacements mémoire pour les attributs que d’objets créés.
public class Calcul {
private float x;
private float y;

public float somme(){


return x + y;
}
}
POO - UDBL – 2024
27
Segment de mémoire associé
 Pour trois objet instanciés de la manière suivante :
Calcul obj1 = new Calcul();
Calcul obj2 = new Calcul();
Calcul obj3 = new Calcul();
 Voici l’image du segment mémoire associé à ces 3 objets :

POO - UDBL – 2024


28
Attributs et méthodes de classe - static

 On identifie un attribut ou une méthode de classe en précédant sa


déclaration du mot clef « static ».
 Exemple :
public class Calcul {
public static float x; //attribut de classe
public float y; //attribut d’instance

public static void afficherX(){//méthode de classe


System.out.println(“X = “ + x);
}
}
POO - UDBL – 2024
29
Segment de mémoire associé
 Pour trois objet instanciés de la manière suivante :
Calcul obj1 = new Calcul();
Calcul obj2 = new Calcul();
Calcul obj3 = new Calcul();
 La valeur de x est ainsi partagée entre tous les objets de la
classe :

POO - UDBL – 2024


30
Accès aux attributs et méthodes de
classe

 La différence entre les méthodes d’instances et les méthodes


de classe a lieu sur la catégorie d’attributs sur lesquels ces
méthodes agissent.
 De par leur définition, les méthodes de classe ne peuvent
travailler qu’avec des attributs de classe, alors que les
méthodes d’instances peuvent utiliser les deux catégories
d’attributs.

POO - UDBL – 2024


31
Accès aux attributs et méthodes de
classe (Suite)

 Les attributs de classe constituent une alternative pour la création des


variables globales accessibles directement à partir de l’identificateur de
la classe :
 Dans l’exemple précédent l’attribut de classe « x » et la méthode de
classe « afficherX() » peuvent être accessibles de la manière suivante :
 System.out.println(Calcul.x);
 Calcul.afficherX();
 Notez l’utilisation d’un attribut de classe (out) de la classe
FilterOutputStream dans l’instruction d’affichage ci-dessus.
POO - UDBL – 2024
32

IV. L’ENCAPSULATION
33
Communication par l’envoi des messages

 L’orientée objet indique que les objets d’un système ne


doivent communiquer que par l’envoi des messages.
 Un message correspond à l’appel d’une méthode de
l’objet.
 Un programme sera donc un ensemble de classes à
partir desquelles des objets seront instanciés, et ces
objets communiqueront via les méthodes définies au
sein de leurs classes.
POO - UDBL – 2024
34
Principe de l’encapsulation – 2
Visibilité des propriétés

 Le principe de l’encapsulation indique qu’il faut cacher


l’implémentation d’une classe et présenter seulement
des interfaces d’utilisation ou de communication.
 L’encapsulation se définit à trois niveaux :
 L’encapsulation des données et des traitements (Déjà vue)
 La visibilité des propriétés
 L’interface de communication

POO - UDBL – 2024


35
La visibilité des propriétés

 L’encapsulation permet de sécuriser l’accès aux propriétés


d’une classe.
 Trois niveaux d’accès sont définis :
 Le niveau privé (private), représenté par un signe moins (-)
 Le niveau public (public), représenté par un signe plus (+)
 Le niveau protégé (protected), représenté le symbole dièse (#)

POO - UDBL – 2024


36
Niveaux de visibilité

 Les attributs déclarés private à l’intérieur de la classe ne peuvent être


accédés et modifiés que par des méthodes définies dans la même classe.
 Si une autre classe veut accéder aux données de la classe, l’opération
n’est possible que par l’intermédiaire d’une méthode de la classe prévue
à cet effet.
 Les attributs déclarés public sont accessibles en dehors de la classe qui
les définit.
 Ceux déclarés protected sont accessibles dans la classe qui les définit
ainsi que dans les classes dérivées (sous-classes).
POO - UDBL – 2024
37
Exemples :

public class Etudiant {


private String nom;
public String ecole;
protected int age;
}

POO - UDBL – 2024


38
Accesseurs et Mutateurs

 Un accesseur (getter) est une méthode publique qui donne l’accès à la


valeur d’un attribut d’instance privé.
 Un mutateur (setter) est une méthode publique permettant de modifier
la valeur d’un attribut privé.
 L’utilisation des accesseurs et des mutateurs permet de contrôler l’accès
aux attributs tout en fixant les conditions de modification ou d’accès en
cas de nécessité.
 Par convention, les accesseurs commencent par « get » et les mutateurs
commencent par « set ».
POO - UDBL – 2024
39
Exemples :
public class Etudiant {
private String nom;

public String getNom() {


return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
}
 Le mot clé « this » fait référence à l’objet en cours.
POO - UDBL – 2024
40
Principe de l’encapsulation – 3
Interface d’utilisation
 Rappel : Le principe d’encapsulation indique qu’il faut cacher
l’implémentation d’une classe et présenter seulement des interfaces
d’utilisation ou de communication.
 La communication par l’envoi des messages n’est possible qu’en passant
par les propriétés publiques des objets impliqués.
 Une interface est un ensemble de signatures de méthodes publiques d’un
objet.
 Il s’agit d’un ensemble de méthodes accessibles depuis l’extérieur d’une
classe, par lesquelles on peut modifier un objet, ou plus généralement
communiquer avec lui.
POO - UDBL – 2024
41
Interface de communication

SPECIFICATION
GENERALISATION

Instanciation

POO - UDBL – 2024


42
Interface Java
public interface Compte {
public double crediterCompte(double montant);
public double debiterCompte(double montant);
}
public class CompteCourant implements Compte{
@Override
public double crediterCompte(double montant){}
@Override
public double debiterCompte(double montant){}
}
POO - UDBL – 2024
43
Interface Java (Suite 1)
 Une interface est un contrat, elle ne peut contenir que des méthodes ou
des constantes.
 Une interface ne peut pas contenir des méthodes déjà implémentées
 Une interface est héritable.
 On peut construire une hiérarchie d’interfaces.
 Pour pouvoir construire un objet à partir d’une interface, il faut définir
une classe non abstraite implémentant toutes les méthodes de
l’interface.
 Une classe peut implémenter plusieurs interfaces (une alternative à
l’héritage multiple)
POO - UDBL – 2024
44
Interface Java (Suite 2)

 Lorsque l’on crée une interface, on fournit un semble de


définitions et de comportements qui ne devraient plus être
modifiés. Cette attitude de constance dans les définitions,
protège les applications écrites pour utiliser cette interface.
 Les variables de types interface respectent les mêmes règles de
transtypage que les variables de types classe.
 Les objets de type classe Classe1 peuvent être transtypés et
référencés par des variables d’interface Interface1 dans la
mesure où la classe Classe1 implémente l’interface Interface1.
POO - UDBL – 2024
45

V. L’HERITAGE
46
Définition

 Le mécanisme d’instanciation permet de passer d’un niveau


d’abstraction générique à un niveau spécifique,
 L’héritage est un mécanisme qui permet, lors de la déclaration
d’une nouvelle classe, d’y inclure les caractéristiques ou
propriétés d’une autre classe.
 L’héritage permet de présenter un nombre illimité de niveaux
d’abstraction (intermédiaires).

POO - UDBL – 2024


47
Principe (1)

 L’héritage établit une relation de généralisation-


spécialisation qui permet d’hériter dans la déclaration d’une
nouvelle classe (dérivée, fille, enfant ou sous-classe) des
caractéristiques (propriétés) de la déclaration d’une autre
classe (classe de base, mère, parent ou super-classe).

POO - UDBL – 2024


48
Principe (2)

SPECIFICATION
GENERALISATION

POO - UDBL – 2024


49
Mise en œuvre

 En java, le mot clé « extends » est utilisé pour indiquer


qu’une classe hérite d’une autre. En l’absence de ce mot
réservé associé à une classe, le compilateur considère la
classe Object comme classe mère :
class Fille extends Mere{
}

POO - UDBL – 2024


50
Visibilité des propriétés

 Les propriétés déclarées « public » sont visibles dans toutes


les classes (mère et fille).
 Un attribut d’instance définie avec le modificateur
« private » est bien hérité mais elle n’est pas accessible
directement, mais par les méthodes héritées.
 Les propriétés déclarées avec le mot clé « protected » seront
visibles dans la classe mère ainsi que dans la classe fille.

POO - UDBL – 2024


51
Accès aux propriétés héritées

 Pour invoquer une méthode d’une classe mère, il suffit


d’indiquer la méthode préfixée par « super ».
 Pour appeler le constructeur de la classe mère, il suffit
d’écrire « super(paramètres) ».
 En Java, il est obligatoire dans un constructeur d’une classe
fille de faire appel explicitement ou implicitement au
constructeur de la classe mère.

POO - UDBL – 2024


52
La classe abstraite

 Une classe abstraite est une classe qui contient au moins une
méthode abstraite (sans implémentation).
 Les classes abstraites permettent de créer des classes
génériques expliquant certains comportements sans les
implémenter et fournissant une implémentation commune de
certains autres comportements pour l’héritage de classes.
 Elles sont un outil intéressant pour le polymorphisme.

POO - UDBL – 2024


53
Vocabulaires et concepts :

 Une classe abstraite est une classe qui ne peut pas être instanciée
 Une classe abstraite peut contenir des méthodes déjà implémentées
 Une classe abstraite peut contenir des méthodes non implémentées
 Une abstraite est héritable
 On peut construire une hiérarchie de classe abstraites
 Pour construire un objet à partir d’une classe abstraite, il faut créer une
classe non abstraite implémentant toutes les méthodes non
implémentées de cette classe abstraite.

POO - UDBL – 2024


54
La classe abstraite (suite)

 L’implémentation de toutes les méthodes abstraites de la


classe abstraite est une obligation pour instancier des objets à
partir des classes qui héritent d’elle.
 Le mot clé «asbtract» est utilisé pour désigner une classe ou
une méthode abstraite.
 Une méthode abstraite est une méthode à liaison dynamique
n’ayant pas d’implémentation dans la classe où elle est
déclarée. Son implémentation est déléguée à une classe
dérivée.
POO - UDBL – 2024
55
Exemple :

abstract class EtreVivant{


public abstract void seDeplacer();
public void seNourrir(){
//Instructions
}
}
POO - UDBL – 2024
56

VI. LE POLYMORPHYSME
57
Définition

 Le polymorphisme est la capacité d’une entité à posséder plusieurs


formes.
 En POO, le polymorphisme est la capacité pour un même message de
correspondre à plusieurs formes de traitements selon l’objet auquel ce
message est adressé.
 Il s’applique aux objets ainsi qu’aux méthodes selon leur degré
d’adaptabilité, nous distinguons alors deux dénominations :
 Le polymorphisme statique ou la surcharge de méthode
 Le polymorphisme dynamique ou la redéfinition de méthodes ou encore la surcharge
héritée
POO - UDBL – 2024
58
La surcharge

 La surcharge consiste dans le fait qu’une classe peut disposer


de plusieurs méthodes ayant le même nom, mais avec des
paramètres formels différents ou éventuellement un type de
retour différent.
 Il est également possible de surcharger les constructeurs de la
classe (variation de paramètres formels).

POO - UDBL – 2024


59
Exemple :

class Calculateur
{
public float somme(int x, int y){}
public double calculer(float x, String signe){}
public String calculer(Date dateNaissance){}
}
Remarque : A l’exécution, le compilateur cherche dans la déclaration de
toutes les surcharges, celle dont la signature coïncide avec les paramètres
effectifs (dans la classe mère ou dans la classe fille).
POO - UDBL – 2024
60
La redéfinition

 La redéfinition d’une méthode c’est le fait qu’une classe fille


présente une méthode avec la même signature d’une
méthode déjà définie dans la classe mère.
 Les propriétés héritées d’une classe mère peuvent être
redéfinies dans la classe fille :
 Les attributs peuvent être déclarés sous le même nom avec un
type différent;
 Les méthodes peuvent être redéfinies avec la même signature
(redéfinition).
POO - UDBL – 2024
61
Exemple :

class Calculateur{
double somme(double x, double y){
}
}
class Calcul extends Calculateur{
@override
double somme(double x, double y){
}
POO - UDBL – 2024 }
62
Travail dirigé

POO - UDBL - 2024

Vous aimerez peut-être aussi