Support POO 2024
Support POO 2024
ORIENTÉE OBJET
Thierry ILUNGA
Ir. Informaticien
2024
PLAN DU COURS
PLAN DU COURS
0. INTRODUCTION.
0.1. Objectif
0.2. Pré requis
CHAPITRE.I. GENERALITES.
I.1 Les langages de programmation.
I.1.1 Définition
I.1.2 Utilisation
I.1.3 Notions courantes
I.1.4 Paradigmes
I.1.5 Mise en œuvre
I.2 Origines de la POO.
I.3 Objectifs de la POO
I.4 Les langages Orientés Objet.
CHAPITRE.II. CONCEPTS FONDAMENTAUX.
II.1 Objets
II.2 Classe
II.3 Encapsulation
II.4 Héritage
II.5 Polymorphisme
CHAPITRE.III. UML (Unified Modeling Language)
III.1 Introduction à UML.
III.2 Diagrammes de classes
III.2.1 Éléments d'un diagramme de classes.
III.2.2 Exemple de diagramme de classes.
III.3 Diagramme de cas d’utilisation.
III.3.1 Éléments du diagramme de cas d'utilisation
III.3.2 Exemple de diagramme de cas d'utilisation.
III.4 Diagrammes de séquence.
III.4.1 Éléments d'un diagramme de séquence.
III.4.2 Exemple de diagramme de séquence
III.5 Exercices pratiques de modélisation UML
III.5.1 Exercice 1 : Diagramme de classes
III.5.2 Exercice 2 : Diagramme de séquence
III.5.3 Exercice 3 : Diagramme de cas d’utilisation.
2
CHAPITRE.IV. Concepts Avancés en Programmation
Orientée Objet.
IV.1 Exceptions et Gestion des Erreurs
IV.1.1 Concept des exceptions
IV.1.2 Gestion des exceptions
IV.2 Interfaces et Classes Abstraites
IV.2.1 Définition et utilisation des interfaces
IV.2.2 Implémentation d'interfaces
IV.2.3 Classes abstraites vs interfaces
IV.3 Collections et Structures de Données
IV.3.1 Introduction aux collections
IV.3.2 Utilisation des collections dans la POO
CHAPITRE.V. Design Patterns
V.1 Introduction aux Design Patterns
V.1.1 . Patterns de Création
V.1.2 . Patterns de Structure
V.1.3 . Patterns de Comportement
CONCLUSION
BIBLIOGRAPHIE
TABLES DES MATIERES
ANNEXES.
2
0. INTRODUCTION.
0.1. Objectif
Ce cours vise à donner à l’étudiant un aperçu sur la
programmation orientée objets avec l’utilisation de
JAVA.
2
programmation modulaire (sous-programmes) et
passage de paramètres, tableaux et listes.
2
CHAPITRE.I. GENERALITES.
2
Chaque langage de programmation supporte une ou
plusieurs approches de la programmation –
paradigmes.
I.1.1 Définition
b. Le vocabulaire
2
quand elle est représentée par des symboles
d'opérations tels que des opérateurs arithmétiques («
+ » et « - ») ou booléens (&& pour le et logique par
exemple). On parle aussi parfois de mot clé pour
désigner une instruction (par abus de langage car le
concept de mot clé ne recouvre pas celui des
symboles qui font pourtant eux aussi partie du
vocabulaire).
c. La sémantique
d. L’alphabet
e. Les commentaires
f. Les identifiants
2
Les éléments constitutifs du programme, tels que les
variables, les procédures ou les types servent à
organiser le programme et son fonctionnement. On
peut ainsi, par exemple, diviser un programme en
fonctions ou lui donner une structure par objets : ces
éléments de structure sont définis par des identifiants
ou des procédures par mot clé selon le langage.
I.1.2 Utilisation
2
peuvent être utilisées comme primitives pour
développer des algorithmes.
a. Une instruction
Un ordre donné à un ordinateur.
b. Une variable
Un nom utilisé dans un programme pour faire
référence à une donnée manipulée par programme.
c. Une constante
Un nom utilisé pour faire référence à une valeur
permanente.
e. Un type
Chaque donnée a une classification, celle-ci influe sur
la plage de valeurs possibles, les opérations qui
peuvent être effectuées et la représentation de la
donnée sous forme de bits. Chaque langage de
programmation offre une gamme de types primitifs,
incorporés dans le langage. Certains langages offrent
la possibilité de créer des nouveaux types.
2
sont les tableaux, les enregistrements, les listes, les
piles, les files et les arbres.
g. Une déclaration
Une phrase de programme qui sert à renseigner au
traducteur (compilateur, interpréteur...) les noms et
les caractéristiques des éléments du programme tels
que des variables, des procédures, de types, etc.
i. Les modules
Les langages de programmation peuvent également
offrir la possibilité de découper un programme en
plusieurs pièces appelées modules, chacune ayant un
rôle déterminé, puis de combiner les pièces.
I.1.4 Paradigmes
2
langage de programmation reflète un ou plusieurs
paradigmes, apportant un ensemble de notions qui
peuvent être utilisées pour exprimer une solution à un
problème de programmation.
2. Déclaratif
Il y a essentiellement deux paradigmes déclaratifs ; ce
sont le paradigme fonctionnel et le paradigme logique.
En paradigme fonctionnel, le programme décrit des
fonctions mathématiques. En paradigme logique, il
décrit des prédicats : c'est-à-dire des déclarations qui,
une fois instanciées, peuvent être vraies ou fausses ou
ne pas recevoir de valeur de vérité (quand l'évaluation
du prédicat ne se termine pas)13. Dans un modèle
d'implantation, une machine abstraite effectue les
opérations nécessaires pour calculer le résultat de
chaque fonction16 ou chaque prédicat. Dans ces
2
paradigmes, une variable n'est pas modifiée par
affectation13. Une des caractéristiques principales17
est la transparence référentielle, qui fait qu'une
expression peut être remplacée par son résultat sans
changer le comportement du programme.
3. Fonctionnel
Le paradigme fonctionnel a pour principe l'évaluation
de formules, afin d'utiliser le résultat pour d'autres
calculs ; il s'appuie sur la récursivité et il a pour
modèle le lambda-calcul, plus précisément la
réduction en forme normale de tête. Tous les calculs
évaluent des expressions ou font appel à des
fonctions. Pour simplifier18, le résultat d'un calcul sert
pour le calcul ou les calculs qui ont besoin de son
résultat jusqu'à ce que la fonction qui produit le
résultat du programme ait été évaluée14. Le
paradigme fonctionnel a été introduit par les langages
Lisp et ISWIM ainsi qu'en ce qui concerne les fonctions
récursives par Algol 60, dans les années 1960. Des
langages tels que Ruby et Scala supportent plusieurs
paradigmes dont le paradigme fonctionnel13, tandis
qu'Haskell ne supporte que le paradigme fonctionnel
et OCaml privilégie le paradigme fonctionnel qu'il
partage avec le paradigme objet et une petite dose
d'impératif.
4. Logique
Le paradigme logique vise à répondre à une question
par des recherches dans un ensemble, en utilisant des
axiomes, des requêtes et des règles de déduction.
L'exécution d'un programme est une cascade de
recherches de faits dans un ensemble, en invoquant
des règles de déduction. Les données obtenues,
peuvent être associées à un autre ensemble de règles
et peuvent alors être utilisées dans le cadre d'une
autre recherche. L'exécution du programme se fait par
évaluation : le système effectue une recherche de
toutes les affirmations qui, par déduction,
2
correspondent à au moins un élément de l'ensemble.
Le programmeur exprime les règles, et le système
pilote le processus. Le paradigme logique a été
introduit par le langage Prolog en 1970.
5. Orienté objet
Le paradigme orienté objet est destiné à faciliter le
découpage d'un grand programme en plusieurs
modules isolés les uns des autres. Il introduit les
notions d'objet et d'héritage. Un objet contient les
variables et les fonctions en rapport avec un sujet. Les
variables peuvent être privées, c'est-à-dire qu'elles
peuvent être manipulées uniquement par l'objet qui
les contient. Un objet contient implicitement les
variables et les fonctions de ses ancêtres, et cet
héritage aide à réutiliser du code13. Le paradigme
orienté objet permet d'associer fortement les données
avec les procédures14. Il a été introduit par le langage
Simula dans les années 1960 et est devenu populaire
dans les années 1980, quand l'augmentation de la
puissance de calcul des ordinateurs a permis
d'exécuter des grands programmes13. Divers
langages de programmation ont été enrichis en vue
de permettre la programmation orientée objet ; c'est
le cas de C++ (dérivé du langage C13), Simula,
Smalltalk, Swift et Java sont des langages de
programmation en paradigme orienté objet.
6. Concurrent
En paradigme concurrent un programme peut
effectuer plusieurs tâches en même temps. Ce
paradigme introduit les notions de thread, d'attente
active et d'appel de fonction à distance13. Ces notions
ont été introduites dans les années 1980 lorsque, à la
suite de l'évolution technologique, un ordinateur est
devenu une machine comportant plusieurs
processeurs et capable d'effectuer plusieurs tâches
simultanément. Les langages de programmation
2
contemporains de 2013 tels que C++ et Java sont
adaptés aux microprocesseurs multi-cœur et
permettent de créer et manipuler des threads. Plus
récemment, on a vu apparaître des langages
intégralement orientés vers la gestion de la
concurrence, comme le langage Go.
7. Visuel
Dans la grande majorité des langages de
programmation, le code source est un texte, ce qui
rend difficile l'expression des objets bidimensionnels.
Un langage de programmation tel que Delphi ou C#
permet de manipuler des objets par glisser-déposer et
le dessin ainsi obtenu est ensuite traduit en une
représentation textuelle orientée objet et
événementielle. Le paradigme visuel a été introduit à
la fin des années 1980 par Alan Kay dans le langage
Smalltalk, dans le but de faciliter la programmation
des interfaces graphiques.
8. Événementiel
Alors qu'un programme interactif pose une question et
effectue des actions en fonction de la réponse, en
style événementiel le programme n'attend rien et est
exécuté lorsque quelque chose s'est passé. Par
exemple, l'utilisateur déplace la souris ou presse sur
un bouton. Dans ce paradigme, la programmation
consiste à décrire les actions à prendre en réponse
aux événements. Et une action peut en cascade
déclencher une autre action correspondant à un autre
événement. Le paradigme événementiel a été
introduit par le langage Simula dans les années 1970.
Il est devenu populaire à la suite de l'avènement des
interfaces graphiques et des applications web.
9. Basé web
Avec l’avènement de l'Internet dans les années 1990,
les données, les images ainsi que le code s'échangent
entre ordinateurs. Si un résultat est demandé à un
2
ordinateur, celui-ci peut exécuter le programme
nécessaire et envoyer le résultat. Il peut également
envoyer le code nécessaire à l'ordinateur client pour
qu'il calcule le résultat lui-même13. Le programme est
rarement traduit en langage machine, mais plutôt
interprété ou traduit en une forme intermédiaire, le
bytecode, qui sera exécuté par une machine virtuelle,
ou traduit en langage machine au moment de
l'exécution (just-in-time). Java, PHP et Javascript sont
des langages de programmation basée web.
Un compilateur
Un programme qui traduit le texte dans un langage
qui permettra son exécution, tel le langage machine,
le bytecode ou le langage assembleur.
Un interpréteur
Un programme qui exécute les instructions
demandées. Il joue le même rôle qu'une machine qui
reconnaîtrait ce langage.
a. Langage machine
2
effectuer et aux opérandes, c'est-à-dire aux données
concernées ; c'est le langage machine.
b. L’assembleur
c. Un runtime
2
tandis que les opérations complexes sont traduites en
des utilisations des fonctions du runtime. Dans
certains langages de programmation, la totalité des
instructions sont traduites en des utilisations du
runtime qui sert alors d'intermédiaire entre les
possibilités offertes par la plateforme informatique et
les constructions propres au langage de
programmation.
2
- Augmenter la qualité des logiciels et leurs
fonctionnalités
- Faciliter la maintenance et l’évolution des
applications
Comment y arriver ?
C++
2
Smalltalk
Java
C++
Avantages :
Syntaxe proche du langage C
Compatibilité avec le langage C
Programmes rapides et efficaces
Inconvénients :
Syntaxe trop proche du langage C
Utilise le compile-time binding
Allocation et désallocation explicite de la
mémoire
Utilise les pointeurs
Smalltalk
Avantages :
Syntaxe simple
Langage OO pur
Utilise le run-time binding
Code généré portable : byte code
Programmes plus rapides à développer
Pas d’allocation et désallocation
explicite de la mémoire
Inconvénients :
Maitrise assez difficile
Programmes nécessitants plus de
ressources systèmes
Java
Avantages :
Utilise le run-time binding
Syntaxe proche du C/C++
Pas de pointeurs
Pas d’allocation et désallocation
explicite de la mémoire
Code généré portable : byte code
2
Inconvénients :
Programmes nécessitants plus de
ressources systèmes
II.1 Objets
Un objet est une entité manipulée par le langage,
caractérisé par :
Une Identité
Un Etat Interne
Un Comportement
Un Etat Interne
Attribut : Nom, Sexe, Date de naissance, taille
Un Comportement
Donner son nom
Donner son sexe
Donner son âge
Donner sa taille
2
Interagir avec un objet c’est lui demander d’effectuer
une opération en lui envoyant un message
Exemple
Interaction avec un objet « personne » par le biais de
messages correspondant aux requêtes :
II.2 Classe
2
II.3 Encapsulation
L’encapsulation désigne le principe de regrouper des
données avec un ensemble de routines permettant de
lire lesdites données ou de les manipuler. Ce principe
est souvent accompagné du masquage de ces
données brutes afin de s’assurer que l’utilisateur ne
contourne pas l’interface qui lui est destinée.
2
avec la programmation structurée). De la même
manière, l’encapsulation des données facilite
grandement la réutilisation d’un objet.
II.4 Héritage
Un autre concept important en P.O.O. est celui
d’héritage. Il permet de définir une nouvelle classe à
partir d’une classe existante (qu’on réutilise en bloc !),
à laquelle on ajoute de nouvelles données et de
nouvelles méthodes. La conception de la nouvelle
classe, qui hérite des propriétés et des aptitudes de
l’ancienne, peut ainsi s’appuyer sur des réalisations
antérieures parfaitement au point et les spécialiser à
volonté. Comme on peut s’en douter, l’héritage facilite
largement la réutilisation de produits existants,
d’autant plus qu’il peut être réitéré autant de fois que
nécessaire (la classe C peut hériter de B, qui elle-
même hérite de A).
II.5 Polymorphisme
En Java, comme généralement, en P.O.O., une classe
peut "redéfinir" (c’est-à-dire modifier) certaines des
méthodes héritées de sa classe de base. Cette
possibilité est la clé de ce que l’on nomme le
"polymorphisme », c’est-à-dire la possibilité de traiter
de la même manière des objets de types différents,
pour peu qu’ils soient issus de classes dérivées d’une
même classe de base.
2
avant d’avoir connaissance du type exact de ces
objets.
2
UML fournit un ensemble de diagrammes qui
permettent de représenter différents aspects d'un
système logiciel, tels que la structure statique, le
comportement dynamique, et les interactions entre
les composants. Les diagrammes UML sont utilisés
pour communiquer les idées de conception entre les
membres de l'équipe de développement, les parties
prenantes, et les clients.
2
o Représente un instantané des objets et
leurs relations à un moment donné.
3. Diagramme de composants (Component
Diagram)
o Montre les composants logiciels et leurs
dépendances.
4. Diagramme de déploiement (Deployment
Diagram)
o Représente l'architecture matérielle et
logicielle, ainsi que le déploiement des
composants.
5. Diagramme de packages (Package
Diagram)
o Organise les éléments du système en
packages pour plus de clarté.
6. Diagramme de structure composite
(Composite Structure Diagram)
o Décrit l'agencement interne d'un
système, d'une classe ou d'un composant
en détaillant ses parties et leurs
interactions internes
2. Diagrammes comportementaux (8
diagrammes)
2
3. Diagramme de communication
(Communication Diagram)
o Met en évidence les relations
structurelles entre objets et messages
échangés.
4. Diagramme d'activités (Activity Diagram)
o Montre le flux de travail ou les processus
métiers sous forme de diagramme de
flux.
5. Diagramme d'états (State Diagram)
o Montre les états possibles d'un objet et
les transitions entre ces états.
6. Diagramme de machines à états (State
Machine Diagram)
o Version plus formelle et détaillée du
diagramme d'états, souvent utilisé dans
des systèmes complexes.
7. Diagramme d'interaction globale
(Interaction Overview Diagram)
o Combine des éléments des diagrammes
d'activités et de séquence pour modéliser
un flux général.
8. Diagramme de timing (Timing Diagram)
o Met en évidence les contraintes
temporelles et les changements d'état
des objets au fil du temps.
Classes (conception)
Cas d'utilisation (analyse fonctionnelle)
Séquence (interactions)
2
États (systèmes réactifs)
2
III.2.2 Exemple de diagramme de classes.
2
o Action ou fonctionnalité offerte par le
système.
o Représenté par une ellipse.
o Exemple : "Passer une commande",
"S'authentifier", "Consulter un compte".
3. Relations entre éléments :
o Association (lien simple) : Connecte les
acteurs aux cas d'utilisation.
o Include (<<include>>) : Un cas
d'utilisation inclut systématiquement un
autre (fonction obligatoire).
o Extend (<<extend>>) : Ajout facultatif
de fonctionnalités dans certains
scénarios.
o Généralisation : Héritage entre acteurs
ou cas d'utilisation.
4. Système :
o Limite du système, représentée par un
rectangle autour des cas d'utilisation.
2
III.4 Diagrammes de séquence.
2
III.4.2 Exemple de diagramme de séquence
2
III.5.2 Exercice 2 : Diagramme de séquence
2
CHAPITRE.IV. Concepts Avancés en
Programmation Orientée Objet.
2
levée dans le bloc try. Vous pouvez avoir
plusieurs blocs catch pour gérer
différents types d'exceptions.
3. Bloc finally :
o Le bloc finally est optionnel et contient le
code qui sera exécuté qu'une exception
soit levée ou non. Il est généralement
utilisé pour libérer des ressources ou
effectuer des opérations de nettoyage.
2
de retour). Les interfaces sont utilisées pour définir un
comportement commun à des classes non
apparentées.
Caractéristiques principales :
Une interface ne contient que des méthodes
abstraites (sans corps) et des constantes.
Une classe qui implémente une interface doit
fournir l'implémentation de toutes ses
méthodes.
Une classe peut implémenter plusieurs
interfaces, permettant ainsi l'héritage
multiple.
Syntaxe en JAVA.
interface Animal {
void manger();
void dormir();
}
Exemple :
// Déclaration de l'interface
interface Animal {
void manger();
2
void dormir();
}
// Implémentation de l'interface
class Chien implements Animal {
public void manger() {
System.out.println("Le chien mange de la
viande.");
}
public void dormir() {
System.out.println("Le chien dort dans sa
niche.");
}
}
2
IV.2.3 Classes abstraites vs interfaces
Différences et similitudes
Classe
Aspect Interface
Abstraite
Méthodes abstraites
Méthodes
uniquement (Java 8+ :
Méthodes abstraites et
méthodes par défaut
concrètes
autorisées)
Héritage simple
Héritage multiple
Héritage (une seule
(plusieurs interfaces)
classe mère)
Résumé :
Classes abstraites : Utilisées pour regrouper
des comportements partagés, permettent une
structure de base avec des implémentations
communes.
Interfaces : Utilisées pour spécifier des
comportements indépendants, favorisant
l'héritage multiple.
2
IV.3 Collections et Structures de Données
1. Listes
Exemple en PHP :
<?php
$list = [1, 2, 3, 4, 5];
// Ajouter un élément
$list[] = 6;
// Supprimer un élément
unset($list[2]);
// Accéder à un élément
echo $list[0]; // Affiche 1
?>
2
2. Ensembles
Exemple en PHP :
<?php
$set = [1, 2, 3, 4, 5];
// Ajouter un élément
$set[] = 6;
// Supprimer un élément
$set = array_diff($set, [3]);
Exemple en PHP :
<?php
$dictionary = [
"name" => "John",
2
"age" => 30,
"city" => "New York"
];
2
CHAPITRE.V. Design Patterns
2
Standardisation : Fournir un langage commun
aux développeurs pour décrire les solutions.
2
4. Builder :
o Définition : Sépare la construction
complexe d'un objet de sa représentation,
permettant de créer différents types d'objets
avec le même processus.
o Exemple d'utilisation : Générateurs de
rapports, générateurs d'objets complexes.
5. Prototype :
o Définition : Permet de créer de
nouveaux objets en clonant des instances
existantes.
o Exemple d'utilisation : Gestion de projets
avec modèles préconfigurés.
2
o Exemple d'utilisation : Systèmes de
rendu graphique multi-plateformes.
3. Composite :
o Définition : Permet de composer des
objets en structures arborescentes pour
représenter des hiérarchies "tout-partie".
o Exemple d'utilisation : Structures de
fichiers, arbres DOM HTML.
4. Decorator :
o Définition : Ajoute dynamiquement de
nouvelles fonctionnalités à un objet sans
modifier son code source.
o Exemple d'utilisation : Systèmes de
gestion des fenêtres dans les interfaces
graphiques.
5. Facade :
o Définition : Fournit une interface
simplifiée à un ensemble de classes
complexes.
o Exemple d'utilisation : Interfaces de
bibliothèques complexes.
6. Flyweight :
o Définition : Utilise le partage pour
prendre en charge efficacement un grand
nombre d'objets similaires.
o Exemple d'utilisation : Gestion des
caractères dans les éditeurs de texte.
2
7. Proxy :
o Définition : Fournit un substitut ou un
intermédiaire à un autre objet pour contrôler
l'accès à celui-ci.
o Exemple d'utilisation : Gestion des
connexions réseau, cache de données.
2
o Définition : Définit une relation de
dépendance un-à-plusieurs entre des objets,
de sorte que lorsque l'état d'un objet change,
tous ses dépendants sont notifiés.
o Exemple d'utilisation : Systèmes de
gestion d'événements.
4. State :
o Définition : Permet à un objet de
changer son comportement en fonction de
son état interne.
o Exemple d'utilisation : Automates à
états finis.
5. Strategy :
o Définition : Définit une famille
d'algorithmes, encapsule chacun et les rend
interchangeables.
o Exemple d'utilisation : Moteurs de
recherche avec stratégies de tri.
6. Visitor :
o Définition : Sépare un algorithme de la
structure de l'objet sur lequel il opère.
o Exemple d'utilisation : Parcours d'arbres
syntaxiques dans les compilateurs.
En utilisant ces design patterns, les développeurs
peuvent produire des applications mieux conçues,
plus robustes et plus faciles à maintenir.
2
CONCLUSION
2
BIBLIOGRAPHIE
2
TABLES DES MATIERES
PLAN DU COURS...............................................................i
0. INTRODUCTION.........................................................1
0.1. Objectif..................................................................1
0.2. Pré requis..............................................................1
CHAPITRE.I. GENERALITES............................................3
I.1 Les langages de programmation...........................3
I.1.1 Définition............................................................4
I.1.2 Utilisation...........................................................6
I.1.3 Notions courantes...............................................6
I.1.4 Paradigmes.........................................................8
I.1.5 Mise en œuvre..................................................13
I.2 Origines de la POO...............................................15
I.3 Objectifs de la POO..............................................15
I.4 Les langages Orientés Objet................................16
CHAPITRE.II. CONCEPTS FONDAMENTAUX...............18
II.1 Objets..................................................................18
II.2 Classe..................................................................19
II.3 Encapsulation......................................................20
II.4 Héritage...............................................................20
II.5 Polymorphisme....................................................21
CHAPITRE.III. UML (Unified Modeling Language).......22
III.1 Introduction à UML...............................................22
III.2 Diagrammes de classes.......................................25
III.2.1 Éléments d'un diagramme de classes..............25
III.2.2 Exemple de diagramme de classes..................26
III.3 Diagramme de cas d’utilisation...........................26
III.3.1 Éléments du diagramme de cas d'utilisation....27
III.3.2 Exemple de diagramme de cas d'utilisation.....28
III.4 Diagrammes de séquence...................................28
III.4.1 Éléments d'un diagramme de séquence...........28
III.4.2 Exemple de diagramme de séquence..............29
III.5 Exercices pratiques de modélisation UML............29
III.5.1 Exercice 1 : Diagramme de classes..................29
III.5.2 Exercice 2 : Diagramme de séquence..............30
III.5.3 Exercice 3 : Diagramme de cas d’utilisation.....30
CHAPITRE.IV. Concepts Avancés en Programmation
Orientée Objet. 31
IV.1 Exceptions et Gestion des Erreurs.......................31
2
IV.1.1 Concept des exceptions...................................31
IV.1.2 Gestion des exceptions....................................31
IV.2 Interfaces et Classes Abstraites...........................32
IV.2.1 Définition et utilisation des interfaces..............32
IV.2.2 Implémentation d'interfaces.............................33
IV.2.3 Classes abstraites vs interfaces.......................35
IV.3 Collections et Structures de Données..................36
IV.3.1 Introduction aux collections..............................36
IV.3.2 Utilisation des collections dans la POO.............38
CHAPITRE.V. Design Patterns...................................39
V.1 Introduction aux Design Patterns.........................39
V.1.1 Définition et Importance des Design Patterns. .39
V.1.2 Objectifs des Design Patterns...........................39
V.1.3 Patterns de Création.........................................40
V.1.4 Patterns de Structure.......................................41
V.1.5 Patterns de Comportement..............................43
CONCLUSION.................................................................45
BIBLIOGRAPHIE..............................................................46
TABLES DES MATIERES..................................................47