Vous êtes sur la page 1sur 36

Programmation Orientée Objet

(POO)

Support de cours
Programmation Orientée Objet

Dr. Mahdi ABDELKAFI


(E-mail: mahdi.abdelkafi@gmail.com)

Institut Supérieur des Sciences Appliquées et de Technologie

Université de Sousse

2021-2022
kkk Mahdi ABDELKAFI 2022-2021 Page 1 sur 39

Programmation Orientée Objet (POO) : Introduction générale

Plan

1 Programmation procédurale (impérative)

2 Programmation Orientée Objet (POO)

3 Principes de la POO

4 Classe / Objet

5 Héritage / Encapsulation

kkk Mahdi ABDELKAFI 2022-2021 Page 2 sur 39


Programmation Orientée Objet
Introduction générale
(POO) :

Motivation

Limites
kkk Mahdi ABDELKAFI
Limites
2022-2021 Page 3 sur 39

Programmation Orientée Objet


Introductiongénérale
Programmation Orientée Objet (POO) : Introduction générale
(POO) :

Rappel
Motivation

Programmation procédurale

Exprimer des traitements en utilisant des structures de contrôles,


comme les boucles conditionnelles

Structurer vos données en utilisant par exemple des tableaux

Modulariser vos programmes en utilisant la notion centrale de


fonction

Ce style de programmation a la particularité de faire en sorte que :

kkk Mahdi ABDELKAFI 2022-2021 Page 4 sur 39


Programmation Orientée Objet (POO) : Introduction générale

Motivation
Programmation procédurale

notions
De variables / type de données
Et de traitement de ces données

Étaient séparées :

Limites
kkk Mahdi ABDELKAFI
Limites
2022-2021 Page 5 sur 39

Programmation Orientée Objet (POO) : Introduction générale

Rappel
Motivation

Programmation procédurale

des fonctions

Les données manipulées apparaissent au travers des entités


distinctes comme par exemple les variables

Le lien entre données et traitements peut se faire par le biais du


passage des arguments

Un programme principal (main) et un ensemble de sous-


programmes

kkk Mahdi ABDELKAFI 2022-2021 Page 6 sur 39


Programmation Orientée Objet (POO) : Introduction générale

Rappel
Motivation

Programmation procédurale

Programme calcule la
surface
Le rectangle est
caractérisé par une
largeur et une hauteur
Une fonction surface
qui se charge à réaliser
le calcule approprié

Limites
kkk Mahdi ABDELKAFI
Limites
2022-2021 Page 7 sur 39

Programmation Orientée Objet (POO) : Introduction générale

Rappel
Motivation

Programmation procédurale

Les traitements et les données sont séparés


Les variables permettent de modéliser et de stocker les données

Les traitements sont réalisé fonction

Le lien entre les données et les traitements


uniquement, par le biais, du passage des arguments

lien direct entre les données et les


traitements

kkk Mahdi ABDELKAFI 2022-2021 Page 8 sur 39


Programmation Orientée Objet (POO) : Introduction générale

Limites
Motivation

Programmation procédurale

lien sémantique entre les données et les


traitements

On arrivera rapidement à des codes surchargés

On se trouve rapidement avec énormément de variables dans un


même fichier
Il est difficile de garantir la cohérence du programme face à la
modification du nom ou

Limites
kkk Mahdi ABDELKAFI
Limites
2022-2021 Page 9 sur 39

Programmation Orientée Objet (POO) : Introduction générale

Motivation
Motivation
Programmation Orientée Objet

Regroupement des traitements et des données en une seule et


même entité

Lien sémantique entre les données et les


traitements
Rectangle

Largeur
Hauteur
Surface

kkk Mahdi ABDELKAFI 2022-2021 Page 10 sur 39


Programmation Orientée Objet (POO) : Introduction générale

Motivation
Motivation

Programmation Orientée Objet

La POO fournit
de : robustesse, modularité, lisibilité

