Académique Documents
Professionnel Documents
Culture Documents
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 1
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 2
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 3
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 4
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
CHAPITRE 1 : L’HERITAGE
1- La notion d’héritage
L’héritage est le second principe de base de la POO qui consiste à créer une nouvelle classe dite
classe dérivée à partir d’une classe qui existe déjà nommée classe de base.
D’une manière générale, un objet d’une classe dérivée accède aux membres publics de sa classe
de base, exactement comme s’ils étaient définis dans la classe dérivée elle-même.
Remarques
Une classe de base peut aussi se nommer une superclasse ou tout simplement
une classe. De même, une classe dérivée peut aussi se nommer une sous-classe.
Enfin, on peut parler d’héritage ou de dérivation, ou encore de sous classement.
Pour préciser qu’une classe de dérivée hérite d’une classe de base on utilise le
mot clé extends comme le montre la syntaxe ci-dessous
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 5
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
S’il est nécessaire d’initialiser certains champs de la classe de base et qu’ils sont
convenablement encapsulés, il faudra disposer de fonctions d’altération ou bien recourir à un
constructeur de la classe de base. Ainsi, le constructeur de dérivée pourrait :
Remarques
1- Il est possible d’appeler dans un constructeur un autre constructeur de la même classe,
en utilisant le mot-clé this comme nom de méthode. Comme celui effectué par super,
cet appel doit correspondre à la première instruction du constructeur. Dans ces
conditions, on voit qu’il n’est pas possible d’exploiter les deux possibilités en même
temps.
2- Une classe peut dériver d’une classe qui dérive elle-même d’une autre. L’appel par
super ne concerne que le constructeur de la classe de base du niveau immédiatement
supérieur.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 6
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Exercice d’application
4- Dérivations successives
En fait :
• D’une même classe on peut dérivées plusieurs classes différentes,
• Une classe dérivée peut, à son tour, servir de classe de base pour une autre.
B C
D E F G
D est dérivée de B, elle-même dérivée de A. On dit souvent que D dérive de A. On dit aussi que
D est une sous-classe de A ou que A est une superclasse de D. Parfois, on dit que D est une
descendante de A ou encore que A est une ascendante de D. Naturellement, D est aussi une
descendante de B. Lorsqu’on a besoin d’être plus précis, on dit alors que D est une descendante
directe de B.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 7
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Remarques
Une méthode de classe (static) ne peut pas être redéfinie dans une classe dérivée.
Les possibilités de redéfinition d’une méthode prendront tout leur intérêt lorsqu’elles
seront associées au polymorphisme.
Si une méthode d’une classe dérivée a la même signature qu’une méthode d’une classe
ascendante, les valeurs de retour des deux méthodes doivent être exactement de même
type (ou être covariantes),
Le droit d’accès de la méthode de la classe dérivée ne doit pas être moins élevé que
celui de la classe ascendante,
Exercice d’application
La classe Etudiant hérite de la classe Personne.
La classe Professeur hérite de la classe Employe et la classe Employe hérite de la classe
Personne.
Un Etudiant est une Personne.
Un Professeur est un Employe et un Employe est une Personne.
Développer les classes dans le package "exo.application.class".
Chaque classe doit contenir un constructeur d'initialisation.
Chaque classe doit redéfinir la méthode toString ().
Développer une classe d’application dans le package " exo.application.test", dans cette classe on
demande de créer :
Deux étudiants.
Deux employés.
Deux professeurs.
Afficher les informations de chaque personne.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 8
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
6- Le polymorphisme
Il s’agit d’un concept extrêmement puissant en P.O.O., qui complète l’héritage. On peut
caractériser le polymorphisme en disant qu’il permet de manipuler des objets sans en
connaître (tout à fait) le type.
Le polymorphisme en Java se traduit par :
• La compatibilité par affectation entre un type classe et un type ascendant,
• La ligature dynamique des méthodes.
}
}
}
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 9
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
A*
B C*
D* E F G
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 10
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Exercice d’application
1. Ecrire les classes nécessaires au fonctionnement du programme suivant :
7- La superclasse Object
Il existe une classe nommée Object dont dérive implicitement toute classe simple.
Ainsi, lorsque vous définissez une classe Alpha de cette manière :
class
Alpha
{ }
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 11
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 12
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 13
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 14
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 15
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
4. On veut développer un logiciel pour générer des sujets d'examen. Un programmeur a écrit la
classe suivante avant de démissionner. Vous devez continuer le développement.
class Question
{
String enonce;
int difficulte=50; // la difficulte varie de 0 à 100
Question(String e)
{ this.enonce = e; }
void setDifficulte(int d)
{ this.difficulte = d;}
int getDifficulte()
{ return this.difficulte; }
String getEnonce()
{ return this.enonce; }
On veut représenter les questions de QCM (Questionnaire à Choix Multiples). Chaque question
à choix multiple a, en plus d'un énoncé et d'une difficulté, un ensemble de réponses possibles,
chaque réponse ayant un énoncé et une valeur de vérité (une réponse peut être vraie ou fausse).
o Proposez la classe pour représenter les questions à choix multiples.
o Un sujet d'examen est une liste de questions (de QCM) avec un barème. Chaque question
du sujet a donc un nombre de points. Sans modifier les classes que vous avez écrites
avant, écrivez la classe objet pour représenter les sujets, avec en particulier une méthode
qui permet d'obtenir la difficulté moyenne du sujet. La difficulté moyenne est la somme
des difficultés des questions du sujet, divisée par le nombre de questions.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 16
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
abstract class A
{
.....
}
Dans une classe abstraite, on peut trouver classiquement des méthodes et des champs, dont
héritera toute classe dérivée. Mais on peut aussi trouver des méthodes dites abstraites, c’est
à- dire dont on ne fournit que la signature et le type de la valeur de retour. Par exemple :
abstract class A
{
public void f() { ..... } // f est definie dans A
public abstract void g(int n) ;
// g n’est pas definie dans A on n’en a fourni que l’en-tete
}
class B extends A
{
public void g(int n) { ..... } // ici, on définit g
.....
}
On pourra alors instancier un objet de type B par new B(...) et même affecter sa référence à
une variable de type A :
A a = new B(...) ; // OK
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 17
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
2- Quelques règles
Dès qu’une classe comporte une ou plusieurs méthodes abstraites, elle est abstraite, et
ce même si l’on n’indique pas le mot-clé abstract devant sa déclaration (ce qui reste
quand même vivement conseillé).
Une méthode abstraite doit obligatoirement être déclarée public, ce qui est logique
puisque sa vocation est d’être redéfinie dans une classe dérivée.
Dans l’en-tête d’une méthode déclarée abstraite, les noms d’arguments muets doivent
figurer (bien qu’ils ne servent à rien)
Une classe dérivée d’une classe abstraite n’est pas obligée de (ré)définir toutes les
méthodes abstraites de sa classe de base (elle peut même n’en redéfinir aucune). Dans
ce cas, elle reste simplement abstraite (il est quand même nécessaire de mentionner
abstract dans sa déclaration).
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 18
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Exercice d’application
1. Soit le diagramme de classe suivant :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 19
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Dans la définition d’une interface, on ne peut trouver que des en-têtes de méthodes ou des
constantes (nous reviendrons plus loin sur ce point). Les méthodes d’une interface sont
abstraites et publiques. Néanmoins, il n’est pas nécessaire de mentionner les mots-clés public
et abstract (on peut quand même le faire).
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 20
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
A doit définir les méthodes prévues dans l’interface I, c’est-à-dire f et g. Si cela n’est pas le cas,
on obtiendra une erreur de compilation.
public interface I1
{
void f ();
}
public interface I2
{
int h ();
}
class A implements I1, I2
{
// A doit obligatoirement définir les méthodes f et h de I1 et I2
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 21
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
interface I
{
void f (int n);
void g
();
}
class A {....}
class B extends A implements
I
{
// les méthodes f et g doivent soit être déjà définies dans A,
// soit définies dans B
}
4- Interfaces et constantes
L’essentiel du concept d’interface réside dans les en-têtes de méthodes qui y figurent. Mais une
interface peut aussi renfermer des constantes symboliques qui seront alors accessibles à
toutes les classes implémentant l’interface :
interface I
{
void f (int n);
void g
();
static final int MAXI = 100;
}
class A implements I
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 22
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Ces constantes sont automatiquement considérées comme si elles avaient été déclarées static
et final. Il doit s’agir obligatoirement d’expressions constantes.
Elles sont accessibles en dehors d’une classe implémentant l’interface. Par exemple, la
constante MAXI de l’interface I se notera simplement I. MAXI.
Remarque
On peut dire que, dans une interface, les méthodes et les constantes sont considérées de
manière opposée. En effet, les méthodes doivent être implémentées par la classe, tandis que
les constantes sont utilisables par la classe.
interface I1
{
void f (int n);
static final int MAXI = 100;
}
interface I2 extends I1
{
void g ();
static final int MINI = 20;
}
En fait, la définition de I2 est totalement équivalente à :
interface I2
{
void f (int n);
void g ();
static final int MAXI = 100;
static final int MINI = 20;
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 23
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
6- Conflits de noms
Considérons :
interface I1
{
void f (int n);
void g ();
}
interface I2
{
void f (float x);
void g ();
}
En ce qui concerne la méthode f, on voit que, pour implémenter I1 et I2, la classe A doit
simplement sur-définir convenablement la méthode f. En ce qui concerne la méthode g, en
revanche, il semble qu’un conflit de noms apparaisse. En fait, il n’en est rien puisque les deux
interfaces I1 et I2 définissent le même en-tête de méthode g ; il suffit donc que A définisse la
méthode requise (même si elle est demandée deux fois !).
Considérons maintenant :
interface I1
{
void f(int n) ;
void g() ;
}
interface I2
{
void f (float x);
int g ();
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 24
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Exercice d’application
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 25
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Elles disposent toutes d’une méthode de la forme xxxValue (xxx représentant le nom du type
primitif) qui permet de retrouver la valeur dans le type primitif correspondant :
Ces classes enveloppes sont finales (on ne peut pas créer de classes dérivées). Les six classes
à caractère numérique dérivent de la classe Number.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 26
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Dans la première affectation, la valeur entière 12 est convertie en objet de type Integer et sa
référence est affectée à nObj. De même, dans la troisième affectation (n = nObj), la valeur
entière encapsulée dans nObj est affectée à n.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 27
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
3.2- Limitations
Ces conversions ne sont toutefois possibles qu’entre un type enveloppe et son type primitif
correspondant. Ainsi, cette instruction est incorrecte :
Integer nObj ;
Double xObj = nObj ; // erreur de compilation
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 28
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
A a = new A ()
{
// champs et méthodes de la classe anonyme dérivée de A
} ;
class Alpha
{
public void affiche()
{
System.out.println ("Je suis un A") ;
}
}
//programme principale
public class Main
{
public static void main (String [] args)
{
Alpha a = new Alpha ()
{
public void affiche ()
{
System.out.println ("Je suis un anonyme derive de A") ;
}
} ;
a.affiche() ;
}
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 29
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Classe anonyme dérivée d’une autre classe (comme dans l’exemple précédent),
Classe anonyme implémentant une interface.
interface Affichable
{
public void affiche() ;
}
//programme principale
public class Main
{
public static void main (String [] args)
{
Affichable a = new Affichable ()
{
public void affiche ()
{
System.out.println ("Je suis un anonyme implementant Affichable") ;
}
} ;
a.affiche() ;
}
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 30
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
1.1 - Construction
Comme toute déclaration d’une variable objet, l’instruction : String ch ; déclare que ch est
destinée à contenir une référence à un objet de type String.
La classe String dispose de deux constructeurs, l’un sans argument créant une chaîne vide,
l’autre avec un argument de type String qui en crée une copie :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 31
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
String ch;
……………..
System.out.println (ch);
Par ailleurs, comme pour les types primitifs ou les autres types classes, il n’existe pas de
méthode standard permettant de lire une chaîne au clavier. Il faut utiliser les méthodes de
classe Scanner.
String ch = "bonjour";
int n = ch.length() ; // n contient 7
ch = "hello";
n = ch.length () ; // n contient 5
ch = "";
n = ch.length () ; // n contient 0
Remarque
Contrairement à ce qui se passait pour les tableaux où length désignait un champ, nous avons
bien affaire ici à une méthode. Les parenthèses à la suite de son nom sont donc indispensables.
String ch = "bonjour" ;
ch.charAt(0) correspond au caractère ’b’,
ch.charAt(2) correspond au caractère ’n’.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 32
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Il existe également une méthode lastIndexOf, sur-définie pour effectuer les mêmes
recherches que indexOf, mais en examinant la chaîne depuis sa fin.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 33
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 34
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
String ch = "anticonstitutionnellement";
String ch1 = ch.substring (5); // ch n’est pas modifiee
// ch1 contient "onstitutionnellement"
Soit tous les caractères compris entre deux positions données (la première
incluse, la seconde exclue) :
String ch = "anticonstitutionnellement" ;
String ch1 = ch.substring (4, 16) ; // ch n’est pas
modifiee
// ch1 contient "constitution"
String ch = "LanGaGE_3";
String ch1 = ch.toLowerCase() ; // ch1 contient "langage_3"
String ch2 = ch.toUpperCase() ; // ch2 contient "LANGAGE_3"
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 35
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
int n = 427 ;
String ch = String.valueOf(n) ; // fournit une chaine "427"
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 36
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
String ch = "bonjour" ;
char mot [] ; mot = ch.toCharArray() ;
// mot référence maintenant un tableau de 7 éléments
2- La classe StringBuffer
Java dispose d’une classe StringBuffer destinée elle aussi à la manipulation de chaînes, mais
dans laquelle les objets sont modifiables.
La classe StringBuffer dispose de fonctionnalités classiques mais elle n’a aucun lien d’héritage
avec String et ses méthodes ne portent pas toujours le même nom. On peut créer un objet de
type StringBuffer à partir d’un objet de type String. Il existe des méthodes :
De modification d’un caractère de rang donné : setCharAt,
D’accès à un caractère de rang donné : charAt,
D’ajout d’une chaîne en fin : la méthode append accepte des arguments de tout type
D’insertion d’une chaîne en un emplacement donné : insert,
De remplacement d’une partie par une chaîne donnée : replace,
De conversion de StringBuffer en String : toString.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 37
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 38
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Pour lancer une exception de ce type au sein de notre constructeur, nous fournirons à
l’instruction throw un objet de type ErreurDimension, par exemple :
class Rectangle
{
private int lon;
private int larg;
public Rectangle(int lon, int larg) throws ErreurDimension
{
if (lon < 0 || larg < 0)
throw new ErreurDimension() ; // lance une exception ErreurDimension
this.lon = lon ; this.larg = larg ;
}
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 39
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
catch (ErreurDimension e)
{
System.out.println ("Erreur de construction") ;
}
Remarque :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 40
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
class Rectangle
{
private int lon;
private int larg;
public Rectangle(int lon, int larg) throws ErreurDimension
{
if (lon < 0 || larg < 0)
throw new ErreurDimension() ; // lance une exception ErreurDimension
this.lon = lon ; this.larg = larg ;
}
}
}
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 41
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 42
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
//programme principale
public class Main
{
public static void main (String args[])
{
try
{ Rectangle a = new Rectangle (1, 4) ;
a.affiche() ;
a = new Rectangle (-3, 5) ;
a.affiche() ;
}
catch (ErreurDimension e)
{
System.out.println (e.getMessage()) ;
}
}
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 43
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
4- La clause throws
Java impose la règle suivante :
Cette règle concerne les exceptions que la méthode peut déclencher directement par
l’instruction throw, mais aussi toutes celles que peuvent déclencher avec toutes les méthodes
qu’elle appelle.
5- Le bloc finally
Java permet d’introduire, à la suite d’un bloc try, un bloc particulier d’instructions qui seront
toujours exécutées :
Soit après la fin du bloc try, si aucune exception n’a été déclenchée
Soit après le gestionnaire.
Ce bloc est introduit par le mot-clé finally et doit obligatoirement être placé après le dernier
gestionnaire.
Exercice d’application
1. La suite de Fibonacci est définie par :
U0 = 0
U1 = 1
Un = Un-1 + Un-2
Ecrire une fonction calculant le Nième nombre de la suite. L'entier saisi doit être impérativement
supérieur à 0. On demande donc de créer une classe d'exception adaptée à cette erreur pour la traiter.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 44
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Par exemple une liste chaînée LinkedList<String>, on ne pourra pas ajouter des éléments
De type Integer ou Rectangle.
Ordre lexicographique pour les chaînes, les noms de fichier ou la classe Character,
Ordre numérique pour les classes enveloppes numériques.
Si vos éléments sont des objets d’une classe E que vous êtes amené à définir, vous pouvez
toujours lui faire implémenter l’interface Comparable et définir la méthode :
Celle-ci doit comparer l’objet courant (this) à l’objet o reçu en argument et renvoyer un entier :
Négatif si l’on considère que l’objet courant est "inférieur" à l’objet o (au sens de l’ordre
qu’on veut définir),
Nul si l’on considère que l’objet courant est égal à l’objet o (il n’est ni inférieur, ni
supérieur),
Positif si l’on considère que l’objet courant est "supérieur" à l’objet o.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 45
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
3- Les itérateurs
Les itérateurs sont des objets qui permettent de "parcourir" un par un les différents éléments
d’une collection
Il existe deux sortes d’itérateurs :
À un instant donné, un itérateur indique une position courante désignant soit un élément
donné de la collection, soit la fin de la collection. Le premier appel de la méthode
iterator sur une collection donnée fournit comme position courante, le début de la
collection.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 46
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 47
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Remarque:
L’interface Iterator ne comporte pas de méthode d’ajout d’un élément à une position
donnée (c’est-à-dire entre deux éléments). Un tel ajout n’est réalisable que sur des
collections disposant d’informations permettant de localiser, non seulement l’élément
suivant, mais aussi l’élément précédent d’un élément donné. Ce ne sera le cas des
collections disposant d’itérateurs bidirectionnels.
Toute les collections disposent d’une méthode d’ajout d’un élément à un emplacement
(souvent sa fin) indépendant de la valeur d’un quelconque itérateur. C’est la démarche
la plus utilisée pour créer une collection.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 48
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 49
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
4- Construction
Comme on peut s’y attendre, toute classe collection C<E> dispose d’un constructeur sans
argument créant une collection vide :
Elle dispose également d’un constructeur recevant en argument une autre collection de
n’importe quelle classe implémentant l’interface Collection : liste, vecteur dynamique,
ensemble, pile, etc) :
De la même façon, toute collection dispose d’une méthode remove (element) qui recherche un
élément de valeur donnée et le supprime s’il existe en fournissant alors la valeur true. Cette
opération aura surtout un intérêt dans les cas des ensembles.
6- Opérations collectives
Toute collection c dispose des méthodes suivantes recevant en argument une autre collection
ca :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 50
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
7- Autres méthodes
La méthode size fournit la taille d’une collection, c’est-à-dire son nombre d’éléments.
La méthode toString est redéfinie dans les collections de manière à fournir une chaîne
représentant le contenu de la collection.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 51
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 52
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 53
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 54
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Exercice d’application
1. Définir une classe Salle avec les attributs suivants : id, code et libelle.
Définir les accesseurs aux différents attributs de la classe.
Définir un constructeur permettant d’initialiser les attributs d'un objet salle par des
valeurs saisies par l’utilisateur. Sachant que Id doit être auto-incrément.
Définir la méthode toString ( ) permettant d’afficher les informations de la salle en
cours.
Créer l'interface générique IDao avec les méthodes :
o boolean create ( T o) : Méthode permettant d'ajouter un objet o de type T.
o boolean delete (T o) : Méthode permettant de supprimer un objet o de type T.
o boolean update (T o) : Méthode permettant de modifier un objet o de type T.
o T findById (int id) : Méthode permettant de renvoyer un objet dont id est passé en
paramètre.
o List <T> findAll ( ) : Méthode permettant de renvoyer la liste des objets de type T.
Créer la classe SalleService qui implémente l'interface IDao. Dans cette classe les données
seront stockés dans une collection de type List.
Dans une classe de test :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 55
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
9.2- Construction
Comme toute collection, un vecteur dynamique peut être construit vide ou à partir d’une autre
collection c :
/* vecteur dynamique vide */
ArrayList <E> v1 = new ArrayList <E> ();
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 56
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Remarque :
La classe ArrayList implémente elle aussi l’interface List et, à ce titre, dispose d’un itérateur
bidirectionnel qu’on peut théoriquement utiliser pour parcourir les éléments d’un vecteur.
Toutefois, cette possibilité n’est pas recommandée avec les vecteurs dynamiques.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 57
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Exercice d’application
1. Définir une classe Stagiaire avec les attributs suivants : nom et prénom.
Définir un constructeur permettant d’initialiser les attributs d'un objet stagiaire par des
valeurs saisies par l’utilisateur.
Définir la méthode toString () permettant d’afficher les informations d'un stagiaire.
Écrire un programme testant la classe Stagiaire.
Déclarer une collection d'objet stagiaire.
Ajouter des stagiaires dans la collection.
Afficher la liste des stagiaires.
Modifier la classe de teste pour afficher la liste des stagiaires triée dans un ordre alphabétique
des noms, si des stagiaires ont le même nom, ils seront triés en ordre alphabétique des prénoms.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 58
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
NB :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 59
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 60
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
10.4.2- Principe
Dès que l’on cherche à utiliser des éléments d’un autre type objet, vous devrez définir
convenablement :
La méthode hashCode pour ordonnancer les éléments de l’ensemble dans une table de
hachage.
Exercice d’application
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 61
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
10.5.2- Principe
Définir :
La méthode compareTo : qui sert à définir l’appartenance d’un élément à l’ensemble,
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 62
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : bgrasbgras1982@gmail.com 63