Professional Documents
Culture Documents
Apjavacrs2 LP Dlisv2
Apjavacrs2 LP Dlisv2
de Vannes
Département Informatique
Cours2 AP/Java – LP-DLIS
Octobre 2022
1
Plan du cours2 de java
• Paquetage (p. 3)
• Héritage simple (p. 12)
• Héritage et visibilité (p. 17)
• Héritage et constructeurs (p. 19)
• Classe abstraite (p. 22)
• Redéfinition (p. 28)
• Interface (p. 31)
• Objets graphiques (p. 36)
• Réaction aux événements (p. 49)
• I/O Fichiers (p. 60)
2
Paquetage
3
Définition
Conséquence :
Deux classes Java peuvent avoir le même nom si
elles appartiennent à des paquetages différents.
Exemple : java.util.List et java.awt.List
4
Mes propres paquetages
Exemple :
package pac1;
class Duree {
...
}
/TP_CD
/ws /class
/src
/pac1
/pac1
Duree.class
Duree.java
5
Paquetage et importations
6
Exemples
package pac1;
class Duree {
...
}
package pac1;
class Plage {
...
}
package pac2;
class CD {
...
}
/TP_CD
/ws /class
/src
/pac1
/pac2 /pac1
Plage.class
CD.java Plage.java
8
Paquetage et visibilité
9
Paquetage et visibilité
package pac1;
10
Paquetage et visibilité
package pac1;
class MaClasse {
11
Héritage en Java
12
Héritage : 1ère notion
-nom : String
+getNom() : String
+setNom(String unNom)
Etudiant Enseignant
13
Héritage : 1ère notion
En Java :
// Accesseur
public String getNom() {…}
// Modificateur
public void setNom( String unNom ) {…}
}
// Accesseur
public int getAnnee() {…}
// Modificateur
public void setAnnee( int uneAnnee ) {…}
}
14
Héritage : 1ère notion
Etudiant var1;
Personne var2;
Object
Component
Button Container
Window Panel
17
Accès et héritage : les différentes visibilités en
Java
18
Héritage et constructeurs
// Constructeur
public Personne (String unNom) {…}
...
}
// Constructeur
public Etudiant (int uneAnnee) {…}
...
}
…
Etudiant var1;
var1 = new Etudiant ( 2 );
// Qu’en est-il de l’initialisation de l’attribut « nom » de la
// classe Personne ?
// remarque : var1.Personne ("Dupont") NON !!
19
Héritage et constructeurs
// Constructeur
public Etudiant (int uneAnnee, String unNom) {
// Appel du constructeur
// Personne(String unNom) de la super-
// classe.
super ( unNom );
this.annee = uneAnnee;
}
...
}
20
Héritage et constructeurs
21
Classe abstraite
Exemple :
22
Classe abstraite
Figure (abstract)
# orig : Point
# nom : String
# deplacer() : void
Rectangle
Cercle
- rayon : double -longueur : double
-largeur : double
Exemple :
public abstract class Figure {
protected Point orig;
protected String nom;
# orig : Point
# nom : String
# deplacer() : void
# perimetre() : double
Rectangle
Cercle - longueur : double
- rayon: double - largeur : double
// Attributs
private double rayon;
// Constructeur
public Cercle ( double unRayon, Point orig,
String unNom ) {
// Implémentation de « perimetre() »
public double perimetre () {
double tmp;
26
Classe et méthode abstraite
27
Redéfinition d’une méthode héritée
Rectangle
# longueur : double
# largeur : double
+perimetre(): double
Carre
+perimetre(): double
Noms identiques
Types retour Redéfinition Surcharge
identiques
Noms identiques
Types retour Erreur Surcharge
différents
// Redéfinition de la super-classe
public double perimetre ( ) {
return (4*this.largeur);
}
}
30
Interface
31
Définition
Conséquences :
32
Exemple
# orig : Point
# nom : String + getCouleur() : Color
+ getEpaiss() : double
# deplacer() : void
# perimetre() : double
Rectangle RectanglePlein
-longueur : double
-largeur : double -couleur : Color
-épaissTrait : double
+perimetre(): double
+getCouleur() : Color
+getEpaiss() : double
33
Exemple
public interface Plein {
public abstract Color getCouleur();
public abstract double getEpaiss();
}
public class RectanglePlein extends Rectangle
implements Plein {
// Attributs
private Color couleur;
private double épaissTrait;
// Constructeur
public RectanglePlein ( Color col, double épaiss,
double long, double larg, Point orig, String nom ) {
super ( long, larg, orig, nom );
this.couleur = col;
this.épaissTrait = épaiss;
}
// Implémentation des méthodes de l’interface
public Color getCouleur() {
return this.couleur;
}
public double getEpaiss() {
return this.épaissTrait;
}
}
34
Interface ou classe abstraite ?
36
Introduction
IG3 IG4
Moteur
C1 Datas C2
38
Paquetage java.awt
39
Paquetage java.awt
Object
Component (abstract)
Window Panel
TextArea TextField
Frame Dialog
MenuComponent (abstract)
MenuBar MenuItem
Menu
40
Paquetage javax.swing
Avantages :
• choix « swing » / « awt »
• bibliothèque + fournie
• widgets plus « design »
• meilleur portabilité du graphique
• certains composants « swing » héritent de
« java.awt » (JFrame sous-classe Frame,
JDialog sous-classe Dialog)
• mécanisme de réaction aux événements reste
le même (valable pour « awt » et « swing »)
41
Classe javax.swing.JFrame
42
Classe JFrame
import javax.swing.*;
public class Cadre {
// Attribut
private JFrame demo;
// Constructeur
public Cadre ( String titre ) {
demo = new JFrame(titre);
demo.setSize(100,100);
demo.setVisible(true);
}
}
// Version héritage du type JFrame
import javax.swing.*;
public class Cadre extends JFrame {
// Constructeur
public Cadre ( String titre ) {
super(titre);
this.setSize(100,100);
this.setVisible(true);
}
}
43
Les classes « Container »
Object
Component
Container
JFrame JDialog
44
Les classes « Container »
Comment disposer les objets graphiques à
l’intérieur des objets « Container » ?
Soit en précisant les coordonnées et la taille de
chaque objet graphique :
setBounds (int x, int y, int
width, int height);
classe « Component ».
!! Mais c’est fastidieux et figé (cf. re-
dimensionnement de la fenêtre).
NORTH
W E
E CENTER A
S S
T T
SOUTH
…
// Définition du gestionnaire de placement « BorderLayout »
// pour l’objet « Container ».
2. FlowLayout
Composant4
…
// Définition du gestionnaire de placement « FlowLayout »
// pour l’objet « Container ».
// Disposition des composants de gauche à droite.
47
Gestionnaires de placement
3. GridLayout
Composant4 Composant5
…
// Définition du gestionnaire de placement « GridLayout »
// pour l’objet « Container ».
// Disposition des composants de gauche à droite et de haut
// en bas.
48
Interface graphique :
réaction aux événements
49
Programmation réactive
Exemples :
• cliquer sur un bouton,
• écrire du texte,
• etc.
50
Notion d’événement
Types d’événements :
51
Notion d’événement
Exemples :
• la classe « KeyEvent » définit les événements
qui concernent les touches du clavier,
52
Notion d’événement
!! Important :
53
Notion d’événement
public class Comptage extends JFrame {
// Attribut
private JButton monB;
// Constructeur
public Comptage() {
this.super ("demo");
this.setSize(250, 110);
this.monB = new JButton ("Cliquez ici");
this.add(monB);
this.capturerClic();
this.setVisible(true);
}
private void capturerClic() {
// Je veux capturer « MouseEvent » sur
// « monB ». L’objet écouteur
// (MouseListener) existe dans la classe
// « Component » (super-classe de la
// classe « JButton »). La méthode
// addMouseListener(…) attache l’objet
// écouteur au widget JButton (monB).
monB.addMouseListener ( new
Ecouteur(this.monB) );
}
...
}
54
Notion d’événement
55
Notion de réaction
56
Notion de réaction
public class Ecouteur implements MouseListener {
// Attributs
private int compteur = 0;
private JButton leBouton;
// Constructeur
public Ecouteur ( JButton unBouton ) {
this.leBouton = unBouton;
}
focusGained
FocusEvent FocusListener (J)Component
focusLost
60
Lecture d’un fichier texte
Exemple :
Le petit chat.<CR>
Encore le petit chat,<CR>
etc.etc.<CR>
etc.etc.<CR>
Finalement le petit chat.<EOF>
61
Lecture d’un fichier texte
01001100011001010000100001110000 …
62
Le format Stream
63
Le format Stream
Programme
Ecran System.out --------
OutputStream -------
-------
System.in
Clavier InputStream
64
Lecture en Java
zone
String tampon Octets fichier physique
65
Lecture en Java
Object
Reader
InputStreamReader
BufferedReader
BufferedReader (Reader in)
FileReader
FileReader (String fileName)
66
Lecture en Java
while ( ! eof ) {
tmp = tampon.readLine();
if ( tmp == null ) {
eof = true;
}
else {
System.out.println( tmp );
}
}
tampon.close();
}
try {
tampon = new BufferedReader ( new
FileReader ( nomFichier ) );
while ( ! eof ) {
tmp = tampon.readLine();
69
Ecriture en Java
Object
Writer
OutputStreamWriter
BufferedWriter
BufferedWriter (Writer out)
PrintWriter FileWriter
PrintWriter (Writer out) FileWriter (String fileName)
70
Ecriture en Java
try {
file = new FileWriter ( nomFichier );
tampon = new BufferedWriter ( file );
out = new PrintWriter ( tampon );
out.println ( ligne );
out.close();
}
catch (IOException e) {
System.out.println ( e.getMessage() );
}
}
71
Décodage des infos dans une chaîne
Exemples :
17/An Dro/Trad./Gr/danse-celt/5/22
séparateur = "/" =>
17
An Dro
Trad.
Gr
danse-celt
5
22
72
Décodage des infos dans une chaîne
• classe Integer
méthode : static int parseInt ( String s )
• classe Double
méthode : static double parseDouble ( String s )
• classe Boolean
méthode : static boolean parseBoolean ( String s )
74