Concepts de la
Programmation Orientée Objet
Introduction
Atindehou Mêton-Mêton
26 novembre 2020
Plan : 1 – Introduction et notions préliminaires
1.1 Contenu et objectifs du cours
1.2 Revision d’algorithmique
1.3 Concept de programmation
1.4 Concepts fondamentaux de l’orienté objet
1
Contenu et objectifs du cours
Contenu du cours
1. Concepts de la POO
I Encapsulation
I Héritage
I Polymorphisme
I Agrégation
I Composition
I Théorie de Cook
I Théorie de Liskov
2. Notion d’objet
I Objet
I Classe
3. Présentation d’UML
4. Ligature
I Ligature statique
I Ligature dynamique
A l’issue du cours, l’étudiant doit :
1. Avoir appris les concepts de bases de la programmation
orientée objet, indépendamment des différents langages de
programmation orientés objet
Concept d’algorithme
Les os d’Ishango
Le premier ordinateur daterait de 22000 ans
Figure – https ://[Link]/bibnum/889
Voir également : https ://[Link]/wiki/Os_d%27Ishango
6
Modèle abstrait simplifié de l’ordinateur
L’ordinateur se décompose en quatre (04) parties
dont les rôles sont respectivement :
1. ALU : effectuer les opérations de bases,
2. Unité de contrôle : ordonnancer les opérations,
3. Mémoire : contenir les données des programmes
I Mémoire volatile,
I Mémoire permanente.
4. Les dispositifs d’entrées/sorties : communiquer
avec le monde extérieur.
Figure – Architecture de
Von Neumann - wikipedia
7
Caractéristiques de l’ordinateur
L’ordinateur est un :
1. Automate,
2. Algorithmique,
3. Universel.
8
Automate
C’est un exécutant incapable de la décision :
Il faut lui donner des directives simplement compréhensibles,
afin qu’il puisse réaliser sa tâche ! ! !
Exemples d’automates spécialisés :
La montre bracelet,
Le poste radio,
Les feux de signalisation.
En quoi consiste exactement les tâches à réaliser ?
L’ordinateur est un automate universel :
il regroupe un nombre considérable d’automates spécialisés.
9
Algorithmique
Le mot vient du nom du mathématicien perse Muhammad ibn Musa al
Khwarizmi(IX e siècle).
Un algorithme est un énoncé dans un langage bien défini d’une
suite d’opérations permettant de résoudre par calcul un problème.
1. Algorithme séquentielle :
les opérations s’exécutent en séquence, les unes après les autres.
2. Algorithme parallèle :
certaines opérations s’exécutent en même temps.
10
Exemple intuitif d’algorithme (1/2)
Ecrire un algorithme permettant à un robot de maison
de préparer une tasse de café soluble.
Première solution :
DEBUT_ALGORITHME
1. Faire bouillir de l’eau,
2. Mettre le café dans la tasse,
3. Ajouter l’eau dans la tasse.
FIN_ALGORITHME
On peut mieux expliciter les directives à donner à l’automate ! ! !
11
Exemple intuitif d’algorithme (1/2)
DEBUT_ALGORITHME
1. Faire bouillir l’eau (peut être affinée en)
1.1 Remplir la bouilloire d’eau (qui peut être décomposer en :)
1.1.1 Mettre la bouilloire sous le robinet
1.1.2 Ouvrir le robinet
1.1.3 Attendre que la bouilloire soit pleine
1.1.4 Fermer le robinet
1.2 Brancher la bouilloire sur le secteur
1.3 Attendre l’ébullition
1.4 Débrancher la bouilloire
2. Mettre le café dans la tasse (pourrait être affiné en)
2.1 Ouvrir le pot à café
2.2 Prendre une cuillère à café
2.3 Plonger la cuillère dans le pot
2.4 Verser le contenu de la cuillère dans la tasse
2.5 Fermer le pôt à café
3. Ajouter de l’eau dans la tasse (pourrait être affinée en)
3.1 Verser de l’eau dans la tasse jusqu’à ce que celle-ci soit pleine
FIN_ALGORITHME
12
Exemple intuitif d’algorithme (2/2)
Que faire l’algorithme suivant ?
DEBUT_ALGORITHME
→
− → −
1. Se placer dans un repère orthonormé (O ; i , j )
2. Se positionner sur le point de coordonnées (1, 1)
3. Prendre la direction des abscisses croissants
4. Tracer droit devant un segment de longueur 3 unités
5. Tourner de 120 degrés dans le sens trigonométrique
6. Tracer droit devant un segment de longueur 3 unités
7. Tourner de 120 degrés dans le sens trigonométrique
8. Tracer droit devant un segment de longueur 3 unités
FIN_ALGORITHME
13
Exercices
Pour s’entrainer :
1. Ecrire un algorithme permettant d’enfoncer un clou dans une table.
2. Ecrire un algorithme permettant de se lever du lit, puis de se
préparer et de enfin de venir au cours à UAC, à l’heure le matin.
3. Ecrire une algorithme permettant de tracer dans un repère
→
− →−
orthonormé (O ; i , j ) un rectangle quelconque.
4. Ecrire une algorithme permettant de résoudre l’équation
ax2 + bx + c = 0 dans C.
5. Ecrire un algorithme permettant de calculer :
n
X
5.1 La somme S = i,
i=0
Yn
5.2 Le produit P = i.
i=1
14
Concept de la programmation
1. Les difficultés de la programmation
2. Le “code” des programmeurs
3. Les principes de la programmation structurée
Les difficultés de la programmation
Nombreuses erreurs :
1. Erreurs courantes (syntaxe, logique, ...)
2. Programme qui ne fait pas ce qu’on attend de lui,
3. Programme mal utilisé,
4. Choix du langage adapté au problème (très nombreux possibles).
Nécessité d’une méthode de construction de programme pour éviter
le “cycle infernal” de la programmation sauvage :
essais –> erreurs –> corrections –> essais ...
16
Le “code” des programmeurs
Objectif du “code” des programmeurs
Méthode générale pour concevoir “quasi-infailliblement” :
I des programmes résolvant des problèmes du monde réel.
Appliquer le code permet de faire de la programmation structurée.
I Voir les principes de la programmation structurée au slide 31.
Le code se compose de trois parties :
1. Analyser le problème du monde réel,
2. Poser le problème informatique correspondant,
3. Résoudre le problème informatique.
18
Analyser le problème du monde réel
Objectif : Etudier un problème du monde réel donné, jusqu’à en avoir
une bonne compréhension.
1. Enoncer simplement le problème
I Donner les définitions et conventions préliminaires,
I Ne pas “tout redéfinir”
I Utiliser de préférence des définitions intuitives ou conventionnels.
2. Poser le problème
I Déterminer les parties du problème auxquelles il faut apporter une
solution.
3. Mener l’étude théorique du problème (une des plus importante)
I Dégager les propriétés fondamentales (“physiques”,
“mathématiques”, ...) du problème
I “Comment on fait dans le monde réel pour régler ce problème ?”
19
Exemple d’analyse d’un problème du monde réel
Résoudre dans R l’équation
(E) : ax2 + bx + c = 0 avec a, b, c ∈ R
20
Poser le problème informatique correspondant
Objectif : Expliciter en termes informatiques le problème du monde réel.
1. Etablir des conventions de représentation
I Choisir l’information “utile” à représenter,
I Choisir parmi les outils disponibles ceux qui conviennent,
I Si nécessaire, expliciter “la forme” de nouveaux outils.
2. Spécifier le programme : “c’est quoi son utilité ?”
I pré-conditions : les conditions préalables à son exécution,
I post-conditions : les modifications engendrées,
I résultats : forme des résultats qui seront produits.
3. Décomposer le problème : “On divise pour mieux régner !”
I Fractionner le problème principal en sous-problèmes indépendants
I Fractionner les sous-problèmes en sous-sous-problèmes indépendants
I Obtenir des problèmes “élémentaires”, plus simples à résoudre.
21
Exemple d’un problème informatique
Résolution dans R de (E)
(E) : ax2 + bx + c = 0 avec a, b, c ∈ R
SP1 : Le polynôme est du second degré,
SP2 : Le polynôme est du premier degré,
SP3 : Le polynôme est une constante,
SP4 : Le polynôme est dégénéré.
22
Résoudre le problème informatique
Objectif : Mettre en oeuvre le programme informatique.
1. Construire les algorithmes des sous-problèmes simples,
2. Construire les algorithmes des sous-problèmes,
3. Transcrire les algorithmes dans un langage de programmation.
23
Résolution de l’équation ax2 + bx + c = 0 dans R
Déclaration des variables dans AlgoBox
VARIABLES
a EST_DU_TYPE NOMBRE
b EST_DU_TYPE NOMBRE
c EST_DU_TYPE NOMBRE
delta EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
LIRE a
LIRE b
LIRE c
SI (a == 0) ALORS
DEBUT_SI
FIN_SI
SINON
DEBUT_SINON
FIN_SINON
FIN_ALGORITHME
24
Résolution de l’équation ax2 + bx + c = 0 dans R
Résolution pour a == 0
SI (a == 0) ALORS
DEBUT_SI
SI (b == 0) ALORS
DEBUT_SI
SI (c == 0) ALORS
DEBUT_SI
AFFICHER "L’équation est dégénérée. "
AFFICHER "Tout réel est solution"
FIN_SI
SINON
DEBUT_SINON
AFFICHER "Equation impossible"
AFFICHER "Aucune solution."
FIN_SINON
FIN_SI
SINON
DEBUT_SINON
AFFICHER "Une unique solution réelle"
AFFICHER "x = -c/b "
FIN_SINON
FIN_SI
SINON
DEBUT_SINON
FIN_SINON
FIN_ALGORITHME
25
Résolution de l’équation ax2 + bx + c = 0 dans R
Résolution pour a != 0
SI (a == 0) ALORS
DEBUT_SI
FIN_SI
SINON
DEBUT_SINON
delta PREND_LA_VALEUR b*b - 4*a*c
SI (delta >= 0) ALORS
DEBUT_SI
SI (delta == 0) ALORS
DEBUT_SI
AFFICHER "Une unique solution double"
AFFICHER "x = -b / (2*a) "
FIN_SI
SINON
DEBUT_SINON
AFFICHER "Deux solutions distinctes"
AFFICHER "x1 = (-b - sqrt(delta)) / (2*a) "
AFFICHER "x2 = (-b + sqrt(delta)) / (2*a) "
FIN_SINON
FIN_SI
SINON
DEBUT_SINON
AFFICHER "Aucune solution réelle"
FIN_SINON
FIN_SINON
FIN_ALGORITHME
26
Pour avoir AlgoBox
Figure – http ://[Link]/algobox/[Link]
Pour apprendre l’algorithmique, consulter les liens suivants :
https ://[Link]/algobox/[Link]
https ://[Link]/algobox/[Link]
https ://[Link]/algobox/tutoalgobox/[Link]
27
“Construction systématique d’algorithme correct”
Pour avoir “systématiquement” des algorithmes corrects du premier
coups, nous appliquerons deux méthodes :
1. La méthode de “diviser pour mieux régner” afin de construire des
structures de contrôles conditionnelles,
2. La rechercher des fragments itératifs pour construire la structure
itérative while (L’utilisation d’une des deux autres structures
itératives est équivalentes à celle de la boucle while.)
28
Anatomie de la boucle while
L’élaboration d’une boucle while peut se décomposer en
la construction de quatre fragments itératifs :
1 // INIT
2 while (! H )
3 {
4 // ITER
5 }
6 // CLOT
1. INIT : Instructions de l’initialisation
2. ITER : Instructions de l’itération
3. CLOT : Instructions de la clôture
4. H : Condition d’arrêt
29
Remarques
Nous proposons deux méthodes pour rechercher les quatre (04)
fragments itératifs de la boucle while :
1. L’analyse d’une méthode simplifiée de calcul afin de retrouver un
compteur et un accumulateur,
2. L’application de la méthode des tableaux (forme simplifiée de
l’application de la méthode de l’invariant).
Ces fragments servent aussi à prouver la correction de la boucle.
On utilise alors en plus un variant.
Où :
Compteur : variable qui sert à compter le nombre d’itération
Accumulateur : variable qui sert à conserver les résultats des itérations
Variant : suite décroissante et minorée
Invariant de boucle : expression booléenne qui est vraie à tout moment
pour sa boucle et qui décrit formellement ce que fait la
boucle.
30
Les principes de la programmation structurée
1. Programmation descendante (du général au particulier),
2. Programmation modulaire,
3. Programmation documentée,
4. Programmation simplement lisible
31
Présentation intuitive des concepts
de la programmation orienté objet
Programmation orienté objet
Un langage de programmation orienté objet est conçu pour :
Mettre en oeuvre des objets “informatiques”
Donnant des représentations abstraites d’objets du monde réel
Les objectifs étant pour la POO
Améliorer la réutilisation des outils existant
Favoriser la spécialisation des outils existants
Généraliser le concept de types de données (tel celui du langage C)
Pour cela, la POO s’appuie sur les trois concepts fondamentaux de
Encapsulation des données
Héritage entre objets
Polymorphismes entre objets
33
Concept d’abstraction (1/2)
Figure – Grady Booch, "Object-oriented Analysis and Design"
Des multiples vues possibles d’un même objet du monde réel
Il faut choisir des propriétés pertinentes pour le problème à traiter
Idem pour obtenir une représentation par un objet informatique
Concept d’abstraction (2/2)
Choix des propriétés pertinentes pour représenter un objet :
“Tamiser les propriétés possibles” pour retenir celles nécessaires
Concept d’objet
Un objet est la donnée de :
1. Une identité
2. Des attributs (définissant son état)
3. Des méthodes (programmes gérant son comportement)
Concept d’encapsulation
Problèmes : Garantir
L’évolution d’un objet indépendamment de son utilisation
L’intégrité des attributs d’un objet
Solution : Accès aux attributs d’un objet par une interface
Concept d’héritage Intuitivement (1/2)
Transférer les caractéristiques d’un objet “père” à sa “descendance”
Concept d’héritage (2/2)
Figure – https ://[Link]/rawsrc/p10377/conception/
dependances_et_couplage_des_classes_poo
Problème :
Utiliser d’anciens objets pour en créer de nouveaux
En transférant automatiquement les propriétés (attributs, méthodes)
des anciens aux nouveaux
Solution : On étend les anciens objets
Concept de composition
Figure – https ://[Link]/rawsrc/p10377/conception/
dependances_et_couplage_des_classes_poo
Problème : Concevoir un objet qui se décompose en sous-objets dont les
existences sont dépendantes (ils font parties des objets)
Solution : Créer des sous-objets composites
Remarques :
Les objets composites sont gérés par l’objet mère
A la mort du corps humain, les organes meurs également
Concept d’agrégation
Figure – http ://[Link]/net/courscharp/chap4/
Problème : Concevoir un objet formé d’autres objets
Remarques :
Les objets composites sont gérés par l’objet mère
A la mort du corps humain, les organes meurs également
Concept d’association
Figure – https ://[Link]/rawsrc/p10377/conception/
dependances_et_couplage_des_classes_poo
Problème : Concevoir un objet utilisant les fonctionnalités d’autres
objets
Dépendances et couplage des objets
Association, heritage, composition et agrégation
Figure – https ://[Link]/rawsrc/p10377/conception/
dependances_et_couplage_des_classes_poo
Concept de polymorphisme
Littéralement : “Le polymorphisme est la capacité pour un objet donné,
de prendre plusieurs formes”
Problème :
Manipuler plusieurs objets de formes “similaires”,
Comme si tous ces objets étaient en fait un unique objet
Solution :
On regroupe pour tous ces objets les propriétés identiques à
“manipuler” afin d’obtenir un seul objet
On déclare ces objets comme étant des instances (“représentations”)
de l’objet obtenu