Académique Documents
Professionnel Documents
Culture Documents
Olivier Goutet
o.goutet@openium.fr
18 janvier 2013
1 / 95
Objectifs
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
Collections
4 / 95
Plan
Le langage Java
Java
Machine virtuelle
Premier programme
Collections
5 / 95
Le langage Java
• Portable
• Sécurisé
• Simple
• Performant
6 / 95
Langage
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
/* 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
10 / 95
Plan
Le langage Java
• 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
14 / 95
Exécution
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
17 / 95
Package Java standard
18 / 95
Import
19 / 95
Syntaxe
• Comme en C
• Indentation diérente :
• Quelques particularités
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
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 ;
26 / 95
Exceptions
27 / 95
Exceptions
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
32 / 95
Lever une exception
• throw
33 / 95
Quand les utiliser ?
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
36 / 95
Tableaux
• Initialisation du tableau
◦ Par des valeurs scalaires (0 pour des int)
◦ null pour des objets
• Tableaux multidimensionnels
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
• Que se passe-t-il ?
39 / 95
Plan
Le langage Java
Collections
40 / 95
Créer une instance
41 / 95
Détruire une instance
42 / 95
Déclaration d'une classe
43 / 95
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
String chaine ;
int entier ;
• De classe
◦ Accessibles sans créer d'objet
◦ Initialisés à la déclaration ou bloc spécial
46 / 95
Méthodes
• D'instance
• De classe
◦ Accessibles sans créer d'objet
◦ Ne peut PAS accéder aux attributs d'instance
47 / 95
Modicateurs de méthode
48 / 95
Constructeur
49 / 95
Exemple complet
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
• Référence valide ?
◦ Null Pointer exception
• Membre visible
◦ Niveaux d'accès (public/privé)
◦ Interface de classe
◦ Encapsulation
51 / 95
Encapsulation
52 / 95
Au chargement de la classe
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
55 / 95
Référence this
public class A {
String chaine1 , chaine2 ;
public A () {
chaine1 = " CHAINE1 " ;
chaine2 = " CHAINE2 " ;
}
void methode2 () {
methode1 ( " e " ," f" );
this . methode1 ( " " ," " );
}
}
56 / 95
Noms qualiés
class A {
protected int attribut ;
}
57 / 95
Hériter
58 / 95
Hériter
59 / 95
Hériter
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
66 / 95
Interface
67 / 95
Héritage multiple ?
68 / 95
Héritage multiple ?
69 / 95
Interface
interface IB {
static final int CONSTANTE = 30;
public int methode_de_IB ( double );
}
70 / 95
Interface
public class Vehicule {
interface Manuel {
public static final int VITESSES = 5;
public void embrayer ();
}
Le langage Java
Collections
Tableaux
Itérateurs
Types de collections
Map
Tri
72 / 95
Collections d'objets
73 / 95
Tableaux
74 / 95
Tableaux
75 / 95
Collection
• java.util.Collection
76 / 95
Conversion collection - tableau
77 / 95
Itérateurs
78 / 95
Itérateurs
79 / 95
Itérateurs suppression
80 / 95
Itérateurs suppression
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
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
• Implémentation
◦ HashMap
◦ HashTable
◦ LinkedHashMap
◦ ...
86 / 95
Sorted Map
87 / 95
Collections Tri
88 / 95
Collections Tri
89 / 95
Collections Tri
90 / 95
Exercice
91 / 95
Collection tri v1
92 / 95
Collection tri v2
public class Arret implements Comparable < 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é
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