Vous êtes sur la page 1sur 86

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 http://java.com !

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é Programme.java.
Pour visualiser son exécution, il faudra :
1 Le compiler : javac Programme.java
I Cela produit du bytecode (fichier Programme.class).
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 HelloWorld.java
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 PassageInt.java
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 PassageString.java
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 = Math.sqrt(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à :
http://docs.oracle.com/javase/7/docs/api/

Jean-Yves Didier M1ISC option programmation avancée (Java) 57/85


Java en bref Le langage de programmation L’API Java

Les principaux paquetages

java.lang : contient les classes de base utilisées par Java : Math,


Object, Exception, Integer, Double, Number,
System, String, Thread . . .
java.io : manipule les entrées/sorties ;
java.net : contient les primitives réseau : Socket . . .
java.awt : (Abstract Window Toolkit) englobe les routines de
base pour créer des interfaces graphiques ;
javax.swing : 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 javax.swing.*;

Importer une classe en particulier


• Utiliser le nom de la classe après le nom du paquetage ;
• Exemple : import java.lang.Object;

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
java.awt (depuis Java 1.0 - 1996) :
AWT pour Abstract Window Toolkit qui et le
système graphique de base.
javax.swing : (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

text.JTextComponent 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 java.awt.event) 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 java.awt.event.*;
• 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, text.JTextComponent

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