Vous êtes sur la page 1sur 95

Interfaces graphiques  Java

IUT informatique des Cézeaux  SI 2012/2013

Olivier Goutet
o.goutet@openium.fr

18 janvier 2013

1 / 95
Objectifs

• Concevoir un programme Java


• Utiliser les concepts objets avec Java
• Concevoir des Interfaces Hommes Machines
• Utiliser les bases de données
• Créer des applications multi-threads

2 / 95
Notation

• Présence
◦ Obligatoire en cours
◦ Obligatoire en TP (0 sur le TP)
• TP
◦ un TP rendu : une note rendue chaque semaine suivante
◦ Moyenne à la n de la période
• Examen nal

3 / 95
Plan

Le langage Java

Notions de base et syntaxe

Concepts objets en Java

Collections

4 / 95
Plan

Le langage Java
Java
Machine virtuelle
Premier programme

Notions de base et syntaxe

Concepts objets en Java

Collections

5 / 95
Le langage Java

• Portable
• Sécurisé
• Simple
• Performant

6 / 95
Langage

• Proposé par Sun microsystems en 1995


• Syntaxe proche du C++
• Tout est objet (encapsulé dans des classes)
• Pas de pré-processeur (#dene)
• Pas de désalocation (free, delete)
◦ Garbage collector
• Pas de pointeur
◦ Références

7 / 95
Machine virtuelle
• Clé de la portabilité

8 / 95
Machine virtuelle

• Portabilité
◦ Un programme Java : navigateur, client lourd...
• Presque aussi performante que du code compilé
• Pour gagner en performance
◦ Interprétation et compilation à la volée (JIT)
◦ Compilation adaptative

9 / 95
Hello World

import java . io .*;

/* ma premiere classe */
public class Exemple {
public static void main ( String [] argv ) {
// afficher un message
System . out . println ( " Hello World " );
}
}

• Méthode main
◦ Obligatoire en mode standalone
◦ Point d'entrée unique du programme

java Exemple parametres_ligne_commande

10 / 95
Plan

Le langage Java

Notions de base et syntaxe


Fichier source
Processus de compilation et lancement
Package
Syntaxe
Concepts de base
Exceptions
Tableaux
Chaînes de caractères

Concepts objets en Java


11 / 95
Fichier source

• Extension : .java
• Nom du chier = nom de la classe publique
• Respecter la casse (Exemple.java)
• 1 classe publique par chier
• Pas de point virgule en n de classe
• Mélange déclaration + implémentation + commentaires

12 / 95
Compilation

13 / 95
Compilation

• Fichier compilé : .class


• Pseudo-code (byte-code)
• != Code machine
• Compilateur
◦ javac -classpath <classpath> Exemple.java
◦ man javac

14 / 95
Exécution

• java -classpath <classpath> Exemple.class


• Pseudo-code interprété par la Java Virtual Machine

15 / 95
Java ARchive

• Zip contenant
◦ Dénitions de classes java
◦ Métadonnées
◦ Fichiers
• Sert à la distribution d'un programme
• jar [opt] chier.jar pointEntree c1.class c2.class
• man jar

16 / 95
Package

• Ensemble de classes/chiers rassemblés pour une nalité (besoin


fonctionnel)
◦ Equivalent namespace C++
• Rangement des classes Java
• Nom en chemin d'un package
◦ Mécanisme arborescent comme les répertoires
◦ Séparateur : . (fr.iut.monpackage)
• Comment retrouver le chemin ?
◦ Classpath

17 / 95
Package Java standard

18 / 95
Import

• Spécication complète d'une classe d'un package qui n'est pas


chargé par défaut
• Ex : javax.swing.SwingUtilities
• Facilité : clause import
◦ Import nom_classe ;
◦ Import java.io.InputStreamReader
◦ Import javax.swing.* ;
◦ Import javax.swing.event.* ;
• Liste des classes utilisées
◦ Énumération à l'unité
◦ Import automatique (*)

19 / 95
Syntaxe
• Comme en C
• Indentation diérente :

/* Commentaires sur plusieurs


* lignes
*/
if (4 == i ) {
system . out . println ( " Egal " );
} else {
system . out . println ( " Non Egal " );
}

• Quelques particularités

for ( Client c : listClient ) {


// for each
}
20 / 95
Concepts de base

• Java est un langage orienté objet : tout appartient à une classe


• Pour accéder à une classe il faut en déclarer une instance de classe
ou objet.
• Une classe comporte sa déclaration, des attributs et la dénition de
ses méthodes.

21 / 95
Types d'attributs / variables

• Objet
◦ Prédéni ou utilisateur
• Chaîne de caractères
◦ String
◦ Manipulation par références
• Scalaires / Primitives
◦ entier / réel / booléen
◦ caractère
• Pour l'ecacité

22 / 95
Types de données scalaires

• char • Entiers
◦ Type caractère ◦ byte
◦ != String ◦ short
• boolean ◦ int
◦ true ◦ long
◦ false • Rééls
◦ oat
◦ double

23 / 95
Types de données scalaires

• char (16 bits) • Entiers


◦ Type caractère ◦ byte (8 bits)
◦ != String ◦ short (16 bits)
• boolean (ag) ◦ int (32 bits)
◦ true ◦ long (64 bits)
◦ false • Rééls
◦ oat (32 bits)
◦ double (64 bits)

24 / 95
Types de données scalaires

• Normalisé (portabilité)
• Objets equivalents
◦ Byte
◦ Integer
◦ Short
◦ ...
• Méthodes
◦ toString(), parseInt(), conversions...

25 / 95
Déclaration de variables

MaClasse objet ;
int i =0;
char c = 'A ';
String s ;
double [] tableau ;

• N'importe où dans le bloc


• Variable locale non initialisée

26 / 95
Exceptions

27 / 95
Exceptions

• Système de gestion d'erreur


◦ Pendant l'execution
◦ Rattrapable
• L'objet exception peut contenir
◦ Message de l'erreur
◦ Pile d'exécution
◦ Ligne de l'erreur
• Exceptions prédénies

28 / 95
Exceptions

29 / 95
Gérer une exception

try {
readFromFile ( " nom_fichier " );
...
} catch ( Exception e ){
System . out . println ( " Exception lors de la lecture : " + e );
}

30 / 95
Exceptions controlée et non controlées

• Controlées
◦ Héritent de Exception
◦ Obligent à avoir un try / catch
◦ Ex : chier manquant, reseau non disponible...
• Non Controlées
◦ Héritent de RuntimeException
◦ Ex : manque de mémoire / dépassement de taille de tableau...

31 / 95
Exception Controlée

• throws

void readFromFile ( String path )


throws IOException , ParseException {
...
}

32 / 95
Lever une exception

• throw

throw new Exception ( " Erreur dans ma fonction traitement " );

throw new SecurityException ( " Acces au fichier "


+ filename
+ " interdit " );

throw new MonException ();

33 / 95
Quand les utiliser ?

• Une exception allège votre code


• Une exception est coûteuse en calcul
• Ne lever des exceptions que pour les cas exceptionnels
• Ne remplace pas les code de retour (-1, null,...)

34 / 95
Gérer une exception

try {
ReadFromFile ( " nom_fichier " );
...
} catch ( Exception e ) {
System . out . println ( " Exception levee "
+ " lors de la lecture : " + e );
}

35 / 95
Tableaux

// creation d ' un tableau de 10 entiers


int [] t1 = new int [10];

// declaration d ' un tableau ( vide )


int [] t2 ;

for ( int i =0; i < t1 . length ; ++ i ){


System . out . println ( t1 [ i ]);
}

• Taille xe, donnée par le champ length


• Premier indice de tableau : 0
• Il y a une vérication des indices
◦ Exception : OutOfBoundsArray

36 / 95
Tableaux

• Initialisation du tableau
◦ Par des valeurs scalaires (0 pour des int)
◦ null pour des objets
• Tableaux multidimensionnels

String [][] chaines = new String [10][5]


Color [][][] cubeRGB = new Color [3][3][3];

37 / 95
Chaîne de caractères

• String != char[]
• Statique
◦ String
• Dynamique
◦ StringBuer
◦ StringBuilder
• Méthodes inclues
◦ Comparaisons : equals(), compareTo()
◦ Recherche : IndexOf(), contains()...
◦ Extraction : substring(), split(), regex...

38 / 95
Chaîne de caractères

• Création de chaîne

String s1 = " hello " ;


String s2 = new String ( " hello " );
String s3 = null ;

• Que se passe-t-il ?

String s3 = s1 + " " + s1 ;

39 / 95
Plan

Le langage Java

Notions de base et syntaxe

Concepts objets en Java


Instance
Contenu de la classe
Héritage
Niveaux de protection
Classes abstraites et interfaces

Collections
40 / 95
Créer une instance

• Demander la mémoire au système


◦ Opérateur new
• Appeler le constructeur
◦ Classe instance = new Classe(parametres);
• Manipulation de pointeurs références ?
• Valeur spéciale null
◦ Si création impossible instance == null
◦ Ou pas encore aectée

41 / 95
Détruire une instance

• Pas de destruction manuelle


• Destruction automatique par la JVM
◦ Ramasse-miettes (Garbage Collector)
• Plus de fuites de mémoire ?
◦ Tables de hachage complexe
◦ Boucle innie
◦ Aider la JVM en mettant à null
• Méthode finalize()
◦ Ressemble au destructeur C++
◦ Peut ne pas être appelée (si gc non exécuté)

42 / 95
Déclaration d'une classe

• Modèle / Moule pour créer des objets


• Attributs / Caractéristiques
• Messages / Méthodes
• Nom unique (package)
• Relation entre les objets

43 / 95
Exemple

public class Exemple {


...
}

class Voiture {
...
}

class Camion {
...
}

• Convention de nommage
◦ Classe = type
◦ Nom avec majuscule

44 / 95
Contenu de la classe

• Attributs
◦ d'instance
◦ de classe
• Méthodes
◦ d'instance
◦ de classe
• Constructeur(s)
• Instructions au chargement de la classe

45 / 95
Attributs

• Listés n'importe où (début de classe préférable)


• Valeurs par défaut ( != variables locales)
• D'instance

String chaine ;
int entier ;

• De classe
◦ Accessibles sans créer d'objet
◦ Initialisés à la déclaration ou bloc spécial

static int compteur = 0;

46 / 95
Méthodes

• D'instance

private String nom1 ( double d );


protected int nom2 ( int a , int b );

• De classe
◦ Accessibles sans créer d'objet
◦ Ne peut PAS accéder aux attributs d'instance

static type_retour nomMethode ( parametres );

47 / 95
Modicateurs de méthode

public static final int methode ( double d );

• public Méthode publique, visible/appelable par tout le monde


• static Méthode de classe
• final Méthode non redénissable
• int Type de retour
• double d Paramètre(s)

48 / 95
Constructeur

• Initialiser les attributs d'un nouvel objet


• Syntaxe diérente d'une méthode
◦ Porte le même nom que la classe
• Constructeur par défaut
◦ fourni automatiquement si pas d'autres constructeurs
• Surcharge de constructeur
◦ Appel de constructeurs != avec paramètres
• Pas d'héritage de constructeur

49 / 95
Exemple complet

public class Cours {


int nb_etudiants ;

public Cours () {
nb_etudiants = 0;
}
public Cours ( int n) {
nb_etudiants = n ;
}
public int getNbEtudiants () {
return nb_etudiants ;
}
public boolean isPassionnant () {
return true ;
}
}

50 / 95
Accéder aux membres

• Opérateur point à l'extérieur de la classe

instance . methode ();


instance . attribut ;

• Référence valide ?
◦ Null Pointer exception
• Membre visible
◦ Niveaux d'accès (public/privé)
◦ Interface de classe
◦ Encapsulation

51 / 95
Encapsulation

• Sécurisé les données


• Données privées
• Accesseur est une méthode publique qui donne l'accès à une
variable d'instance privée (get / set)

private int valeur = 13;

public int getValeur (){ return ( valeur ); }


public void setValeur ( int val ) { valeur = val ;}

52 / 95
Au chargement de la classe

• Instructions spéciques exécutées au chargement de la classe dans


la JVM
◦ Pas à l'instanciation d'objet

class Exemple {
static int [] tab ;
static {
// execute au chargement de la classe
tab = new int [4];
for ( int i =0; i <4; ++ i ) tab [ i ] = i +1;
}
}

53 / 95
Héritage

• B hérite de A
• Conditions
◦ A doit être visible (publique ou même package par ex)
◦ A n'est pas nale
• B hérite de tous les membres protégés et publics de A sauf les
constructeurs
◦ Les membres privés ne sont pas transmis
• B n'hérite que d'une seule classe directe
• Toute classe hérite de java.lang.Object

54 / 95
Héritage

public class B extends A {


public B () {
super (); // appel du constructeur de A
// initialisations specifiques
}
}

• super : ce qui vient de la classe mère


super . methode ();
super . attribut ;
super . super . attribut // illegal

• this : concerne l'objet courant

55 / 95
Référence this
public class A {
String chaine1 , chaine2 ;

public A () {
chaine1 = " CHAINE1 " ;
chaine2 = " CHAINE2 " ;
}

void methode1 ( String chaine1 , String c ) {


this . chaine1 = chaine1 ;
chaine2 = c ;
}

void methode2 () {
methode1 ( " e " ," f" );
this . methode1 ( " " ," " );
}
}
56 / 95
Noms qualiés

class A {
protected int attribut ;
}

public class B extends A {

protected double attribut ;

public void toto () {


attribut // est un double
this . attribut // est un double
super . attribut // est un int
(( A ) this ). attribut // est un int
(( B ) this ). attribut // est un double
}
}

57 / 95
Hériter

• Écrire une classe Vehicule qui reprend les caractéristiques


communes des classes Voiture et Camion
• On va modier les classes pour tester le polymorphisme...

58 / 95
Hériter

public class Vehicule {


public void afficher () {
System . out . println ( " Vehicule " );
}
public static void main ( String [] param ) {
Vehicule v = new Vehicule ();
Voiture w = new Voiture ();
Camion c = new Camion ();
Vehicule z = new Voiture ();
Voiture i = new Vehicule ();
}
}

class Voiture extends Vehicule {


public void afficher () {
System . out . println ( " Voiture " );
}
}
class Camion extends Vehicule {
}

Appeler les méthodes afficher() des objets.

59 / 95
Hériter

class Voiture extends Vehicule {


public void afficher () {
System . out . println ( " Voiture " );
}
public void special () {
System . out . println ( " special " );
}
}

public class Vehicule {


public void afficher () {
System . out . println ( " Vehicule " );
}
public static void main ( String [] param ) {
Vehicule v = new Voiture ();
v. afficher ();
v. special ();
(( Voiture )v ). special ();
(( Camion )v ). afficher (); // defini precedemment
}
}

Que se passe-t'il ?

60 / 95
Niveaux d'accès

• public
◦ tout le monde
• private
◦ même classe
• protected
◦ même package
◦ sous-classe d'un package diérent
• package - (par défaut)
◦ sorte de friend du C++
◦ DANGEREUX

61 / 95
Encapsulation des membres

62 / 95
Encapsulation des membres

63 / 95
Méthodes virtuelles ou nales ?

• Méthodes virtuelles
◦ Par défaut
◦ Construction d'une table de méthodes pour une hiérarchie
◦ Recherche dans cette table (lenteur ?)
• Méthodes nales
◦ Non redénissables dans les classes lles
◦ Plus rapides que les méthodes virtuelles
◦ Conseil : accesseurs en nal

64 / 95
Méthodes et classes abstraites

• Méthode abstraite
◦ sans implémentation
◦ mot-clé abstract (modicateur)
• Classe abstraite
◦ Non redénissables dans les classes lles
◦ Plus rapides que les méthodes virtuelles
◦ Conseil : accesseurs en nal

65 / 95
Méthodes et classes abstraites

public abstract class Vehicule1 {


public void afficher () {
System . out . println ( " Vehicule " );
}
}

public abstract class Vehicule2 {


abstract public void afficher () ;
}

class Voiture2a extends Vehicule2 {


} // cette classe n ' est pas instanciable

class Voiture2b extends Vehicule2 {


public void afficher () { ... }
}

66 / 95
Interface

• "Classe virtuelle pure"


◦ Pas de code
◦ Pas de variable/attribut
◦ "Constantes" autorisées (static final)
• Toutes les méthodes sont abstract par défaut
• Réponse à l'héritage multiple
• Instancier une classe ? Implémenter toutes les méthodes des
interfaces qu'elle utilise
• Polymorphisme : la classe est du type de l'interface qu'elle
implémente

67 / 95
Héritage multiple ?

Relation non symétrique = raison fonctionnelle

68 / 95
Héritage multiple ?

69 / 95
Interface

public class C extends A , B { // IMPOSSIBLE


...
}

interface IB {
static final int CONSTANTE = 30;
public int methode_de_IB ( double );
}

public class C extends A implements IB {


void methode_de_A () {} // r e d f i n i t i o n
void methode_de_IB () {} // i m p m e n t a t i o n
}

70 / 95
Interface
public class Vehicule {

public void afficher () {


System . out . println ( " Vehicule " );
}

public static void main ( String [] param ) {


Vehicule v = new Voiture ();
(( Voiture )v ). embrayer ();

System . out . println ( Manuel . VITESSES );


}
}

interface Manuel {
public static final int VITESSES = 5;
public void embrayer ();
}

class Voiture extends Vehicule implements Manuel {

public void afficher () {


System . out . println ( " Voiture " );
}

public void embrayer () {


System . out . println ( " Boite manuelle " );
}
}71 / 95
Plan

Le langage Java

Notions de base et syntaxe

Concepts objets en Java

Collections
Tableaux
Itérateurs
Types de collections
Map
Tri
72 / 95
Collections d'objets

• Stockage de multiples objets


◦ Outil fondamental de n'importe quel langage
• Tableaux
◦ Taille xe
• Collections
◦ Taille variable
• Deux groupes
◦ Collection
◦ Map

73 / 95
Tableaux

public class Zoo {


static final int NB_ANI = 50;
Animal [] animaux ;
public Zoo () {
// pas de creation d ' objet , sinon le constructeur
// par defaut serait obligatoire
animaux = new Animal [ NB_ANI ];
}
public void placerAnimal ( int i , Animal a) {
if ((i >=0) && (i < NB_ANI ))
animaux [ i] = a;
}
public static void main ( String [] chaines ) {
Zoo zoo = new Zoo ();
zoo . placerAnimal (0 , new Animal ( " lion " ));
}
}
class Animal {
String nom ;
// public Animal () { nom =" INCONNU "; }
public Animal ( String nom ) {
this . nom = nom ;
}
}

74 / 95
Tableaux

// ajouter dans la classe Zoo


public Animal quelAnimal ( int i) {
return animaux [ i ];
}

// ajouter dans la class Animal


public void afficher () {
System . out . println ( nom );
}

// ajouter dans la methode main ()


zoo . quelAnimal (0). afficher (); // c ' est bon
// c ' est la meme chose que d ' ecrire
// zoo . animaux [0]. nom
// si animaux et nom sont publics
zoo . quelAnimal (1). afficher (); // NullPointer
zoo . quelAnimal (60). afficher (); // ArrayOutOfBounds

75 / 95
Collection

• Interface ne dénissant pas la structure

boolean add ( Object o)


boolean remove ( Object o )
boolean contains ( Object o )
int size ()
boolean isEmpty ()
iterator iterator ()

• java.util.Collection

76 / 95
Conversion collection - tableau

public Object [] toArray ()


public Object [] toArray ( Object [] a )

List liste = Arrays . asList ( monTableau );

String [] tab = new String [50];


List < String > list = Arrays . asList ( tab );

77 / 95
Itérateurs

• Objet qui permet de boucler sur une suite de valeurs


• Trois méthodes
◦ Object next()|
◦ boolean hasNext()|
• true si il y a encore un element à parcourir
• false si on est au bout
◦ void remove()|

78 / 95
Itérateurs

public void printElements ( Collection c , PrintStream sortie ){

Iterator it = c . iterator ();

while ( it . hasNext ()) {


sortie . println ( it . next ());
}
}

79 / 95
Itérateurs suppression

public void printElements ( Collection < String > c ,


PrintStream sortie ) {
Iterator < String > it = c . iterator ();

while ( it . hasNext ()) {


String currentString = it . next ();
if ( currentString . equals ( " StringASupprimer " )) {
it . remove ();
sortie . println ( " Element supprime " );
} else {
sortie . println ( currentString );
}
}
}

80 / 95
Itérateurs suppression

• Pas implémenté par tous les Iterator


◦ UnsupportedOperation-Exception
• Si on appelle remove() avant next() ou remove() deux fois
◦ IllegalStateException

81 / 95
Collections  Set

• Set
◦ Même méthodes que Collection
◦ Duplication interdite
◦ add() renvoie false si duplication
• SortedSet
◦ Set trié

82 / 95
Collections  List

• List
◦ Accès à des emplacements spéciques

public void add ( int index , Object element )


public void remove ( int index )
public Object get ( int index )
public Object set ( int index , Object element )

83 / 95
Collections  List

• Interface
• Implémentations
◦ LinkedList : liste chainée
◦ ArrayList : tableau redimensionnable
◦ Vector : tableau redimensionnable thread safe (ancienne API)
◦ Stack

84 / 95
Map

• Collection de clé/valeur
• Dictionnaire
• Interface java.util.Map

85 / 95
Map

public Object put ( Object cle , Object valeur )


public Object get ( Object cle )
public Object remove ( Object cle )
public int size ()
public Set keySet ()
public Collection values ()

• Implémentation
◦ HashMap
◦ HashTable
◦ LinkedHashMap
◦ ...

86 / 95
Sorted Map

• Map triée sur ses clefs


◦ SortedMap
◦ Les éléments doivent implémenter Comparable

87 / 95
Collections  Tri

• Fonctionnalité primordiale des Collections


• Tri automatique sur les types de base
• Implémentation spécique si besoin

88 / 95
Collections  Tri

public static void sort ( List liste )

public interface Comparable {


public int compareTo ( Object o );
}

public static void sort ( List liste , Comparator c )

public interface Comparator {


public int compare ( Object o1 , Object o2 );
public boolean equals ( Object obj );
}

89 / 95
Collections  Tri

public static void sort ( List liste )

public interface Comparable {


public int compareTo ( Object o );
}

public static void sort ( List liste , Comparator c )

public interface Comparator {


public int compare ( Object o1 , Object o2 );
public boolean equals ( Object obj );
}

90 / 95
Exercice

• Créez une classe Arret contenant les informations liées à un arêt


de transport en commun
◦Identiant
◦Nom
◦Latitude / longitude
◦Ville
◦Type (bus, tram, metro)
• Modiez cette classe Arret pour qu'elle puisse être triée selon son
id puis son nom
• Utilisez les Collections pour trier la liste d'Arret

91 / 95
Collection tri v1

ArrayList < Arret > list = getListArret ();


Collections . sort ( list , new Comparator < Arret >() {
@Override
public int compare ( Arret o1 , Arret o2 ) {
int value = 0;
Integer i1 = o1 . getId ();
value = i1 . compareTo ( o2 . getId ());
if ( value != 0) {
return value ;
}
value = o1 . getNom (). compareTo ( o2 . getNom ());
return value ;
}
});

Collections . sort ( list );

92 / 95
Collection tri v2
public class Arret implements Comparable < Arret > {

private int mId ;


private String mNom , mVille , mLatitude , mLongitude , mType ;

public Arret () {...}

@Override
public int compareTo ( Arret other ) {
int value = 0;
Integer i1 = mId ;
value = i1 . compareTo ( other . getId ());
if ( value != 0) {
return value ;
}
value = mNom . compareTo ( other . getNom ());
return value ;
}
}93 / 95
Résumé

• Héritage simple seulement


• Implémentation multiple d'interfaces
• Une classe nale n'est pas dérivable
• Tous les classes dérivent de java.lang.Object
• Utiliser les collections pour stocker les objets

94 / 95
Références utilisées pour le cours

• http ://fr.wikipedia.org
• http ://stackoverow.com
• Introduction à Java (Pat Neimeyer et Jonathan Knudsen, éditions
O'Reilly)
• Cours de Java de Loic Yon (ISIMA)

95 / 95

Vous aimerez peut-être aussi