Documente Academic
Documente Profesional
Documente Cultură
Enseignement : II74 GEII & GSI & RVSI- POO & IHM - Programmation orient objet (JAVA)
Objectif : Ce module se situe dans la continuit des modules GI62 et GI63 et permet de perfectionner les connaissances de la modlisation et
de la programmation orientes objet. Les notions de base de cration dinterface homme-machine graphique seront galement abords.
Le langage JAVA est pris comme exemple.
Avertissement : Ce cours suppose la connaissance et la matrise du langage C++
CONTENU DU COURS
HISTORIQUE ........................................................................................................................................................................................................................................................... 2
1.INRODUCTION ..................................................................................................................................................................................................................................................... 4
4. INTERFACES ..................................................................................................................................................................................................................................................... 33
5. PAQUETAGE ...................................................................................................................................................................................................................................................... 36
8. THREADS ............................................................................................................................................................................................................................................................ 58
10.APPLET .............................................................................................................................................................................................................................................................. 85
1 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
HISTORIQUE
1990-1992, projet Oak
Joy, Gosling (Sun)
Langage de programmation pour systmes embarqus:TV interactive,PDA,
But: avoir une plateforme commune.
Projet abandonn en 1992
LIENS WEB
http://java.sun.com/docs/books/jls/
http://java.sun.com/reference/docs/index.html
2 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
HISTORIQUE (Suite)
En Smalltalk :
En JAVA :
3 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
1.INRODUCTION
1.1 Objectif de Java
public class Pgme{
public static void main(...)...}
Compilation
javac Pgme.java
-
Code intermdiaire (Byte code) Pgme.class
Interprtation local ou distant
Sun HP PC
java Pgme.class
ou par l'intermdiare 4 http://lsc.univ-evry.fr/~mallem
d'un navigateur web
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Constitution :
Types de donnes
Les registres
Jeu dinstructions
5 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Simple
syntaxe du langage "C"
sr
pas de pointeurs, vrification de lintgrit du code l excution et des accs rseau et/ou
fichiers,cryptage des donnes vhicules sur le rseau
Orient Objet
Compltement orient objet(fichier,type primitif, chaine de caractres, exception, thread,) , pas
de variables ni de fonctions globales.
Robuste
ramasse miettes, fortement typ, gestion des exceptions,
Indpendant d une architecture
Portabilit assure par la prsence d un interprteur de bytecode sur chaque machine cible.
Environnement riche
Classes pour l accs Internet
classes standard compltes
fonctions graphiques volues
Applications interactives et rseaux
(alphanumrique ou graphique)
Stand alone : executable en local
applet : executable en local /rseau dans un navigateur Web
6 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Programme Minimal
Exemple 1.1 : pgme minimal ss java faisant appel une mthode de
sortie(printl)de l'objet (out) de la classe System :
public class PgmeMinimal // (1)
{ public static void main (String[] args) // (2)
{ System.out.println ("Universite d'Evry, UFR Sciences et Technologies, cours de
java") ; // (3)
}}
(1) : PgmeMinimal : classe thorique limite la dfinition de la mthode main ;
public utilis par la MV(Machine Virtuelle) de java pour accder la classe.
(2) : static : main n'est pas associe un objet (instance de la classe)
String[] args : tableau d'objets de type String quivalent argv du C/C++
public utilis par la MV(Machine Virtuelle) de java pour accder la mthode
main.
(3) : System : la classe
out : champ reprsentant la fentre d'affichage,
println : mthode d'affichage avec saut de ligne non attach un objet.
7 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Mise en uvre
Compilation :
[mallem@gsc18 ]$ /usr/java/j2sdk1.4.1_03/bin/javac PgmeMinimal.java
Le Programme doit avoir le mme nom que la classe thorique
La compilation produit un code intermdiaire("bytecode"), nomm PgmeMinimal.class
Execution :
[mallem@gsc18 ]$ /usr/java/j2sdk1.4.1_03/bin/java PgmeMinimal
Universite d'Evry, UFR Sciences et Technologies, cours de java
Lancement de la MV de java (Interprtation/execution)
Remarque :
Une application Java peut tre excute sur une plate-forme quelconque condition que celle-ci
dispose d'une Java Virtual Machine(JVM) prsente dans :
un environnement de dveloppement, par exemple le Java Development Kit (JDK),
un environnement d'excution comme le Java Runtime Environment (JRE) - (voir les produits
de Sun),
un navigateur Web capable java d'excuter des applet Java.
8 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Exemple 1.2 : Calcul trigonometrique - Utilisation des classes Clavier(Utilisateur) et System (java)
// La classe Calcul utilise la classe Clavier
public class Calcul
{ public static void main (String[] args)
{ int i ;
double angle,angledeg;
double sinus,cosinus ;
{ System.out.print ("Donnez un angle en degres : ") ;
angledeg = Clavier.lireDouble () ; angle=angledeg*3.14/180.;
System.out.print ("Cosinus (0) ou Sinus (1)? ") ;
choix = Clavier.lireInt () ;
if (choix==0)
{ cosinus = Math.cos(angle) ; System.out.println (angledeg + " a pour cosinus : " + cosinus) ;}
else {
sinus = Math.sin(angle) ; System.out.println (angledeg + " a pour sinus : " + sinus) ;}
}}}
/* rsultat d'excution
[mallem@gsc18 02]$ /usr/java/j2sdk1.4.1_03/bin/java Calcul
Donnez un angle en degrs : 90
Cosinus(0) et Sinus(1)? 0
90.0 a pour cosinus : 0
Donnez un angle en degrs : 0
Cosinus(0) et Sinus(1)? 1
0 a pour sinus : 0*/
9 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
2.SPECIFICITES DE JAVA
2.1 Introduction
pas de structures et d'unions,
pas de define
pas de pointeurs
pas d'hritage multiple bien que Java permet une classe d'implmenter plus d'une
interface.
pas de surcharge d'oprateurs
Les oprateurs du langage Java sont quasi identiques ceux du langage C.
Java peut tre considr comme un C++ allg de sa complexit formelle.
10 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
11 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
entier
signs seulement
type byte ( 8 bits), short ( 16 bits), int ( 32 bits), long ( 64 bits)
flottant
standard IEEE 754
type float( 32 bits), double (64bits)
boolen
type boolean (true,false)
caractre
unicode,
type char (16 bits)
Conversion implicite :
Byte short int long float double
Char short int long float double
12 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
2.4 Oprateurs
13 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
2.5 Tableaux
Dclaration
int[] tableau_entiers;
double tableau_reels[];
long[][] tableau_2D; ou long[]tableau_2D [] ;
Cration
tableau_entiers = new int[12];
tableau_reels = new double[23];
tableau_2D = new long[5][4]; // peut avoir des lignes de taille diffrentes
tableau_entiers.length() ; //donne la taille du tableau
Utilisation
public static int [] suite(int n) // Mthode permettant de crer et
{ int [] tab = new int [n] ; //initialiser un tableau dentiers et le
for (int i=0; i<n; i++) // retourner
tab[i] = 2 * i;
return tab ; }
14 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
t[0] 0 1 2 3
t[1] 1 2 3
t[2] 2 3
t[3] 3
[0] [1] [2] [3]
Remarques
Un tableau multidimensionnel est un tableau de tableaux.
La notion de tableau est gnralise.
La dimension dun tableau ne peut figurer dans la dclaration(int t[4] erreur)
15 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
3.CLASSES ET OBJETS
3.1 Dfinition dune classe :
class Point
{
// dfinition de Point
...
}
Remarques
Le code de la classe Point doit tre crit dans un fichier Point.java.
La dclaration et la dfinition dune classe sont combines.
Une classe dfini un type.
16 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
3.2 Instantiation
Point p1; // dclaration
p1 = new Point(); // instantiation
Point p2 = new Point(); // dclaration avec initialisation
Point p3 = null;
Remarques
Une variable est dclare avec un type.
Une variable contient une rfrence sur un objet.
Un objet est cr en instantiant une classe.
new est un oprateur dinstantiation.
null est une valeur qui dnote labsence dobjet.
null na pas de type.
Contrairement Smalltalk, null nest pas un objet.
17 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
18 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
19 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
3.4 Exemples
// Exemple 3.4a : appel du constructeur par dfaut
class Point
{
public void Affiche()
{System.out.println ("constructeur par defaut : " + x + " " + y) ;}
private int x, y ;
}
public class _ConstDefaut
{ public static void main (String args[])
{
Point a = new Point() ;
a.Affiche();
}
}
/* Resultats
[mallem@gsc18 objets]$ /usr/java/j2sdk1.4.1_03/bin/java _ConstDefaut
constructeur par defaut : 0 0
[mallem@gsc18 objets]$*/
20 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
21 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
22 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
24 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Champ statique :
Plusieurs objets dune mme classe peuvent se partager un champ statique
3 .6 Mthode de classe
Cest une mthode, dont la dfinition est prcde de static, et qui existe en un seul
exemplaire. Cette mthode ne peut agir que sur des champs de classe.
Cette notion est applique aux mthodes des librairies standard telles que Math
(exemple : Math.sqrt()).
Surdfinition de mthodes
Il sagit du mme mcanisme quen C++.
Exemple : constructeur par recopie
public Point (Point p)
{x=p.x ; y=p.y ;}
Point a = new Point (1,2) ; //constructeur usuel
Point b = new Point (a) ; //constructeur par recopie
}
26 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Par valeur. Les objets tant connus par leur rfrence (adresse). La mthode
appele travaille directement sur le mme objet que la mthode appelante.
Java ne dispose pas de pointeurs (absence des oprateurs * et &,->). Dans ce
cas, si une mthode appele doit modifier un paramtre pour la mthode
appelante, ce dernier doit obligatoirement tre un objet.
Un constructeur peut faire appel un autre en utilisant this qui doit tre la
1ere instruction de ce constructeur.
27 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
28 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
int m = nobj.intValue() ;
29 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
30 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
31 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Il existe galement la notion de mthode abstraite qui est dclare (prototype) mais non
dfinie.
public abstract void f()
Rgles :
. Une classe est abstraite si elle contient au moins une mthode abstraite,
. Une classe abstraite est forcment publique, car destine participer une drivation,
. Une classe drive dune classe abstraite nest pas oblige de re dfinir toutes les mthodes de
la classe abstraite. Si elle ne dfinit pas toutes les mthodes de la classe abstraite, elle devient
abstraite.
32 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
4. INTERFACES
4.1 Dfinition
Comme les classes abstraites, les interfaces permettent de dclarer des champs
(donnes et mthodes) sans les dfinir. Leur dfinition sera faite dans les classes
drives. La notion de classe abstraite est + gnrale que celle dinterface car elle
permet de dfinir des mthodes.
Exemple :
public interface I class A implements I
{ {
void f(int n) ; //A doit dfinir les mthodes de I
void g() ; }
}
Une classe peut implmenter plusieurs interfaces, il faudrait alors dfinir toutes les
mthodes de ces interfaces.
class A implements I1,I2,,In ( hritage multiple)
33 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
34 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
35 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
5. PAQUETAGE
5.1 Dfinition
Cest un regroupement logique, sous un identificateur, dun ensemble de classes qui se
partageront des donnes et mthodes.
5.2 Rgles :
Toutes les classes contenues dans un mme fichier source appartiennent au mme
paquetage par dfaut.
Le nom du paquetage correspond celui du rpertoire o il se trouve.
Un paquetage est unique pour une implmentation donne.
Lidentification dun paquetage se fait avec le mot cl package (Ex. package user)
La dsignation dun paquetage se fait de plusieurs faons :
Nom_paquetage.Nom_classe //dans une instruction
import Nom_paquetage.* //inclusion
import Nom_paquetage. Nom_classe //inclusion
Paquetages standards :
java.lang (contient les classes System, Math, Float, Integer ,)
java.awt ; java.swing (paquetages graphiques)
36 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
6. HERITAGE ET POLYMORPHISME
6.1 Introduction:
Terminologie :
mre, anctre, parente, super-classe
hritire, fille, drive, sous-classe
Hritage simple : (Java, Smalltalk)
Toutes les classes descendent dune superclasse Object
Une et une seule classe mre
Java : Une classe hrite dune autre mais peut implmenter plusieurs interfaces.
Hritage multiple : (C++)
Une classe peut ne pas avoir danctre
Plusieurs classes mres
Difficults pour lhritage rpt de membres :
Membres de mme nom
Mme classe hrite plusieurs fois
37 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Modificateur Signification
Public Accs pour tous
/ Accs depuis les classes du mme paquetage
38 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
//
Modificateur Signification
Public Accessible ds linstant o sa classe lest
Accessible depuis les classes du mme paquetage
protected Accessible depuis les classes drives ou celles du mme
paquetage
private Accs restreint la classe o est faite la dclaration du
membre ou de la classe interne
Rem. :
1)Il nya pas dexception faite, comme en C++, pour les fonctions amies
2)Il nya pas, comme en C++, de type dhritage private/protected .
40 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Exemple :
D E F G
41 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
6.5 Finalisation
42 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
6.6 Polymorphisme
Bas sur les notions de redfinition et de surdfinition de mthodes
6.6.1 Redfinition
Surcharge dune mthode en apportant une extension celle-ci. La redfinition
impose la mme signature (paramtres) et la mme valeur de retour la fonction
redfinie que celles de la mthode surcharge.
6.6.2 Surdfinition
Surcharge dune mthode en apportant une modification celle-ci. La surdfinition
nimpose pas la mme signature (paramtres) et la mme valeur de retour la fonction
redfinie que celles de la mthode surcharge.
Le polymorphisme permet de manipuler des objets sans en connatre parfaitement le
type. A (f)
Exemple : f est redfinie dans A, C et D.
dans la classe de lobjet layant invoque. Si chec, elle est B C (f)
recherche dans les classes ascendantes.
D(f) E F G
43 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
44 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
45 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
46 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
47 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
48 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Classe mre
toutes les autres classes Java descendent dObject
implictement une classe descend dObject
Mthodes de la Classe Object
Ces mthodes servent dcrire un objet et devraient tre surcharges par les
descendants de la classe:
toString() rend une version textuelle de lobjet appel implicitement si ncessaire.
equals() compare avec un autre objet rend true si gal.
Exemples :
Object o1 = new Point(1,2) ;
Object o2 = new Point(1,2) ;
o1.equal(o2) ; // retourne false
o1.toString() ; //retourne une chane de caractres contenant le nom de la classe et l@
de lobjet en hexadcimal.
49 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
7. EXCEPTION
7.1 Introduction
Cest une anomalie
Une exception reprsente une erreur qui survient lexcution. Elle peut avoir
+sieurs sources :
gnre par le systme (dpassement dindex de tableau), implicites et gres
par la MV. Linstant de leur occurrence nest pas connu lavance.
gnre explicitement par le programmeur et contrl par ce dernier.
50 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
7.2 Utilisation
- Cration
Pour dfinir une nouvelle catgorie dexception, il suffit de crer une sous-classe
dException. Une exception peut avoir ses propres variables dinstance et donc
transporter une information supplmentaire.
- Soulvement dune exception :
clause throw :
les mthodes susceptibles de lever une exception doivent le signaler : clause
throws suivant lentte de la mthode.
Capture dune exception : bloc try catch
try { bloc dinstructions pouvant soulever une ou plusieurs exceptions }
catch type dexception { bloc de traitement de lexception }
catch autre type dexception {bloc de traitement de lexception }
Rgles dutilisation
Une clause throw implique la prsence dune clause catch : une exception doit
tre traite,
La clause finally permet de spcifier un bloc de code qui doit tre excut avant
le programme de lexception ( rangement/sauvegarde,).
51 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
52 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
53 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
54 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
{}
7.3d Exemple : Relance dexception class Exception2 extends Exception
//lancement de l'exception Exception1 dans f car {}
p pour abscisse -1, le bloc catch de f est public class Relance
excut, ensuite il ya lancement de l'exception { public static void main (String args[])
Exception2. Comme il n'ya pas de bloc catch { try
correspondant dans f, celui de main est alors { Point a = new Point (1, 2) ;
excut. Ensuite il y a sortie du bloc try. a.f() ;
class Point }
{ public Point(int x, int y) throws Exception1 catch (Exception1 e)
{ if ( (x<0) || (y<0))throw new Exception1();(2) { System.out.println ("dans catch
this.x = x ; this.y = y ;} (Exception1) de main") ;
public void f() throws Exception2 }
{ try catch (Exception2 e)
{ Point p = new Point (-1, 0) ; } (1) { System.out.println ("dans catch
catch (Exception1 e) (Exception2) de main") ; (4)
{ System.out.println ("dans catch }
(Exception1) de f") ; (3) System.out.println("apres bloc try demain");(5)
throw new Exception2() ; // on lance une }}
nouvelle exception} $ /usr/java/j2sdk1.4.1_03/bin/java Relance
System.out.println ("apres bloc try de f") ; } dans catch (Exception1) de f (3)
private int x, y ; dans catch (Exception2) de main (4)
} apres bloc try de main (5)
class Exception1 extends Exception
55 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
56 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
57 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
8. THREADS
8.1 Introduction
Un thread est un objet de la classe Thread. Il sagit dun pseudo processus gr par la
Machine virtuelle.
8.1a Exemple :
59 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
60 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
rveil wait()
fin E/S sleep()
Cre stop() Mort
start() stop()
yield() interrupt()
Eligible Actif fin de run()
Attribution du
processeur par
l'ordonnanceur de la MV
61 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
8.2a Exemple
//Excution alterne de 3 threads this.attente = attente ;
public class threads }
{ public static void main (String args[]) public void run ()
{ Affiche t1 = new Affiche ("t1 ", 20) ; { try { while (true)
Affiche t2 = new Affiche ("t2 ", 10) ; { if (interrupted()) return ;
Affiche t3 = new Affiche ("t3 ", 30) ; System.out.print (texte) ;
t1.start() ; t2.start() ; t3.start() ; sleep (attente) ; }}
Clavier.lireString(); catch (InterruptedException e) {}
t1.interrupt() ; // interruption premier }
thread private String texte ;
System.out.println ("\n*** Arret premier private long attente ;
thread ***") ; }
Clavier.lireString();
t2.interrupt() ; // interruption deuxime
thread $ /usr/java/j2sdk1.4.1_03/bin/java threads
t3.interrupt() ; // interruption troisime t1 t2 t3 t2 t1 t2 t3 t1 t2 t2 t1 t3 t2 t1 t2 t3 t2 t1 t2
thread t3 t1 t2 t2 t1 t3 t2 t1 t2 t3 t2 t1 t2 t3 t1 t2 t2 t1 t3
System.out.println ("\n*** Arret deux t2 t2 t1 t3 t2 t1 t2 t3 t2 t1 t2
derniers threads ***") ;
}} *** Arret premier thread ***
class Affiche extends Thread t3 t2 t2 t3 t2 t2 t3 t2 t2 t3 t2 t2 t3 t2 t2 t3 t2 t2 t3
{ public Affiche (String texte, long attente) t2 t2 t3 t2 t2 t3 t2 t2 t3 t2 t2 t3 t2 t2 t3 t2 t2 t3 t2
{ this.texte = texte ; *** Arret deux derniers threads ***
62 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
/*
1 a pour carre 1
2 a pour carre 4
class ThrAff extends Thread 4 a pour carre 16
{ public ThrAff (Nombres nb) 5 a pour carre 25
{ this.nb = nb ; 7 a pour carre 49
System.out.println ("nb dans ThrAff "+ 8 a pour carre 64
nb.toString()) ; 10 a pour carre 100
} // Les threads cal et aff travaillent sur la
public void run () rfrence nb. Donc, la modification faite par
{ try cal est connue par aff .
{ while (!interrupted())
{ cal est le producteur
nb.affiche() ; aff est le consommateur
sleep (1000) ;
}
}
64 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
9. Programmation graphique
9.1 Introduction
Version Java Anne Librairies
1.0 1996 Awt,applet
1.1 1998
1.2 1999 +swing
1.3 2000
1.4 2002
JFC (Java Foundation Classes de JAVA 2 (1999)) : ensemble de classes qui enrichi de manire
significative la gestion de l'interface graphique actuelle AWT. Il se dcompose en diffrents types de
fonctionnalits :
Swing : ces nouvelles classes dfinissent un nouvel ensemble de composants reprenant les composants
classiques (bouton, liste,...) enrichi de composants plus complexes (arbre, tableau,...). Par ailleurs elle
dfini le Model-View-Controller (MVC) qui permet une meilleure gestion de l'apparence des
composants, des vnements et de la reprsentation des donnes.
Une interface utilisateur obissant l'architecture MVC est compos de trois type d'objets qui
communiquent entre-eux:
un modle qui une reprsentation logique de l'interface utilisateur
une vue qui est la reprsentation "visuelle" du modle
un contrleur qui gre l'interaction avec l'utilisateur.
Java 2D : ces nouvelles classes du package java.awt permettent d'effectuer des oprations plus riches
de dessins : dfinitions et compositions de formes, transformations, antialiasing, gestion plus riche des
polices de caractres...
Java 3D (compatible Java 2) : cette bibliothque permet de programmer de raliser des scnes
virtuelles en 3D, et permet de grer les clairages, les textures, les animations d'objets 3D.
66 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Exemple :
import javax.swing.* ;
public class fenetre0
{ public static void main (String args[])
{ JFrame fenetre = new JFrame() ; // Cration de lobjet de taille nulle
fenetre.setSize (300, 50) ; // Dimensionnement de la fentre
fenetre.setTitle ("Ma Fenetre") ; // Titre de la fentre
fenetre.setVisible (true) ; //Affichage de la fentre
}
}
La fentre(Affiche en haut gauche) est reprsente par un thread(qui subsiste aprs la
fin de main()). Pour la fermer, cliquer sur
67 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
9.2 vnements
9.2.1 Introduction
Un vnement est un message qu'un objet envoie un autre objet lui signalant la
survenue de quelque chose de ``remarquable''. Il y a donc un metteur et un rcepteur.
Dans une application graphique, il y a gnralement une quantit importante d'objets et
d'vnements possibles. Aussi, pour tre rcepteur d'un vnement, un objet devra
signaler son intrt pour cet vnement. Un mme vnement peut intresser plusieurs
objets et inversement un mme objet peut s'intresser plusieurs vnements.
LA JVM ragit aux vnements qui surgissent dans l'environnement du systme
d'exploitation (clic souris, frappe d'une touche ..) et les traduit en crant des objets de
la classe EVENT (dans java.awt.Event).
Pour intercepter les vnements il faut :
- importer java.awt.Event.*;
- poser des couteurs d'vnements sur les composants qui doivent interagir avec
l'utilisateur ,
- redfinir des mthodes gestionnaires d'vnements, automatiquement appeles.
68 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
69 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
70 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
9.2.4. Boutons
. Cration
- crer une fentre(constitue dune racine, dun contenu et dune vitre),
- crer le ou les boutons, les associer au contenu de la fentre, - le bouton est visible
par dfaut,
- choisir le gestionnaire de formes, permettant de redimensionner et de placer les
composants dans la fentre
71 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
- 9.2.4. Exemples
9.2.4a - Comment dsigner dans une fentre avec la souris?
73 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
74 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Quand un "clic" a lieu sur un bouton (c--dire presser et relacher un bouton de la souris), une instance de la
classe ActionEvent est envoye.(La souris gnre d'autres vnements, voir la classe MouseEvent).
Le bouton cliqu met de toute faon un vnement de type ActionEvent.
Mais pour le dtecter dans son code, le programmeur doit poser un couteur spcifique sur ce bouton. Cela
s'effectue par la mthode addActionListener() qui est dfinie dans la classe java.awt.Button
Plus prcisment, le bouton bouton1 est la source d'un objet-vnement de la classe ActionEvent
Le paramtre this signifie que c'est la classe courante, ici Fenetre, qui est destinataire de l'vnement et
qui va se charger d'y rpondre grce la mthode actionPerformed.
Pour pouvoir rpondre l'vnement clic mis, la classe laquelle est dlgue la charge de rpondre, doit
implmenter obligatoirement l' interface ActionListener .
Alors, Java excute automatiquement toutes les mthodes de toutes les interfaces implmentes .
Dans l'interface ActionListener, il n'y a qu'une seule mthode actionPerformed
(ActionEvent ev) excute automatiquement
Le programmeur doit "profiter" de l'appel automatique de cette mthode pour y associer le code qui dcrit la
raction souhaite au clic, ou plus gnralement le traitement souhait en raction l'vnement ev.
Ici, le code se borne vrifier que c'est bien le bouton bouton1 qui a t cliqu, et le signale en affichant le
message " action sur bouton 1" sur la console.
La mthode de base pour reconnatre le composant metteur est getSource() qui adress l'objet-
vnement ev renvoit l'objet de la classe mre Object.
75 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
76 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
9.3. Dessin
. Cration
77 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
9.3 Dessin
9.3.2 Exemple
import javax.swing.* ; g.setColor(Color.GREEN);
import java.awt.* ; g.fillOval (100, 20, 50, 30) ;
class Fenetre extends JFrame g.fillOval (10, 20, 50, 30) ;
{ Fenetre () }
{ setTitle ("Dessins ...") ; }
setSize (300, 150) ; public class dessins
p = new Panneau() ; { public static void main (String
getContentPane().add(p) ; args[])
} { Fenetre f = new Fenetre() ;
private JPanel p ; f.setVisible(true) ;
} }
class Panneau extends JPanel
{ public void
paintComponent(Graphics g)
{ super.paintComponent(g) ;
g.drawLine (40, 80, 80, 20) ;
g.drawRect (30, 90, 70, 10) ;
78 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
79 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
9.4. Menus
80 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
81 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
82 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
83 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
84 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
10.Applet
10.1 Introduction
10.1a Def. :Une applet est un programme qui est excut suite l'analyse d'un fichier
HTML contenant le nom et les paramtres de l'applet.
Applet.html Applet.class
Appletviewer/Browser
85 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
La mthode stop() ne fait rien par dfaut, l'applet pourra donc continuer
s'excuter en arrire plan.
Entre un appel start() et l'appel suivant stop() la mthode isAlive
retourne true.
86 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
87 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
Applet0
88 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
// Applet1.html
<HTML> // Applet1.java
<BODY> import javax.swing.* ;
<APPLET public class Applet1 extends JApplet
CODE = "Applet1.class" { public void init ()
WIDTH = 250 { String fichier = getParameter ("fichier") ;
HEIGHT = 100 String proprio = getParameter ("proprio") ;
> int uid ;
<PARAM NAME = "fichier", VALUE = "f.dat"> System.out.println ("Fichier = " + fichier) ;
<PARAM NAME = "proprio", VALUE = "250"> System.out.println ("Proprietaire = " + proprio ) ;
> uid = Integer.parseInt(proprio) ;// conversion ASII-
</APPLET> INT
</BODY> }
</HTML> }
Fichier = f.dat
Proprietaire = 250
89 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
90 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
10.4a Actions
1) Supprimer main() ,
2) Transformer lobjet JFrame (cre en gnral par main()) en un objet driv
de JApplet. Eviter de doter cette classe de constructeur et confier ce travail
la mthode init(),
3) Supprimer les fonctions de dimensionnement (setSize(), setBounds()) et de
commentaires (setTitle()) de fentre,
4) Editer le fichier HTML de lapplet,
91 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
92 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
11.2. Catgories
On en distingue :
- flux binaires (les images, vidos, sons, )
- flux texte (fichiers issus de traiteur de textes).
On distingue quatre classes principales dont toutes les autres hritent des reprsentations et
comportements propre chaque famille.
java.io.InputStream (flot binaire en lecture),
java.io.OutputStream (flot binaire en criture),
java.io.Reader (flot texte en lecture),
java.io.Writer (flot texte en criture).
93 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
94 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
95 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
96 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
97 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
do
{ ligne = entree.readLine() ;
if (ligne != null) System.out.println (ligne) ;
}
while (ligne != null) ;
entree.close () ;
System.out.println ("fin fichier " +f);
}
99 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
12 LES COLLECTIONS
100 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
- Fusion ( collection1.addAll(collection2)),
- Suppression (collection1.removeAll(collection2)), - supprime de collection1 tous les lments trouvs
dans collection2,
- Suppression (collection1.retainAll(collection2)), - supprime de collection1 tous les lments non
trouvs dans collection2,
-
101 http://lsc.univ-evry.fr/~mallem
Universit d'Evry-Val d'Essonne - UFR Sciences & Technologies/Dpt de Gnie Informatique/Master 1 E3A
104 http://lsc.univ-evry.fr/~mallem
TD1 : Notions de classe et de mthodes 32.4 puissance -2 = 9.525986892242037E-4 Cette mthode permet de lire une chane termine par
Exercice 1 : ENTER saisie au clavier(System.in)
//execution pour n=0 et la convertir en double.
crivez une classe en Java appele Calcul $ java Puissance.class 0
12.0 puissance 0 = 1 Q.2) une mthode permettant de traduire la moyenne en
effectuant la somme et la moyenne des lments du -5.3 puissance 0 = 1 une mention selon :
tableau t dfini ainsi : 0.0 puissance 0 = Pas dfini
int[] t = {12, 24, 12, -4, 6, 99, 22} ; 32.4 puissance 0 = 1 Note moyenne Mention
dans la fonction main qui se charge dappeler les */ note >= 18, Excellent
deux mthodes statiques somme et moyenne et Note : Il ne sagit pas dutiliser une classe pr existante 18 > note >= 16, TresBien
dafficher les rsultats. dans les packages java mais crire votre propre classe. 16 > note >= 14, Bien
Ces deux mthodes ont pour prototypes : Exercice 3 : 14 > note >= 12, AssezBien
public static int somme(int[] tab) On appelle palindrome un mot pouvant se lire 10 >=note < 12, Passable
public static int moyenne(int[] tab) indiffremment dans les deux sens : par exemple note < 10. Ajourn
Laval, elle, ici, Plus formellement, un mot de
longueur l est un palindrome si pour tout indice i<l, Le prototype de cette mthode est :
Exercice 2 : static String traduction(double moyenne)
le caractre la position i est gal au caractre la
crire une classe en Java appele Puissance effectuant la position l-i-1.
puissance des lments du tableau t dfini ainsi dans la Des exemples de rsultats sont fournis ci-dessous :
Il sagit dcrire une classe en Java appele $ java Mention.class
mthode main :
Palindrome constitue de : Entrez votre moyenne et tapez ENTER : 16.56
double [] t = {12, -5.3, 0, 32.4} ;
Cette classe calcule et affiche la valeur de x^n (lire x Votre mention est : TresBien
puissance n) o x est un rel (lment du tableau t) et n 1. Une mthode statique appele palindrome
un entier introduit comme argument de la ligne de prenant en argument un tableau de $ java Mention.class
commande. Pour une excution du programme, n est caractres s et renvoyant un boolen Entrez votre moyenne et tapez ENTER : 11.89
unique et sera appliqu tous les lments du tableau t. indiquant si le tableau est un palindrome. Votre mention est : Passable
Ci-deesous sont indiqus des exemples dexecution du Le prototype de cette dernire est :
programme Puissance.class. $ java Mention.class
public static boolean palindrome(String s) Entrez votre moyenne et tapez ENTER : 9.5
/* EXEMPLES DE RESULTATS Votre mention est : Ajourn
2. La mthode statique main permettant de
//execution pour n=2
$ java Puissance.class 2 tester cette fonction. La chane de
12.0 puissance 2 = 144.0 caractres tester sera rcupre par main
-5.3 puissance 2 = 28.09 sur la ligne de commande.
0.0 puissance 2 = 0.0
32.4 puissance 2 = 1049.76 Exercice 4 :
Ecrire une classe JAVA, nomm Mention, permettant
//execution pour n=-2 d'afficher la mention obtenue en fonction de la note
$ java Puissance.class -2 moyenne saisie au clavier.
System.out.println () ;
}
TD3 : Notions de classes et dhritage Anglais(){ }
Exercice 1 : super();} }
Il s'agit d'analyser le programme Java suivant ,
et de rpondre aux diffrentes questions. Anglais(boolean masc){ Q. 1- Que signifie la prsence de "abstract" dans la
super(masc);}
abstract class Homme{ dfinition de la classe "Homme" ?
protected int age; public void direBonjour(){
protected boolean masculin; System.out.println("Good morning ");}
Q. 2- Que signifie la prsence de "abstract" dans la
} //fin classe Anglais
dfinition de la mthode "direBonjour" de la classe
Homme(){
"Homme" ?
age = 20; class Hollandais extends Homme{
Q. 3-Quel est l'affichage produit par l'excution de
masculin = false;} Hollandais(){
ce programme ?
super();}
Q. 4-Quel intrt prsente une classe abstraite ?
Homme(boolean masc){
age = 20; Hollandais(boolean masc){
if (masc){ super(masc);} Exercice 2 : Indiquer le cas chant le numro de
masculin = true;} la ou des lignes provoquant une erreur de
else { public void direBonjour(){ compilation. Prciser lorigine de lerreur et
masculin = false;}} System.out.println("Goeie dag ");} justifier votre rponse.
} //fin classe Hollandais 1. class A {
abstract public void direBonjour(); 2. }
public int getAge(){ class Bonjour{ 3. class B extends A {
return age;} public static void main(String[] argv){ 4. }
Homme personnes[] = new Homme[3]; 5. public class Main {
public boolean getMasc(){ personnes[0] = new Anglais(); 6. public static void main(String args[]) {
return masculin;} personnes[1] = new Hollandais(false); 7. A a=new A();
} // fin classe Homme personnes[2] = new Francais(true); 8. B b=new B();
for (int i = 0; i < 3; i++){ 9. A a1=b;
class Francais extends Homme{ personnes[i].direBonjour(); 10. a1=(B)b;
Francais(){ System.out.println("J'ai " + 11. b=(B)a;
super();} personnes[i].getAge() + " ans."); 12. }
Francais(boolean masc){ System.out.print("Je suis "); 13. }
super(masc);} if (personnes[i].getMasc()){
System.out.println("un homme."); Exercice 3 : quel est le rsultat affich par
public void direBonjour(){ } lexcution de ce programme. Justifier votre
System.out.println("Bonjour");} else{ rponse.
} //fin classe Francais System.out.println("une femme.");
} 1. class A {
class Anglais extends Homme{ } 2. public boolean equals(A obj) {
3. System.out.println("A equals"); 11. try { 8. for (int i=0;i<9;i++) {
4. return true; 12. Thread.sleep(1); 9. j=j+i;
5. } 13. } catch (InterruptedException e) { 10. }
6. } 14. return; 11. System.out.println(j);
15. }
7. class B extends A { 12. }
16. System.out.println("Run : Thread numero " +
8. public boolean equals(B obj) { numero + " termine." ); 13. }
9. System.out.println("B equals"); 17. } 14. class Main3
10. return true; 15. {
11. } 18. public static void main(String args[]) { 16. public static void main(String args[]) {
12. } 19. System.out.println("Main : Programme demarre.."); 17. for (int i=0;i<4;i++) {
13. class Main2 { 20. for (int i=0; i < 3; i++) { 18. new
14. public static void main(String args[]) { 21. Thread unThread = new Threads(); Somme("Somme"+Integer.toString(i)).start();
15. B b=new B(); 22. unThread.start(); 19. }
23. }
16. A a=b; 20. }
24. System.out.println("Main : Programme principal
17. Object o=a; termine."); 21. }
18. System.out.println(b.equals(b)); 25. }
19. System.out.println(b.equals(a)); 26. } Q2 : Lajout de linstruction sleep(j) aprs la
20. System.out.println(a.equals(b)); ligne 11 engendre une erreur. Laquelle ?
21. System.out.println(o.equals(b));
1 Combien de threads ce programme permet il Proposez une modification du programme pour
22. }
d'engendrer ? permettre linsertion de cette instruction dans le
23. }
2 quel est le rle de la ligne 12 ? programme.
3 Quel est l'affichage produit par l'excution de ce
Exercice 5:
programme ?
Il s'agit d'analyser le programme Java suivant , et de
4 Quel est le nouveau affichage produit par l'excution de
rpondre aux diffrentes questions.
ce programme, si les lignes 11-15 sont supprimes?
1. public class Threads extends Thread {
Question 1 :
Le programme " boutons.java " donn comme base, et tudi en cours, permet de crer deux boutons,
en utilisant la librairie swing de java 2 et de mettre en place un couteur sur ces derniers.
Question 2 :
Le programme " cases1.java " donn comme base permet de crer une case cocher et d'installer
l'couteur correspondant et un bouton donnant l'tat de la case cocher.
Il s'agit d'tudier, de comprendre et de commenter ce programme d'une part et de le modifier d'autre
part. La modification consiste le combiner avec votre programme, solution de la question 1. En effet la case
cocher, l'tat " true ", servira rendre actifs tous les boutons quelque soit leur tat.
Vous pouvez constater le resultat attendu en executant le fichier " case_bouttons.class ".
Question 3 :
Le programme " dessins.java " donn comme base, et tudi en cours, permet de crer des dessins 2D
en java 2.
Question 1 :
Il s'agit de modifier l'application Boutons2.java ralise dans le TP prcdent (q1tp2) en une applet
JAVA (Boutons_Applet.java) en utilisant la librairie JApplet de swing ainsi que les mthodes de bases
init(), start(), stop() et destroy() grant la vie dune applet.
Notes : Le fichier Boutons2_Applet.class n'est pas excut par l'interprteur java.exe (lequel
appelle toujours la mthode principale main()). C'est l'interprteur Java intgr dans le navigateur
(ou dans un visualisateur dapplet tel que appletviewer ) qui prend en charge l'excution en chargeant
le fichier repr dans la balise <APPLET > et qui doit se trouver obligatoirement dans l'attribut
CODE (ventuellement en le cherchant l'URL indique par CODEBASE) dans le fichier index1.html.
Question 2 :
Question 3 :
Poursuite du TP2 et Transformation de lapplication case_bouttons_dessins en applet
JAVA
Question 4 :
Poursuite du TP2 et Transformation de lapplication case_bouttons_dessiner en applet
JAVA
Annexe
/* Explications sur les mthodes de la classe JApplet
Une applet possde un comportement standard, un "cycle de vie" par dfaut.
Ceci grce 4 mthodes prdfinies init(), start(), stop() et destroy().
Ces mthodes standard, automatiquement appliques un objet qui hrite de
la classe Applet ou JApplet permettent de contrler son excution.
Ces mthodes peuvent tre adaptes (surcharges) par le programmeur.