INF224 Partie 1

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 45

Introduction au Génie Logiciel

Notions de base de l'orienté objet

Rodrigue DJEUMEN

Rodrigue DJEUMEN Introduction au Génie Logiciel 1 / 45


Sommaire

Sommaire
Les concepts de base de l'orienté objet à étudier dans cette leçon :

1 Objets et classes

2 Encapsulation

3 Héritage

4 Polymorphisme

5 Généricité

6 Approche impérative vs approche Orientée Objet


Références web utiles :
https ://docs.oracle.com/javase/tutorial/
https ://openclassrooms.com/courses/apprenez-a-programmer-en-java/
https ://fr.wikibooks.org/wiki/Programmation_Java/Introduction
http ://www.commentcamarche.net/
http ://www.devellopez.com
Rodrigue DJEUMEN Introduction au Génie Logiciel 2 / 45
Objets et Classes Approche Orientée Objet

L'Orientée Objet
L'approche orientée objet considère le logiciel comme une collection d'objets
dissociés et identiés, dénis par des propriétés. Une propriété est soit un
attribut (i.e. une donnée caractérisant l'état de l'objet), entité élémentaire
comportementale de l'objet.
La fonctionnalité du logiciel émerge alors de l'interaction entre les diérents
objets qui le constituent.
L'une des particularités de cette approche est qu'elle rapproche les données
et leurs traitements associés au sein d'un unique objet.
La diculté de cette modélisation consiste à créer une représentation
abstraite, sous forme d'objets, d'entités ayant une existence matérielle
(chien, voiture, ampoule, personne, ...) ou bien virtuelle (client, temps, ...).
La Conception Orientée Objet (COO) est la méthode qui conduit à des
architectures logicielles fondées sur les objets du système, plutôt que sur la
fonction qu'il est censé réaliser. Le langage de modélisation le plus utilisé
dans ce domaine est UML (Unied Modeling Language).

Rodrigue DJEUMEN Introduction au Génie Logiciel 3 / 45


Objets et Classes Notion d'objet

Objet
Un objet est caractérisé par les trois notions suivantes :
L'identité : L'objet possède une identité, qui permet de le distinguer des autres
objets, indépendamment de son état. On construit généralement cette identité
grâce à un identiant découlant naturellement du problème (par exemple un
produit pourra être repéré par un code, une voiture par un numéro de série, etc.)
Les attributs : Il s'agit des données caractérisant l'objet. Ce sont des variables
stockant des informations sur l'état de l'objet.
Les méthodes : Les méthodes d'un objet caractérisent son comportement,
c'est-à-dire l'ensemble des actions (appelées opérations) 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). De plus, les opérations sont
étroitement liées aux attributs, car leurs actions peuvent dépendre des valeurs des
attributs, ou bien les modier.

Rodrigue DJEUMEN Introduction au Génie Logiciel 4 / 45


Objets et Classes Notion de classe

Classe

Une classe est un concept abstrait représentant des éléments variés comme :
des éléments concrets (ex : des avions),
des éléments abstraits ( ex : des commandes),
des composants d'une application (ex : les boutons des boîtes de dialogue),
des structures informatiques (ex : des tables de hachage),
des éléments comportementaux (ex : des tâches), etc.
Tout système orienté objet est organisé autour des classes.
Dénition
Une classe est la description formelle d'un ensemble d'objets ayant une
sémantique et des propriétés communes.

Une classe dénit un jeu d'objets dotés de propriétés.

Rodrigue DJEUMEN Introduction au Génie Logiciel 5 / 45


Objets et Classes Notion de classe

Propriétes
Les propriétés d'un objet permettent de spécier son état et son comportement.
État d'un objet (attributs) : Ce sont les attributs qui décrivent l'état d'un objet.

On utilise les attributs pour des valeurs de données pures, dépourvues d'identité,
telles que les nombres et les chaînes de caractères. Les propriétés décrites par les
attributs prennent des valeurs lorsque la classe est instanciée.
Comportement d'un objet (comportement) : Les opérations décrivent les

éléments individuels d'un comportement que l'on peut invoquer. Ce sont des
fonctions qui peuvent prendre des valeurs en entrée et modier les attributs ou
produire des résultats.
Une opération est la spécication (i.e. déclaration) d'une méthode.
L'implémentation (i.e. dénition) d'une méthode est également appelée méthode.
Il y a donc une ambiguïté sur le terme méthode.

Rodrigue DJEUMEN Introduction au Génie Logiciel 6 / 45


Objets et Classes Notion de classe

Constructeur & Instanciation


A chaque classe est associée une méthode particulière, appelée méthode
constructeur. Cette méthode porte toujour le même nom que la classe, et sert à
créer les futurs objets de la classe. Elle peut être explicitement créée par le
programmeur, ou bien elle est implicitement créer par le langage. De toutes les
façons, cette méthode existe toujours.
Un objet est une instance d'une classe. C'est une entité discrète dotée d'une
identité, d'un état et d'un comportement que l'on peut invoquer. Les objets sont
des éléments individuels d'un système en cours d'exécution.

C'est opération l'instanciation qui donne véritablement naissance à un objet. Elle


se fait à l'aide de l'opérateur new et du constructeur de la classe
Rodrigue DJEUMEN Introduction au Génie Logiciel 7 / 45
Objets et Classes Notion de classe

Classe en java
Les deux classes précédentes, Compte et V éhicule se représentent de la
manière suivante :
class Compte{
//attributs
int solde;
int plancher;
//méthodes
void crediter(int m){}
boolean debiter(int m){}
}
class Vehicule{
//attributs
String immatriculation;
String marque;
String couleur;
//méthodes
void avancer(){}
void reculer(){}
}
Rodrigue DJEUMEN Introduction au Génie Logiciel 8 / 45
Objets et Classes Notion de classe

Objet en java
Une objet est représenté en java par les opérations de déclaration et
d'instanciation. Exemple, considérons des objets correspondants aux classes
Compte et Vehicule précédentes :
Les déclarations sont les suivantes :
Compte cpt;
Vehicule megane, golf, epsilon;
Les opérations d'instanciation
cpt = new Compte();
megane = new Vehicule();
golf = new Vehicule();
epsilon = new Vehicule();
Il est tout aussi possible de déclarer et d'instancier un objet à l'aide de
la même instruction :
Compte cpt = new Compte();
Compte()et Vehicule() sont les constructeurs de classes Compte et
Vehicule respectivement.
Rodrigue DJEUMEN Introduction au Génie Logiciel 9 / 45
Objets et Classes Notion de classe

Surcharge de méthodes
Dans une classe, une opération (même nom et même types de paramètres)
doit être unique.
Quand le nom d'une opération apparaît plusieurs fois avec des paramètres
diérents, on dit que l'opération est surchargée on parle aussi de surchage
de méthode.
En revanche, il est impossible que deux opérations ne se distinguent que par
leur valeur retournée.
L'intérêt de la surchage de méthodes réside dans le fait qu'elle permet de
dénir plusieurs méthodes, sous le même vocable mais manipulant des
données de type diérents. Comme illustration considérons :
class PrintStream{
...
void print(Object arg) {...}
void print(String arg) {...}
void print(char [] arg) {...}
...
}
print() peut être appelé avec un argument de n'importe quel type, la méthode
appropriée sera utilisée pour la gestion du problème initial.
Rodrigue DJEUMEN Introduction au Génie Logiciel 10 / 45
Objets et Classes L'opérateur  .  et le pointeur  this 

L'opérateur  . 

Il permet l'accès aux ressources et méthodes d'une instance, comme dans


la majorité des langages objets. Cependant, l'accès est soumis à plusieurs
règles, cela dépend du niveau de visibilité de la ressource souhaitée (voir
encapsulation).
SYNTAXE
nomObjet.nomAttribut
nomObjet.nomM éthode()
Illustration avec l'objet cpt crée précédement :
cpt.solde = 15000;
cpt.crediter(5000);

Rodrigue DJEUMEN Introduction au Génie Logiciel 11 / 45


Objets et Classes L'opérateur  .  et le pointeur  this 

Le pointeur  this 
this est le seul pointeur en java, il va permettre à une méthode d'accéder à la classe dans
laquelle elle est dénie.
Par défaut dans une méthode, java fait reférence à la variable de la classe.Cependant si
une variable dans cette même méthode porte le même nom, java va faire reférence à le
variable de la méthode (portée de variable), grâce à this on va pouvoir préciser la variable
que l'on souhaite.
class ExempleThis{
String s = Variable dela classe;

public static void main(String [] args){


new ExempleThis.appel();
}

void appel(){
System.out.println(s);
String s = Variable de la méthode;
System.out.println(s);
System.out.println(this.s);
}
}

Il en résulte à l'exécution, l'achage suivant :


Variable dela classe
Variable de la méthode
Variable dela classe
Rodrigue DJEUMEN Introduction au Génie Logiciel 12 / 45
Objets et Classes L'opérateur  .  et le pointeur  this 

Appel du contructeur this()

On peut aussi utiliser la méthode this() pour appeler un constructeur d'une


classe, cette méthode peut être appelée au début d'un constructeur. On l'utilise
dans un constructeur pour appeler un autre constructeur.
class ExempleThis{
int a;
ExempleThis(){
this(217);
}
ExempleThis(int b){
a = b;
}
}
Dans cet exemple this(217) va appeler le constructeur ExempleThis(int b).

Rodrigue DJEUMEN Introduction au Génie Logiciel 13 / 45


Encapsulation Dénition

Dénition
La protection de données ou encapsulation, est un mécanisme
consistant à rassembler les données et les méthodes au sein d'une
structure en cachant l'implémentation de l'objet, c'est-à-dire en
empêchant l'accès aux données par un autre moyen que les services
proposés. Ces services accessibles (oerts) aux utilisateurs de l'objet
dénissent ce que l'on appel l'interface de l'objet (sa vue externe).
L'encapsulation permet donc de garantir l'intégrité des données
contenues dans l'objet.
L'encapsulation permet de dénir des niveaux de visibilité des éléments
d'un conteneur. La visibilité déclare la possibilité pour un élément de
modélisation de référencer un élément qui se trouve dans un espace de
noms diérents de celui de l'élément qui établit la référence. Elle fait
partie de la relation entre un élément et le conteneur qui l'héberge, ce
dernier pouvant être un paquetage, une classe ou un autre espace de
noms.
Rodrigue DJEUMEN Introduction au Génie Logiciel 14 / 45
Encapsulation Niveaux de visibilité

Niveaux de visibilité

Il existe quatre visibilités prédénies.


public ou + : tout élément qui peut voir le conteneur peut
également voir l'élément indiqué.
protected ou # : seul un élément situé dans le conteneur ou un de
ses descendants peut voir l'élément indiqué.
private ou - : seul un élément situé dans le conteneur peut voir
l'élément.
package ou ~ ou rien : seul un élément déclaré dans le même
paquetage peut voir l'élément.

Rodrigue DJEUMEN Introduction au Génie Logiciel 15 / 45


Encapsulation Notations et exemples

Notations

La traduction correspondante en langage java qui en découle est :


public class UneClasse{
private int unAttributPrive;
protected int unAttributProtege;
public int unAttributPublic;
private void uneMethodePrivee();
protected void uneMethodeProtegee();
public void uneMethodePublique();
}
Rodrigue DJEUMEN Introduction au Génie Logiciel 16 / 45
Encapsulation Exemple d'application

La classe Point2D

class Point2D{
private int x;
private int y;
public Point2D(int x0, int y0){
x = x0;
y = y0;
}
public void deplacer(int dx, int dy){
x += dx;
y += dy;
}
public void afficher(){
System.out.println(position x: +x);
System.out.println(position y: +y);
}
}
Rodrigue DJEUMEN Introduction au Génie Logiciel 17 / 45
Encapsulation Exemple d'application

Exécution de la classe Point 2D


La classe Point2D implémentée ci-dessus, n'est pas encore exécutable ;
parce qu'elle n'implémente pas la fonction principale main. Il existe 2
approches pour exécuter une telle classe :
1ère approche : Ajout de la fonction dans la classe Point2D
class Point2D{
...
public static void main(String args[]){
}
}
2ème approche : création d'une nouvelle classe qui instancie un objet
Point2D
class Executable{
...
public static void main(String args[]){
Point 2D pt = ...
}
}
Rodrigue DJEUMEN Introduction au Génie Logiciel 18 / 45
Encapsulation Classes abstraites

Classe abstraite
Une classe abstraite est une classe qui ne peut pas être utilisée, pour
fabriquer des instances d'objets (non instanciable) ; elle sert uniquement de
modèle, que l'on pourra utiliser pour créer des classes plus spécialisées par
dérivation (héritage).
Le nom d'une classe abstraite s'écrit en italique, ou bien est précédé du
stéréotype << abstract >>.
Une classe abstraite peut posséder des membres privés ou des attributs
privés ou publics ; d'autre part, les méthodes peuvent faire l'objet d'une
implémentation, même si la méthode est purement virtuelle.

public abstract class UneClasse{


public abstract int uneMethodeAbstraite();
public void uneAutreMethodeNonAbstraite(){
...
}
}
Rodrigue DJEUMEN Introduction au Génie Logiciel 19 / 45
Encapsulation Exercices

Exercice I

On souhaite implémenter une classe point 3D comportant trois attributs


privés de type int, et les fonctions membres publiques suivantes :
point 3D(int x 0, int y 0, int z 0) méthode constructeur,
deplacer (int dx, int dy , int dz) pour déplacer le point dans l'espace ;
affiche() pour acher les attributs.
1 Ecrire le programme java correspondant.
2 proposer une fonction main pour exécuter cette classe.

Rodrigue DJEUMEN Introduction au Génie Logiciel 20 / 45


Encapsulation Exercices

Exercice II

Pour un compte, le solde est toujours supérieur ou égal au plancher.


1 Donner l'implémentation JAVA de ce cette classe, le chier sera crée sous le
nom Compte.java
2 Créer un chier Main.java déclarant un objet de la classe Compte, et
permettant de :
1 Initialiser le compte,
2 Consulter le solde,
3 Créditer le compte,
4 Débiter le compte si possible.
Rodrigue DJEUMEN Introduction au Génie Logiciel 21 / 45
Encapsulation Exercices

Exercice III

Implémenter les classes suivantes :

Ecrire une fonction main pour les tester

Rodrigue DJEUMEN Introduction au Génie Logiciel 22 / 45


Encapsulation Exercices

Exercice IV
Une pile d'entier est une structure de donnée dans laquelle, les informations sont
rangées telles que le dernier à être rangé est premier à sortir. ces informations
peuvent être conservées dans un tableau de taille xe. une classe PileEntier
comporte les méthodes suivantes :
PileEntier (int n) le constructeur allouant dynamiquement un emplacement
de n entiers,
void empiler (int p) ajoute l'ntier p sur la pile si possible,
int depile() fournit la valeur située au sommet de la pile, cela si possible,
boolean pleine() renvoie true si la pile est pleine et false sinon
boolean vide() renvoit true si la pile est vide et false sinon.
Travail à faire :

1 proposer une implémentation de la classe en java


2 proposer la fonction main pour exécuter cette classe suivant les convenances
de l'utilisateur.

Rodrigue DJEUMEN Introduction au Génie Logiciel 23 / 45


Héritage Généralisation et héritage

Généralisation et héritage
La généralisation décrit une relation entre une classe générale (classe de base ou
classe parent) et une classe spécialisée (sous-classe). La classe spécialisée est
intégralement cohérente avec la classe de base, mais comporte des informations
supplémentaires (attributs, opérations, associations). Un objet de la classe
spécialisée peut être utilisé partout où un objet de la classe de base est autorisé.
Dans la plupart des langages objet, cette relation de généralisation se traduit par le
concept d'héritage. On parle également de relation d'héritage. Ainsi, l'héritage
permet la classication des objets.

Le symbole utilisé pour la relation d'héritage ou de généralisation est une èche


avec un trait plein dont la pointe est un triangle fermé désignant le cas le plus
général voir le schéma ci-dessus.

Rodrigue DJEUMEN Introduction au Génie Logiciel 24 / 45


Héritage Propriétés de l'héritage

Propriétés
Les propriétés principales de l'héritage sont :
La classe lle possède toutes les propriétés des ses classes parents, mais elle
ne peut accéder aux propriétés privées de celle-ci.
Une classe lle peut redénir (même signature) une ou plusieurs méthodes
de la classe parent. Sauf indication contraire, un objet utilise les opérations
les plus spécialisées dans la hiérarchie des classes.
Une instance d'une classe peut être utilisée partout où une instance de sa
classe parent est attendue. Par exemple, en se basant sur le diagramme de la
gure ci-dessus, toute opération acceptant un objet d'une classe Animal doit
accepter un objet de la classe Chat.
Une classe peut avoir plusieurs parents, on parle alors d'héritage multiple (cf.
la classe Ornithorynque de la gure ci-dessus). Le langage C++ est un des
langages objet permettant son implémentation eective, le langage java ne
le permet pas.

Rodrigue DJEUMEN Introduction au Génie Logiciel 25 / 45


Héritage Implémentation java

Implémentation java

La relation d'héritage est implémentée en java à l'aide du mot clé extends , pour dire que
la classe dérivée est une extension de la classe de base. Le code java correspondant est :
//la super Classe

public class UneclasseDeBase{


public void uneMethode(){...}
}

//la classe fille

public class UneclasseDerivee extends UneClasseDeBase{


public void uneMethode(){...}
}

Rodrigue DJEUMEN Introduction au Génie Logiciel 26 / 45


Héritage L'opérateur super

super
Le mot clé super fait référence à la super-classe de la classe dans laquelle il
est appelé. Il permet d'invoquer le constructeur de la super-classe. super
doit être déclaré au tout début d'un constructeur d'une sous-classe ; cela lui
permet d'eectuer au moins les mêmes tâches que le constructeur de la
super-classe.
public class Personne{
public void Personne(String nom) {...}
}
public class Etudiant{
private int note;
public void Etudiant(String nom, int note) {
super(nom);
this.note = note;
...
}
}
Rodrigue DJEUMEN Introduction au Génie Logiciel 27 / 45
Héritage Héritage multiple

Héritage multiple
L'héritage multiple est mécanisme par lequel une sous-classe hérite des
propriétés de plus d'une super-classe .
L'héritage multiple est une extension au modèle d'héritage simple où l'on
autorise une classe à posséder plusieurs classes mères an de modéliser une
généralisation multiple.

Dans l'exemple ci-dessus, la classe Omnivore fait de l'héritage multiple, en


ayant 2 superclasses : carnivore et Herbivore.
Rodrigue DJEUMEN Introduction au Génie Logiciel 28 / 45
Héritage Héritage multiple

Interface

Une interface est une classe abstraite dont toutes les méthodes sont
abstraites et dont tous les attributs sont des constantes.
Liste de méthodes dont on donne seulement la signature
Représente un "contrat", ce qu'on attend d'un objet
Peut être implémentée par une ou plusieurs classes qui doivent donner
une implémentation pour chacune des méthodes annoncées (et
éventuellement d'autres).
Une classe peut implémenter plusieurs interfaces (permettant un
héritage multiple, en les séparant par des virgules après le mot
implements).
Toutes les méthodes d'une interface sont implicitement abstraites.
Une interface n'a pas de constructeurs
Une interface ne peut avoir de champs sauf si ceux-ci sont statiques.
Une interface peut être étendue par une ou plusieurs autre(s)
interface(s).

Rodrigue DJEUMEN Introduction au Génie Logiciel 29 / 45


Héritage Héritage multiple

Interface

public interface Vehicule {


void rouler();
void freiner();
}
Une interface peut posseder des constantes:
public interface NomInterface{
public static final CONST = 2;
...
}
Une classe java peut implémenter une interface, dans ce cas, elle doit dénir obligatoirement
toutes les méthodes de cet interface; illustration considérons la classe Velo , elle doit
implémenter l'interface Vehicule en plus d'hériter de la classe DeuxRoues .
public class Velo extends DeuxRoues implements Vehicule{
public void rouler(){...}
public void freiner(){...}
}
Rodrigue DJEUMEN Introduction au Génie Logiciel 30 / 45
Héritage Héritage multiple

implémentation de l'héritage multiple


Le langage java ne prévoit pas le concept d'héritage multiple.
Une possibilité de faire usage tout de même ce concept, est d'exploiter le
fait qu'une classe java puisse implémenter plusieurs interfaces.

public class Omnivore implements Carnivore, Herbivore{


...
}

Rodrigue DJEUMEN Introduction au Génie Logiciel 31 / 45


Héritage Exercices

Exercice V
Exercice Va :
Une personne est dénie par son nom, son prénom, sa date de naissance, sa
profession et son numéro de CNI. Proposer une implémentation de la classe
Personne en java.
Exercice Vb :
On veut modéliser un compte en banque, les informations primordiales sont :
le solde , le titulaire et le numéro de compte. Ecrire pour cela la classe
Compte correspondante (on reprendra les dénitions données en cours). Le
constructeur doit prendre 2 paramètres : le solde initial et le propriétaire du
compte (une Personne, voir exo Va).
1 Créer une classe CompteCredit, sous classe de Compte qui permet de
calculer les intérêts à partir d'un taux d'intérêt qui par défaut est de
5% (il y a deux constructeurs pour cette classe).
2 Créer une classe ComptePlacement sous classe de CompteCredit telle
qu'on ne puisse plus ajouter d'argent après sa création, le montant
étant donné à la création.
Rodrigue DJEUMEN Introduction au Génie Logiciel 32 / 45
Héritage Exercices

Exercice VI

Créer une classe Banque qui permet de manipuler une liste de Compte de tout
type. Cette classe doit fournir les méthodes :
boolean creerCompte(int type, int solde, Personne personne) où type est un
nombre qui représente un type de compte à créer :
0 = Compte , 1 = CompteCredit , 2 = ComptePlacement .
boolean supprimer Compte(int num)
Compte getCompte(int num)
Vector rechercheCompte(String nom) retourne la liste de compte des
personnes de nom nom
afficherSolde(String nom) ache tous les comptes (numéro et solde) des
personnes de nom nom.

Rodrigue DJEUMEN Introduction au Génie Logiciel 33 / 45


Héritage Exercices

Exercice VI - API de la classe Vector

Constructeur :
public Vector()
Méthodes :
public void add(Object o) -> ajoute o dans la liste
public boolean contains(Object o) -> true ssi o appartient à la liste
public Object get(int i) -> retourne l'élément à la position i
public int indexOf(Object o) -> retourne la position de o
public void insertElementAt(Object o, int i) -> insère o à la position i
public boolean isEmpty() -> true ssi la liste est vide
public void removeAll() -> vide la liste
public boolean remove(Object o) -> supprime o
public boolean remove(int i) -> supprime l'élément a la position i
public int size() ->retourne la taille de la liste

Rodrigue DJEUMEN Introduction au Génie Logiciel 34 / 45


Polymorphisme Dénition

Dénition du polymorphisme
Le nom de polymorphisme vient du grec et signie qui peut prendre
plusieurs formes. Cette caractéristique est un des concepts essentiels de la
programmation orientée objet. Alors que l'héritage concerne les classes (et
leur hiérarchie), le polymorphisme est relatif aux méthodes des objets.

On distingue généralement trois types de polymorphisme :


Le polymorphisme ad hoc (également surcharge ou overloading)
Le polymorphisme paramétrique (également généricité ou template)
Le polymorphisme d'héritage (également redénition, spécialisation
ou overriding)
Rodrigue DJEUMEN Introduction au Génie Logiciel 35 / 45
Polymorphisme ad hoc

Le polymorphisme ad hoc

Le polymorphisme ad hoc permet d'avoir des fonctions de même nom,


avec des fonctionnalités similaires, dans des classes sans aucun rapport
entre elles (si ce n'est bien sûr d'être des lles de la classe objet).
Par exemple, la classe complexe, la classe image et la classe lien
peuvent avoir chacune une fonction "acher". Cela permettra de ne
pas avoir à se soucier du type de l'objet que l'on a si on souhaite
l'acher à l'écran.
Le polymorphisme ad hoc permet ainsi de dénir des opérateurs dont
l'utilisation sera diérente selon le type des paramètres qui leur sont
passés. Il est donc possible par exemple de surcharger l'opérateur + et
de lui faire réaliser des actions diérentes selon qu'il s'agit d'une
opération entre deux entiers (addition) ou entre deux chaînes de
caractères (concaténation).

Rodrigue DJEUMEN Introduction au Génie Logiciel 36 / 45


Polymorphisme Le polymorphisme paramétrique

Le polymorphisme paramétrique
Le polymorphisme paramétrique, appelé généricité, représente la possibilité
de dénir plusieurs fonctions de même nom mais possédant des paramètres
diérents (en nombre et/ou en type). Le polymorphisme paramétrique rend
ainsi possible le choix automatique de la bonne méthode à adopter en
fonction du type de donnée passée en paramètre.
Ainsi, on peut par exemple dénir plusieurs méthodes homonymes addition()
eectuant une somme de valeurs.
La méthode int addition(int, int) pourra retourner la somme de deux
entiers
La méthode oat addition(oat, oat) pourra retourner la somme de
deux ottants
La méthode char addition(char, char) pourra dénir au gré de l'auteur
la somme de deux caractères
etc.
On appelle signature le nombre et le type (statique) des arguments d'une
fonction. C'est donc la signature d'une méthode qui détermine laquelle sera
appelée.
Rodrigue DJEUMEN Introduction au Génie Logiciel 37 / 45
Polymorphisme Le polymorphisme d'héritage

Le polymorphisme d'héritage

La possibilité de redénir une méthode dans des classes héritant d'une


classe de base s'appelle la spécialisation. Il est alors possible d'appeler
la méthode d'un objet sans se soucier de son type intrinsèque : il s'agit
du polymorphisme d'héritage. Ceci permet de faire abstraction des
détails des classes spécialisées d'une famille d'objet, en les masquant
par une interface commune (qui est la classe de base).
Imaginons un jeu d'échec comportant des objets roi , reine , fou ,
cavalier , tour et pion, héritant chacun de l'objet piece. La méthode
mouvement() pourra, grâce au polymorphisme d'héritage, eectuer le
mouvement approprié en fonction de la classe de l'objet référencé au
moment de l'appel. Cela permettra notamment au programme de dire
piece.mouvement sans avoir à se préoccuper de la classe de la pièce.

Rodrigue DJEUMEN Introduction au Génie Logiciel 38 / 45


La généricité Concept

Le concept
Considérons les deux imlémentations de tableau ci-dessous

La seule diérence entre TabInt et TabDouble, est le type des éléments du tableau.
A chaque nouveau type d'éléments à charger dans le tableau, on est obligé de
réimplémenter toute la structure du tableau.
La généricité consiste à créer une classe, en lui permettant de prendre en paramètre(s),
le(s) type(s) de ses éléments : on parle de classe paramétrée ou modèle de classe.

Rodrigue DJEUMEN Introduction au Génie Logiciel 39 / 45


La généricité Implémentation

Implémentation java
public class Tab <T>{
private ArrayList<T> tab;

Tab(int taille){
tab = new ArrayList<T> ();
}
Tab(){ }

public void addElement(int i, T v){


tab.add(i,v);
}

public T getElement(int i){


return tab.get(i);
}

public int getTaille(){


return tab.size();
}

public void copy(Tab<T> t){


tab.addAll(t.tab);
}

public void print(){

for(int i = 0; i < tab.size(); i++)


System.out.print(tab.get(i) + " ");
}
}
Rodrigue DJEUMEN Introduction au Génie Logiciel 40 / 45
La généricité Utilisation

Utilisation d'une classe paramétrée

Le type int étant primitif, n'est pas un objet et ne peut pas de ce fait
être un paramètre d'une classe paramétrée.
L'objet Integer est utilisé à la place du type int .
Instanciation d'une classe paramétrée

Tab<Integer> tab = new Tab<Integer>(5);

Accès aux méthodes (membres) de la classe

tab.addElement(0,20);
tab.addElement(1,21);
tab.addElement(2,22);
tab.addElement(3,23);
tab.addElement(4,24);
tab.print();

Rodrigue DJEUMEN Introduction au Génie Logiciel 41 / 45


Programmation structurée vs Orientée Objet Programmation structurée

Exemple de programme impératif

Rodrigue DJEUMEN Introduction au Génie Logiciel 42 / 45


Programmation structurée vs Orientée Objet Programmation structurée

Programmation structurée (impérative)


En programmation structurée ou programmation impérative tel que vu avec le
langage Pascal,c,... un programme est organisé en termes de données et d'une
suite de sous-programmes (procédures et fonctions) manipulant ces données ; tel
qu'illustré ci-dessous :

L'inconvenient de cette approche est que nalement le code est touu et


diférentes reférences faites sur les données, peuvent conduire à des eets de
bords.
Rodrigue DJEUMEN Introduction au Génie Logiciel 43 / 45
Programmation structurée vs Orientée Objet Programmation Orientée Objet

Exemple de programme O.O

Rodrigue DJEUMEN Introduction au Génie Logiciel 44 / 45


Programmation structurée vs Orientée Objet Programmation Orientée Objet

Programmation Orientée Objet (POO)


Les manquements décriés ci-dessus, sont corrigés en POO. On assiste à une
réorganisation du code pour obtenir des entités contenant les données et
fonctions sémantiquement proches.

Chaque entité est indépendant et autonome. Le programme équivalent à celui de


la programmation structurée précédente, est obtenu par la collaboration entre les
diérentes entité.
Rodrigue DJEUMEN Introduction au Génie Logiciel 45 / 45

Vous aimerez peut-être aussi