Meilleure maintenabilité des programmes

Robustesse : cohérence du programme face aux changements du


code (erreurs de manipulation)
Modularité
manière très simple

Lisibilité classe
et établissement des liens sémantiques entre les entités

kkk Mahdi ABDELKAFI 2022-2021 Page 11 sur 39

Programmation Orientée Objet (POO) : Introduction générale

Motivation
Programmation Orientée Objet

Quels sont les


objets
composant le
programme ?

Mahdi ABDELKAFI 2022-2021


Programmation Orientée Objet (POO) : Introduction générale

Motivation

Programmation Orientée Objet


Programmation impérative : on décompose le problème en des
fonctions
POO : on divise le problème en sous-parties

Mahdi ABDELKAFI 2022-2021

Programmation Orientée Objet (POO) : Principes

Programmation Orientée Objet

1 Concept Objet

2 Application Orientée Objet

5 : Jeux space invaders

Mahdi ABDELKAFI 2022-2021


Programmation Orientée Objet (POO) : Principes

Concept Objet
Caractéristiques d un Objet
Un objet est caractérisé par :
Son identité

Ses données

Mahdi ABDELKAFI 2022-2021

Programmation Orientée Objet (POO) : Principes

Concept Objet
Exemple : Gestion de bibliothèque
If I have data, I will know
Un objet bibliothèque est caractérisé par :
Son identité
Ses données (pile de livres)
ajouterLivre
emprunterLivre
deux traitements:
Ajouter_Livre()
Emprunter_Livre()
Autres objets vont demander à
je peux emprunter un livre ? »
deux traitements:
Programmation Orientée Objet (POO) : Principes

Concept Objet

Communication
If I have data, I will know
Les objets communiquent entre eux par échange de messages
Le message le plus échangé est le demande de réalisation de
traitement

ajouterLivre
emprunterLivre

Programmation Orientée Objet (POO) : Principes

Concept Objet

Demande de réalisation de traitement


If I have data, I will know
Pour envoyer une demande de réalisation de traitement, un objet
doit :

Lui envoyer un message avec le nom du traitement


et les paramètres
Recevoir la réponse

ajouterLivre
emprunterLivre
Programmation Orientée Objet (POO) : Principes

Concept Objet
Synchrone par défaut
fdata, I will know
Les communications entre les objets sont principalement
synchrones

faire autre chose

Programmation Orientée Objet (POO) : Principes

Concept Objet
Création d objet et référence
If I have data, I will know
Programmation Orientée Objet (POO) : Principes

Concept Objet

Échange de références
Les références sont des données
Il est possible de les transmettre via échange de message

Page 6 sur 39

Programmation Orientée Objet (POO) : Principes

Concept Objet

Suppression d objet
De´finition
Soit on peut supprimer les objets et alors il faut faire attention aux
références qui pointent vers des objets supprimés (C++)

Soit on ne peut pas supprimer les objets mais ceux-ci sont mis aux
oubliettes si aucun autre objet ne les référence (Java)

Page 7 sur 39
Programmation Orientée Objet (POO) : Principes

Application Objet

Ensemble d objets

pour rendre un service global à son utilisateur

Page 8 sur 39

Programmation Orientée Objet (POO) : Principes

Application Objet

Interface graphique et objet


De´finition
Tout langage de programmation objet propose un moyen pour

Bien souvent, via échange de messages

Page 9 sur 39
Programmation Orientée Objet (POO) : Principes

Application Objet

Initialisation
De´finition

Page 10 sur 39

Programmation Orientée Objet (POO) : Principes

Conception Objet
Encapsulation

Enjeux de la science des donne´es

8 / 80
Programmation Orientée Objet (POO) : Principes

Conception Objet

Responsabilité

propose

Il a donc toutes les données nécessaires

8 / 80

Programmation Orientée Objet (POO) : Principes

Conception Objet

Illustration avec le livre de recettes


Enjeux de la science des donne´es

