Professional Documents
Culture Documents
Programmation Orient e Objet en Java SMI S5 2014 2015
Programmation Orient e Objet en Java SMI S5 2014 2015
Filières
Sciences Mathématiques et Informatique
(Semestre 5)
EN LANGAGE JAVA
Par
Introduction ............................................................................................................................................. 1
Annexe A ................................................................................................................................................ 14
IV : Le compilateur............................................................................................................................... 20
Annexe B ................................................................................................................................................ 22
Annexe C ................................................................................................................................................ 30
Annexe D ................................................................................................................................................ 34
Annexe E ................................................................................................................................................ 38
I.5. Ajout des fonctionnalités à l'application en traitant l’événement d’action du bouton Convertir .. 45
Introduction
Java est un langage de programmation orienté objet ressemblant au langage C++. Il a été développé
en 1991 par Sun Microsystems dans le cadre Green, groupe de recherche spécialisé dans le
développement de logiciels conçus pour contrôler des appareils électroniques.
Le but de Java à l’époque était de constituer un langage de programmation pouvant être intégré dans
les appareils électroménagers afin de pouvoir les contrôler, de les rendre interactifs, et surtout de
permettre une communication entre les appareils. Le groupe Green visait à créer une télécommande
universelle (Star 7) comprenant un système d’exploitation capable de gérer l’ensemble des appareils
électroménagers de la maison.
Au début le langage fut d’abord nommé Oak (Oak signifiant chêne), mais le groupe Green
s’aperçut ensuite que ce nom était déjà utilisé en informatique. Pour cette raison, le langage fut
rebaptisé Java en l’honneur du café (en anglais courant, Java signifie café), boisson préférée des
programmeurs, dont une partie de production provient de l’île indonésienne Java.
En 1994, l’équipe décida de mettre au point un navigateur (nommé HotJava) intégrant Java et
capable de faire fonctionner des applets, c’est-à-dire des petites applications Java qui s’exécutent
dans un navigateur Web.
En 1995, le langage de programmation Java a commencé à être connu, quand Sun Microsystems a
vendu une licence d’utilisation à la société Netscape l’autorisant à utiliser le langage Java dans son
navigateur Netscape.
- Portable ou multi plate-forme : un programme Java peut fonctionner de la même manière sur
des machines et des systèmes d’exploitation différents sans aucune modification (Windows,
Macintosh et sur la plupart des versions d’UNIX, dont Solaris et Linux, etc).
- Adapté à la conception de logiciels écrits pour l’Internet : il permet d’écrire des programmes
capables de fonctionner sur les pages du Word Wide Web. Ces programmes Java appelés
applets se présentent comme des images sur une page Web.
Dans Java, toutes les caractéristiques du langage C++ qui peuvent induire à des erreurs de
programmation ont été supprimées :
1. Java ne dispose pas de pointeurs ni d’arithmétique sur les pointeurs, car ces fonctions sont
souvent source d’erreur dans des programmes ;
4. Java ne permet pas l’héritage multiple puisqu’il ne dispose que de l’héritage simple. L’héritage
multiple rend les langages de programmation difficile à apprendre et à utiliser ;
5. Java permet une meilleure gestion des erreurs (ou des exceptions) ;
6. Les chaînes et les tableaux sont représentés par des objets faisant partie intégrante du langage.
I. LA PROGRAMMATION STRUCTUREE
La programmation structurée (ou classique) sépare les données et les traitements. Elle repose sur ce
qu’on nomme l’équation de Wirth :
Structures de données + Algorithmes = Programmes
Cette séparation :
- Rend les données vulnérables à des accès : elles ne sont pas protégées. Si des modifications
erronées des données sont effectuées, l’intégrité de ces données peut être altérée ;
- Rend difficile l’extensibilité et la réutilisation de logiciels ou produits existants.
La Programmation Orientée Objet (P.O.O) est fondée sur le concept d’objet. Un objet est une
association des données et des traitements appelés méthodes agissant sur ces données :
Un objet constitue une instance (ou variable) d’une classe. Le mécanisme qui permet de créer des
objets à partir des classes s’appelle l’instanciation. Ce mécanisme permet non seulement de créer
l’objet mais aussi de l’initialiser.
Une classe constitue une description (ou un model) d’un ensemble d’objets ayant une même
structure de données et disposant des mêmes méthodes.
Classe ensemble (ou type de données)
Objet élément de la classe (ou variable, on dit aussi instance de la classe)
Les concepts principaux dans la P.O.O pure sont : l’encapsulation, la composition, le
polymorphisme, la généricité et l’héritage. En plus de ces cinq concepts, le langage Java ajoute
deux autres concepts : l’interface et le package.
II.1. L'encapsulation
En P.O.O pure, les données sont encapsulées, ce qui signifie qu’il n’est pas possible d’agir
directement sur les données d’un objet, il faut obligatoirement passer par les méthodes de l’objet.
L’encapsulation de données permet de les protéger, elle constitue un moyen sûr pour préserver
l’intégrité des données. En effet, les contraintes d’intégrité (ou domaines de validité des données)
sont programmées et contrôlés dans les méthodes et il est obligatoire de passer par ces méthodes
pour modifier les données.
3 Réalisé par M. L. Ben Maâti
L’encapsulation permet la modularité et facilite la réutilisation de logiciel, en effet, les données et
les méthodes sont regroupées dans une même classe. De ce fait, une classe est considérée comme un
module indépendant qu’on peut réutiliser dans un nouveau programme.
II.2. La composition
La composition signifie que les objets peuvent être inclus les un dans les autres. Les objets sont
organisés selon la relation composé de.
Exemple :
Point
Un point est un objet qui contient les coordonnées
(x,y) d'un point dans un plan. x : réel
y : réel
Un cercle est un objet qui contient le rayon du
cercle et un point indiquant le centre du cercle. : Composition
On dit, qu'un objet cercle est composé d'un objet point Cercle
et d'un rayon du type primitif réel qui n'est pas un rayon : réel
objet. centre : Point
II.3. Le polymorphisme
C'est la faculté d'une méthode à s'appliquer à des objets de types différents. Grâce au
polymorphisme, il est possible de définir plusieurs méthodes différentes qui portent le même nom,
la différence entre ces méthodes se fait par rapport au nombre et aux types des paramètres.
Exemples : Définition de la classe Point représentant des point dans un plan admettant un
constructeur surchargé (ou polymorphe, c'est-à-dire, qui admet plusieurs formes différentes). Le
constructeur a pour rôle d'initialiser les objets Point juste après leurs créations par l'opérateur new.
public class Point // Définition de la classe Point pour représenter des points dans un plan.
{
private float x, y; // Les composants d'un point dans un plan. Les attributs x et y sont encpsulée
public Point() // Constructeur sans paramètres : Initialise l'objet Point (0,0) origine du repère.
{
// Initialise l'abscisse et l'ordonnée de l'objet Point this qui fait appel à ce constructeur par 0.
this.x = this.y = 0;
}
public Point(float abs) // Constructeur à un paramètre : Initialise l'objet Point (abs,0).
{
// Initialise l'objet Point this qui fait appel à ce constructeur par (abs,0).
this.x = abs;
this.y = 0;
}
II.4. La généricité
La généricité (ou types paramétrés) permet d'introduire des paramètres (ou variables) de types
dans la définition d'une méthode ou d'une classe.
La généricité facilite la réutilisation de composants logiciels, elle permet aussi l’écriture du code
indépendamment des types spécifiques d'objets.
II.5. L’héritage
Exemple
Une classe Personne peut contenir le nom, le prénom, l'adresse et la date de naissance d'une
personne.
A partir de la classe Personne, on peut par exemple créer deux nouvelles classes : Etudiant et
Employé.
5 Réalisé par M. L. Ben Maâti
1. La classe Etudiant hérite les propriétés de la classe Personne auxquelles on ajoute, par exemple,
le numéro CNE (Code National d'Etudiant) et une indication si l'étudiant est boursier ou pas.
2. La classe Employé hérite aussi les propriétés de la classe Personne auxquelles on ajoute, par
exemple, le numéro et le salaire d'employé.
On dit, un étudiant est une personne et un employé est aussi une personne.
Date
jour : entier
mois : entier
année : entier
Personne
nom : chaîne : Composition
prénom : chaîne : Héritage
adresse : chaine
datenais : Date
Etudiant Employé
CNE : chaîne NEMP : entier
boursier : booléen salaire : réel
On constate aussi d'après le schéma qu'un objet de la classe Personne est composé d'un objet de la
classe Date.
II.6. L’interface
Une interface regroupe un ensemble de méthodes (ou comportements) dite abstraites, c’est-à-dire,
non implémentées. Lorsqu’une classe implémente une interface, cela indique que la classe se dote
d'un comportement supplémentaire par rapport à son comportement et à celui dont elle hérite déjà de
ses superclasses (classes dont elle dérive par héritage, c'est-à-dire, sa superclasse immédiate, la
superclasse de la superclasse, …, etc).
Certains langages de P.O.O (comme par exemple, le C++) permettent l'héritage multiple,
c'est-à-dire, qu'une classe peut hériter les fonctionnalités de plusieurs superclasses. Dans ces
langages, une classe peut donc posséder plusieurs superclasses.
En Java, l'héritage multiple n'est pas permis, en effet, pour des raisons de simplicité, Java ne permet
d'utiliser que de l'héritage simple. Dans ce cas, une classe ne peut hériter les fonctionnalités que
d'une seule superclasse.
L'héritage simple peut être restrictif, surtout quand-on veut construire une classe qui doit hériter les
fonctionnalités de plusieurs classes. Pour résoudre ce problème, Java propose d'utiliser des
interfaces, en effet, grâce aux interfaces, une classe peut combiner les comportements issus de
plusieurs interfaces.
En Java :
1. Les classes qui implémentent l'interface Cloneable sont clonables. Les objets de ces classes sont
donc clonables, c'est-à-dire, duplicables à l'aide d'une méthode appelée clone.
En particulier, la classe Date du package java.util représentant des dates et des heures
implémente l'interface Cloneable. Les objets Date sont donc clonables.
2. Les classes qui implémentent l'interface Comparable<T> (du package java.lang, T est un
paramètre du type de données quelconque) sont comparables, c'est-à-dire, elles sont munies d'une
relation d'ordre permettant de comparer leurs objets. Cette interface contient une seule méthode
appelée compareTo qui permet de comparer des objets.
En particulier, la classe String du package java.lang représentant des chaînes de caractères en
Java implémente l'interface Comparable<String>. Les objets du type String sont donc
comparables, car cette classe est munie de l'ordre alphabétique permettant de comparer des objets
String.
II.7. Le package
Un package permet de regrouper des classes et des interfaces. De la même manière que les classes
qui permettent d'encapsuler les données, les package peuvent être utilisés pour encapsuler des
classes. Mais un package doit obligatoirement avoir au moins une classe public accessible depuis
l'extérieur du package.
Les packages servent donc à protéger les classes, les donnés et les méthodes. Ils constituent des
modules indépendants qu'il est facile d'intégrer et de réutiliser dans un nouveau programme.
LE LANGAGE JAVA
I. APPLICATIONS ET APPLETS
Un programme Java se compose d’un ou de plusieurs fichiers sources. Chaque fichier source peut
contenir dans l’ordre :
1. Une déclaration de package (en français, on dit paquetage) à l’aide de l’instruction package
(facultatif) ;
2. Une ou plusieurs importation(s) de package(s) à l’aide de l’instruction import (facultatif) ;
3. Une ou plusieurs déclarations de classes : au moins une est obligatoire, celle qui déclenche
l’exécution du programme Java.
La méthode main admet un paramètre, qui est un tableau de chaînes de caractères. Ce paramètre est
utilisé pour les arguments de la ligne de commande du programme.
Pour créer une sous-classe de la classe Applet, il faut utiliser la syntaxe suivante :
public class NomApplet extends java.applet.Applet
{
// Corps de l’applet.
}
public : signifie que la sous-classe NomApplet doit être accessible de toutes les autres classes
situées dans et en dehors de son package. Toutes les applets Java doivent être publiques.
extends : signifie que la classe NomApplet est une sous classe de la classe java.applet.Applet.
NomApplet est un nom quelconque attribué à l’applet. Pour qu’une applet fonctionne, elle doit être
incorporée dans une page Web à l’aide des balise <applet> et </applet> du langage HTML.
Exemple : Une applet Java qui affiche une chaîne de caractères dans une page Web.
- Les fichiers source des applications et des applets java doivent porter l’extension .java.
- Chaque fichier source ne peut contenir qu'une seule classe publique, mais il peut aussi contenir
d'autres classes non publiques. Le nom de chacun de ces fichiers doit être le même que celui de la
classe publique qu'il contient.
Si un ficher source Java ne contient que des classes non publiques, dans ce cas, le nom de ce
fichier peut être quelconque.
- En Java, il faut respecter la casse (y compris entre le nom du fichier et le nom de la classe
publique), car, les minuscules sont différentes des majuscules.
- Pour compiler un programme Java avec le JDK (Java Development Kit), il faut utiliser l’outil de
ligne de commande javac, qui est le compilateur Java.
Un fichier source java portant le même nom que celui de la classe publique qu'il contient et ayant
l'extension .java est compilé en bytecode (code octete ou pseudo-code ou code intermédiaire)
dans un fichier portant le même nom que celui du fichier source et de la classe publique mais
avec l’extension .class.
Si le fichier source comporte la définition de plusieurs classes, le compilateur produira alors, pour
chaque classe définie dans le fichier source, un fichier de bytecode de même nom que la classe et
ayant l'extension .class.
- Java est un langage compilé et interprété. Pour exécuter une application Java, il faut utiliser la
commande java, qui est la machine virtuelle Java.
Cette machine virtuelle Java est un programme appelé aussi interpréteur, elle prend les
programmes Java compilés en bytecode et convertit les instructions du bytecode en instructions
compréhensibles par un système d’exploitation.
Le fait que Java repose sur l'intepréteur rend Java indépendant de toute plate forme (langage
multi plate-forme). Le même fichier compilé en bytecode peut fonctionner sur n’importe quel
plate--forme et système d’exploitation sur lequel une machine virtuelle Java (JVM : Java Virtual
Machine) adéquate a été installée.
Mais cela a des incidences sur les performances des programmes Java. En effet, ces programmes
interprétés s'exécutent plus lentement que les programmes écrits dans les langages compilés et
exécutés dépendants d'une plate-forme donnée telle le C et le C++.
- Pour exécuter une applet, il faut utiliser soit un navigateur compatible Java ou soit la commande
appletviewer du JDK.
Les navigateurs Web permettant d’utiliser des applets possèdent aussi une machine virtuelle Java
(JRE : Java Runtime Environnement).
10 Réalisé par M. L. Ben Maâti
II. INTRODUCTION A LA PROGRAMMATION ORIENTEE OBJET EN JAVA
Les méthodes sont des fonctions qui contiennent des instructions. Les instructions sont parfois
regroupées pour constituer une instruction composée; dans ce cas, elles sont délimitées par un
couple d'accolades, { (début) et } (fin), pour former un bloc.
Toutes les instructions en Java se terminent par le point-virgule.
Une fois une classe est définie, on peut définir (ou créer) des variables de la classe, ces variables
sont appelées objets ou instances de la classe.
Exemple : Définition d’un type de données Complexe pour représenter des nombres complexes.
Supposons que nous voulons associer au type Complexe les deux méthodes suivantes :
setComplexe : pour modifier un nombre complexe ;
afficher : pour afficher un nombre complexe.
Remarques :
La classe Object représente la racine de la hiérarchie d'héritage arborescente des classes de
Java. Toutes les classes Java ont pour superclasse la classe Object. De ce fait, ils héritent les
méthodes de cette classe.
Les classes Double, Float, Long et Integer sont des sous-classes de la classe Number. La
classe Number est une sous classe de la classe Objet.
Les méthodes de classe parseDouble, parseFloat, parseLong et parseInt définies
respectivement dans les classe Double, Float, Long et Integer permettent respectivement de
convertir un objet de type String (une chaîne de caractères) contenant une valeur numérique en
une valeur de type double, float, long et int.
La classe Math contient des méthodes de classe correspondant à des fonctions mathématiques
comme par exemple : l’exponentiel, le logarithme, les fonctions trigonométriques, la racine
carrée, etc.
La classe System est contenue dans le package java.lang, elle sert à accéder au comportement de
niveau système de Java indépendamment de la plate-forme utilisée. La classe System contient trois
constantes de classe du type références à des objets :
1. System.err : représente le flux de sortie standard d'erreur, il correspond à l’écran ;
2. System.in : représente le flux d’entrée standard. Par défaut, il correspond au clavier ;
3. System.out : représente le flux de sortie standard. Par défaut, il correspond à l’écran.
System.in est une référence à un objet de la classe InputStream. C’est une classe abstraite qui
contient des méthodes permettant de lire des octets (byte) à partir d'un flux d'entrée.
System.err et System.out sont des références à des objets de la classe PrintStream. Cette classe
contient des méthodes permettant d’envoyer des caractères sur un flux de sortie. Parmi les
méthodes importantes des instances System.err et System.out de la classe PrintSteam, il y a :
print : affiche son paramètre sur la sortie standard sans sauter la ligne ;
println : affiche son paramètre sur la sortie standard et saute la ligne.
Le paramètre des méthodes print et println peut être de l’un des type suivants : boolean, char,
char[], double, float, int, long, String ou Object.
Remarque : Il n’existe pas de méthode simple permettant de lire des entiers, des réels, des
caractères et des chaînes de caractères à partir du clavier. Rien que la lecture des caractères est
une opération compliquée en Java.
L'exemple suivant montre comment lire en Java un nombre entier à partir du clavier.
/* Les classes IOException, BufferedReader et InputStreamReader sont des classes contenues dans
le package java.io. Il faut les importer pour les utiliser. */
import java.io.* ; // Importation des classes du package java.io.
…
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n;
try
{
String s = br.readLine(); /* L'appel de la méthode readLine de l'objet br peut générer
l'exception d'entrée/sortie IOException. */
n = Integer.parseInt(s); /* L'appel de la méthode de classe parseInt définie dans la classe
Integer peut générer l'exception NumberFormatException. */
}
catch(IOException e) // Gestionnaire de l'exception IOException.
{
System.err.println("Erreur d'entrée/sortie : " + e.getMessage());
}
catch(NumberFormatException e) // Gestionnaire de l'exception NumberFormatException.
{
System.err.println("La valeur entrée au clavier n'est pas un nombre : " + e.getMessage());
}
Annexe A
Le JDK englobe une série d’outils à ligne de commande conçus pour créer, compiler et tester des
programmes (applications et applets) java.
Le JDK est disponible gratuitement sur le site Web à l’adresse :
http://www.oracle.com/technetwork/java/javase/overview/index.html. Ce site Web contient
toutes les dernières informations sur Java y compris la dernière version du JDK.
TP 1
3. Cliquez sur l'onglet Downloads et puis sur l'image NetBeans Download JDK 7uX & NetBeans
7.Y pour télécharger le JDK 7uX avec l'éditeur de développement intégré NetBeans 7.Y (Y est
le numéro de la mise à jour (Update) de NetBeans) ;
jdk1.7.0_X
README.html
COPYRIGHT
LICENSE
src.zip
…
Remarques :
Il ne faut pas oublier de jeter un coup d’œil sur la page Web README.html qui se trouve dans
le dossier jdk1.7.0_X, ce fichier contient les dernières informations sur Java.
Pour chercher de l’aide sur les différents outils du JDK, il faut suivre le lien hypertexte tool
documentation qui se trouve dans le sous paragraphe Development Tools du paragraphe
Contents of the JDKTM.
II : Configurer le JDK
Sous Windows, pour pouvoir utiliser les commandes du JDK, il faut ouvrir la fenêtre Invite de
commandes de MS-DOS en sélectionnant démarrer/Tous les programmes/Accessoires/Invite de
commandes.
Une fois la fenêtre Invite de commandes est ouverte, vous pouvez taper les commandes du JDK
dans cette fenêtre. Vous pouvez aussi vous aider des commandes MS-DOS notamment pour se
déplacer dans les dossiers du système du fichier Windows. Voici une liste des commandes MS-DOS
utiles pour travailler dans la fenêtre Invite de commande :
Après l’installation du JDK, si vous tapez des commandes du JDK dans la fenêtre Invite de
commande, comme par exemple java -version qui affiche la version du JDK, l’erreur suivante
s’affiche dans la fenêtre :
‘java’ n’est pas reconnu en tant que commande interne ou externe, un programme exécutable ou
un fichier de commande.
Cette erreur provient du fait que le système d’exploitation Windows n’est pas parvenu à localiser le
fichier exécutable java.exe.
;
2. Dans le menu contextuel qui s’affiche, sélectionnez la commande Propriétés. La boîte de
dialogue Propriétés système s’affiche ;
3. Cliquez sur l’onglet Avancé (ou sélectionnez la commande Paramètres système avancés) et puis
sur le bouton Variables d’environnement, la boîte de dialogue Variables d’environnement
s’affiche ;
Remarque : La variable d’environnement PATH peut aussi être configurée dans le fichier système
autoexec.bat. Pour cela, procédez de la manière suivante :
Remarque : L’option –classpath des outils javac, java, javap, jdb et javadoc du JDK sert aussi
à définir les chemins de recherche des classes définies par l’utilisateur.
1. Sous Windows, procédez de la même manière que dans le TP 2 pour obtenir la boîte de dialogue
Variable d’environnement ;
2. Cliquez sur le bouton Nouveau de la zone Variables système pour ajouter une nouvelle variable.
3. Dans la boîte de dialogue Nouvelle variable système, tapez le nom de variable CLASSPATH
dans la zone de texte Nom de variable.
4. Dans la zone de texte Valeur de la variable, tapez les différents chemins d’accès vers les
dossiers contenants les classes définies par l’utilisateur, ces chemins doivent être séparés par des
points virgules.
-
5. Pour terminer, cliquez sur OK autant de fois pour fermer toutes les boîtes de dialogues.
Remarque : La variable d’environnement CLASSPATH peut aussi être configurée dans le fichier
système autoexec.bat. Pour cela, procédez de la même manière que celle utilisée pour configurer
la variable PATH (voir paragraphe II.1, page 5).
IV : Le compilateur
Le compilateur javac est utilisé pour compiler les programmes source en Java d’extension .java en
un code intermédiaire (bytecode) stocké dans un fichier de classe d’extension .class. Le compilateur
crée un fichier de classe pour chaque classe définie dans un fichier source.
Les fichiers de classe (ou d’extension .class) peuvent être exécutés par l’interprète Java, appelé aussi
machine virtuelle, désigné par la commande java.
Le compilateur Java est une commande exécutable à partir de la ligne de commande. La syntaxe de
la commande javac est :
javac Options NomFichier.java
NomFichier.java : indique le nom du fichier source à compiler.
Options : indique des options qui vont intervenir sur la façon dont le compilateur crée les fichiers de
classes Java exécutables. Voici une liste des options possibles :
Annexe B
I. La classe Vector<E>
La classe Vector sert à stocker des objets dans un tableau dont la taille varie de façon dynamique.
Quand l'espace mémoire initialement alloué à un objet Vertor devient entièrement occupé, la
capacité de stockage de cet objet sera augmentée en allouant dynamiquement de la mémoire pour un
autre bloc d'éléments à la fin de cet objet.
Dans la pratique, il faut fixer la capacité de stockage d'un objet Vector à la taille effectivement
nécessaire pour pouvoir insérer un grand nombre d'éléments. Cela réduira le nombre d'allocations de
la mémoire nécessaires pour augmenter la capacité de stockage de l'objet Vector avec les besoins.
Il est important de savoir que pour un objet Vector :
- La capacité de stockage désigne le nombre maximal d'éléments qu'il est possible d'insérer dans
l'objet avant qu'une nouvelle allocation dynamique de la mémoire par incrément ne soit effectuée.
- La taille indique le nombre d'éléments effectivement stockés dans un objet Vector.
- La capacité d'incrémentation indique le nombre d'éléments qui seront ajoutés à la fin de l'objet
Vector lors d'une nouvelle allocation de la mémoire.
Utilisation
1. Constructeurs
Vector();
Le constructeur sans paramètre crée un objet Vector avec une capacité initiale de 10 éléments.
Vector(int initialCapacity);
Le constructeur avec un seul paramètre crée un objet Vector avec une capacité initiale égale à la
valeur du paramètre initialCapacity.
Vector(int initialCapacity, int capacityIncrement);
Le constructeur avec deux paramètres crée un objet Vector avec une capacité initiale égale à la
valeur du paramètre initialCapacity et un incrément égal à la valeur du paramètre
capacityIncrement.
Remarque : Puisque la classe Vector implémente l'interface List, les méthodes de l'interface List
peuvent être utilisées pour ajouter (add), accéder (get), supprimer (remove) et modifier (set) un
élément à un objet Vector.
Utilisation
1. Constructeurs
Hashtable();
Le constructeur sans paramètres crée un objet Hashtable avec une capacité initiale de 11 éléments et
un taux de remplissage par défaut de 0.75 (75 % de la capacité de stockage).
Hashtable(int initialCapacity);
Le constructeur avec un seul paramètre crée un objet Hashtable avec une capacité initiale égale à la
valeur du paramètre initialCapacity et un taux de remplissage par défaut de 0.75.
Hashtable(int initialCapacity, int capacityIncrement);
Le constructeur avec deux paramètres crée un objet Hashtable avec une capacité initiale égale à la
valeur du paramètre initialCapacity et un taux de remplissage égal à la valeur du paramètre
capacityIncrement.
2. Méthodes
Voici les méthodes les plus importantes de la classe Hashtable :
Exemple : Création d'une table de hachage pour les chiffres, les clés utilisées correspondent aux
noms des chiffres :
Utilisation
1. Constructeur
LinkedeList()
Le constructeur sans paramètres crée un objet LinkedList implémentant une liste vide.
2. Méthodes
Voici les méthodes les plus importantes de la classe LinkedList :
void addFirst(E e) Ajoute l'objet e au début d'une liste.
Ajoute l'élément e en fin d'une liste. Cette méthode est identique à la
void addLast(E e)
méthode add(e) de l'interface List.
Renvoie un clone d'une liste, les éléments de la liste ne sont pas
Object clone()
clonés.
Renvoie le premier élément d'une liste. La méthode génère
E getFirst()
l'exception NoSuchElementException si la liste est vide.
Renvoie le dernier élément d'une liste. La méthode génère l'exception
E getLast()
NoSuchElementException si la liste est vide.
Efface et renvoie le premier élément d'une liste. La méthode génère
E removeFirst()
l'exception NoSuchElementException si la liste est vide.
Efface et renvoie le dernier élément d'une liste. La méthode génère
E removeLast()
l'exception NoSuchElementException si la liste est vide.
Exemple : Utilisation de l'interface List pour créer une liste d'objets géométriques (Point, Segment
ou Triangle) :
else
if(o instanceof Segment)
System.out.println("L'element " + o + " d'indice " + i + " est un segment.");
27 Réalisé par M. L. Ben Maâti
else
if(o instanceof Triangle)
System.out.println("L'element " + o + " d'indice " + i + " est un triangle.");
else
System.out.println("L'element " + o + " d'indice " + i + " est inconu.");
}
Utilisation
1. Constructeurs
StringTokenizer(String str)
Le constructeur avec un seul paramètre crée un objet StringTokenizer à partir de la chaîne str en
utilisant les espaces (espace, tabulation et la fin de ligne) comme séparateurs.
StringTokenizer(String str, String delim)
Le constructeur avec deux paramètres crée un objet StringTokenizer à partir de la chaîne str en
utilisant les délimiteurs indiqués dans la chaîne delim. Chaque caractère de la chaîne delim est
utilisé comme délimiteur pour découper la chaîne str.
StringTokenizer(String str, String delim, Boolean returnDelims)
Le constructeur avec trois paramètres crée un objet StringTokenizer à partir de la chaîne str en
utilisant les délimiteurs indiqués dans la chaîne delim. Si le paramètre returnDelims est égal à true,
chaque délimiteur contenu dans la chaîne str est retourné en tant que chaîne (ou token) à un seul
caractère.
2. Méthodes
La classe StringTokenizer fournit deux méthodes importantes qui permettent d'obtenir les
différentes parties d'une chaîne l'une après l'autre :
1. La méthode hasMoreTokens indique s'il reste des éléments à extraire ;
2. La méthode nextToken renvoie l'élément suivant.
int countTokens() Retourne le nombre d'éléments qui restent dans une chaîne découpée.
boolean hasMoreTokens() Renvoie true si la chaîne à découper contient encore des éléments (ou
tokens). Si la chaîne ne contient plus d'élément, la méthode renvoie false.
String nextToken() Renvoie l'élément suivant dans la chaîne à découper.
Exemple : Supposons que l'on désire découper la chaîne : "[(1,2), (10,20)]" pour extraire les
coordonnée des point d'un segment. Voici comment procéder :
Remarques :
La classe StringTokenizer implémente l'interface Enumeration qui offre les deux méthodes
suivantes :
Annexe C
}
}
1. En utilisant Swing, complétez ce programme afin de créer et d'affiche une fenêtre sans titre à
l'écran et cela en testant les quatre manières suivantes pour afficher une fenêtre.
i. L'affichage normal ou par défaut de la fenêtre : Par défaut une fenêtre cadre a une largeur et
une hauteur de 0 ;
ii. La fenêtre doit être affichée sous forme d'une icône ;
iii. La fenêtre doit être affichée sur la totalité de l'écran ;
Pour réaliser les types d'affichage ii et iii d'une fenêtre, il faut utiliser la méthode du
signature : void setExtendedState(int state) héritée de la classe Frame. Le paramètre state
peut prendre l'une des valeurs des constantes de classe, ICONIFIED ou MAXIMIZED_BOTH,
qui sont définies dans la classe Frame.
iv. La fenêtre doit être affichée avec une largeur de 300 pixels et une hauteur de 200 pixels :
Méthode héritée de la classe Component du signature : setSize(int width, int height) ;
v. Spécifier la position (200,200) pour l'affichage de la fenêtre : Méthode héritée de la classe
Component du signature setLocation(int x, int y).
N.B : Quand un objet JFrame est créé à l'aide de l'opérateur new, il est par défaut invisible. Pour
rendre visible l'objet JFrame, il faut utiliser la méthode setVisible(true).
2. Attribuer à la fenêtre le titre "Exemple de fenêtre cadre" : utiliser la méthode de la classe
Frame du signature setTitle(String titre).
3. Par défaut une fenêtre cadre est redimensionnable, c'est-à-dire, on peut changer sa largeur et sa
hauteur. Rendre la fenêtre non redimensionnable en utilisant la méthode du signature
setResizable(boolean resizable) héritée de la classe Frame.
4. Changer la couleur du fond de la fenêtre en lui attribuant une couleur de votre choix : Méthode
héritée de la classe Component du signature setBackground(Color c). Pour le choix de la
Exercice 2 Création d'une fenêtre qui dérive par héritage de la classe JFrame
Le programme suivant est composé de deux classes : La classe Cadre qui dérive par héritage de la
classe JFrame et la classe principale Fenetre qui contient la méthode main.
}
public class Fenetre
{
public static void main(String[] args)
{
}
}
Exercice 3 Dessin du texte, des lignes, des cercles, des rectangles, etc dans
une fenêtre
Modifier le programme de l'exercice 1 pour dessiner dans une fenêtre cadre. Pour cela, il faut
redéfinir la méthode héritée de la classe Component du signature void paint(Graphic g).
a) Tracer deux axes au milieu de la fenêtre cadre : Méthode de la classe Graphics du signature
drawLine(int x1, int y1, int x2, int y2). Pour déterminer la hauteur et la largeur du cadre, utiliser
respectivement les méthodes héritée de la classe Component de signatures : int getHeight() et
int getWidth() (on peut aussi utiliser la méthode héritée de Component : Dimension getSize()) ;
b) Dessiner dans la fenêtre cadre un cercle rempli avec la couleur jaune dans le quart supérieur
gauche, un rectangle dans le quart supérieur droite, La chaîne de caractères "Dessin Graphique"
dans le quart inférieur gauche et une ligne droite entre le centre des axes et le coin bas à droite de
la fenêtre. La méthode void setColor(Color c) de la classe Graphics permet de changer la
couleur courante.
L'utilisation de l'interface graphique de l'application doit être simple : il suffit d'entrer la température
en degré Celsius dans le champ de texte, cliquez sur le bouton Convertir pour visualiser le résultat
de la conversion de la température en degré Fahrenheit.
Il faut remarquer que la fenêtre de l'application possède un titre qui apparaît dans sa barre de titre et
les boutons réduction, agrandissement/restauration et fermeture. La fenêtre doit être non
redimensionnable.
Pour concevoir cette application, complétez la classe suivante :
Annexe D
EXERCICE DE CONCEPTION D'UNE APPLICATION GRAPHIQUE POUR
REALISER UNE CALCULATRICE
Concevoir une interface graphique utilisateur GUI en Swing pour représenter une calculatrice.
L'interface graphique doit comporter le menu Affichage permettant à l'utilisateur de choisir :
1. D'afficher une calculatrice scientifique, c'est-à-dire, contenant les touches numériques, les
opérations de base +, -, * et /, une touche pour le point décimal, une autre portant le signe = pour
afficher le résulta des calculs et encore une autre Effacer pour effacer l'afficheur et les fonctions
mathématiques : cos, sin, tan, exp, x^y, x^3 et x^2.
2. D'afficher une calculatrice standard, c'est-à-dire, ne contenant pas les fonctions mathématiques :
Calculatrice
Calculatrice
standard.
scientifique.
Par défaut, Java applique aux fenêtres cadres le gestionnaire de mise en page BorderLayout. Ce
gestionnaire est approprié pour placer l'afficheur en haut (BorderLayout.NORTH).
Les panneaux numériques et de fonctions (numPanel et foncPanel) seront regroupés dans le
panneau touchesPanel qui doit être placé au centre (position par défaut ou BorderLayout.CENTER)
de la fenêtre cadre.
On appliquera aussi au panneau touchesPanel le gestionnaire de positionnement BorderLayout qui
servira à positionner respectivement le panneau numérique numPanel au centre et le panneau de
fonctions foncPanel à gauche (BorderLayout.WEST) du panneau touchesPanel.
Le gestionnaire de positionnement GridLayout permet de spécifier une grille et d'ajouter ensuite des
composants de gauche à droite et de haut en bas jusqu'à ce que la grille soit pleine. Ce gestionnaire
sera respectivement appliqué aux panneaux numPanel et foncPanel. Le premier sera subdivisé en 5
lignes et 4 colonnes et le deuxième en 4 lignes et 2 colonnes.
Ensuite des boutons seront créés avec les intitulés stockés dans les tableaux ch et fonc. Les boutons
numériques seront ajoutés au panneau numPanel et les boutons de fonctions seront ajoutés au
panneau foncPanel.
Complétez le constructeur de la classe Calculatrice en suivant les indications ci-dessous :
Annexe E
Ce TP constitue une introduction à la programmation d’une interface graphique utilisateur (GUI : Graphical
User Interface) en utilisant les composants Swing sous l’EDI NetBeans.
Le but de ce TP est d’introduire l’API (Application Programming Interface) Swing en concevant une
application graphique simple permettant de réaliser la conversion des températures du degré Celsius vers le
degré Fahrenheit.
La conception de l’interface graphique utilisateur de cette application permet d’introduire les bases de la
programmation graphique en utilisant une partie des composants Swing disponibles. Cette conception sera
réalisée à l’aide du GUI Builder de l’EDI NetBeans. Ce dernier est un outil RAD (Rapid Application
GUI Builder est un outil qui permet de créer facilement des interfaces graphiques utilisateur en utilisant de la
programmation visuelle, c’est-à-dire, en dessinant l’interface à l’aide de l’opération glisser déplacer de la souris.
A partir de l'interface dessiné, GUI Builder générera automatiquement le code en Java permettant ainsi de
simplifier le développement d’applications graphique et de se concentrer sur la représentation de l’interface et la
logique de l’application plutôt que sur les détailles techniques de l’API graphique de Java.
En plus GUI Builder permet de libérer le programmeur de la complexité d’utilisation des gestionnaires de
positionnement (layout managers) d’AWT et de Swing. En effet, GUI Bulder utilise un gestionnaire de
positionnement appelé GroupLayout qui constitue une extension des autres gestionnaires de positionnement
déjà disponibles afin de pouvoir positionner plus facilement et d’une manière visuelle les composants graphiques
dans un conteneur permettant ainsi de concevoir plus facilement une interface graphique utilisateur.
Figure 1 : Interface graphique utilisateur de l’application de conversion de températures degré Celsius-degré Fahrenheit.
Celsius dans le champ de texte, cliquer sur le bouton Convertir pour visualiser le résultat de la conversion de
la température en degré Fahrenheit.
Il faut remarquer que la fenêtre de l'application possède un titre qui apparaît dans sa barre de titre et les
1. Créer l'interface graphique utilisateur et organiser les différents composants graphiques Swing de la même
manière que dans l'image de l'application montrée dans la figure 1 ci-dessus ;
2. Ajouter le code nécessaire pour réaliser la conversion de la température quand l'utilisateur clique sur le
bouton Convertir.
1. Créer un nouveau projet : sélectionnez la commande File/New Project… ou cliquez sur le bouton .
Dans la zone Categorie, sélectionnez Java et puis dans la zone Projects sélectionnez Java Application ;
2. Attribuer un nom au projet : Dans la zone Project name, taper ConvCelFahr comme nom du projet.
Vous pouvez garder le choix par défaut du dossier où sera placé le projet ou choisir un autre dossier en
Cliquez sur la case à cocher Create Main Class pour la désélectionner, cela évitera de créer
automatiquement une classe principale contenant la méthode main. En effet, lors de la création de la fenêtre
3. Ajouter un cadre (ou un formulaire) JFrame : Cliquez droit sur le nom du projet ConvCelFahr et
sélectionnez JFrame Form… dans le menu contextuel qui s'affiche. JFrame est une classe Swing qui servira
Vous pouvez aussi sélectionner le projet ConvCelFahr et cliquez ensuite sur le bouton New File… (ou
tapez Ctrl+N, ou sélectionnée File/New File…). Dans la boîte de dialogue qui s'affiche, sélectionnez Swing
Dans le champ de texte Class Name, tapez le nom ConvCelFahrGUI pour le nom de la classe fenêtre. Pour
le nom du package dans lequel sera placé la classe, tapez ma.ac.fst.convcelfahr dans le champ de texte
affiche à droite la vue graphique de la classe ConvCelFahrGUI. C'est dans cette zone qu'il faut positionner et
manipuler les différents composants graphiques Swing à l’aide de l’opération glisser déplacer la souris.
Pour visualiser le code générer automatiquement par le GUI Builder, cliquez sur le bouton Source. Le
bouton Design permet de revenir vers l'interface de conception graphique (voir la figure 2).
Parmi les éléments importants de l'EDI NetBeans qu'il faut comprendre pour concevoir une interface graphique
utilisateur, il y a : La palette des composants graphiques, la zone de conception graphique, l'éditeur de
propriétés et l'Inspecteur.
La palette contient tous les composants graphiques JFC/Swing (y compris les composants AWT). A partir de
cette liste de composants, l'application de conversion de températures utilisera seulement des étiquettes JLabel
qui serviront à afficher du texte, un champ de texte JTextField qui servira à introduire du texte, ce champ de
texte sera utilisé pour introduire les températures en degré Celsius et un bouton JBouton qui servira à actionner
Design.
Si on jette un coup d'œil sur le code source en cliquant sur le bouton Source, on constate que l'EDI NetBeans a
généré une méthode privée nommée initComponents qui initialise les différents composants de l'interface
graphique utilisateur. Cette méthode est appelée par le constructeur de la classe fenêtre représentant la fenêtre
de l'application pour l’initialiser.
3. L'éditeur de propriétés
Cet éditeur affiche les propriétés du composant actuellement sélectionné soit dans la zone de conception
graphique du GUI Builder, ou dans l'inspecteur, ou dans la fenêtre de projets Projects ou encore dans la
L’éditeur de propriétés permet d’éditer les propriétés de tous les composants graphiques. L’utilisation de cet
éditeur est intuitive. Il affiche une série de lignes, chaque ligne correspond à une propriété particulière d’un
composant.
Pour modifier une propriété, il suffit de cliquer sur la ligne qui lui correspond et d'éditer la nouvelle valeur de la
La figure suivante montre l’éditeur de propriété de la nouvelle fenêtre JFrame ajoutée au projet. Cet éditeur
affiche les différentes propriétés de l’objet JFrame, comme par exemple le titre, la couleur de fond (background
Le dernier composant utile pour concevoir une application graphique est l’inspecteur. Ce dernier offre une
représentation graphique des composants graphique visuels et non visuels utilisés dans l’application. L'affichage
est organisé sous forme d'un arbre permettant de montrer les composants contenus dans chaque conteneur
introduit dans l'application.
L'inspecteur permis aussi de savoir quel composant est actuellement édité dans la zone de conception graphique
du GUI Builder, il permet aussi d'organiser les composant dans les différents conteneurs notamment les
panneaux disponibles dans l'application et cela en utilisant l'opération glisser déplacer de la souris pour déplacer
un composant d'un panneau (ou d’un conteneur) vers un autre.
L'inspecteur peut aussi être utilisé pour éditer le texte qui doit s'afficher sur un composant et pour changer les
noms des variables correspondant aux différents composants graphiques de l'application. Pour cela, il suffit de
cliquer droit sur le composant dans l'inspecteur et de sélectionner les commandes : Edit Text et Change
Variable Name….
Figure 4 : L'inspecteur.
Remarques :
Pour changer l'intitulé d'un composant graphique, on peut aussi double-cliquer sur le composant ou modifier
la valeur de la propriété Variable name dans l'option Code de l'éditeur de propriétés.
Si l’un des éléments suivants : la palette, l’éditeur de propriétés ou l’inspecteur n’est pas affiché à l’écran, il
est possible de l’afficher en utilisant les commandes et les sous-menus du menu Window :
Avec GUI Builder, la conception de l'interface graphique utilisateur de l'application devient très simple, il suffit
de faire glisser déplacer les composants graphiques à partir de la palette des composants vers l'emplacement
désiré dans la zone de conception graphique. En plus, GUI Builder permet de redimensionner facilement les
composants graphiques placés dans la zone de conception graphique permettant ainsi d'obtenir l'interface
désirée.
Au fur et à mesure que les composants graphiques sont positionnés et redimensionnés dans la zone de
conception graphique GUI Builder génère le code source appropriée.
1. Sélectionnez le composant JFrame dans l'inspecteur. Vous pouvez aussi cliquer à un endroit libre de la zone
de conception graphique ;
2. Dans la fenêtre des propriétés, tapez le titre Conversion Celsius à droite de la propriété title. Vous pouvez
aussi cliquer sur le petit bouton pour introduire le titre à partir d'une boîte de dialogue.
1. Cliquez sur le composant graphique JTexteField de la palette et déplacez la souris vers le coin supérieur
gauche de la zone de conception graphique (vous pouvez utiliser l'opération glisser déplacer de la souris). Dès
que le composant graphique approche le coin supérieur gauche, GUI Builder affiche des lignes en pointillés
(voir la figure 5) permettant de proposer un espacement approprié du composant avec les bords de la fenêtre
de l'application. Relâchez le bouton gauche de la souris à cet endroit, on obtient le positionnement indiqué
dans l'image de droite. Le composant graphique s'entoure des poignés de redimensionnement qui servent à
redimensionner le composant ;
2. Procédez de la même manière en cliquant sur le composant graphique JLabel de la palette et faites déplacer
la souris vers la zone de conception graphique pour placer l'étiquette à droite du champ de texte.
Ici encore, dès qu'on approche le champ de texte, GUI Builder affiche des pointillés pour suggérer un
espacement approprié entre le champ de texte et l'étiquette. Lassez un espacement de trois traits en
pointillés. Avant de relâcher le bouton gauche de la souris, il faut s'assurer que la ligne de base de texte du
l'étiquette est bien aligné avec celui du champ de texte (voir la figure 6) ;
3. Procéder de la même manière pour placer le bouton JButton à gauche en dessous du champ de texte. Lassez
un espacement de trois traits en pointillés et aligner le bouton à gauche avec le champ de champ de texte
(voir la figure 7) ;
Etant donné que les différents composants graphiques de l'application sont déjà en place, il faut maintenant
ajouter la touche finale à l'application en ajustant les différents composants graphiques. Il y a plusieurs manières
1. Double-cliquez sur le bord du champ de texte et effacer le texte affiché. Si vous double-cliquez à l'intérieur du
champ de texte, c'est le code de traitement de l'événement d'action du composant qui s'affiche. Une fois le
texte est effacé, tapez Entrée, le champ de texte devient vide et se rétréci comme montré à la figure 9 ;
Pour changer l'intitulé d'un composant graphique, on peut aussi procéder de l'une des manières suivante :
- Cliquez droit sur le composant graphique et sélectionnez la commande Edit Text à partir du menu
- Cliquez droit sur le composant graphique dans l'inspecteur et sélectionnez la commande Edit Text à
2. Utilisez l'une des méthodes ci-dessus pour modifier les intitulés des autres composants graphiques comme
indiqués à la figure 9.
Figure 9 : Lorsque l'intitulé du champ de texte est effacé, le champ de texte se rétréci.
1. Pour attribuer la même largeur au champ de texte et au bouton, il faut d'abord sélectionner les deux
composants. Pour cela, cliquez sur le champ de texte pour le sélectionner et appuyez ensuite sur la touche
3. Si les étiquettes ne sont plus alignées à gauche déplacez l'un d'entre elles pour les aligner à gauche.
2. Faites glisser déplacer ce coin vers la gauche et vers le haut pour ajuster la fenêtre à son contenu comme
indiquer à la figure 10. Il faut laisser suffisamment d'espace à droite pour que le titre de la fenêtre puisse
s'afficher entièrement à l'exécution de l'application. Il faut noter que le bouton Preview Design permet de
Cette partie consiste à attribuer des noms de variables significatifs aux différents composants graphiques de
l’application. Ensuite, il faudra ajouter un écouteur d’événement au bouton Convertir et d’ajouter le code
nécessaire pour réaliser la conversion des températures lorsque l’utilisateur clic sur le bouton Convertir.
Etape 1 : Modifier les noms des noms des variables qui ont été créés
par défaut
1. Les noms de variables générées par défaut par GUI Builder ne sont pas significatifs. Il faut donc les
Pour cela, cliquez droit sur chacune des composants graphiques dans l'inspecteur. Dans le menu
contextuel qui s'affiche, sélectionnez la commande Change Variable Name…. dans la boîte de dialogue
qui s'affiche, tapez les noms de variables indiqués dans la figure 11 ci-dessous.
Figure 11 : L'Inspecteur affiche les noms des variables attribués aux différents composants graphiques.
Vous pouvez aussi modifier les noms des variables des composants graphiques en procédant des deux
manières suivantes :
- Utiliser l'éditeur de propriétés : Pour cela, sélectionnez un composant graphique soit dans l'inspecteur
soit dans la zone de conception graphique, allez dans l'éditeur de propriétés et modifier la valeur de la
1. Dans la zone de conception graphique, cliquez sur le bouton Convertir pour le sélectionner. Il faut s'assure
que seul le bouton est sélectionné (Si la fenêtre JFrame est aussi sélectionnée, cet étape ne marchera pas).
menu contextuel. Cela générera le code nécessaire qui crée un écouteur d'événement, l'ajoute au bouton
Convertir et génère une méthode vide qui sera utilisée pour y ajouter le code nécessaire permettant de
traiter l'événement d'action généré par le bouton Convertir. c'est donc dans cette méthode qu'il faut placer le
code permettant de réaliser la conversion des températures du degré Celsius vers le degré Fahrenheit ;
Vous pouvez obtenir le même résultat en cliquant droit sur la variable conversionButton associée au bouton
Convertir dans l'inspecteur et sélectionner la commande Events-->Action-->ActionPerformed ;
4. Utilisez l'éditeur de propriétés pour modifier l'apparence de l'application en modifiant quelques propriétés des
[2] John December, Michael Morrison et al, Java secrets d’experts. S&SM.
Et suivre les liens : Dounloads > Java > Java SE > Java Resources :
Tutorials > Tutorial Resources : Download the latest Java Tutorials bundle.
- Le site : http://docs.oracle.com/javase/tutorial/
Et suivre le lien : Download the latest Java Tutorials bundle.