Title: SOMMAIRE
1SOMMAIRE
- Débuter 2
- Continuer 20
- Héritage 36
- Classes abstraites 57
- Interfaces 64
- Paquetages 74
- Niveaux de visibilité 81
- Exceptions 89
- Interfaces graphiques 100
2Débuter
3Java - introduction
- langage objet
- compilé et interprété
- compilation ? bytecode (indépendant de
larchitecture) - exécution nécessite une machine virtuelle
Java (spécifique à un système) qui interprète
le bytecode pour lexécuter
4Java - introduction
- lAPI (livrée avec Java) multiplicité des
paquetages, qui contiennent de multiples classes,
qui contiennent de multiples fonctions ?
nouvelle méthode de travail - permet les applets
- facilite la manipulation des threads (accès
concurrents, synchronisation) - donne des programmes fiables , robustes ,
sûrs , efficaces ...
5En C et pas en Java
- ni fonctions globales, ni variables globales
- pas de directives de compilation (include,
define...) - pas de manipulation explicite des adresses en
mémoire (pas de pointeur explicite, pas
darithmétique sur les pointeurs) - inutile de désallouer de lespace-mémoire alloué
dynamiquement un ramasse-miette soccupe de
cette tâche - pas dinstruction goto (mais des étiquettes de
boucle) - pas de structure, pas dunion, pas de champ de
bits.
6Premier programme
- se trouve dans le fichier Bienvenue.java
- est compilé par javac Bienvenue.java
- ce qui crée un fichier Bonjour.class
- est exécuté avec java Bonjour
class Bonjour public static void
main(String arg)
System.out.println("bonjour")
A lexécution, on a java Bonjour
bonjour
7Classe champs de classe, ou statiques
- Tout code Java est défini dans des classes (ou
des interfaces). - Champ grosso modo attribut (variable) ou
méthode (fonction) - Les classes contiennent deux types bien distincts
de champs - champs de classe, ou statiques (usage mineur)
- champs dinstance (usage majeur)
attributs dinstance
attributs
attributs statiques
classe
méthodes dinstance
méthodes
méthodes statiques
8Classe nayant que des champs statiques
- class Ordre
-
- static int seuil 10
- static int min(int a, int b)
-
- if (a lt b) return a
- else return b
-
- static boolean grand(int a)
-
- if (a gt seuil) return true
- else return false
-
9Utilisation de la classe Ordre
class EssaiOrdre public static void
main(String arg) int n
Integer.parseInt(arg0) int p
Integer.parseInt(arg1)
System.out.println("le plus petit "
Ordre.min(n, p)) if (Ordre.grand(n))
System.out.println(n " est grand") else
System.out.println(n " est petit")
System.out.println(" le seuil vaut "
Ordre.seuil)
- le plus petit 6
- 14 est grand
- le seuil vaut 10
java EssaiOrdre 14 6
10Classe modèle dobjet
- Modélise une entité.
- Est destinée à être instanciée, pour obtenir des
objets construits selon ce modèle. - Comporte
- des attributs qui contiennent les
caractéristiques physiques de lobjet - des méthodes qui gèrent les attributs
- des classes internes.
- Une classe qui ne comporterait que des attributs
ressemblerait à un type structure du C.
11Une classe très simple
class Point //Les attributs int x, y /
Méthode qui translate le point / void
translate(int h, int k) x h y
k
12Dans une autre classe
class Point int x, y void translate(int
h, int k) x h y k
On dit que l on instancie la classe Point on
crée ainsi un objet
new Point()
p
p.x 1
p.y 2
p.translate(3, 4)
0
0
6
1
2
4
pour x
pour y
13Utilisation dun constructeur
- class NouveauPoint
-
- // Les attributs
- int x, y
-
- // Constructeur de la classe
- NouveauPoint(int abs, int ord)
-
- x abs
- y ord
-
-
- // Translate le point
- void translate(int h, int k)
-
- x h
- y k
-
14Utilisation dun constructeur - suite
- class EssaiPoint
-
- public static void main(String arg)
-
- NouveauPoint p new NouveauPoint(1, 2)
- NouveauPoint q
-
- q p
- p.translate(2, 4)
-
- System.out.println("Abscisse de p " p.x)
- System.out.println("Abscisse de q "
q.x) -
15Définir des tableaux - 1
- class TableauA
-
- public static void main(String arg)
-
- boolean tableau true, false, true
- System.out.println("Deuxieme element"
- "de tableau " tableau1)
-
A lexécution, on obtient Deuxieme element de
tableau false
16Définir des tableaux - 2
- class TableauB
-
- public static void main(String arg)
-
- int tableau
- tableau new int2
- tableau0 4
- tableau1 -5
- System.out.println(tableau1)
-
-5
A lexécution, on obtient -5
17Longueur dun tableau
- class TableauC
-
- public static void main(String argv)
-
- int tableau new int3
- System.out.println("Taille du tableau "
- tableau.length)
- try
-
- tableautableau.length 1
-
- catch(ArrayIndexOutOfBoundsException e)
-
- System.out.println(e ", dehors !")
-
-
Taille du tableau 3 java.lang.ArrayIndexOutOfBou
ndsException 3, dehors !
18Tableaux à deux dimensions
- class TableauDouble
- public static void main(String argv)
- int tableau
- int i, j
- tableau new int23
- for (i 0 i lt tableau.length i)
- for (j 0 j lt tableaui.length j)
- tableauij i j
- tableau new int2
- for (i 0 i lt tableau.length i)
- tableaui new inti 2
- for (j 0 j lt tableaui.length j)
- tableauij -(i j)
-
-
19Les chaînes de caractères exemple
- class Concat
-
- public static void main(String argv)
-
- String chaine "le soleil"
- double x 51.2
- System.out.println("longueur de java "
- "java".length())
- System.out.println("reussi " (2 1
1)) - System.out.println("valeur " x)
- System .out.println(2 3 " font " 2
3) - chaine chaine.concat(" et la lune")
- System.out.println(chaine " brillent")
- chaine chaine.toUpperCase()
- System.out.println(chaine)
-
longueur de java 4 reussi true valeur 51.2
5 font 23 le soleil et la lune brillent LE
SOLEIL ET LA LUNE
20Continuer
21Types primitifs
- Les types primitifs sont
- le type booléen boolean
- pas un type entier,
- valeurs false et true
- le type caractère char pas vraiment un type
entier - les types entiers byte, short, int et long
- les types nombres flottants float et double.
22Types référence
- Toutes les variables qui ne sont pas dun type
primitif sont des variables de type référence
i.e. des adresses - int tableau new int3
- Point p new Point()
- Terminologie
- Point p new Point()
-
- On dira que p est
- de type référence dune instance de Point
- de type Point
- On dira que linstance créée est
- linstance référencée par p
- lobjet p
p
23Initialisation des attributs
- Les attributs sont initialisés par défaut
- Types primitifs
- boolean false
- char \0 i.e. 0
- byte, short, int, long, float, double 0
- variable de type référence null (minuscule)
- Les contenus des tableaux sont initialisés par
défaut. - Les variables locales ne sont pas initialisées.
24Récapitulatif sur les champs statiques
- Aussi dits champ de classe.
- Indiqués par le modificateur static.
- Attribut statique existe dès quune classe
est chargée en mémoire reste en exemplaire
unique (chargement en mémoire dès que
nécessaire) joue un peu le rôle dune
variable globale . - Méthode statique ne peut utiliser aucun
attribut ou aucune méthode non statique de sa
classe. - Utilisation dun champ de classe précédé du nom
de la classe - Exemples Math.sinus(1)
- Integer.MAX_VALUE
- Color.red
25Champs statiques et champs dinstance
- class Joueur
- String nom
-
- Joueur(String le_nom)
- nom le_nom
-
-
- class OutilsJeu
-
- static java.util.Random grandDé new
java.util.Random() -
- static int jet()
- return Math.abs(grandDé.nextInt()) 6 1
-
-
- class Essai
- Joueur joueur new Joueur("Frédéric")
26Exercice - 1
- Ajouter à la classe NouveauPoint une méthode qui
calcule la distance entre deux NouveauPoint
reçus en paramètre. Cette méthode doit-elle de
préférence avoir le modificateur static ? - Compléter la méthode main ci-dessous pour que
saffiche la distance du point p au point q.
static double distance(NouveauPoint p,
NouveauPoint q) return Math.sqrt((p.x - q.x)
(p.x - q.x) (p.y - q.y) (p.y -
q.y))
public static void main(String arg)
NouveauPoint p new NouveauPoint(2, 3)
NouveauPoint q new NouveauPoint(5, 7)
System.out.println(
)
NouveauPoint.distance(p, q)
27Exercice - 2
- Ajouter à la classe NouveauPoint une méthode qui
calcule la distance du point modélisé à un
NouveauPoint reçu en paramètre. Cette
méthode peut-elle avoir le modificateur static ? - Compléter la méthode main ci-dessous pour que
saffiche la distance du point p au point q en
utilisant la méthode ci-dessus.
double distance(NouveauPoint p) return
Math.sqrt((p.x - x) (p.x - x) (p.y
- y) (p.y - y))
public static void main(String arg)
NouveauPoint p new NouveauPoint(2, 3)
NouveauPoint q new NouveauPoint(5, 7)
System.out.println( )
q.distance(p)
28Utiliser la référence this
System.out.println(this)
- class TresSimpleBis
-
- int n
-
- TresSimpleBis (int n)
-
- this.n n
-
class TresSimple int n TresSimple(int
v) n v
Cette classe est équivalente à celle de gauche
29La référence this
La référence de lobjet concerné, modélisé.
- class Simple
- int n
-
- Simple(int valeur)
- n valeur // signifie this.n valeur
-
-
- void doubler()
- n 2 n // signifie this.n 2 this.n
-
- void transformer()
- doubler() // signifie this.doubler()
- n 1 // signifie this.n 1
-
30Surcharge de méthodes
- Une classe peut définir plusieurs méthodes de
même nom mais différant - par les types de leurs arguments
- lordre des types de leurs arguments
- Remarque - Une différence uniquement sur le
type de la valeur de retour interdit. - La bonne méthode sera utilisée concordance
entre les types des paramètres dappel et les
arguments de la méthode.
31Utilisation de la surcharge
class EssaiSurcharge public static void
main (String argv) int n
double x Surcharge s new Surcharge()
n s.operation(2) x s.operation(1.5,
4) x s.operation(4, 1.5) s
new Surcharge(7, 2.0)
- class Surcharge
- int n 1
- double x 3.5
- Surcharge()
- Surcharge(int n, double x)
- this.n n
- this.x x
-
- int operation(int p)
- return 10p n
-
- double operation(double y, int p)
- return xp y
-
32Les constantes
- Un attribut déclaré final ne peut être
initialisé quune et une seule fois. Il sert à
définir des constantes. - Constantes de classe
- final static int MAX 100
- Doit être initialisée une fois et une seule, par
un initialiseur statique. - Constante dinstance
- Pour une constante qui dépend de linstance.
- final int MAX 2
- Doit être initialisée explicitement, une et une
seule fois - soit au moment de sa définition (plus logique
den faire une constante de classe) - soit par tout constructeur linitialisation
peut dépendre de linstance. - Ne peut pas être modifiée.
33Linstruction import
- Classe dans un paquetage possède un nom long
- Exemple classe Vector dans le paquetage
java.util - nom long java.util.Vector
- Linstruction import permet dutiliser les noms
courts. - Elle n importe rien.
- On peut utiliser les noms courts des classes du
paquetage java.lang sans lindiquer par
linstruction import. - Exemple System, Integer
34Linstruction import - suite
- Pour utiliser la classe java.util.Vector, trois
possibilités - Toujours la nommer java.util.Vector
- Mettre en début du fichier
- import java.util.Vector
- Mettre en début du fichier
- import java.util.
- Deux derniers cas on peut nommer Vector la
classe java.util.Vector. - Dernier cas possibilité nom court pour toutes
les classes du paquetage java.util.
35Linstruction import - exemple
- import java.util.Random
- import java.util.Vector
- class TableauAleatoire
-
- static void emplit(Vector vecteur)
-
- Random alea new Random()
- for (int i 0 i lt 10 i)
- vecteur.addElement (new Integer
- (Math.abs(alea.nextInt()) 100))
-
36Héritage
37Héritage
- Principe fondamental des langages objets.
- Toute classe, sauf la classe java.lang.Object,
hérite dune et une seule classe sa
superclasse. - Une classe (autre que la classe Object) qui
nindique pas sa superclasse hérite
automatiquement de la classe Object.
38Héritage - suite
- class B extends A
- ...
- On dit
- A est la superclasse de B
- B hérite de A
- B est une sous-classe de A
- B étend A.
- B dispose de tous les attributs et méthodes (non
privés) de A sy ajoutent des attributs et des
méthodes qui lui sont propres.
39Héritage - suite
-
- Une classe ne peut étendre quune seule classe
pas d héritage multiple . - Une classe déclarée final ne peut pas être
étendue -
class Point // ? class Point extends Object
...
final class A ...
40La classe Mammifere
- class Mammifere
- int taille
- Mammifere(int taille)
- this.taille taille
-
- String description()
- return "Animal à sang chaud mesurant "
- taille " cm."
-
41La classe Herbivore
- class Herbivore extends Mammifere
- boolean ruminant
- Herbivore(int taille, boolean ruminant)
- super(taille)
- this.ruminant ruminant
-
- int poids()
- return 2 taille
-
- String nourriture()
- if (ruminant) return "Il mange des vegetaux et
rumine." - else return "Il mange des vegetaux et ne rumine
pas." -
- public static void main(String arg)
- Herbivore herbivore new Herbivore(200, true)
Animal à sang chaud mesurant 200 cm. Il mange des
vegetaux et rumine.
La classe Herbivore dispose de la méthode
description de sa superclasse
42Récapitulatif sur les constructeurs
- Méthode qui sert à construire les objets
- Automatiquement appelé quand on instancie une
classe. - Toute classe possède au moins un constructeur.
- Même nom que sa classe.
- Pas de valeur explicite de retour.
- Si pas de constructeur, le compilateur en
- ajoute automatiquement un.
class MaClasse MaClasse() super()
. . .
43Chaînage des constructeurs
- tout constructeur, sauf celui de la classe
Object, fait appel à un autre constructeur qui
est - un constructeur de sa superclasse
- un autre constructeur de la même classe.
- Appel nécessairement en première ligne du
constructeur. - En cas dabsence de cet appel, le compilateur
ajoute super()
44Exemple sur les constructeurs
- class A
- A()
- System.out.println("constructeur de A")
-
-
- class B extends A
- B()
- System.out.println("constructeur de B")
-
- B(int r)
- this()
- System.out.println("autre constructeur de
B") -
-
- class C extends B
constructeur de A constructeur de B autre
constructeur de B constructeur de C
45Exercice
Message du compilateur ? (le fichier s appelle
Essai.java)
- class A
-
- int i
- A(int i)
-
- this.i i
-
-
- class B extends A
Essai.java10 No constructor matching A() found
in class A. class B extends A 1 error
46Redéfinition dune méthode
- On suppose quune classe B étend une classe A.
- Redéfinir dans la classe B une méthode de la
classe A définir dans B une méthode ayant même
nom, mêmes types de paramètres et même type de
retour quune méthode contenue par la classe A.
47Quelle méthode ?
- class A
-
- void faire()
-
- System.out.println("niveau a")
-
-
- class B extends A
-
- void faire()
-
- System.out.println("niveau b")
-
-
- class C extends B
-
- public static void main(String argv)
principe de la liaison dynamique
niveau a niveau b niveau b
48final pour une méthode
- Une classe peut interdire quune sous-classe
redéfinisse une certaine méthode en utilisant le
modificateur final. - class A
-
- . ..
- final void meth()
-
- ...
-
-
La méthode meth ne pourra pas être redéfinie par
les sous-classes de A.
- Question
- qu est-ce quun attribut déclaré final ?
- qu est-ce quune classe déclarée final ?
49Redéfinir une méthode suite
Cette diapositive indique deux règles importantes
mais devra être relue plus tard lorsque les
connaissances nécessaires auront été assimilées.
- Il nest pas possible de redéfinir une méthode
en diminuant son niveau de visibilité . - Si une méthode est définie dans une classe A et
redéfinie dans une classe B, la méthode redéfinie
dans B ne peut lancer que des exceptions qui sont
dune classe ou dune sous-classe dune classe
dexception lancée par la méthode définie dans A.
50Que signifie polymorphisme ?
class Orateur String action()
return "sexprime"
class Grenouille extends Orateur String
action() return "coasse"
class Fourmi extends Orateur String action()
return "croonde"
- class EssaiOrateur
-
- public static void main(String argv)
-
- Orateur orateur
- orateur new Orateur()
- System.out.println("Orateur "
orateur.action()) - orateur new Grenouille()
- System.out.println("Grenouille "
orateur.action()) - orateur new Fourmi()
- System.out.println("Fourmi "
orateur.action()) -
Orateur sexprime Grenouille coasse Fourmi croonde
Des objets référencés par une même variable
peuvent avoir des comportements différents.
51Conversion de classe ou transtypage
- Une classe Chien étend une classe Animal
- (class Chien extends Animal)
- Animal animal new Chien() permis ?
- Animal animal
- ...
- Chien chien animal permis ?
- Animal animal
- ...
- Chien chien (Chien)animal
- Conversion de classe (transtypage), permis.
- Peut provoquer le lancement dune exception du
type ClassCastException.
Oui une instance de Chien est une instance de
Animal.
Non une instance de Animal nest pas
nécessairement une instance de Chien.
52Conversion de classe
- class Animal
- class Chien extends Animal
-
- int taille 80
-
- class Conversion
-
- public static void main(String argv)
-
- Animal animal new Chien()
- System.out.println("un chien mesure "
- ((Chien)animal).taille " cm")
- animal new Animal()
- try
-
- Chien chien (Chien)animal //conversion de
classe
un chien mesure 80 cm java.lang.ClassCastExcepti
on Animal, tout Animal n'est pas un Chien
53Masquage dun attribut
- Dans une classe A attribut attr
- Une classe B étendant A attribut attr (même
type ou non) - Alors
- b.attr est lattribut attr de la classe B
- a.attr est lattribut attr de la classe A
- Lattribut attr désigné dépend du type de la
variable référençant lobjet concerné et est
déterminé à la compilation. - Une instance de B contient à la fois les deux
attributs attr.
B b new B() A a b
liaison statique
54super
- De lintérieur dune classe redéfinissant une
méthode, on peut avoir accès à la méthode
redéfinie de la superclasse, en utilisant le mot
super.
class A void faire() ...
class B extends A void faire()
super.faire() ... void
pourquoiPas() ...
super.faire() ... faire()
55La classe Object
- Constructeur Object()
- Méthodes
- protected Object clone()
- public boolean equals (Object obj)
- protected void finalize()
- public Class getClass()
- public int hashCode()
- public void notify() //threads
- public void notifyAll() //threads
- public String toString()
- public void wait() //threads
- public void wait(long millis)
- public void wait(long millis, int nanos)
56La méthode toString, suite
Il est souvent bien agréable quune classe
redéfinisse la méthode toString
- class Point
-
- int x, y
- Point(int x, int y)
-
- this.x x
- this.y y
-
- public String toString()
-
- return "point de coordonnees (" x " ,"
y ")" -
-
- class Essai
-
- public static void main(String argv)
mon point point de coordonnees (1 ,2)
57Classes abstraites
58Classe abstraite
- Méthode dont seul le prototype figure ? méthode
abstraite - Doit alors être déclarée abstract.
- Classe qui contient une méthode abstraite ?
classe abstraite. - Doit être déclarée abstract.
- Une classe abstraite ne peut pas être instanciée
il faut létendre pour pouvoir lutiliser. Une
sous-classe dune classe abstraite est encore
abstraite si elle ne définit pas toutes les
méthodes abstraites dont elle hérite. - Les classes abstraites sont très utiles pour
définir des méthodes dépendant dautres méthodes
qui ne sont pas précisées.
59Classe abstraite - exemple - 1
- abstract class Forme
-
- abstract float perimetre()
- abstract float surface()
- void decritEtalement()
-
- float lePerimetre perimetre()
- if (surface() gt lePerimetre lePerimetre /
16) - System.out.println(this " s'etale plus
quun carre") - else
- System.out.println(this " s'etale moins
qu'un carre") -
60Classe abstraite - exemple - 2
- class Ellipse extends Forme
-
- int grandAxe, petitAxe
- Ellipse(int grandAxe, int petitAxe)
-
- this.grandAxe grandAxe
- this.petitAxe petitAxe
-
- float perimetre()
-
- ... // calcul approché
-
- float surface()
-
- return (float)Math.PIpetitAxegrandAxe
-
61Classe abstraite - exemple - 3
- class Rectangle extends Forme
-
- int longueur,largeur
- Rectangle(int _longueur, int _largeur)
-
- longueur _longueur
- largeur _largeur
-
- float perimetre()
-
- return 2(longueur largeur)
-
- float surface()
-
- return longueurlargeur
-
62Classe abstraite - exemple - 4
- class EssaiFormes
-
- public static void main(String argv)
-
- (new Ellipse(2, 1)).decritEtalement()
- (new Ellipse(4, 1)).decritEtalement()
- (new Rectangle(2, 1)).decritEtalement()
-
L'ellipse de grand axe 2 et de petit axe 1
s'etale plus quun carre L'ellipse de grand axe 4
et de petit axe 1 s'etale moins qu'un carre Le
rectangle de longueur 2 et de largeur 1 s'etale
moins qu'un carre
63Pourquoi serait-il moins bien de définir comme
ci-dessous la classe Forme ?
- class Forme
- float perimetre()
- return 0
-
- float surface()
- return 0
-
- void decritEtalement()
- float lePerimetre perimetre()
- if (surface() gt lePerimetrelePerimetre/16)
- System.out.println(this
- " s'etale au moins comme un carre")
- else
- System.out.println(this " s'etale moins
qu'un carre") -
64Interfaces
65Interface
- Parallèle aux classes.
- Contient
- des définitions de constantes
- des déclarations de méthodes (prototype).
- Une classe peut alors implémenter une
interface - elle dispose des constantes définies dans
linterface - elle définit toutes les méthodes annoncées dans
linterface (ou bien elle est abstraite).
66Interface - Exemple composé - 1
- class Cercle
-
- int rayon
- Cercle(int rayon)
-
- this.rayon rayon
-
- double circonference()
-
- return 2 Math.PI rayon
-
-
- class Carre
-
- int cote
67Interface - Exemple composé - 2
- interface Tracable
-
- //constante(s)
- public static final int DIM_MAX 500
- // prototype(s) de méthode(s)
- public void dessine(java.awt.Graphics g)
68Interface - Exemple composé - 3
- class CercleGraphique extends Cercle implements
Tracable -
- int x, y // coordonnées du centre
- java.awt.Color couleur
- CercleGraphique(int _rayon, int _x, int _y,
- java.awt.Color _couleur)
-
- super(_rayon)
- x _x
- y _y
- couleur _couleur
-
- public void dessine(java.awt.Graphics g)
-
- if (rayon lt DIM_MAX)
-
- g.setColor(couleur)
- g.drawOval(x-rayon, y-rayon, 2rayon,
2rayon)
Si cette méthode nétait pas définie, la classe
devrait avoir le modificateur abstract
69Interface - Exemple composé - 4
- class CarreGraphique extends Carre implements
Tracable - int x,y // coordonnées du centre
- java.awt.Color couleur java.awt.Color.black
- CarreGraphique(int _cote, int _x, int _y,
- java.awt.Color _couleur)
- super(_cote)
- x _x
- y _y
- couleur _couleur
-
- public void dessine(java.awt.Graphics g)
- if (cote lt DIM_MAX)
- g.setColor(couleur)
- g.drawRect(x - cote/2, y - cote/2, cote, cote)
-
-
70Interface - Exemple composé - 5
71- import java.awt.Color
- import javax.swing.
- class EssaiTracable extends JPanel
- Tracable desFormes new Tracable5
- EssaiTracable()
- setPreferredSize(new java.awt.Dimension(400,
400)) - desFormes0 new CercleGraphique(150,200,200
,Color.black) - desFormes1 new CercleGraphique(20,130,150,
Color.blue) - desFormes2 new CercleGraphique(20,270,150,
Color.blue) - desFormes3 new CarreGraphique(20,200,220,C
olor.pink) - desFormes4 new CarreGraphique(30,200,300,
Color.magenta) -
- public void paintComponent(java.awt.Graphics g)
- super.paintComponent(g)
- for (int i 0i lt desFormes.lengthi)
- desFormesi.dessine(g)
72Interface - généralités
- Si I est une interface déclarant une méthode
meth, si C est une classe implémentant I (C
définit meth), on peut écrire -
- Les constantes et les méthodes dune interface
automatiquement publiques ? une classe qui
implémente linterface devra déclarer publiques
(avec le modificateur public) les méthodes de
linterface quelle définit . -
- Si une classe A implémente une interface I, les
sous-classes de A implémentent aussi
automatiquement I.
I i i new C() i.meth()
73Interface - généralités
- Une classe peut implémenter une ou plusieurs
interfaces. - Une interface peut hériter dune interface (avec
extends). - Les interfaces permettent de compenser labsence
dhéritage multiple.
class A implements I1, I2 ...
74Paquetage
75Utilisation de classes
- En Java
- pas de include,
- pas dédition de liens.
- Les classes sont chargées en mémoire pendant la
compilation ou pendant lexécution (ou au moment
nécessaire avec un autre outil Java).
76Compilation et classes
- Il faut que le compilateur et la machine
virtuelle Java puissent retrouver les classes à
utiliser. - Utilisation des noms longs de classe ou
instruction import - indication des classpath(s)
- Remarques
- Si une classe B est utilisée par une autre classe
A définie dans un fichier source différent de
celui de B, il est toujours préférable que le
fichier source de B sappelle B.java. - Si le fichier B.java et le fichier B.class sont
dans un même répertoire, si on compile une classe
A utilisant la classe B et que le fichier B.java
a été modifié depuis sa dernière compilation, B
est recompilée.
77Les paquetages - généralités
- Les paquetages
- servent à faire des arborescences de classes
- permettent au compilateur et à la machine
virtuelle Java de localiser les classes utiles à
lexécution dun programme - permettent de nuancer les niveaux de visibilité.
78Les paquetages - exemple
- Si la première ligne du fichier source dune
classe Grille est - package projet.ticTacToe
- la classe Grille se trouve dans le paquetage
- projet.ticTacToe
- Le nom complet de la classe Grille est
- projet.ticTacToe.Grille
- La fin du chemin d accès du fichier Grille
.class doit être - projet/ticTacToe
projet
ticTacToe
charon
ecole
Grille.class
79Les paquetages - exemple
ticTacToe
Grille.class
projet
charon
ecole
A.java
import java.util. import projet.ticTacToe. cla
ss A ... Grille grille new Grille()
...
Fichier A.java
- A.java est compilé de son répertoire par
- javac -classpath ../ A.java
- Si la classe A contient une méthode main,
celui-ci est lancé par - java -classpath ../. A (Unix)
- ou java -classpath ../. A (Dos)
- On peut aussi utiliser une variable
denvironnement de nom CLASSPATH pour lister les
chemins absolus de recherche. - CLASSPATH/infres/gargantua/charon/ecole/.
80Les paquetages - exemple
projet
ticTacToe
ecole
Grille.class
charon
gestion
B.java
travail
- B.java
- contient une classe B
- utilise la classe projet.ticTacToe.Grille
- a pour chemin /charon/travail/gestion
- fait partie du paquetage travail.gestion
- B.java est compilé du répertoire gestion par
- javac -classpath B.java
- Si la classe B contient un main, celui-ci est
lancé par exemple du répertoire travail par - java -classpath
../../ecole
../ecole/
travail.gestion.B
../
81Niveaux de visibilité
82Niveaux de visibilité
- Selon leur degré de visibilité, les classes, les
attributs et les méthodes peuvent être visibles
ou non à lintérieur dautres paquetages ou
dautres classes. - Cacher les attributs permet de les contrôler.
- Classes de lAPI quasiment aucun attribut
visible de lextérieur des paquetages (sauf des
attributs constants). - Utilisation de
- getValue(), getForeground(), ...
- setValue(), setForeground(), ...
83Niveaux de visibilité
- private int nbDonnees
- public void methode()
84Niveaux de visibilité
- Classe
- visibilité par défaut visible de son propre
paquetage - public visible de partout.
- Champ (attribut ou méthode) dune classe A
- private visible de sa propre classe
- paquetage (visibilité par défaut) visible de
partout dans le paquetage de A - protected visible de partout dans le paquetage
de A et grosso modo dans les classes héritant de
A dans dautres paquetages - public visible de partout si la classe est
public
85Visibilité - exemple
- package travail.gestion
- public class Cercle
- private int rayon
- public Cercle(int r)
- if (r gt 0) rayon r
-
- public int getRayon()
- return rayon
-
- public void setRayon(int r)
- if (r gt 0) rayon r
- else rayon 0
-
86Encapsulation
méthode publique
attribut public
méthode privée
attribut privé
On naccède aux attributs privés que par des
méthodes prévues à cet effet.
87Attribut privé
- un usage interne strictement limité à sa classe
- donnée significative quun utilisateur ne peut
pas modifier mais dont il peut être connaître la
valeur ex entier contenu dans une instance de
la classe Integer (accessible par la méthode
intValue()) - donnée significative, modifications faites sous
le contrôle des méthodes de sa classe
accessible en lecture et en écriture par
lintermédiaire de méthodes non privées ex
rayon. - Les méthodes qui permettent de connaître ou de
changer les attributs privés dune classe
sappellent des accesseurs.
88Champ protégé
- Visible de partout dans son paquetage
- Soit une classe A dans un paquetage et une classe
B dans un autre paquetage, qui hérite de A un
champ protégé de A est accessible dans B
directement, ou avec this, ou avec super et
visible également, dans la définition de B, au
travers de références de type B ou sous-classe de
B. - Dans toute autre condition, un champ protégé
nest pas visible.
89Exceptions
90Les exceptions
- Permettent de gérer des événements
exceptionnels, en général non souhaités. - avec
si (la situation esttelle_situation) alors
lancer une exception du type
ExceptionTelleSituation
class ExceptionTelleSituation extends
Exception ...
91Les exceptions - suite
- Exemple la méthode parseInt(String s) de la
classe Integer qui retourne lint correspondant à
la chaîne de caractères donnée en argument. - Dans le code
- et par ailleurs lAPI contient la classe
- java.lang.NumberFormatException
- qui étend la classe Exception.
si (s ne représente pas un int) lancer une
exception du type NumberFormatException
92Les exceptions - suite
- Une exception lancée se propage jusquà
ce quon lattrape. - Toute exception est du type java.lang.Throwable,
qui est étendue par - java.lang.Exception
- java.lang.Error
93Attraper une exception
La 1 eme note n'est pas entiere La 2 eme note
n'est pas entiere java.lang.ArithmeticException
/ by zero at Attrape.moyenne(Attrape.java22)
at Attrape.main(Attrape.java27
- class Attrape
- static int moyenne(String liste)
- int somme 0, entier, nbNotes 0
-
- for (int i 0 i lt liste.length i)
- try
- entier Integer.parseInt(listei)
- somme entier
- nbNotes
-
- catch (NumberFormatException e)
- System.out.println("La " (i1)
- " eme note n'est pas entiere")
-
-
- return somme/nbNotes
-
- public static void main(String argv)
java Attrape ha 15 12
java Attrape ha 15.5
La 1 eme note n'est pas entiere La moyenne est 13
94Définir et lancer une exception
- class ExceptionRien extends Exception
-
- int nbMots
- ExceptionRien(int nombre)
-
- nbMots nombre
-
- public String toString()
-
- return "ExceptionRien aucune des "
- nbMots " mots n'est valide"
-
95- class Lance
- static int moyenne(String liste) throws
ExceptionRien - int i, somme0, entier, nbNotes0
- for (i 0 i lt liste.length i)
- try
- entier Integer.parseInt(listei)
- somme entier
- nbNotes
-
- catch (NumberFormatException e)
- System.out.println("La " (i1)
- " eme note n'est pas entiere")
-
-
- if (nbNotes 0) throw new
ExceptionRien(liste.length) - return somme/nbNotes
-
Obligatoire , sauf dispense pour les
RuntimeException
public static void main(String argv) try
System.out.println ("La moyenne est
" moyenne(argv)) catch (ExceptionRien
e) System.out.println(e)
java Lance ha 15.5
La 1 eme note n'est pas entiere La 2 eme note
n'est pas entiere ExceptionRien aucune des 2
notes n'est valide
96Propagation dune exception
... methode1() throws MonException ... if (
... ) throw new MonException() ...
... methode2() throws MonException
... zzz.methode1() ...
... methode3() ... try ...
yyy.methode2() ... catch(MonException
exc) ... ...
... methode4() ... xxx.methode3() ...
97Les blocs try, catch, finally
- On peut avoir
- soit un bloc try suivi dun ou plusieurs
bloc catch - soit un bloc try suivi dun bloc finally
- soit un bloc try suivi dun ou plusieurs
bloc catch suivi dun bloc finally. - Quelle que soit la façon dont on est sorti dun
bloc try (par break, continue, return,
propagation dexceptions, normalement), les
instructions contenues dans le bloc finally
sont exécutées.
98Les blocs try, catch, finally - suite
- try
- ...
- if (condition1) return
- ...
- if (condition2) throw new MonException()
- ...
-
- catch(MonException e)
- ...
-
- finally
- ...
99Les blocs try, catch, finally - suite
- for (...)
- try
- ...
- if (...) break // ou continue
- ...
-
- finally
- ...
-
- ...
100Interfaces graphiques
101Une fenêtre graphique
102Une fenêtre simple (qui ne permet aucune action)
- Coin supérieur gauche à 200 pixels à lhorizontal
et 100 pixels à la verticale du coin supérieur
gauche de lécran. - Largeur 300 pixels, hauteur 350 pixels.
103Une fenêtre simple - suite
- import javax.swing.JFrame
- class Fenetre
- public static void main(String argv)
- JFrame cadre new JFrame("Vide")
- cadre.setSize(300, 350)
- cadre.setLocation(200, 100)
- cadre.show()
-
104Une petite application
JButton
JPanel
JPanel
JPanel
JFrame
105Ardoise.java
ardoise
- import javax.swing.JPanelimport
java.awt.class Ardoise extends JPanel
boolean cercle Ardoise() - setBackground(Color.WHITE) setPreferredSize(n
ew Dimension(200, 150)) -
- public void paintComponent(Graphics g)
- super.paintComponent(g) if (cercle)
- g.setColor(Color.RED)
g.drawOval(50,20,100,100) -
106Bouton.java
- import java.awt.
- import java.awt.event.
- import javax.swing.
- class Boutons extends JFrame implements
ActionListener - JButton trace new JButton("trace")
- JButton efface new JButton("efface")
- Ardoise ardoise new Ardoise() // pour le
cercle - Boutons()
- setLayout(new BorderLayout(5, 5))
- JPanel lesBoutons new JPanel() // pour les
boutons - lesBoutons.add(trace)
- lesBoutons.add(efface)
- add(lesBoutons, BorderLayout.NORTH)
- add(ardoise, BorderLayout.CENTER)
- trace.addActionListener(this)
- efface.addActionListener(this)
- pack()
-
- public void actionPerformed(ActionEvent e)
lesBoutons
ardoise
- repaint fait appel à la méthode paint qui
appelle - paintComponent,
- puis une méthode qui repeint les bords,
- puis les méthodes paint des sous-composants.
107EssaiBouton.java
- class EssaiBoutons
- public static void main(String arg)
- JFrame fenetre new Boutons()
- fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_
CLOSE) - fenetre.setLocation(100, 100)
- fenetre.setVisible(true)
-
108Bouton et action
- Linterface ActionListener ne contient quune
seule déclaration de méthode - public void actionPerformed(ActionEvent e)
- Comment indiquer laction déclenchée par le clic
sur le bouton ? - trace.addActionListener(delegue)
- delegue doit être de type ActionListener, et
possède donc la méthode actionPerformed. - Signifie quand le bouton trace est actionné,
cest delegue qui doit agir en exécutant sa
méthode actionPerformed. - LActionEvent reçu par actionPerformed créé au
moment du clic sur le bouton
109Dessiner dans un composant
- Toute instance de Component possède, entre autres
attributs - une couleur de premier plan (foreground en
anglais) - public Color getForeground()
- public void setForeground(Color couleur)
- une couleur darrière-plan (background en
anglais) - public Color getBackground()
- public void setBackground(Color couleur)
- une police de caractère
- public Font getFont()
- public void setFont(Font f)
- La classe Component dispose de la méthode
- public Graphics getGraphics()
110Un objet Graphics
- Crayon savant pour un composant graphique
- Contexte graphique.
- Ses attributs lui permettent davoir
essentiellement pour informations - le composant dans lequel il doit dessiner
- une couleur pour effectuer les tracés ?
- méthode setColor(Color couleur)
- une police de caractères ?
- méthode setFont(Font fonte)
- un rectangle dit de clipping .
111Événements
- Clic sur un bouton
- Choisir un item dans un menu
- Presser sur un bouton de la souris alors que le
curseur est sur un composant - Bouger la souris alors que le curseur est sur un
composant - Taper sur return alors que lon travaille
dans une zone de texte - Fermer la fenêtre de lapplication
- Taper sur une touche du clavier
-
112Traitement des événements
- Les événements sont perçus par la machine qui
avertit le programme Java qui les traitent selon
le type dévénement et le composant concerné - Les événements donnent naissance à des objets qui
les représentent. - Les listeners sont des objets qui servent à
traiter des événements et qui implémentent une
interface adéquate.
- Les listeners doivent être inscrits sur
les sources. - Les listeners contiennent des méthodes
traitant les événements.
113Un thread pour traiter les événements
- Les traitements des événements et les différentes
opérations de peinture sur lécran (dessin
des composants, tracés divers) sont effectués
par un thread (event-dispatching thread), nommé
ici gestionnaire dévénements . - Les traitements des événements sont effectuées en
file par le gestionnaire dévénements pendant
quun événement est traité, linterface graphique
est gelé.
114Clics de la souris
115Linterface MouseListener
- Ce listener permet de traiter cinq types
dévénements. - public void mousePressed(MouseEvent evt)
- public void mouseReleased(MouseEvent evt)
- public void mouseEntered(MouseEvent evt)
- public void mouseExited(MouseEvent evt)
- public void mouseClicked(MouseEvent evt)
116La classe CercleGraphique
- class CercleGraphique
- int x,y rayon
- CercleGraphique(int rayon, int x, int y)
- this.rayon rayon
- this.x x
- this.y y
-
- public void dessine(Graphics g)
- g.fillOval(x - rayon, y - rayon,
- 2rayon, 2rayon)
-
-
117La classe EssaiClic
- class EssaiClics extends JPanel
- implements MouseListener
- ArrayListltCercleGraphiquegt memoire
- new ArrayListltCercleGraphiquegt
- EssaiClics()
- setPreferredSize(new Dimension(250, 250))
- addMouseListener(this)
-
- public void mouseClicked(MouseEvent evt)
- memoire.add(new CercleGraphique
- (15, evt.getX(), evt.getY()))
- repaint()
-
-
- public void mousePressed(MouseEvent evt)
- public void mouseReleased(MouseEvent evt)
- public void mouseEntered(MouseEvent evt)
118La classe EssaiClic - suite et fin
- public void paintComponent(Graphics g)
- super.paintComponent(g)
- for (int i 0 i lt memoire.size() i)
- ((CercleGraphique)memoire.get(i)).dessine(g)
-
- public static void main(String arg)
- JFrame cadre new JFrame()
- cadre.setContentPane(new EssaiClics())
- cadre.setLocation(50, 50)
- cadre.pack()
- cadre.setVisible(true)
-
-
119Gestionnaire de répartition
- java.awt.FlowLayout arrange les sous-composants
en ligne, de la gauche vers la droite et du haut
vers le bas au fur et à mesure de leur insertion.
- java.awt.BorderLayout répartit les
sous-composants au nord, au sud, à lest, à
louest ou au centre du composant. - javax.swing.BoxLayout arrange les composants
soient les uns en dessous des autres, soient les
uns à côté des autres. - java.awt.GridLayout arrange les sous-composants
dans une grille. - java.awt.GridBagLayout arrange les
sous-composants dans une grille, mais un
sous-composant peut utiliser plusieurs lignes ou
colonnes. - java.awt.CardLayout répartit un ensemble de
sous-composants de telle sorte quun seul soit
visible à la fois.