Beruflich Dokumente
Kultur Dokumente
programmation Java
Christian Bac, Denis Conan
CSC 4002
Octobre 2015
Revision : 1527
Introduction au langage de programmation Java
Sommaire du cours
1 Introduction à Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Concepts de bases de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Classes et objets en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4 Généralisation spécialisation en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5 Organisation des sources Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6 API Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7 Exceptions en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
8 Concepts objets avancés en Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 2/169
Introduction au langage de programmation Java
1 Introduction à Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 3/169
Introduction au langage de programmation Java 1 Introduction à Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 4/169
1 Introduction à Java 1.1 Vous avez dit Java ?
1.1.1 Android
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 5/169
1 Introduction à Java 1.1 Vous avez dit Java ?
1.1.2 CAS
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 6/169
1 Introduction à Java 1.1 Vous avez dit Java ?
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 7/169
1 Introduction à Java 1.1 Vous avez dit Java ?
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 8/169
Introduction au langage de programmation Java 1 Introduction à Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 9/169
1 Introduction à Java 1.2 Que recouvre le mot Java ?
1.2.1 Héros
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 10/169
1 Introduction à Java 1.2 Que recouvre le mot Java ?
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 11/169
Introduction au langage de programmation Java 1 Introduction à Java
1.3 Caractéristiques
■ Objet
■ Exécuté par une machine virtuelle
■ Permettant d’écrire des programmes robustes
■ Simple : C comme syntaxe de base
■ Sûr, multi-activité, réparti
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 12/169
1 Introduction à Java 1.3 Caractéristiques
■ Tout est classe sauf les types primitifs (int, float, double, etc.)
■ Tout objet est manipulé à travers une référence
■ La spécialisation est simple entre les classes
■ Toutes les classes dérivent de java.lang.Object
■ Les tableaux sont construits à partir d’une classe particulière
■ L’API (en anglais, Application Programming Interface) est un ensemble de classes
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 13/169
1 Introduction à Java 1.3 Caractéristiques
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 14/169
1 Introduction à Java 1.3 Caractéristiques
1.3.3 Robustesse
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 15/169
Introduction au langage de programmation Java 1 Introduction à Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 16/169
Introduction au langage de programmation Java 1 Introduction à Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 17/169
1 Introduction à Java 1.5 Environnements de développement
■ javac : compilateur
■ java : JVM interpréteur de bytecode
■ javadoc : générateur de documentation
■ appletviewer : environnement pour applet
■ javah : générateur d’entêtes pour mélange avec code natif en C (JNI)
■ javap : désassembleur de code intermédiaire
■ jdb : dévermineur
■ javakey : générateur de clés pour signer le code
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 18/169
Introduction au langage de programmation Java 1 Introduction à Java
■ http://moodle.tem-tsp.eu/moodle/view.php?id=26
■ http://www-inf.it-sudparis.eu/COURS/CSC4002/
■ http://http://www.oracle.com/technetwork/java/index.html: Oracle
Java(tm) Technology Home Page
■ http://www.javaworld.com: Infos
■ http://www.developer.com/java: Infos Liens
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 20/169
Introduction au langage de programmation Java 1 Introduction à Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 21/169
Introduction au langage de programmation Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 22/169
Introduction au langage de programmation Java 2 Concepts de bases de Java
■ Syntaxe de base C
♦ Instructions de contrôle : if, switch, for, while, do while
♦ Opérateurs : tous les opérateurs du C par exemple, + - / * %,
♦ Blocs, instructions simples : {}, « ; »
■ Quelques différences
♦ final remplace const
♦ espaces de nommage plus nombreux : classe, fichier, groupe de classes
♦ private remplace static
♦ static prend un sens associé au concept de classe
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 23/169
2 Concepts de bases de Java 2.1 Syntaxe de base
2.1.1 Premier en C
1 #i n c l u d e < s t d l i b . h>
#i n c l u d e < s t d i o . h>
t y p e d e f enum { FAUX=0 , VRAI=1 } B o o l e e n ;
5 s t a t i c B o o l e e n e s t P r e m i e r ( i n t nombre ) {
i n t b o r n e=nombre / 2 ;
i f ( nombre==1) r e t u r n FAUX ;
9 f o r ( i n t p r e d =2; p r e d<=b o r n e ; p r e d++) {
i f ( nombre%p r e d ==0) {
r e t u r n FAUX ;
}
13 }
r e t u r n VRAI ;
}
17 i n t main ( ) {
int nb ;
p r i n t f ( " S a i s i r ␣ une ␣ v a l e u r ␣>␣ 0 ␣ : ␣ " ) ;
s c a n f ( "%d " , &nb ) ;
21
i f ( nb<=0) {
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 24/169
2 Concepts de bases de Java 2.1 Syntaxe de base
p r i n t f ( " E r r e u r ␣ de ␣ s a i s i e \n " ) ;
return EXIT_FAILURE ;
25 }
p r i n t f ( " Le ␣ nombre ␣%d␣ " , nb ) ;
i f ( e s t P r e m i e r ( nb ) ) {
p r i n t f ( " e s t ␣ p r e m i e r \n " ) ;
29 } else {
p r i n t f ( " n ’ e s t ␣ p a s ␣ p r e m i e r \n " ) ;
}
r e t u r n EXIT_SUCCESS ;
33 }
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 25/169
2 Concepts de bases de Java 2.1 Syntaxe de base
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 26/169
Introduction au langage de programmation Java 2 Concepts de bases de Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 27/169
2 Concepts de bases de Java 2.2 Types Primitifs
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 28/169
2 Concepts de bases de Java 2.2 Types Primitifs
p u b l i c c l a s s CastExampleFixed {
2 p u b l i c s t a t i c v o i d main ( f i n a l String [ ] args ) {
int i = 2127272 ; // 0 x002075A8
l o n g m;
short s ;
6 byte b ;
m = i ; // p r o m o t i o n OK
// E x p l i c i t c a s t n e e d e d
i = ( i n t ) m;
10 s = ( s h o r t ) i ; // 0 x75A8
b = ( byte ) i ; // 0xA8
System . o u t . p r i n t l n ( "m=␣ " + m + " ; ␣ s=␣ " + s + " ; ␣b=␣ " + b ) ;
}
14 }
Résultat de l’exécution :
m= 2127272; s= 30120; b= -88;
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 29/169
2 Concepts de bases de Java 2.2 Types Primitifs
2.2.3 Tableaux
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 30/169
2 Concepts de bases de Java 2.2 Types Primitifs
p u b l i c c l a s s ArrayExample {
2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) {
int [] a r r a y O f I n t ; // o r i n t a r r a y O f I n t [ ] ; // d e c l a r a t i o n de l a v a r i a b l e a r r a y
a r r a y O f I n t = new i n t [ 4 2 ] ; // c r e a t i o n du t a b l e a u e t a s s o c i a t i o n a a r r a y O f I n t
a r r a y O f I n t [ 0 ] = 3 ; // a f f e c t a t i o n d ’ un e l e m e n t du t a b l e a u
6
Résultat de l’exécution :
Array length 42
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 42
at ArrayExample.main(ArrayExample.java:8)
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 31/169
Introduction au langage de programmation Java 2 Concepts de bases de Java
2.3 Tableaux
■ Déclaration de la référence
int[] arrayOfInt; // or int arrayOfInt[];
■ Création avec association de taille
arrayOfInt = new int[42];
■ Taille
int t = arrayOfInt.length;
■ Compatibilité avec C :
int[] primes = {1, 2, 3, 5, 7, 7+4};
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 32/169
Introduction au langage de programmation Java 2 Concepts de bases de Java
2.4 Méthodes
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 33/169
Introduction au langage de programmation Java 2 Concepts de bases de Java
p u b l i c c l a s s EssParm {
2 p r i v a t e s t a t i c v o i d add ( i n t c , final i n t [ ] as ) {
c++;
a s [ 0 ] ++;
System . o u t . p r i n t l n ( " add ␣ : ␣ c=" + c + " , ␣ a s [ 0 ] = " + a s [ 0 ] ) ;
6 }
p u b l i c s t a t i c v o i d main ( f i n a l String argv [ ] ) {
int i = 0;
i n t s [ ] = new i n t [ 1 0 ] ;
10 s [0] = 0;
add ( i , s ) ;
System . o u t . p r i n t l n ( " main ␣ : ␣ i=" + i + " , ␣ s [ 0 ] = " + s [ 0 ] ) ;
}
14 }
Résultat de l’exécution :
add : c=1, as[0]=1
main : i=0, s[0]=1
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 34/169
Introduction au langage de programmation Java 2 Concepts de bases de Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 35/169
Introduction au langage de programmation Java
3.1 Classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.2 Objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3 Attributs et méthodes de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4 Association entre classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 36/169
Introduction au langage de programmation Java 3 Classes et objets en Java
3.1 Classe
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 37/169
3 Classes et objets en Java 3.1 Classe
package s t u d s ;
2 p u b l i c c l a s s Personne {
p r i v a t e S t r i n g nom , prenom ;
private int nbParticipations = 0 , nbOrganisations = 0;
p u b l i c Personne ( f i n a l String n , final String p) {
6 nom = n ; prenom = p ;
}
public void voter ( f i n a l B u l l e t i n b ){ }
public void c o n s u l t e r R e s u l t a t ( f i n a l Scrutin s ) { }
10 public void seRetirerDUnScrutin ( f i n a l Scrutin s ) { }
@Override
public String toString (){
r e t u r n " P e r s o n n e ␣ " + nom + " , ␣ "+ prenom +" , ␣ "+ n b O r g a n i s a t i o n s + " , ␣ " + n b P a r t
14 }
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 38/169
3 Classes et objets en Java 3.1 Classe
Nom Identifiant
de la classe de l’objet
Personne j:Personne
Constructeur(String n,String p)
voter(Bulletin b) Type Valeur
consulterResultat(Scrutin s) de l’attribut de l’attribut
seRetirerDUnScrutin(Scrutin s)
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 39/169
3 Classes et objets en Java 3.1 Classe
Résultat de l’exécution :
studs.Personne@f62373
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 40/169
Introduction au langage de programmation Java 3 Classes et objets en Java
3.2 Objet
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 41/169
3 Classes et objets en Java 3.2 Objet
■ Méthode particulière :
♦ Nom identique à la classe
♦ Aucun type de retour
♦ Appelé directement à travers new
■ Si aucun constructeur n’est spécifié, le compilateur en fabrique un par défaut qui
initialise les attributs à 0 (correspondant à leur type)
■ La surcharge des méthodes (overloading) permet à une classe d’avoir plusieurs
constructeurs qui diffèrent par le nombre et le type de leurs arguments
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 42/169
3 Classes et objets en Java 3.2 Objet
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 43/169
3 Classes et objets en Java 3.2 Objet
3.2.3 this
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 44/169
3 Classes et objets en Java 3.2 Objet
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 45/169
3 Classes et objets en Java 3.2 Objet
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 46/169
3 Classes et objets en Java 3.2 Objet
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 47/169
3 Classes et objets en Java 3.2 Objet
■ Les méthodes publiques (public) d’une classe définissent son interface publique
■ Les méthodes privées (private), ne sont accessibles que depuis l’intérieur de la
classe
■ Les méthodes protégées (protected), sont accessibles depuis l’intérieur de la classe
et de l’intérieur de ses classes dérivées
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 48/169
Introduction au langage de programmation Java 3 Classes et objets en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 49/169
3 Classes et objets en Java 3.3 Attributs et méthodes de classe
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 50/169
3 Classes et objets en Java 3.3 Attributs et méthodes de classe
}
}
import s t u d s s t a t . Personne ;
public class TestStaticPersonne {
p u b l i c s t a t i c v o i d main ( f i n a l String [ ] args ) {
4 P e r s o n n e j = new P e r s o n n e ( " Dupont " , " J u l i e n " , 7 , 3 ) ;
P e r s o n n e m = new P e r s o n n e ( " M a r t i n " , " M a r i e " , 5 , 1 ) ;
System . o u t . p r i n t l n ( j ) ;
System . o u t . p r i n t l n (m) ;
8 }
}
Affichage :
Dupont Julien nbp 7 nbo 3 nbt 12
Martin Marie nbp 5 nbo 1 nbt 12
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 51/169
3 Classes et objets en Java 3.3 Attributs et méthodes de classe
■ Les attributs statiques sont partagés par toutes les instances de la classe
■ Les méthodes statiques ne peuvent accéder qu’aux attributs statiques
■ Il n’est pas nécessaire d’instancier la classe pour accéder à ses membres statiques
■ Les instances peuvent accéder aux attributs statiques
■ Les instances peuvent invoquer les méthodes statiques
■ Les méthodes statiques ne sont jamais associées à l’auto référence de l’objet (this)
■ Quelques exemples avec la classe java.lang.math :
pi = Math.PI; // static attribute ’PI’
b = Math.sqrt(2.0);// method call of static ’sqrt’
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 52/169
Introduction au langage de programmation Java 3 Classes et objets en Java
Sens de
Association Nom de lecture de
l’association l’association
organise
Personne * Scrutin
organise
m:Personne listeBDE:Scrutin
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 53/169
3 Classes et objets en Java 3.4 Association entre classes
package s t u d s o r g ;
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 54/169
3 Classes et objets en Java 3.4 Association entre classes
import s t u d s o r g . ∗ ;
public class InitScrutin {
3 p u b l i c s t a t i c v o i d main ( f i n a l String [ ] args ) {
Personne p ; // r e f e r e n c e
p = new P e r s o n n e ( " Dupont " , " J u l i e n " ) ; // i n s t a n c e c r e a t i o n
S c r u t i n bde = p . o r g a n i s e r S c r u t i n ( " E l e c t i o n ␣ bde ␣ 2010 " ) ;
7 System . o u t . p r i n t l n ( bde ) ;
}
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 55/169
3 Classes et objets en Java 3.4 Association entre classes
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 56/169
Introduction au langage de programmation Java 3 Classes et objets en Java
■ Les attributs d’instance d’une classe servent-ils à représenter l’état des objets de la
classe ?
■ Les objets sont-ils créés par l’appel à un constructeur de la classe ?
■ Dans la section 50, est-il légal d’écrire :
♦ ligne 12 this.nbParticipations au lieu de nbParticipations
♦ ligne 17 this.nbTotalParticipations au lieu de nbTotalParticipations
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 57/169
Introduction au langage de programmation Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 58/169
Introduction au langage de programmation Java 4 Généralisation spécialisation en Java
Personne
nom
numéroSécu
Permanent Vacataire
numéroBureau nombreVacations
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 59/169
4 Généralisation spécialisation en Java 4.1 Généralisation spécialisation
■ Une classe ne peut hériter que d’une autre classe (héritage simple)
■ Une classe hérite d’une autre par l’utilisation du mot réservé extends
■ Une classe pour laquelle aucune spécialisation n’est explicitée spécialise
implicitement la classe java.lang.Object
■ L’opérateur instanceof permet de tester si une référence correspond à un objet
d’une classe donnée
■ Le mot réservé final utilisé devant le mot clé class interdit toute spécialisation de
la classe sur laquelle il est utilisé
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 60/169
4 Généralisation spécialisation en Java 4.1 Généralisation spécialisation
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 61/169
4 Généralisation spécialisation en Java 4.1 Généralisation spécialisation
package p e r s o n n e s ;
p u b l i c c l a s s Personne {
3 p r i v a t e S t r i n g nom , prenom , numSecu ;
p u b l i c Personne ( f i n a l String n , final String p , final S t r i n g ns ){
nom = n ; prenom = p ; numSecu = n s ;
}
7 public String toString (){
r e t u r n " P e r s o n n e : ␣ " + nom + " ␣ " + prenom + " ␣ " + numSecu ;
}
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 62/169
4 Généralisation spécialisation en Java 4.1 Généralisation spécialisation
package p e r s o n n e s ;
2 p u b l i c c l a s s Enseignant extends Personne {
p r i v a t e i n t nbCours ; p r i v a t e S t r i n g specialite ;
public Enseignant ( f i n a l String n , final String p , final S t r i n g ns ,
final i n t nbc , final String specialite ) {
6 super ( n , p , ns ) ;
n b C o u r s = nbc ;
this . specialite = specialite ;
}
10 public String toString (){
r e t u r n " E n s e i g n a n t : ␣ " + nbCours + " ␣ " +s p e c i a l i t e ;
}
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 63/169
4 Généralisation spécialisation en Java 4.1 Généralisation spécialisation
import personnes . ∗ ;
public class InheritExample {
3 p u b l i c s t a t i c v o i d main ( f i n a l String [ ] args ) {
P e r s o n n e p = new P e r s o n n e ( " Dupont " , " J u l i e n " ,
" 1831291... " );
E n s e i g n a n t e = new E n s e i g n a n t ( " Durand " , " E m i l i e " ,
7 " 2 7 8 0 6 3 3 . . . " , 3 , " C l o u d ␣ Computing " ) ;
System . o u t . p r i n t l n ( " p␣ e s t ␣ une ␣ P e r s o n n e ␣ "
+ ( p i n s t a n c e o f Personne ) ) ;
System . o u t . p r i n t l n ( " p␣ e s t ␣ un ␣ E n s e i g n a n t ␣ "
11 + (p instanceof Enseignant ) ) ;
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 64/169
4 Généralisation spécialisation en Java 4.1 Généralisation spécialisation
Résultat de l’exécution :
p est une Personne true
p est une Enseignant false
e est une Personne true
e est une Enseignant true
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 65/169
Introduction au langage de programmation Java 4 Généralisation spécialisation en Java
4.2 Polymorphisme
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 66/169
4 Généralisation spécialisation en Java 4.2 Polymorphisme
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 68/169
Introduction au langage de programmation Java 4 Généralisation spécialisation en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 69/169
4 Généralisation spécialisation en Java 4.3 Redéfinition de méthodes dans les classes dérivées
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 70/169
Introduction au langage de programmation Java 4 Généralisation spécialisation en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 71/169
Introduction au langage de programmation Java 4 Généralisation spécialisation en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 72/169
Introduction au langage de programmation Java 4 Généralisation spécialisation en Java
En UML :
<< abstract >> Nom de la classe
Média en italique ou
auteur
titre utilisation du
dateCréation stéréotype <<abstract>>
transporter()
dupliquer()
afficher()
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 73/169
4 Généralisation spécialisation en Java 4.5 Classes abstraites
■ Classe qui ne peut pas être instanciée. Par exemple la classe Média de la diapositive
précédente
■ Spécialisation nécessaire jusqu’à obtenir des classes instanciables : par exemple, la
classe Livre dans la même diapositive
■ Impose un comportement commun à toutes les classes dérivées
■ Possibilité de créer des tableaux ou des collections de références de classe abstraite
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 74/169
4 Généralisation spécialisation en Java 4.5 Classes abstraites
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 75/169
Introduction au langage de programmation Java 4 Généralisation spécialisation en Java
Personne * Scrutin
* nbTotalParticipations intituléScrutin
organise
nbTotalOrganisations texteCommentaireScrutin
nbParticipations * dateCréation
nbOrganisations dateDébut
prenom dateLimite
nom dateLimiteExistence
ouvertureAvancée
fermetureAvancée
destructionAvancée
nbTotalScrutin
nbChoix
ScrutinPlagesHoraires ScrutinPréférences
concerne
concerne
nbTotal nbTotal
* *
PlageHoraire Préférence
* *
Bulletin date intituléPréférence
* heureDébut texteCommentairePréf
pourOuContre heureFin
* concerne Choix
Studs
/nbBulletinsPour
* /nbBulletinsContre
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 76/169
4 Généralisation spécialisation en Java 4.6 Exemple de classe Abstraites
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 77/169
4 Généralisation spécialisation en Java 4.6 Exemple de classe Abstraites
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 78/169
4 Généralisation spécialisation en Java 4.6 Exemple de classe Abstraites
B u l l e t i n aChanger = l e s B u l l e t i n s [ rang ] ;
i f ( a C h a n g e r . g e t V a l u e ( ) != c h a n g e d . g e t V a l u e ( ) ) {
aChanger . s e t V a l u e ( changed . g e t V a l u e ( ) ) ;
50 }
i f ( aChanger . ge t Va lu e ( ) ) {
n b B u l l e t i n s C o n t r e −− ;
n b B u l l e t i n s P o u r ++;
54 } else {
n b B u l l e t i n s C o n t r e++ ;
n b B u l l e t i n s P o u r −−;
}
58 }
}
}
package s t u d s a b s t r a c t ;
p u b l i c c l a s s Studs {
p r i v a t e Choix [ ] l e s C h o i x ;
4 private Scrutin [ ] lesScrutins ;
private Bulletin [ ] lesBulletins ;
p r i v a t e Personne [ ] l e s P a r t i c i p a n t s ;
p u b l i c Studs () {
8 l e s C h o i x = new C h o i x [ 1 0 0 ] ;
l e s S c r u t i n s = new S c r u t i n [ 1 0 0 ] ;
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 79/169
4 Généralisation spécialisation en Java 4.6 Exemple de classe Abstraites
l e s B u l l e t i n s = new B u l l e t i n [ 1 0 0 ] ;
l e s P a r t i c i p a n t s = new P e r s o n n e [ 1 0 0 ] ;
12 }
@Override
public String toString () {
return " Studs ␣" + l e s C h o i x + l e s S c r u t i n s + l e s B u l l e t i n s + l e s P a r t i c i p a n t s ;
16 }
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 80/169
Introduction au langage de programmation Java 4 Généralisation spécialisation en Java
4.7 Interfaces
UML :
<<interface>>
Déplaçable
saPlace()
avancer()
reculer()
monter()
descendre()
Polygone Personne
sommets nom
numSécu
saPlace()
avancer() saPlace()
reculer() avancer()
monter() reculer()
descendre() monter()
descendre()
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 81/169
4 Généralisation spécialisation en Java 4.7 Interfaces
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 82/169
Introduction au langage de programmation Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 83/169
Introduction au langage de programmation Java 5 Organisation des sources Java
Edition de Liens
a.out
libc.a (exécutable)
(binaire)
(chargeable)
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 84/169
Introduction au langage de programmation Java 5 Organisation des sources Java
Processus
Donnees
Pile
Tas
Libc.so
CPU
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 85/169
Introduction au langage de programmation Java 5 Organisation des sources Java
1
0
0
1 11
00
00
11 00
11
00
11
000
111
0
1
0
1
0
1 00
11
00
11
000
111
000
111
0
1
0
1
00
11
00
11
0
1
0
1
0
1
0
1
Donnees
0
1 JVM
fichiers .class
Pile
Tas
Libc.so
CPU
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 86/169
Introduction au langage de programmation Java 5 Organisation des sources Java
■ Point d’entrée public static void main(String args[]) dans une classe
■ Classes chargées à la demande (en anglais dynamic loading)
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 87/169
Introduction au langage de programmation Java 5 Organisation des sources Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 88/169
Introduction au langage de programmation Java 5 Organisation des sources Java
5.6 Paquetages
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 89/169
5 Organisation des sources Java 5.6 Paquetages
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 90/169
5 Organisation des sources Java 5.6 Paquetages
5.6.2 Exemple
■ CLASSPATH : CLASSPATH=/src:/java
■ Fichier /java/studs/Personne.java contient le code suivant :
package studs;
public class Personne {
private String nom, prenom;
private int nbParticipations = 0, nbOrganisations = 0;
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 91/169
Introduction au langage de programmation Java 5 Organisation des sources Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 92/169
5 Organisation des sources Java 5.7 Visibilité en Java
a b c d
Accessible de C2 oui oui oui -
Accessible de C3 oui oui oui -
Accessible de C4 oui oui - -
Accessible de C5 oui - - -
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 93/169
Introduction au langage de programmation Java 5 Organisation des sources Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 94/169
Introduction au langage de programmation Java
6 API Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 95/169
Introduction au langage de programmation Java 6 API Java
■ java.lang.Object
■ java.lang.String
■ java.lang.Integer
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 96/169
Introduction au langage de programmation Java 6 API Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 97/169
6 API Java 6.2 Classe java.lang.Object
6.2.1 Égalité
Les objets sont manipulés par des références ⇒
■ o1 == o2
♦ Teste si les références sont égales
■ o1.equals(o3)
♦ Teste si le contenu de l’objet référencé par o3 est comparable au contenu de
l’objet référencé par o1
obj1 obj2
o1
"texte" o3 "texte"
o2
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 98/169
6 API Java 6.2 Classe java.lang.Object
Traces d’exécution :
Java
j == m Faux
j.equals(m) Vrai
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 99/169
6 API Java 6.2 Classe java.lang.Object
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 100/169
Introduction au langage de programmation Java 6 API Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 101/169
6 API Java 6.3 Interface de programmation
■ java.lang
■ java.util
■ java.io
■ java.net
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 102/169
Introduction au langage de programmation Java 6 API Java
6.4 java.lang.*
Boolean
Character
<<Interface>>
Byte
Cloneable Class
Math Double
<<Interface>>
<<Abstract>> Float
Comparable Number
Integer
<<Interface>> <<Abstract>>
Process Long
Iterable
Runtime Short
String
Object StringBuffer
System
<<Interface>> Thread
Runnable
ThreadGroup
Throwable
Void
Boolean
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 103/169
6 API Java 6.4 java.lang.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 104/169
6 API Java 6.4 java.lang.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 105/169
6 API Java 6.4 java.lang.*
Résultat de l’exécution :
Être ou ne pas être 19
v
JavaSoft
Java
3.141592653589793
Wed Sep 22 12:25:04 CEST 2010
Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 106/169
Introduction au langage de programmation Java 6 API Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 107/169
Introduction au langage de programmation Java 6 API Java
6.5 java.util.*
<<Interface>>
Cloneable <<Interface>>
BitSet
Serializable
Calendar
Currency
Object
Date
Locale
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 108/169
6 API Java 6.5 java.util.*
Paramètre
E de type
ListeDeChoses
élément : E Attribut
taille : Integer générique
premierÉlément : E
dernierÉlément : E
ajouter(E) Opération
estPrésent(E) générique
retirer(E)
■ Comme en UML, classe associée à la classe des objets qu’elles servent à manipuler
■ Classe associée spécifiée entre « <> »
■ Exemple : Vector<String> myStringVector = new Vector<String>();
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 109/169
6 API Java 6.5 java.util.*
<<Interface>> java.util
java.lang.Iterable
<<Interface>> <<Interface>> <<Interface>>
Collection<E> Enumeration<E> Iterator<E>
<<Abstract>> <<Abstract>>
Dictionary<K,V> AbstractSet<E>
java.lang.object
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 110/169
6 API Java 6.5 java.util.*
<<Interface>>
java.util
java.lang.Iterable
<<Interface>> <<Interface>> <<Interface>>
Collection<E> Enumeration<E> Iterator<E>
<<Abstract>> <<Abstract>>
Dictionary<K,V> AbstractSet<E>
Vector<E>
HashMap<K,V>
Hashtable<K,V>
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 111/169
6 API Java 6.5 java.util.*
6.5.4 Collections
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 112/169
6 API Java 6.5 java.util.*
■ provient de java.lang
■ Préconise : Iterator<T> iterator()
■ Iterator<> décrit 121
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 113/169
6 API Java 6.5 java.util.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 114/169
6 API Java 6.5 java.util.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 115/169
6 API Java 6.5 java.util.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 116/169
6 API Java 6.5 java.util.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 117/169
6 API Java 6.5 java.util.*
import j a v a . u t i l . L i s t ;
2 import j a v a . u t i l . Vector ;
p u b l i c c l a s s VectorForExample {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
L i s t <S t r i n g > v = new V e c t o r <S t r i n g > ( ) ;
6 v . add ( " John " ) ; v . add ( " G e o r g e s " ) ;
System . o u t . p r i n t l n ( " T a i l l e ␣ de ␣ l a ␣ l i s t e ␣ " + v . s i z e ( ) ) ;
f o r ( S t r i n g s : v ){
System . o u t . p r i n t l n ( " ␣ "+s ) ;
10 }
}
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 118/169
6 API Java 6.5 java.util.*
Trace de l’exécution :
Contenu du vecteur :
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 119/169
6 API Java 6.5 java.util.*
un
deux
trois
un removed
Contenu du vecteur :
trois
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 120/169
6 API Java 6.5 java.util.*
■ Il s’agit d’une interface qui fournit une technique pour parcourir les éléments d’une
collection
■ Iterator est spécialisé dans le parcours séquentiel des éléments d’une collection. Il
propose les méthodes suivantes :
♦ hasNext() retourne vrai si l’itérateur contient encore une élément
♦ next() retourne l’élément suivant
♦ remove() supprime le dernier élément retourné par next() de la collection
■ toutes les collections possèdent la méthode iterator()
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 121/169
6 API Java 6.5 java.util.*
import j a v a . u t i l . Vector ;
2 import j a v a . u t i l . L i s t ;
import j a v a . u t i l . I t e r a t o r ;
public class VectorIterator {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) {
6 L i s t <S t r i n g > v = new V e c t o r <S t r i n g > ( ) ;
v . add ( " John " ) ; v . add ( " G e o r g e s " ) ;
I t e r a t o r <S t r i n g > e = v . i t e r a t o r ( ) ;
while ( e . hasNext ( ) ) {
10 System . o u t . p r i n t l n ( " ␣ " + e . n e x t ( ) ) ;
}
// P a r c o u r s a v e c une b o u c l e f o r
f o r ( e = v . i t e r a t o r ( ) ; e . hasNext ( ) ; ) {
14 System . o u t . p r i n t l n ( " ␣ " + e . n e x t ( ) ) ;
}
}
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 122/169
6 API Java 6.5 java.util.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 123/169
6 API Java 6.5 java.util.*
Valeur : Bah
Valeur : bebe
Valeur : aha
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 125/169
6 API Java 6.5 java.util.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 126/169
6 API Java 6.5 java.util.*
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 127/169
6 API Java 6.5 java.util.*
2112
2143
BB Bebe Bah
Aa 11
00
00
11 Ba
00
11
00
11 Aha
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 128/169
Introduction au langage de programmation Java 6 API Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 129/169
Introduction au langage de programmation Java
7 Exceptions en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 130/169
Introduction au langage de programmation Java 7 Exceptions en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 131/169
Introduction au langage de programmation Java 7 Exceptions en Java
7.2 Principes
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 132/169
7 Exceptions en Java 7.2 Principes
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 133/169
7 Exceptions en Java 7.2 Principes
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 134/169
Introduction au langage de programmation Java 7 Exceptions en Java
7.3 Réalisation
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 135/169
7 Exceptions en Java 7.3 Réalisation
7.3.1 java.lang.Exception
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 136/169
Introduction au langage de programmation Java 7 Exceptions en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 137/169
Introduction au langage de programmation Java 7 Exceptions en Java
public c l a s s TestSimpleExcept {
2 /∗ ∗
∗ P o s i t i f t e s t e s i l a v a l e u r du p a r a m e t r e v a l e s t p o s i t i v e .
∗ @param v a l v a l e u r a t e s t e r
∗ @th rows NumException s i v a l e s t < 0
6 ∗/
p r i v a t e s t a t i c v o i d p o s i t i f ( f i n a l d o u b l e v a l ) t h r o w s NumException {
i f ( v a l < 0 . 0 ) throw new NumException ( v a l , " V a l e u r ␣ p o s i t i v e ␣ a t t e n d u e . " ) ;
return ;
10 }
/∗ ∗
∗ t e s t P o s i t i f u t i l i s e p o s i t i f e t r e l a y e l ’ e x c e p t i o n NumException .
∗ @param v a l v a l e u r a t e s t e r .
14 ∗ @throws NumException l o r s q u e p o s i t i f emet NumException
∗/
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 138/169
Introduction au langage de programmation Java 7 Exceptions en Java
p r i v a t e s t a t i c v o i d t e s t P o s i t i f ( d o u b l e v a l ) t h r o w s NumException {
p o s i t i f ( val );
18 System . o u t . p r i n t l n ( " Pas ␣d ’ e x c e p t i o n ␣ l e ␣ c o d e ␣ c o n t i n u e ␣ en ␣ s e q u e n c e " ) ;
return ;
}
/∗ ∗
22 ∗ T r a i t e m e n t d e s a r g u m e n t s de main p a r t e s t d e s
∗ valeurs entieres positives .
∗ @param a r g v a r g u m e n t s de l a l i g n e de commande .
∗/
26 p u b l i c s t a t i c v o i d main ( f i n a l S t r i n g [ ] a r g v ) {
int i , j = 0;
f o r ( i =0; i <a r g v . l e n g t h ; i ++) {
try {
30 j = I n t e g e r . p a r s e I n t ( argv [ i ] ) ;
testPositif ( j );
} catch ( NumberFormatException n f e ){
System . o u t . p r i n t l n ( " P a r a m e t e r ␣ " + a r g v [ i ] + " ␣ s h o u l d ␣ be ␣ an ␣ i n t e g e r " ) ;
34 } c a t c h ( NumException n ) {
System . o u t . p r i n t l n ( " Catch ␣ d a n s ␣ l e ␣ main ␣ " + n ) ;
}
}
38 }
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 139/169
Introduction au langage de programmation Java 7 Exceptions en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 140/169
Introduction au langage de programmation Java 7 Exceptions en Java
■ À quoi servent :
1. Le bloc try catch ?
2. Le mot réservé new après la directive throw ?
■ Pourquoi créer une classe d’exception ?
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 141/169
Introduction au langage de programmation Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 142/169
Introduction au langage de programmation Java 8 Concepts objets avancés en Java
"Paul" "Paul"
o2 o2
obj2 obj2
"Paul"
o2 "Paul" o2
"Jean"
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 143/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
Personne * Scrutin
* nbTotalParticipations intituléScrutin
organise
nbTotalOrganisations texteCommentaireScrutin
nbParticipations * dateCréation
nbOrganisations dateDébut
prenom dateLimite
nom dateLimiteExistence
ouvertureAvancée
fermetureAvancée
destructionAvancée
nbTotalScrutin
ScrutinPlagesHoraires ScrutinPréférences
concerne
/nbChoix
concerne
nbTotal nbTotal
* *
PlageHoraire Préférence
* *
Bulletin date intituléPréférence
* heureDébut texteCommentairePréf
pourOuContre heureFin
* concerne Choix
Studs
/nbBulletinsPour
* /nbBulletinsContre
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 144/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
p: p1:
:Personne :Personne
nom nom
prénom prénom
scrutins scrutins
= "Dupont" = "Julien"
:Scrutin :String
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 145/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 146/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
import j a v a . u t i l . A r r a y L i s t ;
2 import s t u d s c l o n e l i g h t . S c r u t i n ;
import s t u d s c l o n e l i g h t . Personne ;
public class TestCloneLight {
p u b l i c s t a t i c v o i d main ( f i n a l S t r i n g [ ] a r g s )
6 throws CloneNotSupportedException {
P e r s o n n e p = new P e r s o n n e ( " Dupont " , " J u l i e n " ) ;
p . o r g a n i s e r S c r u t i n ( " E l e c t i o n ␣ bde " ) ;
P e r s o n n e p1 = p . c l o n e ( ) ;
10 i f ( p1 == p ) {
System . o u t . p r i n t l n ( " p␣==␣ p1 " ) ;
}
i f ( p . getNom ( ) == p1 . getNom ( ) ) {
14 System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣noms␣==" ) ;
}
i f ( p . getPrenom ( ) == p1 . getPrenom ( ) ) {
System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣ prenoms ␣==" ) ;
18 }
A r r a y L i s t <S c r u t i n > a1 , a2 ;
a1 = p . g e t S c r u t i n s ( ) ;
a2 = p1 . g e t S c r u t i n s ( ) ;
22 i f ( a1 == a2 ) {
System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣ s c r u t i n s ␣==" ) ;
} else {
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 147/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
p et p1 noms ==
p et p1 prenoms ==
p et p1 scrutins ==
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 148/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
:Personne :Personne
nom nom
prénom prénom
scrutins scrutins
= "Dupont" = "Dupont"
:String :String
= "Julien" = "Julien"
:Scrutin
:String
nom
organisateur = "Election bde"
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 149/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
4 import studs . B u l l e t i n ;
p u b l i c c l a s s Personne implements C l o n e a b l e {
p r i v a t e S t r i n g nom , prenom ;
p r i v a t e i n t n b P a r t i c i p a t i o n s = 0 , nbOrg = 0 ;
8 p r i v a t e A r r a y L i s t <S c r u t i n > s c r u t i n s ;
p u b l i c Personne ( f i n a l S t r i n g n , f i n a l S t r i n g p ) {
t h i s . nom = n ;
t h i s . prenom = p ;
12 s c r u t i n s = new A r r a y L i s t <S c r u t i n > ( ) ;
}
p u b l i c S c r u t i n o r g a n i s e r S c r u t i n ( f i n a l S t r i n g nom ) {
S c r u t i n s = new S c r u t i n ( nom , t h i s ) ;
16 s c r u t i n s . add ( s ) ;
nbOrg ++;
return s ;
}
20 /∗ ∗ l e c l o n a g e e s t p r o f o n d , i l d u p l i q u e l e s o b j e t s r e f e r e n c e s ∗/
@SuppressWarnings ( " unchecked " )
@Override
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 150/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
import j a v a . u t i l . A r r a y L i s t ;
import s t u d s c l o n e d e e p . S c r u t i n ;
4 import s t u d s c l o n e d e e p . Personne ;
p u b l i c c l a s s TestCloneDeep {
p u b l i c s t a t i c v o i d main ( f i n a l S t r i n g [ ] a r g s )
throws CloneNotSupportedException {
8 P e r s o n n e p = new P e r s o n n e ( " Dupont " , " J u l i e n " ) ;
p . o r g a n i s e r S c r u t i n ( " E l e c t i o n ␣ bde " ) ;
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 151/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
P e r s o n n e p1 = p . c l o n e ( ) ;
i f ( p1 == p ) {
12 System . o u t . p r i n t l n ( " p␣==␣ p1 " ) ;
}
i f ( p . getNom ( ) == p1 . getNom ( ) ) {
System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣noms␣==" ) ;
16 }
i f ( p . getPrenom ( ) == p1 . getPrenom ( ) ) {
System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣ prenoms ␣==" ) ;
}
20 A r r a y L i s t <S c r u t i n > a1 , a2 ;
a1 = p . g e t S c r u t i n s ( ) ;
a2 = p1 . g e t S c r u t i n s ( ) ;
i f ( a1 == a2 ) {
24 System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣ s c r u t i n s ␣==" ) ;
} else {
f o r ( i n t i = 0 ; i < a1 . s i z e ( ) ; i ++) {
i f ( a1 . g e t ( i ) == a2 . g e t ( i ) ) {
28 System . o u t . p r i n t l n ( " S c r u t i n s ␣ de ␣ r a n g ␣ " + i +" ␣==" ) ;
} else {
i f ( a1 . g e t ( i ) . g e t O r g a n i s a t e u r ( ) == a2 . g e t ( i ) . g e t O r g a n i s a t e u r ( ) ) {
System . o u t . p r i n t l n ( " O r a g a n i s a t e u r ␣ d e s ␣ s c r u t i n s ␣ de ␣ r a n g " + i +"=
32 }
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 152/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
}
}
36 }
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 153/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
:Personne :Personne
nom nom
prénom prénom
scrutins scrutins
= "Dupont" = "Dupont"
:String :String
= "Julien" = "Julien"
:Scrutin :Scrutin
:String
nom nom
organisateur = "Election bde" organisateur
:String
= "Election bde"
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 154/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 155/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
23 }
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 156/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 157/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
@Override
24 p u b l i c Personne c l o n e ( ) throws CloneNotSupportedException {
P e r s o n n e c l = new P e r s o n n e ( nom , prenom ) ;
cl . nbParticipations = nbParticipations ;
c l . nbOrg = nbOrg ;
28 for ( Scrutin scr : scrutins ) {
Scrutin sclone = scr . clone ( ) ;
sclone . setOrganisateur ( cl );
c l . s c r u t i n s . add ( s c l o n e ) ;
32 }
return cl ;
}
p u b l i c S t r i n g getNom ( ) { r e t u r n nom ; }
36 p u b l i c S t r i n g getPrenom ( ) { r e t u r n prenom ; }
p u b l i c A r r a y L i s t <S c r u t i n > g e t S c r u t i n s ( ) { r e t u r n s c r u t i n s ; }
public void voter ( f i n a l B u l l e t i n b ){ }
public void c o n s u l t e r R e s u l t a t ( Scrutin s ) { }
40 public void seRetirerDUnScrutin ( Scrutin s ) { }
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 158/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
3 import s t u d s c l o n e . ∗ ;
p u b l i c c l a s s TestClone {
p u b l i c s t a t i c v o i d main ( f i n a l S t r i n g [ ] a r g s )
throws CloneNotSupportedException {
7 P e r s o n n e p = new P e r s o n n e ( " Dupont " , " J u l i e n " ) ;
p . o r g a n i s e r S c r u t i n ( " E l e c t i o n ␣ bde ␣ 2010 " ) ;
P e r s o n n e p1 = p . c l o n e ( ) ;
i f ( p1 == p ) {
11 System . o u t . p r i n t l n ( " p␣==␣ p1 " ) ;
}
i f ( p . getNom ( ) == p1 . getNom ( ) ) {
System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣noms␣==" ) ;
15 }
i f ( p . getPrenom ( ) == p1 . getPrenom ( ) ) {
System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣ prenoms ␣==" ) ;
}
19 A r r a y L i s t <S c r u t i n > a1 , a2 ;
a1 = p . g e t S c r u t i n s ( ) ;
a2 = p1 . g e t S c r u t i n s ( ) ;
i f ( a1 == a2 ) {
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 159/169
8 Concepts objets avancés en Java 8.1 Copie simple/légère
Résultat de l’exécution :
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 160/169
Introduction au langage de programmation Java 8 Concepts objets avancés en Java
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 161/169
8 Concepts objets avancés en Java 8.2 Retour sur hashCode()
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 162/169
Introduction au langage de programmation Java 8 Concepts objets avancés en Java
p u b l i c c l a s s NumException e x t e n d s E x c e p t i o n {
private static f i n a l l o n g s e r i a l V e r s i o n U I D = 1L ;
3 p u b l i c NumException ( f i n a l d o u b l e v a l e u r , final String s ) {
super ( s + "␣ v a l e u r ␣ : ␣" + v a l e u r ) ;
}
}
p u b l i c c l a s s N u l l E x c e p t i o n e x t e n d s NumException {
2 private static f i n a l l o n g s e r i a l V e r s i o n U I D = 1L ;
public NullException () {
s u p e r ( 0 , " V a l e u r ␣ n u l l e ␣ non ␣ a t t e n d u e " ) ;
}
6 }
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 163/169
8 Concepts objets avancés en Java 8.3 Retour sur les exceptions
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 164/169
8 Concepts objets avancés en Java 8.3 Retour sur les exceptions
∗ @param v a l v a l e u r a t e s t e r
∗ @throw s NumException
∗/
26 p r i v a t e s t a t i c void t e s t P o s i t i f O u N u l l ( f i n a l double v a l )
t h r o w s NumException {
d o u b l e d =0;
System . o u t . p r i n t l n ( " Dans ␣ t e s t P o s i t i f O u N u l l ␣ v a l ␣=␣ "+v a l ) ;
30 try {
d = positifOuNull ( val );
System . o u t . p r i n t l n ( " Pas ␣d ’ e x c e p t i o n ␣ l e ␣ c o d e ␣ c o n t i n u e ␣ en ␣ s e q u e n c e " ) ;
} c a t c h ( N u l l E x c e p t i o n m) {
34 System . o u t . p r i n t l n ( " Catch ␣ N u l l E x c e p t i o n ␣ d a n s ␣ t e s t P o s i t i f O u N u l l ␣ " + m) ;
throw m;
} c a t c h ( NumException m) {
System . o u t . p r i n t l n ( " Catch ␣ NumException ␣ d a n s ␣ t e s t P o s i t i f O u N u l l ␣ "
38 + " t r a i t e m e n t ␣ p a r t i e l ␣ e t ␣ r e l a i s " + m) ;
throw m;
}
finally {
42 System . o u t . p r i n t l n ( " Dans ␣ l e ␣ f i n a l l y ␣ de ␣ t e s t P o s i t i f O u N u l l ␣ " + d ) ;
}
}
p u b l i c s t a t i c v o i d main ( f i n a l S t r i n g [ ] a r g s ) {
46 int j = 0;
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 165/169
8 Concepts objets avancés en Java 8.3 Retour sur les exceptions
f o r ( S t r i n g oneArg : a r g s ) {
try {
j = I n t e g e r . p a r s e I n t ( oneArg ) ;
50 testPositifOuNull ( j );
} catch ( NumberFormatException n f e ){
System . o u t . p r i n t l n ( " P a r a m e t e r ␣ " + oneArg
+ " ␣ s h o u l d ␣ be ␣ an ␣ i n t e g e r " ) ;
54 } c a t c h ( NumException n ) {
System . o u t . p r i n t l n ( " Catch ␣ d a n s ␣ l e ␣ main ␣ " + n ) ;
}
}
58 }
}
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 166/169
8 Concepts objets avancés en Java 8.3 Retour sur les exceptions
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 167/169
8 Concepts objets avancés en Java 8.3 Retour sur les exceptions
8.3.2 RuntimeException
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 168/169
Introduction au langage de programmation Java
Bibliographie
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 169/169