1-1) Avantages de la POO :
Historiquement, la solution aux problèmes logiciels, consistait à diviser une tâche complexe en plusieurs
sous-taches (procédures ou fonctions) et à diviser ces sous-tâches en d’autres sous-tâches encore plus
petites (d’autres procédures ou fonctions).
C’est une approche procédurale. Nous avons d’une part, les structures de données et d’autre part les
traitements associés à ces données. Nous obtenons ainsi un code structuré mais pas très modulaire.
Cette approche présente certains inconvénients. Si nous désirons faire évoluer le logiciel ou si nous voulons
en réutiliser une partie, nous nous apercevons que les fonctions sont liées à des données partagées avec
d’autres fonctions. Il est donc difficile d’isoler une partie du programme ou de le faire évoluer. Dans ce cas
de figure, lorsqu’un programme devient important, il peut s’avérer difficile de s’y retrouver.
La POO (programmation Orienté Objet) permet de remédier à ce problème en offrant une programmation
modulaire extrêmement structurée, très lisible et surtout réutilisable.
1-2) Constitution d’un objet : attributs et méthodes
En informatique, un objet est une entité (structure, module, …) qui regroupe :
✗ Des données (que l’on appelle attributs ou données membres). Ces attributs sont des variables
caractérisant l’état de l’objet.
✗ Des fonctions (que l’on appelle méthodes ou fonctions membres). Les méthodes définissent le
comportement de l’objet. Elles correspondent à l’ensemble des actions que l’objet est à même de
réaliser. Ces opérations permettent de faire réagir l’objet aux sollicitations extérieures (ou d’agir sur
les autres objets). Leurs actions peuvent également dépendre des valeurs des attributs, ou bien a pour
objectif de les modifier (évolution de l'état de l'objet).
L’objet correspond donc à un nouveau type de variable qui ressemble un peu à une variable de type
structure. Comme celle-ci, il est composé de variables de différents types (que nous appelons attributs),
mais il est aussi composé de fonctions (que nous appelons méthodes). Ce sont ces méthodes qui vont «
donner vie et faire évoluer l’objet ».
Un objet peut être vu comme une brique autonome avec laquelle nous construisons notre programme.
1-3) Description d’un objet : la classe
Comme pour la structure il faut définir quels seront les attributs et les méthodes qui vont composer l’objet.
C’est le rôle de la classe qui peut être considérée comme le plan ou la notice contenant tous les éléments
pour créer un objet.
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 1 sur 12
✗ Un objet est donc élaboré à partir d’une classe. On dit qu’il est l’instance d’une classe.
✗ Tous les objets instanciés à partir d’une même classe sont de la même famille et ont le même type, ce
qui veut dire qu'ils ont le même comportement.
✗ Par contre, chaque objet instancié est unique et possède sa propre identité.
Exemple :
Soit la classe RéserveArgent : Un objet de classe RéserveArgent doit appartenir à une personne (un
propriétaire) et peut contenir une certaine somme d’argent (un solde). Nous pouvons y mettre ou enlever
de l’argent (la créditer ou la débiter). Nous en déduisons les attributs et les méthodes suivants :
En notation UML, une classe est représentée par un rectangle de 3
compartiments :
✗ 1ier compartiment : nom de la classe.
✗ 2ième compartiment : liste des attributs.
✗ 3ième compartiment : liste des méthodes.
À partir de la classe RéserveArgent, nous pouvons créer autant de d’objets de la
classe RéserveArgent que nous voulons. Ils auront tous leur propre identité et évolueront
indépendamment. Nous ne définissons que les attributs et les méthodes dont nous avons besoin. Ici la
classe RéserveArgent est sommaire, nous aurions très bien pu donner d'autres précisions en ajoutant
d’autres attributs et méthodes comme le montant maximum qu’elle peut contenir par exemple.
1-4) L’encapsulation :
Un objet est constitué d’attributs qui caractérisent son état. Ces attributs ne pourront être modifiés ou lus
uniquement en utilisant les méthodes de l’objet. C’est l’encapsulation.
L’encapsulation consiste donc à masquer les détails d’implémentation d’un objet, en définissant une
interface.
✗ L’interface est la vue externe d’un objet, elle définit les services accessibles (offerts) aux utilisateurs de
l’objet.
✗ L’encapsulation facilite l’évolution d’une application car elle stabilise l’utilisation des objets : nous
pouvons ainsi modifier l’implémentation des attributs d’un objet sans modifier son interface, et donc
la façon dont l’objet est utilisé.
✗ L’encapsulation garantit l’intégrité des données, car elle permet d’interdire, ou de restreindre, l’accès
direct aux attributs des objets.
Un objet est donc constitué :
✗ D’une partie privée qui ne peut pas être directement accessible de l’extérieur de l’objet. La partie
privée contient généralement les attributs de l’objet.
✗ D’une partie publique qui est accessible de l’extérieur de l’objet. La partie publique contient
généralement les méthodes de l’objet (méthodes qui par contre permettent d’accéder aux attributs).
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 2 sur 12
2) Les relations entres classes :
3-1 ) La composition :
Si un objet A contient un objet B, c'est-à-dire que l’objet B est un attribut d’un objet A, nous précisons
alors que A et B sont reliés par une relation de composition. C’est une relation très forte, si
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 3 sur 12
L’agrégation, c’est lorsqu’un objet A possède et utilise un objet B (qui est extérieur à l’objet A).
Contrairement à la composition, où l’objet inclus disparaît si l’objet englobant est détruit, dans une
agrégation cet objet ne disparaît pas lorsque l’objet englobant est détruit. De plus, dans le cas d’une
composition, seul l’objet A utilisait B (dans une agrégation, l’objet B peut très bien être utilisé par un autre
objet).
La manière habituelle d’implémenter l’agrégation en C++ se fait au travers de pointeurs ou de
références.
Exemple 2 : Reprenons l’exemple de la classe Spéculateur.
Si nous regardons bien, il est plus judicieux de considérer que la réserve d’argent n’est pas une composition
de spéculateur. En effet si le spéculateur disparaît, la réserve d’argent ne disparaît pas avec lui. La réserve
d’argent est finalement un objet extérieur qui appartient au spéculateur, c'est donc une agrégation.
De plus, soit le nouvel objet stockPétrole définit par les attributs et méthodes ci-dessous :
✗attributs :
- propriétaire : nom du propriétaire du stock.
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 4 sur 12
- quantité : la quantité de pétrole en stock.
- cours : le cours du baril de pétrole.
3-3) Associations simples :
Une association est une relation qui indique une connexion structurelle entre différentes classes. La
composition et l’agrégation sont des cas particuliers d’associations, mais pour une association simple, nous
n'avons plus la notion hiérarchique de constitution ou de possession d’une classe par rapport à l’autre. Les
classes sont associées d’égale à égale. Une association simple se représente par un trait entre les deux
classes.
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 5 sur 12
L'héritage permet de créer une nouvelle classe à partir d’une classe existante. Le nom d’héritage provient
du fait que la classe dérivée (classe fille) contient les attributs et les méthodes de la classe dont elle est
issue (classe mère). L'intérêt majeur de l'héritage est de ne pas avoir à repartir de zéro lorsque nous voulons
spécialiser une classe existante. Les attributs et méthodes de la classe mère vont s’ajouter à ceux définis
dans la classe fille. Cela nous permet d'éviter à devoir réécrire un même code source plusieurs fois.
L’héritage évite ainsi la duplication et favorise la réutilisation.
Exemple 1 : Soit la classe Véhicule qui contient la méthode seDéplacer() et les attributs vitesse et
nombrePassagers. Nous pouvons créer ensuite les classes Voiture, Avion, et Bateau qui sont des
spécialisations de la classe Véhicule. Chacune des classes spécialisées possède ses propres attributs et
méthodes auxquelles viennent s’ajouter ceux hérités. Ainsi par exemple, pour la classe Avion, nous
pouvons définir l’attribut altitude qui lui sera propre mais elle bénéficie également de la méthode
seDéplacer() ainsi que les attributs vitesse et nombrePassagers sans avoir à les redéfinir.
En UML, l’héritage est représenté par une flèche (triangle vide).
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 6 sur 12
Exemple 2 : RéserveArgent
Nous avons vu que les attributs et les
méthodes peuvent avoir une portée :
✗ public (accessible de l’extérieur de
la classe et symbolisés par un ‘+’).
✗ private (non accessible à l’extérieur
de la classe est symbolisés par un ‘-
‘).
Ils peuvent aussi avoir une portée
protected c'est-à-dire qu’ils seront
accessibles à partie des classes filles
(héritées).
La portée protected est symbolisée par
un ‘#’ devant l’attribut ou la méthode.
Les classes CompteChèque, LivretA et PorteMonnaie sont bien des spécialisations de RéserveArgent. Elles
peuvent donc hériter des attributs et des méthodes de la classe RéserveArgent (attributs et méthodes qui
n’ont pas besoin d’être redéfinis). Ainsi, la classe LivretA dispose de :
✗ 3 attributs (taux qui lui est propre puis propriétaire et solde qu’elle
hérite de RéserveArgent).
✗ 6 méthodes (setTaux() et getTaux() qui lui sont propre, puis débiter(),
créditer(), getSolde() et getProprietaire() qu’elle hérite de
RéserveArgent.
Nous allons aussi modifier la classe Spéculateur en ajoutant la méthode changer() qui permet de changer
la réserve d’argent sur laquelle nous effectuons des opérations.
3-5) Les relations de dépendances :
Une association (association simple, agrégation ou composition) entre un objet A et un objet B est une
relation forte. Cela influence directement la structure des classes A et B en se traduisant par la présence
dans les attributs de A d’une variable supplémentaire correspondant à B (et réciproquement si nécessaire).
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 7 sur 12
La relation de dépendance est beaucoup moins forte. C’est une relation unidirectionnelle qui indique
qu’une classe A utilise une classe B mais sans incidence sur la structure de la classe A (pas d’attributs
correspondant à B parmi les attributs de A). Par contre, nous pouvons retrouver des objets de classe B
dans les signatures des méthodes de la classe A.
5) Le polymorphisme :
Le mot polymorphie vient du grec et signifie « qui peut prendre plusieurs formes ». Le polymorphisme est
le fait qu’une méthode puisse accepter des paramètres de types différents (de différentes formes) et que le
comportement de la méthode soit différent en fonction du type de paramètre reçu. Nous distinguons deux
types de polymorphisme, la surcharge et la redéfinition.
• Polymorphisme de surcharge : Des méthodes qui possèdent des noms identiques mais une signature
différente. Exemple : Lorsque nous possédons plusieurs constructeurs dans une classe, ils portent tous
le même nom mais avec des signatures différentes.
• Polymorphisme de redéfinition : Si une méthode définie dans une classe mère n’est pas adaptée à une
classe fille, nous pouvons la redéfinir dans la classe fille, et c’est la méthode redéfinie qui sera alors
appelée. Ici, non seulement, les méthodes possèdent le même nom mais aussi la même signature.
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 8 sur 12
6)
TP N° 1 : Syntaxe du langage JAVA
Exercice 1
Ecrire un programme qui affiche Hello World sur la console.
Exercice 2
Ecrivez un programme testant la valeur d'une variable température de type int.
Selon la valeur de cette variable, le programme affiche les messages suivants :
si la valeur <0 On gele !
0=<valeur <10 Il fait froid, mais c'est supportable
10=< valeur <20 Il ne fait pas tres chaud
20=<valeur <=30 Il fait chaud, vive l'ete!
valeur > 100 L'eau bout
sinon A boire!
Exercice 3
Ecrire un programme qui compte de 5 en 5 de 0 jusqu'à 100 puis affiche la somme des nombres
trouvés. On pourra écrire deux versions : l'une utilisant une boucle FOR et l'autre utilisant une
boucle WHILE.
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 9 sur 12
Exercice 4
Ecrire un programme qui place les nombres passés en paramètres dans un tableau, puis calcule et
affiche le minimum, le maximum et la somme de ces nombres.
Exercice 5
public static String jour[]=
{"lundi","mardi","mercredi","jeudi","vendredi",
"samedi","dimanche"};
Ecrire un programme qui utilise ce tableau pour afficher les jours de la semaine.
Exercice 6
Ecrire un programme qui lit le nombre entier entre 1 et 12 passé en paramètre et qui affiche le
nom du mois correspondant.
On pourra utiliser un tableau ou l'instruction switch.
TP N°2 : Programmation JAVA
Ex1 : Création d’une classe
Créer une classe Date1, qui permettra de créer des objets représentant des dates.
Cette classe dispose de trois attributs (de type int) :
jour
mois
annee
Ex2 : Création d’objets
Créer une autre classe Test qui implémente une méthode main.
Dans cette méthode, créer trois objets Date1, les initialiser à des dates différentes.
Ex3 : Variable de classe
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 10 sur 12
Reprendre la classe Date1, y définir une variable statique nommée jourDeLannée, de type Date1
et initialisée au premier janvier.
Cette variable nous permettra de vérifier si la date de l’objet est un jour de l’an (si le jour et le
mois sont identiques à ceux de la variable jourDeLannée).
Ex4 : Méthode publique
Implémenter dans la classe Date1 la méthode :
public void afficher()
Cette méthode affiche le contenu de l’objet date sous la forme jour/mois/annee.
Ex5 : Méthode de vérification
Implémenter une méthode de vérification de la validité de la date (on se limitera à vérifier que le
mois est compris entre 1 et 12 et le nombre de jours inférieur à 31).
Ex6 : Constructeur
Créer un constructeur qui prend en argument le jour, le mois et l’année. Utiliser ce constructeur
dans la main pour créer les trois objets Date1.
Créer aussi un constructeur sans argument (Constructeur par défaut).
Ex 7 : Les accesseurs
Modifier la visibilité des attributs de la classe Date1 en respectant le principe d’encapsulation.
Ecrire les méthodes d’accès aux attributs et tester la classe.
Ex8 : Classe Salarie (A rendre)
Créez la classe Salarie répondant aux besoins suivants :
Cette classe possédera 5 propriétés de visibilité private :
int matricule;
char statut;
String service;
String nom;
double salaire;
1. Implémenter les getters et les setters.
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 11 sur 12
2. Implémentez la méthode affichage qui permet d’afficher les informations du salarie
3. Implémentez la méthode CalculerSalaire().
4. Implémentez deux constructeurs d’initialisation.
5. Créer une classe de test.
Le savoir-faire n’est rien sans faire savoir.
M. Pavel N. BAYIDIKILA, Ingénieur de Conception en Informatique Page 12 sur 12