SOMMAIRE - PowerPoint PPT Presentation

1 / 119
About This Presentation
Title:

SOMMAIRE

Description:

facilite la manipulation des threads (acc s concurrents, synchronisation) ... On dit que l 'on instancie la classe Point ; on cr e ainsi un objet ... – PowerPoint PPT presentation

Number of Views:175
Avg rating:3.0/5.0
Slides: 120
Provided by: cha144
Category:

less

Transcript and Presenter's Notes

Title: SOMMAIRE


1
SOMMAIRE
  • Débuter 2
  • Continuer 20
  • Héritage 36
  • Classes abstraites 57
  • Interfaces 64
  • Paquetages 74
  • Niveaux de visibilité 81
  • Exceptions 89
  • Interfaces graphiques 100

2
Débuter
3
Java - 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

4
Java - 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 ...

5
En 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.

6
Premier 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
7
Classe 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
8
Classe 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

9
Utilisation 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
10
Classe 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.

11
Une 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
12
Dans une autre classe
class Point int x, y void translate(int
h, int k) x h y k
  • Point p

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
13
Utilisation 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

14
Utilisation 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)

15
Dé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
16
Dé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
17
Longueur 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 !
18
Tableaux à 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)

19
Les 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
20
Continuer
21
Types 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.

22
Types 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
23
Initialisation 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.

24
Ré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

25
Champs 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")

26
Exercice - 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)
27
Exercice - 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)
28
Utiliser 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
29
La 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

30
Surcharge 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.

31
Utilisation 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

32
Les 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.

33
Linstruction 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

34
Linstruction 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.

35
Linstruction 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))

36
Héritage
37
Hé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.

38
Hé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.

39
Hé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 ...
40
La classe Mammifere
  • class Mammifere
  • int taille
  • Mammifere(int taille)
  • this.taille taille
  • String description()
  • return "Animal à sang chaud mesurant "
  • taille " cm."

41
La 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
42
Ré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()
. . .
43
Chaî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()

44
Exemple 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
45
Exercice
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
46
Redé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.

47
Quelle 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
48
final 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 ?

49
Redé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.

50
Que 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.
51
Conversion 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.
52
Conversion 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
53
Masquage 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
54
super
  • 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()
55
La 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)

56
La 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)
57
Classes abstraites
58
Classe 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.

59
Classe 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")

60
Classe 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

61
Classe 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

62
Classe 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
63
Pourquoi 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")

64
Interfaces
65
Interface
  •  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).

66
Interface - Exemple composé - 1
  • class Cercle
  • int rayon
  • Cercle(int rayon)
  • this.rayon rayon
  • double circonference()
  • return 2 Math.PI rayon
  • class Carre
  • int cote

67
Interface - 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)

68
Interface - 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
69
Interface - 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)

70
Interface - 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)

72
Interface - 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()
73
Interface - 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 ...
74
Paquetage
75
Utilisation 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).

76
Compilation 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.

77
Les 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é.

78
Les 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
79
Les 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/.

80
Les 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
../
81
Niveaux de visibilité
82
Niveaux 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(), ...

83
Niveaux de visibilité
  • private int nbDonnees
  • public void methode()

84
Niveaux 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

85
Visibilité - 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

86
Encapsulation
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.
87
Attribut 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.

88
Champ 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.

89
Exceptions
90
Les 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 ...
91
Les 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
92
Les 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

93
Attraper 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
94
Dé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
96
Propagation dune exception
... methode1() throws MonException ... if (
... ) throw new MonException() ...
... methode2() throws MonException
... zzz.methode1() ...
... methode3() ... try ...
yyy.methode2() ... catch(MonException
exc) ... ...
... methode4() ... xxx.methode3() ...
97
Les 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.

98
Les blocs try, catch, finally - suite
  • try
  • ...
  • if (condition1) return
  • ...
  • if (condition2) throw new MonException()
  • ...
  • catch(MonException e)
  • ...
  • finally
  • ...

99
Les blocs try, catch, finally - suite
  • for (...)
  • try
  • ...
  • if (...) break // ou continue
  • ...
  • finally
  • ...
  • ...

100
Interfaces graphiques
101
Une fenêtre graphique
102
Une 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.

103
Une 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()

104
Une petite application
JButton
JPanel
JPanel
JPanel
JFrame
105
Ardoise.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)

106
Bouton.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.

107
EssaiBouton.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)

108
Bouton 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

109
Dessiner 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()

110
Un 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

112
Traitement 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.

113
Un 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é.

114
Clics de la souris
115
Linterface 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)

116
La 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)

117
La 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)

118
La 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)

119
Gestionnaire 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.
Write a Comment
User Comments (0)
About PowerShow.com