8 / 80
Programmation Orientée Objet (POO) : Principes

Conception Application Orientée Objet

Cohésion
Enjeux de la science des donne´es
Préférer plusieurs petits objets à un gros

8 / 80

Programmation Orientée Objet (POO) : Principes

Conception Application Orientée Objet


Couplage

Même si la communication inter-objet est incontournable, il faut


essayer de minimiser les communications (surtout les chaines)

8 / 80
Programmation Orientée Objet (POO) : Principes

Conception Application Orientée Objet

Challenge
Faire une application objet consiste à :

traitements)
Définir les données dont ils ont besoin (leurs données)

Établir les communications

Toutes en maximisant la cohérence et minimisant le couplage !

8 / 80

Programmation Orientée Objet (POO) : Principes

Exemple : Space Invader


Principe

8 / 80
Programmation Orientée Objet (POO) : Principes

Exemple : Space Invader


Les objets
Les invaders :
Ils peuvent bouger
Ils peuvent tirer
Le vaisseau spatial :
Il peut bouger
Il peut tirer

Pour faire bouger le vaisseau


Pour tirer

8 / 80

Programmation Orientée Objet (POO) : Principes

Exemple : Space Invader

Première conception
Enjeu
x de
la
scien
ce
des
donn
e´es

8 / 80
Programmation Orientée Objet (POO) : Principes

Exemple : Space Invader

Comment faire bouger les invaders


Enjeux de la science des donne´es
Une solution consiste à créer un nouvel objet (minuteur) qui va
périodiquement (toutes le secondes par exemple) faire bouger les invaders

8 / 80

Programmation Orientée Objet (POO) : Principes

Exemple : Space Invader

Deuxième conception
Enjeux de la science des donne´es

8 / 80
Programmation Orientée Objet (POO) : Principes

Exemple : Space Invader

Et les missiles alors !!!

objets
Ils sont crées par les invadres ou le vaisseau

Ils sont gérés par le minuteur

9 / 80

Programmation Orientée Objet (POO) : Principes

Exemple : Space Invader

Les
Conception finale

