Plan
Programmation orientée
objet en Java
•Leçon 1 - Concepts de base de la POO
•Leçon 2 - Eléments de base de Java
•Leçon 3 - Classes et Objets en Java
•Leçon 4 - Héritage et polymorphisme
•Leçon 5 - Interfaces et classes abstraites
•Leçon 6 - Les exceptions
Youssef EL BENANI
•Leçon 7 - Les collections
•Leçon 8 - Les entrées et sorties
y.elbenani@um5r.ac.ma
POO en Java
2
1
Modèle en cascade pour le développement logiciel
Langages de Programmation
Analyse
SADT, SA-RT, MERISE, OMT, UML,
…
Conception
Implémentation
Fortran, Cobol, C, SmallTalk,
Python, C++, Java, …
Test
Maintenance
POO en Java
3
POO en Java
4
2
Langages Orientés-Objet
Langages procéduraux et fonctionnels
• Un programme est composé de plusieurs
objets qui contiennent
• des données ”internes”
• des traitements manipulant ces données
internes ou d’autres données
• Un programme est composé de plusieurs
procédures (ou fonctions) :
• qui effectuentun traitementsur des
données (procédure)
• qui retournent une valeur après leur
invocation (fonction)
• Certains langages ne distinguent pas
procédures et fonctions.
• Exemples de langages procéduraux ou
fonctionnels : Fortran, Pascal, C, …
POO en Java
Données
• Les données d’un objet sont appelés ses
attributs et ses traitements sont ses méthodes
(ou opérations).
• Exemples de langages orientés-objet :
SmallTalk, C++, Python, Ruby, Java,…
Traitement 1
Traitement 2
Traitement 3
5
POO en Java
6
3
Notion Objet
UML et Java
Analyse
Conception
Implémentation
•Unified Modeling Language (UML)
• Notation standard pour l’analyse et la
conception▸construitepar l’Object Management
Group (OMG)
• Première version standard en 1997
• Java
• Pas un standard mais un langage très
largementutilisé
• Développé par SUN microsystems en 1995
Test
Approche procédurale :«Que doit faire mon programme ? »
Approche orientée-objet :«De quoi doit êtrecomposé mon programme ? »
Cette composition est conséquence d’un choix de modélisation fait
pendant la conception
Le trône de fer,G.R.R.
M artin
Alice,
directrice
Carole,
lectrice
Le Canard
Enchaîné
Maintenance
Bilbo le Hobbit,J.R.R.
Tolkien
POO en Java
7
Bob,
bibliothécaire
POO en Java
David,
lecteur
8
4
Etude d’un problème
Classe
VS
Des objets similaires peuvent être informatiquement décrits par
une même abstraction : une classe
Procedural
Programming
▸ même structure de données et méthodes de traitement
• Problème : on veut faire un programme de gestion du
personnel d’une entreprise informatique.
▸ valeurs différentes pour chaque objet
Classe
Employé
Classe
Livre
Classe
Journal
Germinal,E.
Zola
Bilbo le Hobbit,
J.R.R.Tolkien
Le Canard
Enchaîné
• On y trouve des ingénieurs, des techniciens, des directeurs
et des ouvriers d’entretiens (concierge, femme de
ménage…).
Classe
Lecteur
Alice Dupont,
directrice
M ichel M artin,
bibliothécaire
POO en Java
Object-Oriented
Programming
• 1ère solution : Programmation procédurale classique =>
Que veut on faire ?
• Equation de Niclauss Wirth : (Pascal, C)
Algorithms + Data structures = Programs
Anne M isa,
lectrice
Robert Light,
lecteur
9
POO en Java
10
5
Décomposition procédurale
Programmation procédurale
• Le programme est une fonction principale
int main(argc, argv[])
• Cette fonction appelle des sous-fonctions
• Qui en appellent d'autres…
POO en Java
11
POO en Java
12
6
Programmation procédurale
POO en Java
Programmation procédurale
13
POO en Java
14
7
Concept objet
• 2ème solution :
• Programmation orientée objet
=> De quoi parle-t-on ?
POO en Java
15
POO en Java
16
8
Concept objet : Héritage
Modularité : exemple
• En fait, les classes Ingénieur, Technicien et Directeur hérite
de tout ce que possède la classe Personnel, les attributs
comme les méthodes.
• Logiciel de gestion de tâches :
• Le logiciel empile des tâches à exécuter dans différentes
catégories, et les dépile quand les tâches sont exécutées.
• Ainsi l’héritage permet de nous éviter toutes les
duplications ou les redondances.
• Toutes les caractéristiques communes n'apparaissent plus
dans chacune des classes filles, alors qu'elles sont bien
présentes implicitement.
POO en Java
17
POO en Java
18
9
Modularité : décomposition
Modularité : modules
• Décomposition en deux sous-problèmes simples et
indépendants :
• Sous-problème PILE: comment gérer une pile ?
• Sous-problème GESTIONNAIRE: que faire avec les piles ?
POO en Java
19
• Production d'éléments logiciels (modules) pouvant être
combinés.
Exemple : GESTIONNAIRE et PILE sont combinés pour
répondre au problème.
• On écrit qu'une fois le module PILE, et il faut pouvoir
construire différentes PILEs suivant le même modèle.
POO en Java
20
10
Histoire : crise logicielle
Modularité : envoi de messages
• Au milieu des années 60 du 20e siècle, il y avait une crise logicielle.
• Les communications entre modules se fait par envoi de
messages.
Exemple :
• Par la demande croissante de programmes informatiques.
• En conséquence, le logiciel est devenu plus complexe et plus bogué.
• GESTIONNAIRE veut demander le service dépiler à une PILE:
• Il appelle une méthode de PILE qui permet de dépiler.
• Les experts ont discuté des causes de la crise et des raisons de
l'augmentation du taux d'erreur.
• En conclusion cette crise du logiciel ne pouvait pas être maîtrisée avec
les langages de programmation conventionnels.
• Développement de nouveaux langages de programmation.
POO en Java
21
POO en Java
22
11
Objet
Naissance de l’orienté objet
• L’inventeur, Alan kay, du langage de programmation Smalltalk a mis en places
six fonctionnalités de base pour les langages orientés objets.
• Programmation orientée objet{
1.Tout est objet
2. Les objets communiquent en envoyant et en recevant des messages
3. Les objets ont leur propre mémoire
4. Chaque objet est une instance d'une classe
5. La classe détient le comportement partagé pour ses instances
6. Pour évaluer une liste de programmes, le contrôle est passé au premier objet
et le reste est traité comme son message
}
POO en Java
23
• Objets sont à un programme Java ce que les cellules sont à un organisme.
• Un programme Java est composé de ces objets.
• Dans la programmation orientée objet, ces objets sont souvent appelés
instances d'une classe.
• Anna et Julia deux étudiantes sont des objets présentant de nombreuses
similitudes. Par exemple, elles ont en commun d’être des femmes, de suivre
le même cours de programmation et d’être inscrites dans la même
université.
POO en Java
24
12
Classe
Objet et classe
• Du point de vue de la programmation orientée objet, cela signifie que ces
deux objets sont similaire.
• Les différences entre ces objets résultent de la valeur différente de leur
attributs.
• Par exemple, les deux étudiantes ont un nom différent, une couleur de
cheveux et une taille différentes .
• C'est la classe qui façonne la forme et les capacités principales
des objets comme les deux étudiantes.
• Une classe se rapporte à un objet comme le modèle d'un être
humain se rapporte à un être humain réel.
• La classe donne le dessus à différents objets de même nature.
• On dit aussi qu'une classe classe ses objets – d’où son nom.
• La forme commune et les capacités communes des objets sont
déterminées par le plan de construction des objets.
• Ce plan s'appelle classe en programmation orientée objet.
POO en Java
25
POO en Java
26
13
Classe : Constantes et variables
Classe : attributs
• Notre nouvelle classe Personne devrait obtenir les attributs nom, couleur
de cheveux, hauteur et en plus étudiant.
• Les attributs sont également appelés propriétés. On utilise ces
propriétés pour spécifier les caractéristiques d'un objet.
• Les nouveaux objets Personne sont créés à partir de cette classe, toutes
les instances ont un nom, une couleur de cheveux, une hauteur, et avoir le
statut étudiant.
• Par exemple : Anna a les propriétés suivantes : nom = Anna, couleur des
cheveux = blond, taille = 1,71 m. Sa petite amie du cours s'appelle Julia, a
les cheveux bruns et mesure 1,72 m.
• Bien que les deux personnes aient été créées selon le même modèle
(classe), les deux objets ont des noms différents, ont des couleurs de
cheveux différentes et sont tous deux de tailles différentes.
• Une forme particulière de la propriété variable d'un objet est son état.
• Certaines propriétés des deux individus se sont vu attribuer des valeurs
fixes, tandis que d'autres se sont vu attribuer des valeurs variables.
• Contrairement aux propriétés fixes, les propriétés flexibles décrivent
l’État de l'objet. Par exemple, la propriété étudiant décrit si une personne
est actuellement inscrite dans une université. L'état d'un objet peut
changer avec le temps.
POO en Java
27
POO en Java
28
14
Classe : attributs
Classe : méthodes
• Si deux objets ont reçu des valeurs identiques. Ainsi, les objets d’un
programme se ressemblent également, comme de vrais jumeaux.
• Pour distinguer les objets, comme dans le cas d’une base de données,
on utilise un identifiant qui soit unique.
POO en Java
29
• Si Julia veut parler à Anna. Dans la vraie vie, vous posez simplement une
question à Anna ou lui envoyez un message.
• En programmation orientée objet, on appelle une méthode de l'objet Anna
à la place (Figure ci- dessous).
• Une méthode est le terme orienté objet pour désigner une fonction. Le
terme a été introduit pour exprimer qu’une fonction orientée objet est
beaucoup plus puissante qu’une fonction d’un langage de programmation
classique.
• Les objets peuvent être contrôlés par des méthodes. Il n’existe pas qu’un
seul type de méthode, mais il existe les cinq types de base suivants :
Constructeurs, Destructeurs, Méthodes de modification(Setters), Méthodes de
requête(Getters), et Opérations(Les fonctions).
POO en Java
30
15
Classe : méthodes
Classe : méthodes
• Constructeurs : les objets d’un programme informatique ont également un
cycle de vie. Ils naissent, créés, et à un moment donné, ils meurent, c'est-àdire qu'ils sont supprimés et que leur mémoire est libérée. La méthode la
plus importante est celle qui crée un objet. C'est pourquoi ils sont
également appelés « constructeurs ». Ils construisent, c'est-à-dire créent un
objet.
• Destructeurs : Les méthodes qui détruisent un objet sont appelées
«destructeurs » en programmation orientée objet. On appeler ces
destructeurs pour détruire immédiatement un objet. En Java, un objet est
automatiquement détruit lorsqu’il n’est plus nécessaire.
• Méthodes de lecture « getters » : sont des méthodes qui interrogent
uniquement un attribut spécifique. Ils ne changent pas l'état de l'objet. Cette
méthode a une valeur de retour.
• Opérations : Les méthodes, ayant un comportement qui peut modifier
des états. Ces méthodes peuvent être héritées de classe en classe. De plus,
ils peuvent être surchargés et redéfinies.
• Méthodes modificateurs : qui modifient la valeur d'un attribut sont appelées
«méthodes setter » ou « setters » . Ils changent l'état de l'objet. La méthode
correspondante possède un paramètre qui spécifie le nouvel état.
POO en Java
31
POO en Java
32
16
Abstraction
Héritage
• L'héritage permet de transférer un comportement entre classes, et donc
entre objets, à l'aide d'un plan.
• L’abstraction c’est le fait de s’intéresser et de
programmer uniquement les parties essentielles,
cela a des raisons pratiques :
• L'héritage copie les attributs et les méthodes de la classe de base vers la
classe dérivée.
• Le programme peut être développé plus
rapidement,
• Pour clarifier cela, un exemple : les humains et les robots sont à certains
égards similaires, mais extrêmement différents à divers égards.
• Il devient moins cher et plus simple,
• Ainsi, il nécessite moins de mémoire,
• s’exécute plus rapidement qu’un surchargé
d’informations inutiles.
• Pour atteindre cet objectif, il est nécessaire
d'abstraire, c'est-à-dire de simplifier les objets
naturels, généralement extrêmement complexes,
ainsi que leurs relations.
POO en Java
33
POO en Java
34
17
Héritage : classe de base
Héritage : classe de base
• Pour éviter d'avoir à reprogrammer les attributs Nom et Taille ainsi que le
comportement Communiquer et Marcher pour chacune des classes Humain
et Robot, il est logique de déplacer ce comportement vers une classe de
base.
• Les points commun entre un humain
(Anna) et un robot (Robert) sont :
- chaque humain comme Anna et
chaque robot comme Robert ont
• Les attributs et méthodes en gras sont les caractéristiques communes des
deux classes du point de vue de programmation orientés objet.
une certaine taille.
-Ils peuvent à la fois marcher et
• Les attributs communs de la classe de base ne facilitent pas seulement la
programmation. Ils unifient également toutes les classes dérivées.
communiquer.
• Du point de vue de la programmation
orientée objet, on peut assigner les
humains et les robots à une classe de
base commune : Créature.
POO en Java
35
POO en Java
36
18
Héritage : classes dérivées
Héritage Multiple
• L'héritage multiple est utile si on souhaite
fusionner deux classes, par exemple la classe
Humain avec la classe Cheval. Le nouvel
hybride Centaure hérite des attributs et le
comportement des deux classes de base
(Figure à côté).
• Mais quels attributs et comportements ? Les
centaures doivent-ils communiquer et
marcher comme les humains ou comme les
chevaux ? Les centaures peuvent-ils être
étudiants ?
• Supposons qu’on souhaite créer une
nouvelle classe appelée Animal en fonction
de la classe Créature.
• En programmation orientée objet, on dit
qu’on dérive une nouvelle classe appelée
Animal de la classe Créature.
• On dit que la classe Animal dérive de la
classe Créature.
• La nouvelle classe Animal hérite des
attributs Nom, Hauteur et le comportement
avec Communiquer et Marcher de la classe
de base Créature, tout comme les classes
Humain et Robot avant.
• Les attributs et les comportements sont
hérités (Figure à côté).
• L'utilisateur souhaite des programmes
dotés de propriétés définies et dont le
comportement est prévisible.
• Pour ces raisons, les développeurs Java ont
renoncé à l'héritage multiple conventionnel.
POO en Java
37
POO en Java
38
19
Protection d'accès
Protection d'accès
• L'une des caractéristiques les plus importantes des langages orientés
objet est la protection des objets et de leurs attributs contre tout accès
indésirable.
• La programmation orientée objet a été inventée pour surmonter la crise
logicielle provoquée par les logiciels bogués. Le logiciel devrait devenir
• L’idée est de ne laisser passer vers un objet que les informations qui
doivent absolument lui parvenir.
• Chaque objet peut être conçu comme une cellule (Figure ci-joint) dotée
d’une coque protectrice. Le seul moyen d'accéder aux attributs, c'est à
travers les méthodes : les interfaces de l'objet au monde extérieur.
plus robuste grâce à la nouvelle programmation.
• Pour cette raison, chaque objet possède une sorte de capsule qui protège
les données et les méthodes de l’objet.
• La capsule cache les parties de l'objet qui ne doivent pas être accessibles
de l'extérieur par les autres objets. Les endroits où la capsule est
perméable sont appelés interfaces.
POO en Java
39
POO en Java
40
20
Protection d'accès
Relations
• L'interface la plus importante d'une classe est son constructeur.
• Exemple : la méthode comunicate de Robot est accessible au public. En
revanche, sa méthode Add n’est pas accessible au public.
• Julia communique avec Robert via cette interface (voir Figure).
• Toutes les pièces accessibles de l'extérieur sont marquées d'un signe (+).
Toutes les pièces qui ne pouvant pas être manipulées de l'extérieur sont
marquées d'un signe (-).
• L'objet Julia n'est pas autorisé à modifier toutes les données de Robert
• Les classes et leurs objets entretiennent une grande variété de relations
les uns avec les autres dans un programme. Il existe des relations sans
héritage et des relations avec héritage.
• Sans héritage : La programmation orientée objet est très stricte en
matière de relations. Il connaît trois types différents de relations sans
héritage.
Des relations {
Les associations
Agrégations
Compositions
}
via cette interface. Par exemple, Julia ne peut pas changer le nom du
robot.
POO en Java
41
POO en Java
42
21
Association
Agrégation
• Association : est la forme la plus simple de relation entre classes et objets.
Les dépendances sont faibles dans ce type de relation par rapport à
• Une augmentation de l'association est l'agrégation. Une telle relation
existe lorsqu'un objet est composé d'autres objets.
l'héritage. On dit également que les objets sont faiblement couplés.
• Par exemple, on dit qu’un robot est constitué d’un nombre indéterminé
de vis (voir Figure). Cela signifie, par exemple, qu'un robot entretient une
relation « consiste de » (partie/ensemble) avec la vis.
• Par exemple, une association existe lorsqu'un objet nommé Julia envoie
un message à un objet nommé Robert (Figure ci-dessous). Les deux objets
Anna et Robert existent séparément et n’héritent de rien les uns des autres.
• Cependant, cette relation est différente de celle entre un humain et un
robot. Alors que l’homme et le robot peuvent exister seuls et
indépendamment l’un de l’autre, le robot est composé (entre autres) de vis.
• Il est important de noter que les deux objets n’héritent rien l’un de l’autre
et que chaque objet vis est également viable seul.
POO en Java
43
POO en Java
44
22
Relation d’héritage
Composition
• La forme la plus forte de relations, qui ne reposent pas sur l'héritage, est
• Les relations d'héritage sont également appelées généralisation ou
la composition.
spécialisation. Ce ne sont pas des sous-types d'héritage, mais des termes
• Comme pour l'agrégation, il existe à nouveau une relation « consiste à
alternatifs pour les relations d'héritage.
partir de », mais elle est encore une fois plus forte contrairement à
• Généralisation : si on souhaite examiner la classe de base du point de vue
l'agrégation. Les dépendances sont à nouveau plus fortes.
de la classe dérivée, la généralisation est le terme approprié. La classe
• Exemple : la relation entre un être humain et ses deux jambes. Une jambe,
Créature est une généralisation des classes Humain et Robot.
contrairement à une vis, n’a absolument aucun sens en tant qu’objet
• Spécialisation : si on souhaite examiner la classe dérivée du point de vue
indépendant. Lorsqu'un objet humain est créé, il obtient automatiquement
de la classe de base, la spécialisation est le terme approprié pour la
deux jambes individuelles, qui ne peuvent pas être utilisées en relation
désigner. Les classes Humain et Robot sont une spécialisation de la classe
avec d'autres objets.
Créature.
POO en Java
45
POO en Java
46
23
L'héritage peut être problématique
Défauts de conception
• La fonctionnalité de la classe de base n'a pas été suffisamment analysée
• Les relations d'héritage établissent un
couplage très fort entre les classes et donc
• Lorsque la classe de base doit être modifiée en raison d'une erreur de
conception, en raison du fort couplage entre la classe de base et les classes
dérivées, tout changement se propage comme une avalanche à toutes les
parties du programme où les classes Humain, Animal et Robot sont utilisées.
aussi entre les objets. Un couplage aussi
puissant présente non seulement des
avantages, mais aussi des inconvénients,
comme le montre l’exemple suivant :
• Une classe Poisson doit être créé à partir de
la classe Animal, qui à son tour descend de
Créature.
• La nouvelle classe hérite les attributs nom
et taille, ainsi que les méthodes Communiquer
et Marcher. communiquer et marcher? Les
poissons peuvent-ils communiquer ? Peut
être. Mais marcher, certainement pas.
POO en Java
47
POO en Java
48
24
Modélisation
Refactorisation
•Pour éviter de telles erreurs de conception et donc une restructuration
coûteuse, il est logique de concevoir un modèle de logiciel pour des projets
plus importants.
• Comment gérer des erreurs de ce genre ? Ils ne constituent plus un
problème aussi grave aujourd’hui.
• Avec un outil comme Eclipse, il est relativement simple de faire la
restructuration (refactoring) nécessaire.
• On ne doit restructurer le logiciel que pendant la phase d'analyse et de
conception du logiciel.
• En règle générale, plus les modifications sont apportées tardivement, plus
l'effort associé est élevé.
POO en Java
49
•Tout comme dans l'ingénierie automobile, on développe un modèle avant
la construction de chaque nouvelle automobile, il est également judicieux,
dans le développement de logiciels, de construire un modèle avant de
commencer la mise en œuvre proprement dite du projet.
•Un modèle qui représente une reproduction fidèle d'une section complète
du logiciel est appelé prototype (échantillon, précurseur).
POO en Java
50
25
Persistance
Polymorphisme statique
•Un programme crée des objets qui sont à nouveau détruits à la fin de leur
•Le nom polymorphisme vient du grec et signifie autant multiformité,
vie. Ces objets sont appelés transitoires.
diversité.
•Une vie après la mort est également souhaitable pour les objets. Le
• Une classe peut réagir différemment selon la situation.
lendemain, l'utilisateur redémarre le programme et souhaite continuer à
• On suppose que l'objet Julia demande à l'objet Robert d’effectuer une
travailler avec le même objet.
addition avec deux entiers. Robert utilise add(a,b). Mais si Julia demande
•De tels objets « immortels » sont appelés persistants. Cela signifie qu’ils
encore à Robert d’additionner, deux fractions ?
sont stockés sous une forme appropriée. Ils sont alors dans une sorte de
• Afin que Robert peut répondre aux différentes instructions de Julia, il a
sommeil profond dans un fichier d'un disque dur ou en association avec
besoin de méthodes de « formes différentes ».
d'autres objets d'une base de données.
• Bien que les méthodes portent le même nom, elles entraînent des
traitements différents. On parle de Surcharge.
POO en Java
51
POO en Java
52
26
Polymorphisme dynamique
Règles de conception
• Si on souhaite contourner les propriétés de la classe de base lors de
• Les programmes orientés objet ne garantissent pas des programmes
l'héritage. Exemple : La classe de base Créature on suppose qu’on souhaite
déterminer dans la classe dérivée Robot comment les objets robots
communiquent. Pour ce faire, on passe outre la méthode communiquer et on
précise la manière de comprendre dans la classe Robot pour les objets dérivés.
proprement structurés et logiquement construits.
• La programmation orientée objet facilite une bonne conception de
logiciels, mais elle ne la force pas.
• C’est pourquoi on doit considérer quelques règles de base. Ils permettent
• La substitution de méthode est un outil très puissant de programmation
orientée objet. Il permet de supprimer partiellement ou totalement les
robustes
informations héritées indésirables et ainsi de combler les lacunes de la classe
de base.
• La technique est extrêmement simple. Il suffit de décrire une méthode
identique dans la classe dérivée, de sorte que celle-ci puisse se comporter
différemment.
POO en Java
de développer plus facilement des programmes Java simples, rapides et
53
Règles de conception {
• Éviter l'héritage
• Réduire les exigences à l’essentiel
• Protéger tous les éléments internes attributs et méthodes
• Dessiner un modèle orienté domaine avec toutes les dépendances
• Travailler avec un prototype
}
POO en Java
54
27
Paradigme Objet : résumé
Application Objets
Application Procédurale
Porte
Données
Robot
ouvrir()
procédure 1
procédure 2
procédure n
Encapsulation
Envoi de
messages
Personne
ouvrir()
Concepts
Classe
Héritage
Instanciation
Polymorphisme
POO en Java
Objet
Liaison
dynamique
55
28
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )