Académique Documents
Professionnel Documents
Culture Documents
Chapitre 1 - 2 - 3 - 4 - 5 - 6
Chapitre 1 - 2 - 3 - 4 - 5 - 6
Objectifs :
essentiellement la reutilisabilite
Eléments de contenu :
✓ L'approche fonctionnelle
1
Chapitre 1 : DU FONCTIONNEL A L'Oriente OBJET
INTRODUCTION
Le domaine de conception et de developpement de logiciels cherche toujours a
ameliorer la productivite et la qualite du logiciel. En effet, un logiciel est dit de qualite s'il
repond aux criteres suivants :
− L'exactitude : aptitude d'un programme a fournir 1e resultat voulu et a repondre
ainsi aux specifications
− Robustesse : aptitude a bien reagir lorsque l'on s'ecarte des conditions normales
d’utilisation ;
− Extensibilite : facilite avec laquelle un programme pourra etre adapte pour
repondre a l'evolution des specifications ;
− Reutilisabilite : Le logiciel peut etre utilise integralement ou en partie dans de
nouvelles applications ;
− Compatibilite : C'est la possibilite de combiner le code du logiciel a d'autres codes
;
− Portabilite : C'est la facilite d'executer le logiciel dans differentes plates-formes ;
Efficace : Cela se traduit par la bonne utilisation des ressources (temps,
memoire, etc.)
− L'efficience : temps d'execution, taille memoire
Dans ce cadre, la Programmation Orientee Objet (POO) vient remedier aux insuffisances
de l'approche fonctionnelle et propose une approche qui consolide l'ensemble des
criteres precedemment cites.
I. L'APPROCHE FONCTIONNELLE
L'approche fonctionnelle (egalement qualifiee de methodes structurees) trouve son
origine dans les langages proceduraux, Elle met en evidence les fonctions a assurer et
proposent une approche hierarchique descendante et modulaire. L'approche
fonctionnelle dissocie 1le probleme de la representation des donnees, du probleme du
traitement de celles-ci. Sur la figure 1, les donnees du probleme sont representees sur la
gauche. Des fleches transversales materialisent la manipulation de ces donnees par des
sous- fonctions. Cet acces peut-etre direct (c'est parfois le cas quand les donnees sont
2
regroupees dans une base de donnees), ou peut etre realise par le passage des
parametres depuis le programme principal
a. ENCAPSULATION
b. OBJET
L'objet represente I ‘entite qui encapsule des donnees et des traitements coherents. Les
donnees sont appelees les attributs de l'objet, alors que les traitements sont appeles les
méthodes de l'objet. En plus, chaque objet possede une identification unique qui est
indiquee par une ou plusieurs references.
c. CLASSE
Une classe represente un modele d'objets. Elle decrit leur structure unique. Les objets
sont des variables d'un tel type de classe dont chacun possede ses propres valeurs.
d. HERITAGE
L 'heritage permet de definir une nouvelle classe a partir d'une classe existante. La
nouvelle classe comporte les memes proprietes de la classe de base, auxquelles
s'ajoutent des proprietes specifiques a cette nouvelle classe.
4
Chapitre 2 : ELEMENTS DE BASE DDU LANGAGE JAVA
Objectifs :
Eléments de contenu :
✓ Syntaxe de Java
✓ Les tableaux
5
Chapitre2 : ELEMENTS DE BASE DU LANGAGE JAVA
I. PRESENTATION DU LANGAGE JAVA
Le langage de programmation Java a mis au point par James Gosling chez, Sun
Microsystems au debut des annees 1990 et signifie cafe en argot americain. L’essor du
Web a incite les developpeurs a ameliorer ce langage, il a ete enrichi et est devenu tres
populaire entre autres pour la programmation.
Ce succes est du en partie au fait qu'il ne soit lie a aucune plate-forme. Concretement,
cela signifie que le programme compile peut etre execute sur tous les ordinateurs.
Cette independance distingue Java de la plupart des langages de programmations qui ont
recours a des compilateurs differents selon le systeme d'exploitation utilise. Par
exemple, un programme en C++ compile sur une machine UNIX ne pourra pas etre
execute sous Windows.
Le projet de depart de JAVA etait de proposer un langage de de programmation
independant de la machine executant le code. Pour cela, un langage machine appele
« BYTE CODE » etait definit. Ce langage est dedie au pseudo machine nommees
« Machine virtuelle JAVA (VM) ». La JVM est un programme ecrit pour chaque plateforme
particuliere (Solaris, Mac, Windows, ...) et qui connaît et execute le Byte Code JAVA.
7
IV. LA SYNTAXE DE JAVA
• Les commentaires : Il existe trois types de commentaires :
➢ //...... : commentaires sur ce qui reste de la ligne.
➢ /*.,. */ : Commentaire sur une ou plusieurs lignes.
➢ //*...*/ : commentaires utilises pat Javadoc sur une ou plusieurs lignes. Ces
Commentaires sont a inclure dans la documentation generee
automatiquement au format HTML par l'utilitaire Javadoc.
• Toutes les instructions se terminent par un ;
• Un bloc d'instructions est delimite par des accolades « {» et «} »
• Les blancs (espaces, tabulations et sauts de lignes) sont utilises entre les
elements du code source.
• Les identificateurs : un identifiant (de lasse, d'objet, de variable ...) commence par
une lettre, un trait de soulignement « _ » ou un signe dollar « $», les caracteres qui
suivent peuvent contenir des chiffres. Les identificateurs n'ont pas de longueurs
maximales et distinguent entre minuscule et majuscule.
• Convention d'écriture des identificateurs en JAVA :
− Ecrire les noms des classes avec un identificateur commençant par une
majuscule (Ex : class Personne).
− Les identificateurs de variables ou de fonctions commencent par une
minuscule (main, i, somme...).
− Si l'identificateur consiste en la juxtaposition de mots, chaque mot interne
commence par une majuscule (ex : tabPersonne).
− Les constantes symboliques sont ecrites entierement en majuscule. (Exemple :
final double PI = 3.14)
V. LES TYPES DE DONNEES PRIMITIFS (OU DE BASE)
Le tableau suivant, illustre les types primitifs (elementaires ou de base)
8
Remarque :
• Le type chaine de caractere (String) est defini comme une classe JA VA. 11 n'est pas un
type primitif.
• Il n'existe pas de conversion automatique du type boolean vers un autre type.
Exemple : int i =5 ;if (i) c'est une instruction incorrecte.
• Exemple d'APl Java : java.lang (http://java.sun.com/j2se/1.5.0/docs/apil)
9
Exemple :
byte j=1;
Int s=0;
Long i=40036650
float f=3.154;
double d=45.5 e35;
char c=’b’;
boolean b=true;
2) LES CONSTANTES
Une constante est declaree avec le modificateur "final". Il est obligatoire de l'initialiser
au moment de la declaration. Les identificateurs des constantes sont par convention en
majuscule.
Syntaxe
Exemple :
2) LES OPERATEURS
Types des operateurs Operateurs Types des operandes
Binaire +,-,*,/,%
Arithmetique Unaire --,++ Entiers et reels
Etendus +=, -=, *=, /=
Logique !, &&, || Boolean
De comparaison (le resultat est ==, !=, <, >, <=, >= Tout type(y compris
booleen) les references
d’objet)
10
3) CONVERSION DE TYPES : LE TRANSTYPAGE (GAST)
Le transtypage est necessaire quand il risque d'y avoir perte d'information, comme lors
de l’affectation d'un entier 1ong (64 bits) a un entier int (32 bits), ou d'un reel double
vers un reel float. On force alors le type, indiquant ainsi au compilateur qu'on est
conscient du probleme de risque de perte d’information : Les conversions implicites
autorisees en JAVA sont :
byte → short → int → long → float → double
char → int → long -> -> float → double
Les conversions pouvant provoquees une perte-de valeurs ne sont pas autorisees de
maniere implicite. Elles doivent etre demandees explicitement (exemple : float vers int.)
Exemple :
Int i,j ;
short s= 2;
float f = 1,5;
i= (int) f ; /* conversion explicite obligatoire avec perte (on s'interesse qu'a la partie
entiere du reel f*/
i=s ;// conversion implicite
f=i/2 ;/* conversion implicite par operation arithmetique*/
// soit la methode int meth (int arg)
j =objectName.meth(s) ; /* conversion lors d'un passage de parametre*/
VIII. LES STRUCTURES DE CONTROLE CONDITIONNELLES
1) LA STRUCTURE IF ... ELSE
Exemple :
public static void main(String[] args){
int a = 2 ;
boolean res = (a < 5) ? true : false ;
System.out.println(res) //true
}
11
2) LA STRUCTURE SWITCH
Syntaxe :
switch(expression){
case x: // bloc d'instructions
break;
case y: // bloc d'instructions
break;
default : // bloc d'instructions
}
3) LES STRUCTURES DE CONTROLE ITERATIVES
a) LA STRUCTURE DO...WHILE
Syntaхе :
do {
traitement ;
}while (expression booleenne) ;
b) LA STRUCTURE WHILE
Syntaxe :
while(expression booleenne){
Traitement; }
c) LA STRUCTURE FOR
Syntaxe :
for(initialisation; condition; increment){ //bloc d'instructions }
Exemple :
for(int i = 0; i <= 5; i++){ //bloc d'instructions }
IX. LES TABLEAUX
Les tableaux sont utilises pour stocker plusieurs valeurs dans une seule variable, au lieu
de declarer des variables distinctes pour chaque valeur.
1) DECLARATION
Syntaxe :
Type [] nom_ tableau
Ou bien
Type nom_ tableau [] ;
12
Exemple :
int[] mon_tableau ;
int mon_tableau2[];a
Remarque :
La declaration d'un tableau n'implique pas sa creation (reservation de memoire)
2) CREATION
Syntaxe :
nom_tableau= new type [taille] ;
Exemple:
tab=new int[20];.//creation de 20 elements dans le tableau
// On peut faire la declaration avec creation
int tab[]=new int [20] ;
// Une deuxieme forme de creation (creation avec initialisation)
int [ ]tab=(1,2,3,41,6);
Exemple2:
int [] tab;
tab=new int[5];
tab[0]=1;tab[1]=2;tab[2]=2;tab[3]=4;tab[4]= 7;
int s=0;
for(int i=0;i<tab,length;i++)
s+=tab[i] ;
System.out.println("la somme des elements du tableau est" +s ; )
Remarque :
• Pour les tableaux dont le type de donnee est primitif, chaque element est
initialise par la valeur nulle du type.
• Pour les tableaux dont les elements sont des objets, chaque element est initialise
a null. Les indices des tableaux commencent par 0.
• L'attribut length permet d'extraire la longueur d'un tableau.:
• Exemple : Soit l'instruction suivante : int N = tab.length ; //N=5
13
Chapitre 3 : CLASSES ET OBJETS EN JAVA
Objectifs :
− Savoir choisir les types et les protections adequats des attributs et des
methodes
Eléments de contenu :
✓ Les classes
✓ La notion de constructeur
✓ Les objets
14
Chapitre 3 : CLASSES ET OBJETS EN JAVA
I. CONCEPTS D'OBJET ET DE CLASSE
1) DEFINITION D'OBJET
On represente le monde qui nous entoure sous la forme d'un ensemble d'objets abstraits
qui interagissent entre eux tels que : table, chaise, personne…
De point de vue de celui qui l`utilise, un objet se comporte comme une boite noire (le
contenu est masque par des controles d`acces) qui offre un certain nombre de fonctions
(methodes)permettant d`interagir avec lui,
Les donnees d'un objet sont appelees dos attributs, Elles indiquent son etat a un instant
donne. Alors que les traitements qu'offre cet objet sont appeles des méthodes. Ils
definissent son comportement.
Exemple :
15
2) DEFINITION DE LA CLASSE
Une classe est le support de l'encapsulation : c'est un ensemble de donnees et de
fonctions regroupees dans une meme entite. Une classe est une description abstraite
d'un objet. Les fonctions qui operent sur les donnees sont appelees des methodes.
Instancier une classe consiste a creer un objet sur son modele. Entre classe et objet il y a,
en quelque sorte, le meme rapport qu'entre type et variable.
Remarque :
• Par convention (en Java, le nom de la classe commence par une lettre majuscule.
• Dans le cas des noms composes de plusieurs mots, pour chaque nouveau mot
commencer par une majuscule
II. LES CLASSES
1) DECLARATION D'UNE CLASSE
En JAVA, la syntaxe de declaration d'une classe est la suivante :
Syntaxe :
16
• public : modificateurs d'acces precisant la possibilite d'utilisation par toutes les
autres classes du meme package ou package differents
• Par défaut, la classe est visible qu'a l'interieur du package ou elle est definie.
• abstract et final :deux qualificateurs en relation avec le concept d'heritage
• extends : precise l’heritage de la classe NomSuperclasse
• implements: precise l’implementation d'une ou plusieurs interfaces par la classe
Remarque :
Il ne peut y avoir qu'une seule classe publique par fichier. Cependant, il est possible
d'avoir plusieurs classes dont une classe est publique.
Syntaxe :
17
3) DECLARATION DES METHODES
En JAVA, la syntaxe de declaration d'une methode est la suivante :
Syntaxe
[type_de_retour var_résultat;]
// instructions de la méthode
18
Remarque :
• Ce nom d'une methode commence par une minuscule, Dans le cas des noms de
methodes composes de plusieurs mots, le premier commence par une minuscule
et chaque nouveau mot commencer par une majuscule (exemple : setNom ())
• Le nom d'une variable locale est en minuscule (si non final)
• Une methode peut etre surchargée : definition, au sein d'une meme classe, de
plusieurs methodes portant le meme nom mais qui sont differentes au niveau des
parametres (type, ordre et nombre d'arguments)
• Modificateur : Les methodes permettant de changer la valeur de l'attribut d'un
objet, prefixees par set. Exemple : setCouleur, setMatricule
• Accesseur : Les methodes permettant de retourner la valeur d'un attribut, sont
generalement prefixees par get. Exemple : getCouleur, getMatricule.
Exemple :
{matricuie = m;}
{couleur=c ;}
{ return couleur ; }
19
4) ORGANISATION DES CLASSES EN PACKAGES
• Chaque definition de classe fait partir d'un package
• Un package est considere comme une bibliotheque de classes et permet de
regrouper un certain nombre de classes ayant, generalement, des roles proches.
• Les packages sont organises hierarchiquement a la maniere des repertoires.
• On peut creer des packages, ajouter des classes dans un package existant ou
utiliser des definitions de classes a partir de leurs packages.
• Le repertoire contenant vos classes simule un package.
• L'appartenance a des packages differents d'un ensemble de classes non publiques
les rend invisibles les uns aux autres.
III. LA NOTION DE CONSTRUCTEUR
Un constructeur est une méthode spéciale qui permet de creer des objets sur le
modele de la classe. Son role est d’initialiser les données membres (les attributs)de
la classe.
Nous citons dans ce qui suit les caracteristiques liees aux constructeurs :
20
Surcharge de constructeur :
Exemple :
class Voiture {
{ this(m, "gris"); }
public Voiture ()
{ this(0); }
matricule= v.matricule;
puissance=v.puissance ; }
{matricule = m;}
{ couleur = c; }
21
IV. LES OBJETS
1) REFERENCE D'UN OBJET
• Les references d'objets sont des variables de type classe qui permettent de
designer des Objets a la maniere des pointeurs en C (sans manipulation directe
d'adresse).
• La reference qui ne pointe sur aucun objet contient la valeur "null".
• Il est possible d'avoir a un instant t, plusieurs references pour designer un meme
objet.
• Les operateurs possibles sur les references d'objets sont : new, =, ==, ! = (si deux
references designent un meme objet) et instanceof.
2) INSTANCIATION D'UN OBJET
• La creation d'un objet se fait a l'aide de l'operateur new qui se charge de :
− Allouer l'espace memoire necessaire pour stocker les attributs de l'objet en
cours de construction.
− Appeler le constructeur de l'objet adequat pour initialiser les attributs. Le
choix du constructeur se fait en fonction des parametres passes.
− Retourner une reference sur l'objet cree.
Exemple :
Voiture v1;
22
3) UTILISATION D'UN OBJET
I. Aperçu sur les droits d'acces aux membres d'un objet
• La possibilite de creer un objet depend des restrictions d'utilisation de la classe
instancier.
• La manipulation des membres (attributs/methodes) d'un objet cree suit les
restrictions d'acces de ces membres precises dans la classe.
• On ne peut acceder (consulter ou modifier) a un attribut de l'exterieur de la
classe ou il a ete defini que si on a les droits d'acces suffisants.
• On ne peut invoquer (lancer l'execution ou encore appeler) une methode de
l'exterieur de la classe la ou elle a ete definie que si on a les droits d'acces
suffisants
• On ne s'interesse aux droits d'acces qu'au niveau de la definition des classes.
II. Manipulation des attributs
• Attribut d'objet : declare sans le mot reserve static, Une copie de cet attribut
existe dans chaque objet. L'existence d'un tel attribut depend de l'existence des
instances de la classe.
nomObjet.nomAttribut
• Attribut de classe : declare avec le mot reserve static. L'existence de cet attribut
ne depend pas des instances de la classe. S'il y a eu une instanciation, une seule
copie de cet attribut est partagee par toutes les instances.
23
III. Invocation des methodes
• Méthode d’objet : declaree sans le mot reserve static. Une copie de cette
methode est associee a chaque objet, L'execution d'une telle methode se fait
toujours pour un objet determine.
nomObjet.nomMethode ()
• Méthode de classe : declaree avec le mot reserve static. L'execution d'une telle
methode ne depend pas des objets de la classe,
nomClasse.nomMethode ()
Exemple:
Voiture v1;
v1.nouvMatricule(555);
24
4) REFERENCE SUR L'OBJET COURANT : « this »
• Le mot cle this represente une reference sur l'objet courant c'est-a-dire celui qui
possede la methode qui est entrain de s'executer.
• Il existe deux utilisations de this :
o Pour acceder aux attributs.
o Pour appeler un constructeur.
Exemple :
class Voiture {
matricule = "5578TN121"
couleur ="Gris" ; }
this.matricule = matricule;
this.couleur =couleur;
puissance=10 ; }
this.puissance-puissance ; }
7) Application
this.puissance = puissance;
this.carburant = carburant;
}
public int getPuissance() {
return puissance;
}
public void setPuissance(int puissance) {
this.puissance = puissance;
}
public String getCarburant() {
return carburant;
}
public void setCarburant(String carburant) {
this.carburant = carburant;
}
26
public class Voiture {
//attributs
private int matricule;
private String couleur;
private Moteur moteur;//attribut objet
// constructeur
public Voiture() {
this.couleur="rouge";
this.matricule=1237878;
this.moteur=new Moteur(5,"essence");
}
27
Chapitre I V : LES TABLEAUX ET LES CHAINES DE
CARACTERES
Objectifs :
length du tableau
(Vector, ArrayList)
Eléments de contenu :
✓ La classe String
28
Chapitre IV : LES TABLEAUX ET LES CHAINES DE
CARACTERES
I. LES TABLEAUX STATIQUES D'OBJETS
Un tableau declare a partir d'une classe, contient des references a des objets de la classe
en question. Chaque element du tableau represente une reference a un objet. Ce tableau
dispose d'une taille qui est fixee a la creation. Cette taille, une fois fixee, ne peut plus
varier, on parle de tableaux statiques.
Exemple :
Plusieurs methodes sont offertes dans les classes Vector et Arraylist. Pari lesquelles :
29
• Agir sur les elements de la liste :
➢ void add (Object o) : Ajoute l’objet o en fin de liste
➢ void add (int i, Object o) : Ajoute l'objet o a l'indice i
➢ void set (int i, Object o) :Remplace l’objet de l'indice i par l'objet o
➢ Object remove (int i) : Retire l'objet de l'indice i et le renvoie
➢ boolean remove (Object o) :Relire l’objet o de la liste et renvoie true ou false
si l’objet n'existe pas dans la liste.
➢ void clear () : vide completement la liste
• En plus des methodes deja citees, il existe d'autres methodes qui sont specifiques
a la classe Vector. Pari lesquelles :
➢ void addElement (Object obj) :ajoute obj a la fin du vecteur
➢ void insertElement (Object obj,int i) :insere obj a la position i.
➢ void setelementAt(Object obj, int i) : place obj dans la position i
➢ removeElementAt (int i):supprime l’element de la position i
➢ void removeAllElements () : supprime tous les elements
➢ object elementAt (int i):retourne une reference sur l'element de la position i
➢ boolean contains (Object obj) :teste si obj existe
➢ int indexof (Object obj) : retourne la position de obj (-1- si obj n'existe pas)
Exemple :
import java.util.ArrayList;
import java.util.Vector ;
public class TestVector {
public static void main(String args []){
Vector vec = new Vector ();
for (int i=0;i<10;i++) {
Integer element = new Integer (i);
vec.addElement (element);
System.out.println(vec);
}
String l = "java";
vec.insertElementAt (l,5);
System.out.println(vec);
System.out.println(vec.elementAt(2));
String s = "cours";
vec.setElementAt(s,3);
System.out.println(vec);
if(vec.contains (s))
System.out.println(s+ " existe dans vector");
30
System.out.println(vec.indexOf(s));
System.out.println(vec.size());
vec.removeElementAt(3);
System.out.println(vec);
ArrayList list=new ArrayList ();
list.add("un");
list.add("deux");
System.out.println(list);
System.out.println(list.size());
System.out.println (list.isEmpty());
}}
Exécution :
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, java, 5, 6, 7, 8, 9]
2
[0, 1, 2, cours, 4, java, 5, 6, 7, 8, 9]
cours existe dans vector
3
11
[0, 1, 2, 4, java, 5, 6, 7, 8, 9]
[un, deux]
2
false
III. LES CHAINES DE CARACYERES
1) TABLEAU DE CARACTERES
• Une chaîne de caractere peut etre contenue dans un tableau de caracteres. Chaque
caractere est place dans une case du tableau sans utiliser de caracteres speciaux
comme le ‘\0'.
• Cependant, cette solution n'offre pas la possibilite d'utiliser des services de
manipulation standard de chaînes de caracteres. Elle, est donc rarement utilisee.
Exemple:
class TableauChar{
public static void main (String args []){
char [] tableau;
tableau = new char [4];
tableau[0] = 'J';
tableau[1] = 'A';
tableau[2] = 'V';
tableau [3]='A';
System.out.println(tableau) ; //affiche JAVA
}
}
31
2) LA CLASSE String
• JAVA offre dans sa librairie (API) java.lang une classe appropriee aux chaines du
caracteres nommee String, tres riche en fonctionnalites.
• La classe String offre des objets constants de chaines. Cela signifie que le contenu
de I ‘objet String ne peut pas etre modifie, cependant la meme reference de l'objet
peut etre utilisee pour designer d’autres objets String.
• Les operateurs "+" et "+=" sont utilises pour realiser la concatenation des chaines
Exemple:
class TestString{
public static void main (String args []) {
String ch1,ch2;
ch1="programmation";
ch2=ch1;
System.out.println("ch1:" + ch1); //programmation
System.out.println("ch2 :" + ch2); //programmation
ch1+="en java";
System.out.println("ch1:" + ch1); //programmation en java
System.out.println("ch2 :"+ ch2); //programmation
String s1 = "bonjour";
String s2 = new String ("bonjour");
System.out.println(s1.equals(s2)); //retourne la valeur true
System.out.println(s1.indexOf('o',1)); //; retourne la valeur 1
System.out.println(s1.indexOf('o',2)); //; retourne la valeur 4
System.out.println(s1.indexOf('o',5)); //: retourne la valeur -1
System.out.println(s1.substring (1,4)); //donne "onj"
}
}
32
IV. APPLICATION
Le but de cette application est de gerer un dictionnaire qui contient un ensemble de
mots. Le dictionnaire permet en particulier d'ajouter, de supprimer et de rechercher des
mots. Le dictionnaire utilise la classe MotDictiornaire suivante :
33
1- Le dictionnaire possede un seul attribut (ListeMots) de type Vector, donner cet
attribut.
b- Rechercher « Fait »
c- Supprimer « Fait »
f- Rechercher « Fait »
g- Supprirner « Fait »
34
h- Supprimer tout
35
Chapitre V : HERITAGE ET POLYMORPHISME
Objectifs :
Eléments de contenu :
✓ Le concept de l'heritage
✓ Redefinition de methodes heritees
✓ Re-declaration des attributs
✓ Classes et methodes finales
✓ Visibilite des membres d'une classe heritee
✓ Reference d'objet
✓ Polymorphisme en Java
36
Chapitre V. HERITAGE ET POLYMORPHISME
I. CONCEPT DE L'HERITAGE
1) PRINCIPE DE BASE
On a parfois besoin de definir un type d'objets similaire a un type existant, avec quelques
proprietes supplementaires. L'heritage permet de definir ce nouveau type sans tout
reprogrammer : il suffit donc, de declarer que le nouveau type herite du precedent et on
se borne a rediger ses fonctionnalites supplementaires. L'heritage est un mecanisme
permettant de creer une nouvelle classe a partir d'une classe existante en lui proferant
ses proprietes et ses methodes.
2) INTERET
L'interet du concept d'heritage se resume dans les points suivants :
• L'heritage minimise l'ecriture du code en regroupant les caracteristiques
communes entre classes au sein d'une seule (la classe de base) sans duplication.
Donc, il assure une localisation facile, en un point unique, des sections de code.
• La rectification du code se fait dans des endroits uniques grace a la non-
repetition de description.
• L'extension ou l'ajout de nouvelles- classes est favorisee surtout en cas d'une
hierarchie de classes bien conçue.
• Il favorise le rapprochement de la modelisation des systemes d'informations aux
cas reels.
3) CONCEPT
Le concept de l'heritage specifie une relation de spécialisation/généralisation entre les
classes.
Exemple : Document : livre, revue, journal
Personne : etudiant, employe, chef
Lorsqu'une classe Employe herite d'une classe Personne :
• Employé possede toutes les caracteristiques de Personne et aussi, d'autres
caracteristiques qui lui sont specifiques
• Employé est une specialisation de Personne (un cas particulier)
• Personne est une generalisation de Employé (cas general)
• Employe est appelee classe derivee (fille)
• Personne est appelee classe de base (mere ou super-classe)
37
• Tout objet instancie d’Employe est considere, aussi comme un objet de type
Personne
• Un objet instancie de Personne peut ne pas etre de type Employe
• La representation graphique de la relation d'heritage entre les classes Personne
et Employé est comme suit :
Remarque :
➢ L'heritage est etudie par niveau (on ne s'interesse pas si la classe de base a ete,
elle-meme, derivee d’une autre classe)
➢ Une classe peut heriter de plusieurs classes : c'est l' heritage multiple (Exemple
VehiculeAmphibie herite de VehiculeMarin et VehiculeTeresstre).
➢ Une classe de base peut etre heritee par plusieurs classes (Exemple : Document :
livre, revu, journal)
II. L'HERITAGE EN JAVA
En JAVA, l'heritage est caracterise comme suit :
38
Exemple :
39
Exemple:
class Point{
public Point (float x, float y){
abscisse = x; ordonnee =y;}
}
class PointColore extends Point {
public PointColore (float x, float y, String c) {
super (x,y) ;
couleur = c;}
}
Le modificateur protected (reserve aux membres), s'il est utilise dans la classe de base
autorise la classe derivee a acceder directement a ses membres herites (acces reserves a
toutes les classes derivees a tous les niveaux, mais aussi aux classes du meme package).
Exemple:
class Point{
protected float abscisse;
private float ordonnee;
public float getOrdonnee (){
return ordonnee;}}
class PointColore extends Point {
private String couleur;
public String toString(){
return "Abscisse="+super.abscisse + "Ordonnée= "+super.
getOrdonnee ()+ "Couleur="+couleur ;}}
40
III. REDEFINITION DES METHODES HERITEES
La redefinition consiste a conserver I ‘entete de la methode et a proposer un code
different. Une methode heritee peut etre redefinie si sa version initiale n'est pas
satisfaisante pour la classe derivee
Remarque :
• Si une methode heritee est redefinie, 'est uniquement la nouvelle version qui fait
partie de la description de la classe derivee
• Si la methode definie au niveau de la classe derivee est de type different, ou de
parametres differents, alors il s`agit d'une nouvelle methode qui s'ajoute a celle
heritee de la classe de base.
• En cas d'une conservation totale de l'entete par fa methode de la classe derivee :
Le modificateur d`acces peut etre change selon la regle suivante : du plus
restreint au plus large.
• Une methode d'objet ne pout pas etre redefinie par une methode de classe
Exemple :
class Point{
protected float abscisse;
private float ordonnee;
public float getOrdonnee (){
return ordonnee;
}
public String toString() {
return "Point [abscisse=" + abscisse + ", ordonnee=" + ordonnee + "]";}
public void afficher (){
System.out.println(toString());
}
}
class PointColore extends Point {
private String couleur;
public String toString() //Redéfinition de la méthode de Object
{return ("Abscisse= "+super.abscisse+"Ordonnée= "+super.getOrdonnee()+
"Couleur="+couleur);}
public void afficher (){ super.afficher(); System.out.println("Couleur =
"+couleur);}
}
41
IV. REDECLARATION DES ATTRIBUTS
Il est possible de declarer deux attributs portant le meme nom dans la classe de base et
dans la classe derivee. Les types et les modificateurs d'acces peuvent aussi varier. Pour
distinguer l'attribut provenant de la classe de base,l'une des façons suivantes est utilisee:
Exemple :
class B {
protected int x, y;
public void afficher(){
System.out.println("x= "+x+" y= "+y);}
}
class HB extends B {
private double x;
private int y, z;
public HB (double a,int b,int c) {
super ();
x=a;y=b;z=c;}
public void a£ficher() {
System.out.println("x de base = " +super.x+
" y de base "+((B)this).y +" x= "+this.x+" y="+y+"z= "+z);
}
}
class THB{s
public static void main (String [] args) {
HB hb = new HB(6.5,7,13);
hb.afficher ();
}
}
42
V. CLASSES'ET METHODES FINALES
JAVA permet d'interdire l'heritage d'une classe en la declarant avec le modificateur final.
JAVA permet d’interdire aussi, la redefinition d’une methode (si elle est heritee) en la
declarant avec le modificateur final.
L'operateur de casting peut etre utilise pour convertir une reference declaree de type
classe de base en une reference de type classe derivee (pour un objet de la classe
derivee).
Exemple:
class TestpointColore{
public static void main (String [] args) {
PointColore pc;
Point p1,p2;
p1 = new PointColore(1,2,"Bleu");
pc= (PointColore) p1;
pc.afficher(); //pl.afficher()
p2=pc; // pl,p2 et pc désignent le même objet
}}
43
VIII. POLYMORPHISME EN JAVA
1) DEFINITION
Il s'agit d'invoquer (appeler) des methodes sans connaitre la nature de l'objet
correspondant. L'appel se fait a partir d'une reference du meme type que l'objet
correspondant ou de type sa classe de base (on peut remonter a tous les niveaux de ses
classes de base).
2) INTERETs
Le polymorphisme minimise l'ecriture du code et favorise la propriete d'extension des
applications. En effet, on peut creer de nouvelles sous-classes dont les instances
pourront etre prises en compte sans toucher aux programmes deja ecrits,
Les methodes polymorphes permettent de prevoir des operations similaires sur des
objets de natures differentes.
N.B. Les methodes final ne peuvent etre redefinies et ne sont donc pas polymorphes.
44
➢ Sinon, la recherche de la methode m() se poursuit dans la classe mere de C, puis
dans la classe mere de cette classe mere, et ainsi de suite, jusqu'a trouver la
definition d'une methode m() qui est alors executee
Exemple :
import java.util.Scanner;
class Personne{
public void quiEtesVous() {
System.out.println("personne");}}
class Etudiant extends Personne {
public void quiEtesVous() {
System.out.println("étudiant");}}
class Employe extends Personne{
public void quiEtesVous() {
System.out.println("employé");}}
class Polymorphisme{
public static void main (String [] args) {
Personne p;
int x;
System.out.println("Taper 1,2 ou 3");
Scanner sc=new Scanner(System.in);
x= sc.nextInt();
if(x ==1)
p= new Personne();
else
if (x== 2)
p= new Etudiant();
else
p=new Employe();
p.quiEtesVous();//appel polymorphe
}
}
45
IX. Application
On veut gerer une bibliotheque de sons pouvant etre soit sous la forme de fichiers WAV,
soit sous la forme de fichiers MP3. Un son se caracterise par un artiste, un album, un
titre, un numero qui repere sa position dans l'album, sa longueur en seconde et sa
frequence d'echantillonnage en khz. Un son WAV comporte en plus un nombre de bits
pour sa qualite d'echantillonnage. Un son MP3 comporte en plus un debit en kbps et 2
drapeaux (booleen) pour savoir s'il est code en VBR et si la stereo est jointe
1- Implementer les differentes classes,
2- Implementer la classe bibliotheque qui contient un tableau de sons et qui permet les
operations d`ajout, de suppression, de recherche (selon 1e titre) et d'affichage des sons
contenus,
3- Implementer la classe TestBibliotheque pour tester les differentes classes.
46
Chapitre VI : LES CLASSES ABSTRAITES ET LES
INTERFACES
Objectifs :
probleme donne
donne
Eléments de contenu :
47
I. CLASSES ABSTRAITES
1) IDEE DE BASE
Le mecanisme des classes abstraites permet de definir des comportements (methodes)
dont l'implementation est absente. En effet, l'implementation depend fortement de sous-
classes qui vont heriter de la super-classe abstraite. Cette implementation se fait donc
dans les sous-classes. Ainsi, on a l'assurance que les sous-classes respecteront le contrat
defini par la classe mere abstraite.
Exemple :
Soit la classe ‘Humain’, a partir de laquelle derivent la classe 'Homme' et la classe
‘Femme’. En toute logique, ‘Homme' et 'Femme' sont instanciables (les objets crees ont
une existence en soi), mais la classe 'Humain' sera declaree abstraite car un objet
'Humain' n'existe pas en tant que tel, puisqu'il manque l'information sur le sexe.
Ici, la classe ‘Humain' servira a implementer des methodes qui seront utilisees a la fois
pour ‘Homme' et pour 'Femme', notamment la methode getAget(), getDateNaissance()...
2) DEFINITION
• Une classe abstraite est declaree avec le mot cle abstract
• Une classe abstraite ne peut jamais etre instanciee par l'operateur new
• On peut declarer des references de type classe abstraite
• La methode abstraite est aussi declaree avec le mot cle abstract.
Exemple :
abstract class FormeGeometrique{
Point orig ; //point origine de la forme géométrique
FormeGeometrique (Point o) {orig= new Point (o);}
abstract double perimetre(); // une méthodes abstraite
}
class Cercle extends FormeGeometrique{
double rayon ;
Cercle(Point o) { super(o); }
public double perimetre() { return 2*3.14*rayon;}
}
class Rectangle extends FormeGeometrique{
double longueur , largeur;
Rectangle(Point o) { super(o); }
public double perimetre() { return 2* (longueur+ largeur) ;}
}
class polygone extends FormeGeometrique{
double a,b,c,d,e;
polygone(Point o) { super(o); }
48
3) PROPRIETES
• Par opposition a une classe concrete, une classe abstraite ne peut pas etre
instancie
• Une classe abstraite sert a definir un cadre general (type abstrait), regroupant des
caracteristiques communes aux sous classes qui en seront derivees.
• Une methode d'une classe abstraite peut ne pas avoir de code (abstraite) si le
niveau d'abstraction de la classe ne permet pas de definir un code reutilisable par
les classes derivees.
• Une classe est definie abstraite par obligation (presence d'au moins une methode
abstraite) ou par choix pour interdire la creation d'objet.
• Une classe abstraite est une classe ayant au moins une methode abstraite : donc
elle peut contenir un melange de methodes abstraites et de methodes concretes
(methodes normales contenant des instructions).
• Une classe derivee d'une classe abstraite ne redefinissant pas toutes les methodes
abstraites est elle-meme abstraite.
II. LES INTERFACES
1) DEFINITION
Comparee a une classe, une interface correspond a un type comportant uniquement des
methodes abstraites et des constantes statiques (on n'a pas a preciser les proprietes
abstract, final et static).
2) PROPRIETE
Une interface est une forme particuliere de classe comportant uniquement des
proprietes abstraites.
Le concept d'interface est propose par le langage JAVA pour resoudre le probleme de
l'heritage multiple.
Une interface peut heriter de plusieurs interfaces en meme temps en utilisant le mot cle
extends (heritage multiple)
interface NomInterface extends Interfacel,…, InterfaceN
49
• Les interfaces ne sont pas instanciables
• Les interfaces en JAVA permettent de :
o Regrouper des proprietes qui peuvent etre transferees aux classes par le
mecanisme d'implementation.
o Faire du polymorphisme avec des objets dont les classes n'appartiennent
pas a la meme hierarchie d'heritage (l'interface joue le role de la classe
mere)
• Une interface est definie d'une maniere similaire a une classe mais en utilisant le
mot cle Interface.
• La syntaxe de declaration d'une interface est la suivante :
interface NomInterface {……..}
• La syntaxe d'implementation d'une interface est la suivante :
NomClasse implements NomInterface {…….}
Exemple:
50
public interface InterfaceCalcul {
}
}
51
III. Application
Soit le diagramme de classes suivant :
52