10 / 80
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Les tableaux
Syntaxe : déclaration (type [ ] nom ;)
Initialisation (nom = ;)
déclaration + initialisation (type [ ] nom = {val1, val2, ;)

utilisation du boucle for :


for (type value : nom ) { traitement }

Exemple : int [ ] tab = {3,4,2} ; int [] tab = new int [10] ;

For (int value : tab ) { System.out.println(value) ; }

Les collections s en C
Syntaxe : ArrayList <type> nom = new ArrayLyst<> () ;
nom.add(valeur) ;

Page 1 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base

Définition de blocs d instructions

Page 2 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Définition
Une classe :
Les mêmes types de données (nom, type, valeurs par défaut)
Les mêmes traitements (nom, paramètres)

Page 3 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Classe en JAVA

En JAVA une classe se déclare par le mot clé Class


Exemple : Class Rectangle { };
Ceci définit un nouveau type du langage

:
: Rectangle rec1 ;
nom_classe nom_instance ; déclare une référence
de type Rectangle

Page 4 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Classe en JAVA

Error
Compilation

Page 5 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Les objets immuables

En JAVA les objets immuables se sont des objets qui, une fois ont été
crées, ne peuvent plus être modifiés.
Le caractère immuable est inventé pour des raisons de sécurité afin de

Exemple : les objets de type String sont des objets immuables et à


chaque concaténation, ou réaffectation, le programme réserve un nouvel
.

Autre alternative : StringBuffer crée un tableau dynamique de


caractères et impose le verrouillage pour la gestion concurrentielle ou
StringBuilder a presque le même comportement que la première classe
à

Page 6 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base

Classe en JAVA

Une classe est codée dans un fichier (.java)


Le nom du fichier doit être celui de la classe

Le fichier compilé porte


Quel OS grâce à la virtualisation (JVM)
Les méthodes en prototypes et définitions sont séparées dans deux
fichiers
Un fichier en-tête qui contiendra les attributs et les prototypes de la
classe

Un fichier source qui contiendra la définition des méthodes et leur


implémentation

Page 7 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Les attributs et méthodes en JAVA

Un attribut est caractérisé par :


Modificateur
Son type
Basique : String, int, Boolean, etc.
Référence vers un autre objet
Son nom (chaine de caractère)
Une valeur par défaut
Une méthode est caractérisée par :
Son type de retour (void, basique, ou référence)
Son nom (chaine de caractère)
Ses paramètres (type et nom du paramètre)
Son implémentation

Page 8 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Abstraction

:
Des caractéristiques communes à tous les éléments
Des mécanismes communs à tous les éléments

Instanciation Abstraction

Page 9 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Encapsulation
Regroupement dans une même et seule entité les variables membres
et les fonctions membres
lus
abstraite des données que je manipule
Deux niveaux de perception des objets :
Niveau externe : partie visible par les programmeurs-
utilisateurs
Interface : entête de quelques méthodes bien choisies
Niveau interne :
Corps : définitions de tous les méthodes et attributs
accessibles qui sont accessibles uniquement depuis

Page 10 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base

Encapsulation
Objet
Attributs Méthodes
Dans la plupart des cas :
Private : tous les
Interface Attributs et la plupart
(partie visible)
Des méthodes
Public : quelques
Méthodes bien
Détails Choisies (visibilité
Tout le programme)
(partie interne
cachée)
Par défaut partagé
(visibilité package)

Page 11 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Accesseurs et manipulateurs

Accesseurs : méthodes get() ou getters()

Manipulateurs : méthodes set() ou setters()

Page 12 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base

Masquage et pointeur « this »

this » est obligatoire dans la situation de masquage

« this »

Page 13 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base

Héritage
Deux ou plusieurs classes partages plusieurs variables ou fonctions
Factoriser le code et éviter les redondances

Page 14 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Héritage
Représente la relation « est-un »
Permet de créer des classes spécialisées à partir de classes générales

Page 15 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Héritage

Permet de factoriser le code source en regroupant dans la super-classe


les attributs et les méthodes communs des classes dérivées
Syntaxe : public class Voiture extends Vehicule { }
Le constructeur explicite du super-classe doit être appelé avec le mot clé
super ( ) dans le constructeur de la classe spécialisée

interfaces. Cela
interfaces
Les classes héritent également des interfaces avec le mot clé
implements
Le cast, en java est la conversion de type, son rôle est de forcer le
compilateur à t
vrai

Page 16 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Héritage : classe abstraite

Une classe abstraite est une classe qui ne peut pas être instanciée.
Exemple de déclaration : abstract class A { }
Elle peut contenir des méthodes abstraites ou non et des attributs. Elle

Une méthode abstraite est une méthode dont la définition (corps de la

Une classe qui possède une méthode abstraite est par défaut abstraite.

méthode abstraite elle sera considérée comme abstraite

Page 17 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base

Visibilité des membres d une classe


Les membres privés (private

Les membres publics (public

Les membres protégés (protected


classe elle-

Page 18 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Le Constructeur en Java

Il ne doit pas avoir un type de retour (même pas void)


Il porte le même nom de la classe dans la quelle il est défini
Il peut avoir des arguments

Page 19 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base

Le Constructeur en Java

Page 20 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Le Constructeur de copie en Java

Permet de copier des objets par la création de nouvelles instances en


dupliquant tous les attributs mais pas le contenu des attributs de type
référence

Syntaxe :

public [Nom de la classe] (Nom de la classe

{ this.attribut de la ;

-----------------------------------
}

Page 21 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Les interfaces

Ex : interface Porte {void ouvrir () ;}


Une classe qui implémente une interface doit implémenter toutes ses
méthodes

classe. Ex :
class Vheicule { ----- }
class Voiture extends Vheicule implements P

Page 22 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Les interfaces

Une classe peut implémenter plusieurs interfaces à la fois en les séparant


par des virgules

Une interface est par défaut de visibilité public

À partir de java 8 les méthodes des interfaces peuvent avoir une


implémentation, il faut juste précéder la signature de la méthode par le
mot clé default : interface Foo { default void affiche
(){System.out.println("j'ai une implementation");}}

Cela apporte une solution au problème de la programmation par


contrainte dans java

Page 23 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Les interfaces

On peut, dans une interface sans devoir utiliser le mot clé default,
déclarer une méthode private avec implémentation. Afin de pourvoir
utiliser cette méthode, il faut passer par une autre méthode déclarée
default.
Une méthode default ou private ne peut pas être redéfini dans une classe

Page 24 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Créer des objets immuables
La classe doit être déclarée final
classe générique héritable
Toutes les propriétés membres doivent être déclarées en private et
final
Les objets immuables ne supportent pas les mutateurs
tilisation des copies défensives (defensive copy) permet de

Un Objet immuable est thread safe


Un objet immuable peut être mis en cache

Page 25 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base

Classe Object : Méthode toString()

Est une méthode de la classe Object { }, par défaut toutes les classe y
héritent
La méthode renvoie par défaut un string composé du nom de la classe de

Cette méthode admet pour prototype : public String toString ( ) ;

Le formatage de la valeur renvoyée par la méthode toSting ( ) est basé


sur la redéfinition de cette méthode dans la classe concernée
a directive @Override, avant la redéfinition de la
méthode toString, est recommandé. Ceci invoque le compilateur afin de
vérifier la conformité des signatures des méthodes (polymorphisme

Page 26 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base

Types de passage de paramètres

passés par référence.

défaut sont passés par valeur.


En java les objet
référence.

La solution pour contourner ce problème est de passer un objet

Page 27 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Classe Object : méthode Clone()

La méthode clone() est une méthode native et elle permet de dupliquer


un objet existant
La méthode clone() doit être redéfinie dans la classe dont on veut cloner
(copier) les instances

Page 28 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Clonage en profondeur
-à-dire les types primitifs seront copiés,
quant aux références eux seulement sont copiées et non pas les objets. Il
faut également les cloner.

méthode clone de la super-classe « super.clone() »

Cet appel permet de créer une nouvelle instance de la classe et y copier

par le biais de la méthode clone() (cf. exemple vu en classe )

Page 29 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base
Destruction d un objet en Java

Java VM prend en charge la gestion des allocations et libérations de la


mémoire
Un objet est détruit par le Garbage Collector
référencé

alloués toujours référencés

Un objet est référencé si

la ramasse-miettes

Page 30 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base
Attributs et méthodes de classe

devoir instancier la classe

La déclaration est préfixée par le mot clé static

Les attributs de classe ont la particularité des variables globales

Les méthodes de classe ne peuvent utiliser que des attributs et des


méthodes static.

attribut de classe

Page 31 sur 34

Programmation Orientée Objet (POO) : JAVA

Concepts de base

Polymorphisme

Adhoc : surcharge en anglais ; définir des méthodes de même nom


faisant le même traitement dans différentes classes. Ex : la méthode
equal() de la classe Object qui renvoie True si deux objets sont
identiques
Paramétrable : définir des méthodes ou fonction de mêmes nom mais
, plusieurs signatures
pour une même méthode. Ex : constructeur par défaut et constructeur
avec paramètres.

:
redéfinissant dans une sous classe

Page 32 sur 34
Programmation Orientée Objet (POO) : JAVA

Concepts de base

Les classes de base : la classe Object

Java propose un ensemble de bibliothèques proposant des classes


prédéfinies
(import
implicite)
La classe Object implémente les méthodes suivante : toString(), clone(),
equals(), hashCode(), finalize(), getClass()
dans la gestion des threads.

Page 33 sur 34

Vous aimerez peut-être aussi