Java en bref Le langage de programmation L’API Java
Programmation avancée
—
Le langage Java
Jean-Yves Didier
Université d’Evry-Val-d’Essone
Jean-Yves Didier M1ISC option programmation avancée (Java) 1/85
Java en bref Le langage de programmation L’API Java
1 Présentation de Java
2 Le langage de programmation
Concepts et liens avec la machine virtuelle
Caractéristiques
Les éléments du langage
Programmation orientée objet
Héritage
Les exceptions
3 L’API Java
Les paquetages
Programmation d’interfaces graphique
Jean-Yves Didier M1ISC option programmation avancée (Java) 2/85
Java en bref Le langage de programmation L’API Java
Java : qu’est ce que c’est ?
Un ensemble de technologies
• Concepteurs :
James Gosling & Patrick Naughton
(Sun Microsystems)
• Englobe :
I Un langage de programmation ;
I Une machine virtuelle ;
I Une (volumineuse) bibliothèque de classes (API).
Jean-Yves Didier M1ISC option programmation avancée (Java) 3/85
Java en bref Le langage de programmation L’API Java
Motivations originelles / Historique
Motivations : la recherche de la portabilité !
• 1990-1992 : projet Oak
I Objectif : plate-forme commune de développement des
systèmes embarqués (PDAs, téléphones mobiles) ;
I Concepteurs : Joy, Gosling.
• 1996 : naissance de Java (Sun Microsystems)
I Essor des technologies web et des applets.
• 2007 : libération du code de Java ;
• 2010 : rachat par Oracle.
Jean-Yves Didier M1ISC option programmation avancée (Java) 4/85
Java en bref Le langage de programmation L’API Java
Une évolution constante
classes
JDK J2SE Java SE
1.0
1.1
1.2
1.3
1.4
5.0
9
4k
3k
2k
1k
1996
1997
1998
2000
2002
2004
2006
2011
2014
2017
années
Nombre de classes dans l’API en fonction des versions
Jean-Yves Didier M1ISC option programmation avancée (Java) 5/85
Java en bref Le langage de programmation L’API Java
Un certain nombre de distributions différentes
JRE - Java Runtime Environment :
Machine virtuelle + bibliothèque de classes ;
JDK - Java Development Kit :
JRE + outils de développement (compilateur, etc) ;
Java EE - Java Enterprise Edition :
Extension du JDK spécifique pour les entreprises
appelée aussi J2E ;
Java ME - Java Micro Edition :
Version pour systèmes embarqués.
A télécharger librement sur [Link] !
Jean-Yves Didier M1ISC option programmation avancée (Java) 6/85
Java en bref Le langage de programmation L’API Java
20 ans après . . . (1/3)
Les applications sur mobile
• Android, l’OS de Google utilise Java ;
• Java Micro Edition orienté vers les systèmes embarqués.
• Février 2009 (source : Market Share) :
I 15% de parts de marché dans les smart-phones ;
I Android : 6,15 % ;
I Java ME : 9,06 % ;
• Second trimestre 2016 (source : ISC) :
I Android : 87,6 % !
I Autres systèmes d’exploitation :
iOS : 11,7 %, Windows : 0,4%, Autres : 0,3%
Jean-Yves Didier M1ISC option programmation avancée (Java) 7/85
Java en bref Le langage de programmation L’API Java
20 ans après . . . (2/3)
Les technologies Web
• Côté client (applet), beaucoup de mouvement :
I Flash s’est emparé du marché ;
I Java FX est la riposte à ce ”monopole” depuis juillet 2008 ;
I Flash est remplacé graduellement par HTML5/Javascript
(abandon par Apple en 2010) ;
I Plugin Java pour navigateur considéré comme peu sûr
(désactivé par défaut dans Firefox depuis Java SE7).
I Java n’a donc pas réussi sa pérénisation côté client.
• Côté serveur (servlet) : le framework J2E est largement utilisé.
Jean-Yves Didier M1ISC option programmation avancée (Java) 8/85
Java en bref Le langage de programmation L’API Java
20 ans après . . . (3/3)
Popularité du langage
(source : index TIOBE / octobre 2016)
Popularité (en %)
18.8
9.8
5.8 4.4 3.8 2.7 2.7
Java C C++ C# Python JS PHP
Jean-Yves Didier M1ISC option programmation avancée (Java) 9/85
Java en bref Le langage de programmation L’API Java
Les concurrents directs
Plate-forme .net (2002) :
• Porteur du projet : Microsoft ;
• Portabilité limitée ;
• Exécution optimisée ;
LLVM — Low Level Virtual Machine (2000) :
• Projet OpenSource ;
• Supporté par Apple depuis 2005 ;
• Portable ;
• Exécution optimisée.
Jean-Yves Didier M1ISC option programmation avancée (Java) 10/85
Java en bref Le langage de programmation L’API Java
1 Présentation de Java
2 Le langage de programmation
Concepts et liens avec la machine virtuelle
Caractéristiques
Les éléments du langage
Programmation orientée objet
Héritage
Les exceptions
3 L’API Java
Les paquetages
Programmation d’interfaces graphique
Jean-Yves Didier M1ISC option programmation avancée (Java) 11/85
Java en bref Le langage de programmation L’API Java
Le concept de base
Compile once, execute anywhere
Java est un langage semi-interprété/semi-compilé !
Processus de développement
Soit un programme nommé [Link].
Pour visualiser son exécution, il faudra :
1 Le compiler : javac [Link]
I Cela produit du bytecode (fichier [Link]).
2 Exécuter le bytecode : java Programme
I On fait appel à une machine virtuelle.
Jean-Yves Didier M1ISC option programmation avancée (Java) 12/85
Java en bref Le langage de programmation L’API Java
Le concept de base
Compile once, run everywhere !
Quel est l’intérêt ?
• Le bytecode est du code compilé pour un processeur (une
machine) qui n’existe pas physiquement ;
• Ce processeur peut-être émulé par ce qu’on appelle une
machine virtuelle.
Si les plate-formes d’exécution visées possèdent une machine
virtuelle Java (plate-forme Unix, Windows,etc ), le même bytecode
peut s’exécuter sur ces différentes plate-formes !
C’est ce que l’on appelle la portabilité !
Jean-Yves Didier M1ISC option programmation avancée (Java) 13/85
Java en bref Le langage de programmation L’API Java
Avantages / inconvénients
Avantages : liés à la portabilité
• Maintenance d’une version unique du code et non pas d’une
version par plate-forme d’exécution ;
• Compile once, run everywhere !
Inconvénients : liés aux performances
• Interprétation du bytecode plus lente que l’exécution de code
natif ;
• Allocation d’office d’une certaine quantité de mémoire pour la
machine virtuelle ;
• Problématique du garbage collector (évoqué plus loin).
Jean-Yves Didier M1ISC option programmation avancée (Java) 14/85
Java en bref Le langage de programmation L’API Java
Caractéristiques du langage
• Langage fortement orienté objet ;
• Langage typé ;
• Syntaxe C-like ;
• Gère le multi-threading ;
• Orienté sur les aspects sécurité.
Jean-Yves Didier M1ISC option programmation avancée (Java) 15/85
Java en bref Le langage de programmation L’API Java
Les sources d’inspiration
D’autres langages de programmation !
ADA (1979 – DARPA) :
Langage multi-tâche.
SmallTalk (1980 – Xerox) :
Langage fortement orienté objet employant machine
virtuelle et garbage collector.
C++ (1992 – Bell Labs) :
Langage orienté objet employant une syntaxe C-like
et les templates.
Jean-Yves Didier M1ISC option programmation avancée (Java) 16/85
Java en bref Le langage de programmation L’API Java
Un premier programme
Hello World !
Fichier [Link]
public c la s s HelloWorld
{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s )
{
System . o u t . p r i n t l n ( " Hello World !" ) ;
}
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 17/85
Java en bref Le langage de programmation L’API Java
Ce qui différencie du C++
• pas de structures et d’unions ;
• pas de pointeurs ;
• utilisation massive des références ;
• pas d’héritage multiple (on y reviendra) ;
• pas de surcharge d’opérateurs.
Jean-Yves Didier M1ISC option programmation avancée (Java) 18/85
Java en bref Le langage de programmation L’API Java
Les conventions d’écriture
Ces conventions régissent la manière dont on écrit les noms de
classes, de variables, de constantes, etc...
Rien ne vous empêchera de faire autrement mais :
• Cela vous permettra de décrypter l’API Java ;
• Vos programmes seront compréhensibles par d’autres
développeurs Java.
Jean-Yves Didier M1ISC option programmation avancée (Java) 19/85
Java en bref Le langage de programmation L’API Java
Les conventions d’écriture
Les mots clés : en minuscules :
ex : class, static, public ;
Les constantes : séparées par des ’ ’ et CAPITALISÉES :
ex : MA CONSTANTE ;
Les variables et méthodes : en minuscules, si composées de
plusieurs mots, chaque première lettre est
CAPITALISÉE à l’exception de celle du premier mot :
ex : maVariable ;
Les classes : en minuscules, la première de chaque mot est
CAPITALISÉE :
ex : MaClasse, System.
Jean-Yves Didier M1ISC option programmation avancée (Java) 20/85
Java en bref Le langage de programmation L’API Java
Les mots-clés
abstract boolean break byte case
catch char class const continue
default do double else extends
final finally float for goto
if implements import instanceof int
interface long native new package
private protected public return short
static super switch synchronised this
throw throws transient try void
volatile while
En bleu clair les mots clés n’ayant pas d’équivalent C++.
Jean-Yves Didier M1ISC option programmation avancée (Java) 21/85
Java en bref Le langage de programmation L’API Java
Les types de base
Ne sont pas considérés comme des objets en Java :
entiers (signés seulement) :
byte (8 bits), short (16 bits), int (32 bits), long
(64 bits)
flottants (selon le standard IEEE 754) :
float (32 bits), double (34 bits)
booléen :
boolean, vaut true ou false.
caractère (unicode) :
char (16 bits).
Ordre des conversions implicites :
byte|char→short→int→long→float→double
Jean-Yves Didier M1ISC option programmation avancée (Java) 22/85
Java en bref Le langage de programmation L’API Java
Les tableaux
Déclaration
i n t [ ] monTableau ;
dou ble [ ] l i s t e R e e l s ;
long [ ] [ ] tableau2D ;
Création
monTableau = new i n t [ 1 2 ] ;
l i s t e R e e l s = new double [ 2 3 ] ;
t a b l e a u 2 D = new l o n g [ 5 ] [ 4 ] ;
Utilisation
f o r ( i n t i =0; i < monTableau . l e n g t h ; i ++)
monTableau [ i ] = 2∗ i ;
Jean-Yves Didier M1ISC option programmation avancée (Java) 23/85
Java en bref Le langage de programmation L’API Java
Les tableaux à plusieurs dimensions
Les considérer comme des tableaux de tableaux de tabl. . .
Tableau à deux dimensions
i n t t [ ] [ ] = new i n t [ 4 ] [ ] ;
f o r ( i n t i =0; i < t . l e n g t h ; i ++)
{
t [ i ] = new i n t [4− i ] ;
f o r ( i n t j =0; j < t [ i ] . l e n g t h ; j ++)
{
t [ i ] [ j ] = i+j ;
}
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 24/85
Java en bref Le langage de programmation L’API Java
Les écueils du passage par référence
Les types de base sont passés par valeur, le reste par référence.
Fichier [Link]
public class PassageInt {
private s t a t i c void p a s s e I n t ( i n t i ) { i = 4; }
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int a = 1;
System . o u t . p r i n t l n ( a ) ;
passeInt (a) ;
System . o u t . p r i n t l n ( a ) ;
}
}
Résultat
java PassageInt
1
1
Jean-Yves Didier M1ISC option programmation avancée (Java) 25/85
Java en bref Le langage de programmation L’API Java
Les écueils du passage par référence
Les types de base sont passés par valeur, le reste par référence.
Fichier [Link]
class StringChangeable {
p u b l i c void s e t S t r i n g ( S t r i n g s ) { ps = s ; }
p u b l i c S t r i n g t o S t r i n g ( ) { r e t u r n ps ; }
p r i v a t e S t r i n g ps ;
}
public class PassageString { Résultat
private s t a t i c void passeString (
StringChangeable s ) { java PassageString
s . s e t S t r i n g ( " tutu " ) ;
} toto
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { tutu
S t r i n g C h a n g e a b l e c h a i n e= new
StringChangeable () ;
c h a i n e . s e t S t r i n g ( " toto " ) ;
System . o u t . p r i n t l n ( c h a i n e ) ;
passeString ( chaine ) ;
System . o u t . p r i n t l n ( c h a i n e ) ;
}
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 25/85
Java en bref Le langage de programmation L’API Java
Structure globale d’un programme Java
Structure globale
• 1 programme = 1 ou plusieurs fichiers ;
• 1 fichier = 1 ou plusieurs classes ;
• Parmi ces classes, une possède le point d’entrée du
programme :
public static void main(String[] args) { ...}
Nom des fichiers contenant des classes
Tout fichier doit contenir une et une seule classe publique dont le
nom est identique (à la minuscule/majuscule près) à celui du
fichier.
Jean-Yves Didier M1ISC option programmation avancée (Java) 26/85
Java en bref Le langage de programmation L’API Java
Programmation orientée objet
Pourquoi et quel intérêt à l’utiliser ?
• Modularité – Plusieurs personnes peuvent travailler en
parallèle sur le même projet ;
• Réutilisabilité – Le code développé dans un projet peut être
réutilisé dans un autre ;
• Facilité à écrire le code et à le maintenir ;
→ Gain de temps et d’argent dans l’industrie du logiciel.
Les entreprises qui ont commencé à faire de l’objet ont cassé les
prix du marché à l’époque !
Jean-Yves Didier M1ISC option programmation avancée (Java) 27/85
Java en bref Le langage de programmation L’API Java
Programmation orientée objet
Vocabulaire (rappel)
classe : Code rassemblant des données et les traitements
devant opérer sur ces données ;
instanciation : Processus d’évaluation d’une classe ;
objet : Instance d’une classe ;
attributs : Données d’une classe ;
méthodes : Fonctions internes d’une classe ;
constructeur : Méthode d’instanciation ;
héritage : Mécanisme d’extension d’une classe.
super-classe : Classe dont on hérite ;
sous-classe : Classe héritant d’une super-classe ;
polymorphisme : Mécanisme de re/sur-définition de méthodes.
Jean-Yves Didier M1ISC option programmation avancée (Java) 28/85
Java en bref Le langage de programmation L’API Java
Définition d’une classe
La classe Point
class Point {
// dé f i n i t i o n de p o i n t
...
}
Remarques
• déclaration et définition de classes sont regroupées ;
• une classe définit un type ;
• une classe est passée par référence dans une méthode ;
• toute classe hérite implicitement de la classe Object.
Jean-Yves Didier M1ISC option programmation avancée (Java) 29/85
Java en bref Le langage de programmation L’API Java
Instanciation d’une classe
La création d’un objet
Exemple
P o i n t p1 ; // dé c l a r a t i o n
p1 = new P o i n t ( ) ; // i n s t a n c i a t i o n
P o i n t p2 = new P o i n t ( ) ; // l a v e r s i o n c o u r t e
P o i n t p3 = n u l l ;
Remarques
• Une variable est associée à un type ;
• Toute variable associée à une classe contient une référence ;
• new est un opérateur d’instanciation faisant appel au
constructeur d’une classe ;
• null est une valeur qui dénote l’absence d’une référence.
Jean-Yves Didier M1ISC option programmation avancée (Java) 30/85
Java en bref Le langage de programmation L’API Java
La destruction d’un objet
Le retour du garbage collector
• En temps normal : on ne détruit pas !
• C’est le rôle du garbage collector :
I Appelé aussi ramasse-miette ;
I Détruit tout objet dont le nombre de références est tombé à 0 ;
I Est intégré à la machine virtuelle Java ;
I Est un processus séparé de contrôle des applications.
Forcer la destruction
Cela n’est pas recommandé, mais reste possible. Utilisez la
méthode finalize() si vous savez ce que vous faites.
Jean-Yves Didier M1ISC option programmation avancée (Java) 31/85
Java en bref Le langage de programmation L’API Java
Le constructeur
• Méthode particulière d’une classe permettant de l’instancier ;
• Un constructeur n’a pas de valeur de retour ;
• Un constructeur a le même nom que la classe ;
• On peut surdéfinir un constructeur.
• Java pourvoie un constructeur par défaut :
→ ce dernier appelle les constructeurs par défaut des attributs.
Jean-Yves Didier M1ISC option programmation avancée (Java) 32/85
Java en bref Le langage de programmation L’API Java
Les membres de classe
Les membres de classe
• Ce sont des attributs ou des méthodes qui concernent la
classe et non pas les objets ;
• Ces membres sont déclarés avec le mot clé static ;
• Pour les appeler, on les précède du nom de la classe et non
pas du nom de l’objet.
La classe Math
Java possède une classe Math qui regroupe les opérations
mathématiques. Par exemple, pour calculer une racine carrée, on
utilisera la méthode sqrt :
double racineDeDeux = [Link](2);
Jean-Yves Didier M1ISC option programmation avancée (Java) 33/85
Java en bref Le langage de programmation L’API Java
Les attributs de visibilités
Ils sont donnés par les mots-clés suivant :
public : accessible par tout le monde ;
si vide : accessibilité de paquetage ;
private : accès limité en interne à la classe ;
protected : accès limité en interne à la classe et aux classes qui
en héritent.
Recommandations
• Mettre les méthodes en public ;
• Mettre les attributs en private ;
• Puis éventuellement réfléchir ultérieurement sur la visibilité
appropriée.
Jean-Yves Didier M1ISC option programmation avancée (Java) 34/85
Java en bref Le langage de programmation L’API Java
Les classes internes
Ce sont des classes définies à l’intérieur d’autres classes.
La réutilisation de ces classes est bien entendue limitée.
Les classes internes ne sont accessibles qu’à l’intérieur des classes
qui englobent leur décalaration.
L’intérêt est de masquer une implémentation en interne. Cela
correspond au principe maı̂tre de la programmation orientée objet
qu’est l’encapsulation.
Jean-Yves Didier M1ISC option programmation avancée (Java) 35/85
Java en bref Le langage de programmation L’API Java
Le principe de l’encapsulation
Definition
L’encapsulation consiste à protéger les informations contenues
dans les objets. L’objectif est de vérouiller l’implémentation interne
de l’objet afin de garantir son fonctionnement et de se prémunir
contre les effets de bord.
Exemples de dispositifs permettant l’encapsulation
Les classes internes et les attributs de visibilité.
Remarque
Une bonne encpasulation permet de rendre les programmes plus
faciles à déboguer !
Jean-Yves Didier M1ISC option programmation avancée (Java) 36/85
Java en bref Le langage de programmation L’API Java
Les accesseurs
Definition
Les accesseurs sont des méthodes simples permettant d’accéder
et de modifier les valeurs d’un attribut d’une classe.
Exemple d’accesseur
Dans la classe ci-dessous, setString(...) et toString() sont des
accesseurs.
public class StringChangeable {
p u b l i c void s e t S t r i n g ( S t r i n g s ) { ps = s ; }
p u b l i c S t r i n g t o S t r i n g ( ) { return ps ; }
p r i v a t e S t r i n g ps ;
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 37/85
Java en bref Le langage de programmation L’API Java
L’héritage
Il existe différentes sortes d’héritage :
• L’héritage simple (Java, Smalltalk) :
I Toutes les classes descendent d’une superclasse Object ;
I Une seule classe mère est autorisée ;
I Java a une spécificité liée aux interfaces ;
• L’héritage multiple (C++) :
I Une classe peut ne pas avoir d’ancêtre ;
I Plusieurs classes mères sont autorisées ;
I Des problèmes d’ambiguité peuvent survenir.
Jean-Yves Didier M1ISC option programmation avancée (Java) 38/85
Java en bref Le langage de programmation L’API Java
La classe Object
Une classe pour les gouverner toutes
Elle possède des méthodes qui peuvent être redéfinies pour :
• Copier un objet par clonage :
protected Object clone();
• Détruire un objet :
protected void finalize();
• Représenter l’objet sous forme de chaı̂ne de caractères :
public String toString();
• Tester l’égalité :
public boolean equals(Object);
Jean-Yves Didier M1ISC option programmation avancée (Java) 39/85
Java en bref Le langage de programmation L’API Java
L’héritage en pratique
Le mot-clé extends
La syntaxe est la suivante :
class Derivee extends Base
• Derivee est la sous-classe que l’on définit ;
• Base est la super-classe dont on hérite.
Le mot-clé super
Permet d’appeler, dans une méthode ou un constructeur, à la
méthode ou le constructeur de la super-classe que l’on surcharge.
Jean-Yves Didier M1ISC option programmation avancée (Java) 40/85
Java en bref Le langage de programmation L’API Java
L’héritage
Exemple : une classe mère Point2D
p u b l i c c l a s s Point2D {
p u b l i c Point2D ( i n t a , i n t b ) { x=a ; y=b ; }
p u b l i c S t r i n g t o S t r i n g ( ) { r e t u r n "x="+x+" , y="+y ; }
private int x , y ;
}
Exemple : une classe fille Point3D
p u b l i c c l a s s Point3D e x t e n d s Point2D {
p u b l i c Point3D ( i n t a , i n t b , i n t c ) {
super ( a , b ) ;
z=c ;
}
p u b l i c S t r i n g t o S t r i n g ( ) { r e t u r n s u p e r ( )+" , z="+z ; }
private z ;
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 41/85
Java en bref Le langage de programmation L’API Java
La finalisation
Le mot-clé final fige l’implémentation :
• Dans le cas d’une classe :
→ On ne pourra en hériter ;
• Dans le cas d’une méthode :
→ On ne pourra la redéfinir ;
• Dans le cas d’un attribut :
→ Il devient une constante.
Jean-Yves Didier M1ISC option programmation avancée (Java) 42/85
Java en bref Le langage de programmation L’API Java
Les conséquences de l’héritage
Plusieurs concepts découlent de l’héritage :
• La visibilité de type protected ;
• Le polymorphisme ;
• Les classes abstraites ;
• Les interfaces.
Jean-Yves Didier M1ISC option programmation avancée (Java) 43/85
Java en bref Le langage de programmation L’API Java
Le polymorphisme
Une conséquence de l’héritage
Le polymorphisme consiste à surcharger des méthodes.
Deux sortes de surcharge
• La rédéfinition : les signatures des méthodes sont identiques ;
• La surdéfinition : le nom et le type de retour sont identiques,
les paramètres sont différents.
Exemple de redéfinition
p u b l i c c l a s s Point3D e x t e n d s Point2D {
p u b l i c Point3D ( i n t a , i n t b , i n t c ) { . . . }
p u b l i c S t r i n g t o S t r i n g ( ) { r e t u r n s u p e r ( )+" , z="+z ; }
private z ;
}
toString() est une redéfinition de celle existant dans Point2D.
Jean-Yves Didier M1ISC option programmation avancée (Java) 44/85
Java en bref Le langage de programmation L’API Java
Le polymorphisme
Exemple de surdéfinition
class Coordinates {
p u b l i c C o o r d i n a t e s ( i n t a , i n t b ) { x=a ; y=b ; }
p u b l i c i n t getX ( ) { r e t u r n x ; }
p u b l i c i n t getY ( ) { r e t u r n y ; }
private int x , y ;
}
p u b l i c c l a s s Point2D {
p u b l i c Point2D ( i n t a , i n t b ) { x=a ; y=b ; }
p u b l i c v o i d s e t C o o r d i n a t e s ( i n t a , i n t b ) { x=a ; y=b ;
}
p u b l i c v o i d s e t C o o r d i n a t e s ( C o o r d i n a t e s c ) { x=getX ( ) ;
y=getY ( ) ; }
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 45/85
Java en bref Le langage de programmation L’API Java
Les classes abstraites
La classe abstraite
Elle ne peut être instanciée et définit des méthodes dont au moins
une doit être abstraite, c’est à dire sans implémentation associée.
Intérêt
Une classe abstraite est généralement une classe mère qui décrit un
comportement (partiellement implémenté) dont l’implémentation
finale sera déléguée à la classe fille.
Exemple : la classe Number
Number est la classe mère de Byte, Double, Float, Integer,
Long, Short. Ces sous-classes implémentent les méthodes
abstraites suivantes : byteValue(), doubleValue(),
floatValue(), intValue(), longValue(), shortValue()
Jean-Yves Didier M1ISC option programmation avancée (Java) 46/85
Java en bref Le langage de programmation L’API Java
Les classes abstraites
Déclarer une classe abstraite
Cela se fait au moyen du mot clé abstract. Les méthodes non
implémentées doivent également comporter le mot clé abstract.
La classe Number
p u b l i c a b s t r a c t c l a s s Number {
byte b y t e V a l u e ( ) { . . . }
a b s t r a c t double doubleVa lue ( ) ;
abstract float floatValue () ;
abstract int intValue () ;
abstract long longValue ( ) ;
short shortValue () { . . . }
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 47/85
Java en bref Le langage de programmation L’API Java
Les interfaces
Définition et déclaration
Definition
Une interface est un contrat entre la classe qui implémente
l’interface et une classe qui utilise l’interface.
Une interface est comparable à une classe abstraite dont toutes
les méthodes seraient abstraites.
Déclarer une interface
On utilise le mot-clé interface à la place de abstract class.
Exemple : l’interface Runnable implémentée par les threads
p u b l i c i n t e r f a c e Runnable {
p u b l i c void run ( ) ;
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 48/85
Java en bref Le langage de programmation L’API Java
Les interfaces
Implémentation
Implémenter une interface
Fonctionne un peu à la manière d’un héritage en utilisant le
mot-clé implements.
Exemple : la classe thread qui implémente Runnable
p u b l i c c l a s s Thread implements R u n n a b l e {
p u b l i c Thread ( ) { t a r g e t= n u l l ; . . . }
p u b l i c Thread ( R u n n a b l e t ) { t a r g e t = t ; . . . }
...
p u b l i c v o i d r u n ( ) { i f ( t a r g e t != n u l l ) t a r g e t . r u n ( ) ;
}
...
p r i v a t e Runnable t a r g e t ;
...
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 49/85
Java en bref Le langage de programmation L’API Java
Les interfaces
Liens avec l’héritage
L’héritage multiple n’existe pas en Java mais :
• Il est possible d’implémenter plusieurs interfaces ;
• Chaque interface donne un comportement ;
• Une classe peut donc hériter de plusieurs comportement en
héritant plusieurs interfaces.
Remarque
Les interfaces sont un moyen détourné de permettre l’héritage
multiple en Java.
Jean-Yves Didier M1ISC option programmation avancée (Java) 50/85
Java en bref Le langage de programmation L’API Java
Les exceptions
Une exception :
• est émise par un système de détection des anomalies ;
• représente une erreur survenant à l’exécution d’un
programme ;
• hérite (directement ou indirectement) de la classe Exception.
L’origine de ces exceptions est de deux types :
• la machine virtuelle peut générer des exceptions (exemple :
dépassement d’index de tableau) ;
• le programmeur décide de déclencher des exceptions et de les
contrôler.
Jean-Yves Didier M1ISC option programmation avancée (Java) 51/85
Java en bref Le langage de programmation L’API Java
Les exceptions
Déclarer une exception
Il suffit d’hériter de la classe Exception.
Déclaration d’une exception
p u b l i c c l a s s MonException e x t e n d s E x c e p t i o n {
p u b l i c MonException ( ) {
s u p e r ( " Ceci est un message " ) ;
}
}
Déclencher une exception
La méthode déclenchant une exception doit comporter le mot-clé
throws dans leur signature.
Au moment où on déclenche l’exception, on utilise le mot-clé
throw.
Jean-Yves Didier M1ISC option programmation avancée (Java) 52/85
Java en bref Le langage de programmation L’API Java
Les exceptions
Exemple de déclenchement d’une exception
Exemple : la classe Integer
p u b l i c c l a s s I n t e g e r e x t e n d s Number {
...
public static int parseInt ( String s )
throws Num berF orma tExc epti on {
...
if (...)
throw new N um berF orma tEx cepti on ( ) ;
...
}
...
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 53/85
Java en bref Le langage de programmation L’API Java
Les exceptions
Traiter une exception
Il faut entourer l’instruction qui lance une exception par un bloc
try ... catch.
Structure d’un traitement d’exception
...
try {
...
// mé t h o d e q u i l a n c e une e x c e p t i o n
...
}
c a t c h ( MonException e ) {
// t r a i t e m e n t a s s o c i é à l ’ e x c e p t i o n
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 54/85
Java en bref Le langage de programmation L’API Java
Les exceptions
Traitement d’un exception
p u b l i c c l a s s TestNombre {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
i f ( a r g s . l e n g t h < 1)
return ;
try {
int res = Integer . parseInt ( args [ 0 ] ) ;
System . o u t . p r i n t l n ( " Le nombre pass é en param è tre
est "
+ res ) ;
}
c a t c h ( N u m b e r F o rmat Exce ptio n e )
{
System . o u t . p r i n t l n ( " Le param è tre pass é (" + a r g s
[0]
+ ") n ’est pas un nombre ." ) ;
}
}
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 55/85
Java en bref Le langage de programmation L’API Java
1 Présentation de Java
2 Le langage de programmation
Concepts et liens avec la machine virtuelle
Caractéristiques
Les éléments du langage
Programmation orientée objet
Héritage
Les exceptions
3 L’API Java
Les paquetages
Programmation d’interfaces graphique
Jean-Yves Didier M1ISC option programmation avancée (Java) 56/85
Java en bref Le langage de programmation L’API Java
API : Application Programming Interface
• L’API est l’interface (la partie exploitable et publique) d’une
bibliothèque de classes ou de fonctions.
• Dans le cas de Java, l’API est structurée en paquetages (en
anglais packages).
• Un package est un ensemble de classes gérant un même
aspect fonctionnel d’une application.
• La documentation complète de l’API Java se trouve là :
[Link]
Jean-Yves Didier M1ISC option programmation avancée (Java) 57/85
Java en bref Le langage de programmation L’API Java
Les principaux paquetages
[Link] : contient les classes de base utilisées par Java : Math,
Object, Exception, Integer, Double, Number,
System, String, Thread . . .
[Link] : manipule les entrées/sorties ;
[Link] : contient les primitives réseau : Socket . . .
[Link] : (Abstract Window Toolkit) englobe les routines de
base pour créer des interfaces graphiques ;
[Link] : englobe les routines avancées pour construire des
interfaces graphiques.
Jean-Yves Didier M1ISC option programmation avancée (Java) 58/85
Java en bref Le langage de programmation L’API Java
Le package Java
Le package Java
• Organise les classes de manière hiérarchique ;
• Peut contenir des sous-paquetages ;
• Est similaire à une arborescence dans un système de fichiers ;
Le mot clé package
L’appartenance à un package se traduit par l’utilisation du mot-clé
package au niveau des fichiers décrivant les classes.
La classe Integer du package lang
package l a n g ;
p u b l i c c l a s s I n t e g e r e x t e n d s Number
{ ... }
Jean-Yves Didier M1ISC option programmation avancée (Java) 59/85
Java en bref Le langage de programmation L’API Java
Utiliser un paquetage
Le mot-clé import
Exemple : définition d’une fenêtre
import j a v a . awt . ∗ ;
import j a v a x . s w i n g . ∗ ;
// j a v a x . s w i n g c o n t i e n t l a c l a s s e JFrame .
p u b l i c c l a s s MaFenetre e x t e n d s JFrame { . . . }
Exemple : la classe Object
import j a v a . l a n g . O b j e c t ;
// f a c u l t a t i f c a r j a v a . l a n g e s t i m p o r t é p a r dé f a u t
public class Bidule {
public Object clone () {
r e t u r n new B i d u l e ( ) ;
}
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 60/85
Java en bref Le langage de programmation L’API Java
Utiliser un paquetage
Le mot-clé import
Importer toutes les classes du paquetage
• Utiliser le wildcard ”*” après le nom du paquetage ;
• Exemple : import [Link].*;
Importer une classe en particulier
• Utiliser le nom de la classe après le nom du paquetage ;
• Exemple : import [Link];
Pour la suite . . .
Nous allons étudier diverses classes et paquetages
Jean-Yves Didier M1ISC option programmation avancée (Java) 61/85
Java en bref Le langage de programmation L’API Java
La programmation d’interfaces graphiques
Les paquetages utilisés
[Link] (depuis Java 1.0 - 1996) :
AWT pour Abstract Window Toolkit qui et le
système graphique de base.
[Link] : (depuis Java 1.2 - 1999) :
englobe les routines avancées pour construire des
interfaces graphiques.
Le paquetage swing
• Ensemble de classes redéfinissant les composants classiques
(fenêtres, bouton, etc) ;
• Apporte des classes plus riches (arbres, tableaux) ;
• S’appuie sur l’architecture Modèle-Vue-Contrôleur (MVC).
Jean-Yves Didier M1ISC option programmation avancée (Java) 62/85
Java en bref Le langage de programmation L’API Java
L’architecture Modèle-Vue-Contrôleur
• Mise au point en 1979 (Xerox) ;
• Impose une architecture de conception des Interfaces Homme
Machine (IHM) ;
• Est organisée en trois parties fondamentales :
Le modèle : représentation logique du comportement de
l’application ;
La vue : représentation visuelle du modèle ;
Le contrôleur : gère l’interaction avec l’utilisateur.
Jean-Yves Didier M1ISC option programmation avancée (Java) 63/85
Java en bref Le langage de programmation L’API Java
Exemple de création d’une fenêtre
La classe MaFenetre
import j a v a x . s w i n g . ∗ ;
p u b l i c c l a s s MaFenetre {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) {
JFrame f e n e t r e = new JFrame ( ) ;
f e n e t r e . s e t S i z e (300 ,50) ; // R e d i m e n s i o n n e r
l a f e n ê t r e
f e n e t r e . s e t T i t l e ( " Ma Fenetre " ) ; // L u i d o n n e r un
nom
f e n e t r e . s e t V i s i b l e ( true ) ; // La r e n d r e
visible
}
}
Résultat
Jean-Yves Didier M1ISC option programmation avancée (Java) 64/85
Java en bref Le langage de programmation L’API Java
Hiérarchie des classes AWT
Component
Container Button TextComponent Canvas
Panel Window TextField
Frame Dialog En italique :
les classes
abstraites
FileDialog
Jean-Yves Didier M1ISC option programmation avancée (Java) 65/85
Java en bref Le langage de programmation L’API Java
La surcouche swing (1/2)
Classes AWT Container
Classes Swing
JComponent
[Link] JList AbstractButton JScrollBar
JTextField JToggleButton JButton JMenuItem
JCheckBox JCheckBoxMenuItem
Jean-Yves Didier M1ISC option programmation avancée (Java) 66/85
Java en bref Le langage de programmation L’API Java
La surcouche swing (2/2)
Window
JWindow Dialog Frame
Classes AWT
JDialog JFrame
Classes Swing
Jean-Yves Didier M1ISC option programmation avancée (Java) 67/85
Java en bref Le langage de programmation L’API Java
Les contrôles usuels
JButton : bouton classique ;
JCheckBox : case à cocher ;
JTextField : champ de saisie de texte ;
JList : affiche une liste d’élément ;
JComboBox : liste déroulante ;
JMenuItem : élément d’un menu ;
JFrame : fenêtre ;
JDialog : boı̂te de dialogue ;
JOptionPane : boı̂tes de messages.
Jean-Yves Didier M1ISC option programmation avancée (Java) 68/85
Java en bref Le langage de programmation L’API Java
Mettre des éléments de contrôle dans une fenêtre
Une fenêtre possède un contenu interne de type Container :
• Il est accessible via la méthode getContentPane() ;
• On peut lui associer un gestionnaire de disposition
LayoutManager :
I Via la méthode setLayout(LayoutManager lm) ;
I Exemples de gestionnaires :
FlowLayout : disposition toute en ligne ;
BorderLayout : disposition nord-sud,est-ouest,centre ;
GridLayout : disposition en ligne et en colonne ;
GridBagLayout : organisation plus fine.
• On lui ajoute les contrôles via la méthode add(Component
cmp);
Jean-Yves Didier M1ISC option programmation avancée (Java) 69/85
Java en bref Le langage de programmation L’API Java
Exemple d’utilisation d’un gestionnaire de disposition
Exemple : la classe Widgets
import j a v a . awt . ∗ ;
import j a v a x . s w i n g . ∗ ;
p u b l i c c l a s s Widgets {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
JFrame f r a m e = new JFrame ( ) ;
Container cnt = frame . getContentPane ( ) ;
c n t . s e t L a y o u t ( new G r i d L a y o u t ( 3 , 2 ) ) ;
Butt on buttonAWT = new Button ( " Button " ) ;
...
J T e x t F i e l d t e x t S w i n g = new J T e x t F i e l d ( " JTextField " )
;
frame . s e t S i z e (200 ,100) ;
c n t . add ( buttonAWT ) ; . . . c n t . add ( t e x t S w i n g ) ;
frame . s e t V i s i b l e ( true ) ;
}
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 70/85
Java en bref Le langage de programmation L’API Java
Gérer les évènements
Evènement : définition
Une interface graphique se doit d’être interactive, c’est à dire de
réagir aux sollicitations de l’utilisateur. Cela se fait par le biais
d’évènements : la machine virtuelle Java interpréte les frappes de
touche du clavier et les clics de souris en évènements (qui héritent
de la classe AWTEvent du package [Link]) qui sont à
intercepter et à traiter par l’interface graphique.
Les méthodes principales de la classe AWTEvent
Object getSource() ; récupére le composant à la source de
l’évènement ;
int getID() ; retourne le type d’évènement ;
String paramString() ; donne une chaı̂ne de caractère représentant
l’évènement (à utiliser à des fins de débogage).
Jean-Yves Didier M1ISC option programmation avancée (Java) 71/85
Java en bref Le langage de programmation L’API Java
Les écouteurs
Intercepter un évènement
• importer le paquetage : import [Link].*;
• mettre en place un écouteur d’évènement (en anglais listener)
en définissant des méthodes de gestion des évènements ;
• lier l’écouteur et le composant source de l’évènement.
Principe général
Un écouteur est une classe qui implémente une interface
spécifique. En fonction du type de composant et d’évènement, on
implémentera telle ou telle interface.
Jean-Yves Didier M1ISC option programmation avancée (Java) 72/85
Java en bref Le langage de programmation L’API Java
Les écouteurs principaux
L’écouteur ActionListener
L’écouteur ActionListener :
• Reçoit les évènements de type action (ex : clic d’un bouton) :
ActionEvent
• Méthode à implémenter :
public void actionPerformed(ActionEvent e);
• Classes générant ces évènements :
Button, List, MenuItem, TextField, JButton, JList,
JMenuItem, JTextField
Jean-Yves Didier M1ISC option programmation avancée (Java) 73/85
Java en bref Le langage de programmation L’API Java
Les écouteurs principaux
L’écouteur FocusListener
L’écouteur FocusListener :
• Reçoit les évènements de type focus (le focus détermine quel
composant reçoit les frappes du clavier) : FocusEvent
• Méthodes à implémenter :
public void focusGained(FocusEvent e);
public void focusLost(FocusEvent e);
• Classe générant ces évènements :
Component
Jean-Yves Didier M1ISC option programmation avancée (Java) 74/85
Java en bref Le langage de programmation L’API Java
Les écouteurs principaux
L’écouteur ItemListener
L’écouteur ItemListener :
• Reçoit les évènements liés aux items (sélection/déselection
d’élements) :
ItemEvent
• Méthode à implémenter :
public void itemStateChanged(ItemEvent e);
• Classes générant ces évènements :
CheckBox, CheckBoxMenuItem, AbstractButton
Jean-Yves Didier M1ISC option programmation avancée (Java) 75/85
Java en bref Le langage de programmation L’API Java
Les écouteurs principaux
L’écouteur KeyListener
L’écouteur KeyListener :
• Reçoit les évènements liés aux frappes du clavier :
KeyEvent
• Méthodes à implémenter :
public void keyPressedEvent(KeyEvent e);
public void keyReleasedEvent(KeyEvent e);
public void keyTypedEvent(KeyEvent e);
• Classe générant ces évènements :
Component
Jean-Yves Didier M1ISC option programmation avancée (Java) 76/85
Java en bref Le langage de programmation L’API Java
Les écouteurs principaux
L’écouteur MouseListener
L’écouteur MouseListener :
• Reçoit les évènements liés aux clics et à l’entrée ou la sortie
de la souris par rapport à un composant : MouseEvent
• Méthodes à implémenter :
public void mouseClicked(MouseEvent e);
public void mousePressed(MouseEvent e);
public void mouseReleased(MouseEvent e);
public void mouseEntered(MouseEvent e);
public void mouseExited(MouseEvent e);
• Classe générant ces évènements :
Component
Jean-Yves Didier M1ISC option programmation avancée (Java) 77/85
Java en bref Le langage de programmation L’API Java
Les écouteurs principaux
L’écouteur MouseMotionListener
L’écouteur MouseMotionListener :
• Reçoit les évènements générés par le mouvement de la souris ;
MouseEvent.
• Méthodes à implémenter :
public void mouseDragged(MouseEvent e);
public void mouseMoved(MouseEvent e);
• Classe générant ces évènements :
Component
Jean-Yves Didier M1ISC option programmation avancée (Java) 78/85
Java en bref Le langage de programmation L’API Java
Les écouteurs principaux
L’écouteur TextListener
L’écouteur TextListener
• Reçoit des évènements lorsque le texte d’un champ est
modifié : TextEvent
• Méthode à implémenter :
public void textValueChanged(TextEvent e);
• Classes générant ces évènements :
TextComponent, [Link]
Jean-Yves Didier M1ISC option programmation avancée (Java) 79/85
Java en bref Le langage de programmation L’API Java
Les écouteurs principaux
L’écouteur WindowListener
L’écouteur WindowListener
• Reçoit des évènements lorsqu’une fenêtre est modifiée :
WindowEvent
• Méthodes à implémenter :
public void windowActivated(WindowEvent e);
public void windowClosed(WindowEvent e);
public void windowClosing(WindowEvent e);
public void windowDeactivated(WindowEvent e);
public void windowDeiconified(WindowEvent e);
public void windowIconified(WindowEvent e);
public void windowOpened(WindowEvent e);
• Classe générant ces évènements : Window
Jean-Yves Didier M1ISC option programmation avancée (Java) 80/85
Java en bref Le langage de programmation L’API Java
Exemple : le traitement d’un clic de bouton
La classe ButtonWindow
import j a va x . swing . ∗ ;
i m p o r t j a v a . awt . e v e n t . ∗ ;
c l a s s B u t t o n L i s t e n e r implements A c t i o n L i s t e n e r {
public void actionPerformed ( ActionEvent e ) {
J O p t i o n P a n e . s h o w M e s s a g e D i a l o g ( n u l l , " Well done ! " ) ;
}
}
p u b l i c c l a s s ButtonWindow {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
JFrame f r a m e = new JFrame ( ) ;
J B u t t o n b u t t o n = new J B u t t o n ( " Click me ! " ) ;
f r a m e . g e t C o n t e n t P a n e ( ) . add ( b u t t o n ) ;
frame . s e t S i z e (300 ,50) ;
frame . s e t V i s i b l e ( true ) ;
b u t t o n . a d d A c t i o n L i s t e n e r ( new B u t t o n L i s t e n e r ( ) ) ;
}
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 81/85
Java en bref Le langage de programmation L’API Java
Ajouter un menu
La classe JFrame peut possèder une barre de menu (JMenuBar) :
• Elle est accessible via les méthodes setJMenuBar() et
getJMenuBar() ;
• On peut lui ajouter un sous-menu JMenu :
I Constructeur : JMenu(String name) ;
I La méthode pour ajouter s’appelle add().
• On peut ajouter aux menus et sous-menus des éléments :
I JMenuItem : éléments normal d’un menu ;
I JCheckBoxMenuItem : élément cochable d’un menu ;
I Ou tout autre Component !
I Cela se fait via la méthode add() ;
I A chaque élément de menu, on peut ajouter un écouteur de
type ActionListener.
Jean-Yves Didier M1ISC option programmation avancée (Java) 82/85
Java en bref Le langage de programmation L’API Java
Exemple de menu
Exemple : la classe Menus
i m p o r t j a v a . awt . ∗ ;
i m p o r t j a v a . awt . e v e n t . ∗ ;
import j a va x . swing .∗ ;
p u b l i c c l a s s Menus {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
JFrame f r a m e = new JFrame ( ) ;
frame . s e t S i z e (200 ,100) ;
JMenuBar mb = new JMenuBar ( ) ;
JMenu m1 = new JMenu ( " toto " ) ;
JMenuItem mi = new JMenuItem ( " tutu " ) ;
mi . a d d A c t i o n L i s t e n e r ( new A c t i o n L i s t e n e r ( ) {
public void actionPerformed ( ActionEvent e ) {
J O p t i o n P a n e . s h o w M e s s a g e D i a l o g ( n u l l , " Action sur tutu "
);
} } );
mb . add (m1) ; m1 . add ( mi ) ;
f r a m e . setJMenuBar (mb) ;
frame . s e t V i s i b l e ( true ) ;
}
}
Jean-Yves Didier M1ISC option programmation avancée (Java) 83/85
Java en bref Le langage de programmation L’API Java
Les menus
Le résultat
Les autres types de menu
JPopupMenu : le menu surgissant ;
JToolTip : la bulle d’aide :
• Peut-être mise sur tout JComponent via la
méthode setToolTipText(String msg).
Jean-Yves Didier M1ISC option programmation avancée (Java) 84/85
Java en bref Le langage de programmation L’API Java
Pour conclure ...
Un tour d’horizon . . .
• Pour maı̂triser un langage de
programmation, il faut le
pratiquer.
• Comme dit l’adage, c’est en
forgeant qu’on devient forgeron.
Jean-Yves Didier M1ISC option programmation avancée (Java) 85/85