Sie sind auf Seite 1von 169

Introduction au langage de

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

1.1 Vous avez dit Java ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4


1.2 Que recouvre le mot Java ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Caractéristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 Historique de l’API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5 Environnements de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.6 En savoir plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 3/169
Introduction au langage de programmation Java 1 Introduction à Java

1.1 Vous avez dit Java ?

■ À quoi cela sert-il ?


■ Pourquoi nous ?

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

■ Android : Java est le logiciel prépondérant des + 500 000 applications.

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 ?

1.1.3 Java partout !

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 7/169
1 Introduction à Java 1.1 Vous avez dit Java ?

1.1.4 Pourquoi nous ?

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 8/169
Introduction au langage de programmation Java 1 Introduction à Java

1.2 Que recouvre le mot Java ?

■ Un projet et des évolutions sur + de 20 ans


■ Un langage objet
■ Une architecture basée sur une machine virtuelle
■ Des interfaces de programmation objet
■ Des outils (Java Development Kit)

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 ?

1.2.2 Projet et Historique

■ 1990 : équipe autour de James Gosling et sous l’impulsion de Bill Joy


■ 1993 : projet de langage pour l’électronique grand public
■ 1995 : Java Development Kit (JDK) 1.0 b1 + support dans le navigateur Netscape
■ 1998 : mise en place du Java Community Process
■ 1999 : Java 2 Standard Edition (J2SE) 1.2 (Java DataBase Connector amélioré,
interface graphique Swing, collections)
■ 2005 : J2SE 1.5, alors renommé J2SE 5 (types paramétrés, annotations, collections
revues)
■ 2006-2007 : J2SE6 et libération du code passage sous licence General Public
License, alias GNU/GPL
■ 2009 : rachat de SUN microsystems par ORACLE
■ 2011 : J2SE 7

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

1.3.1 Java un langage Objet

■ 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

1.3.2 Machine Virtuelle Java

■ Les compilateurs génèrent du code intermédiaire (en anglais, bytecode)


■ Ce code intermédiaire est interprété par les « Java Virtual Machines » (JVM)
■ Modèle « compile once execute everywhere »
■ Java Virtual Machine (JVM) :
♦ s’exécutent sur les systèmes d’exploitation (par exemple avec la commande java)
♦ ou sont intégrées dans les navigateurs Web
■ Sémantique du langage plus stricte que celle du langage C
■ Taille et domaine de valeur des types primitifs identiques sur toutes les plate-formes
■ Code source Unicode (accents et autres glyphes)
■ Bibliothèques standards riches

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

■ Conçu pour du logiciel embarqué


■ Gestion de la mémoire avec ramasse miettes (en anglais, garbage collector )
■ Pas d’accès à la mémoire physique
■ Gestion des erreurs par exception (voir section )
■ Contrôle des types à l’exécution
■ Compilateurs stricts et prévenants par exemple :
♦ Avertissement lorsqu’une variable est affectée et non utilisée
♦ Erreur à l’utilisation de variables non initialisées
♦ Erreur lorsque les exceptions ne sont pas gérées

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 15/169
Introduction au langage de programmation Java 1 Introduction à Java

1.4 Historique de l’API

■ Années de réalisation, et nombre de classes et d’interfaces des versions de Java


♦ Java SE 7 2011 : 3 977
♦ Java SE 6 2007 : 3 777
♦ J2SE 5.0 2004 : 3 270
♦ J2SE 1.4 2002 : 2 723
♦ J2SE 1.3 2000 : 1 840
♦ J2SE 1.2 1998 : 1 524
♦ JDK 1.1 1997 : 477
♦ JDK 1.0 1996 : 211

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 16/169
Introduction au langage de programmation Java 1 Introduction à Java

1.5 Environnements de développement

■ Java Development Kit : compilateur, JVM, Appletviewer...


■ Eclipse, NetBeans, Jbuilder, Visual J++...

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 17/169
1 Introduction à Java 1.5 Environnements de développement

1.5.1 Java Standard Development Kit

■ 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

1.6 En savoir plus


■ Java Series : http://docs.oracle.com/javase//
♦ The Java Tutorial, Campione, Walrath, 5th edition, 2013,
♦ The Java Programming Language, Arnold, Gosling, Holmes, 5th edition, 2013,
♦ The Java Language Specification, J. Gosling, B. Joy, G. Steele, G. Bracha, A.
Bukley, 4th edition, 2013,
♦ The Java Virtual Machine Specification, T. Lindholm, F. Yellin, G. Bracha, A.
Bukley, 3rd edition, 2013
■ Livres
♦ D. Flanagan, « Java in a Nutshell : A Desktop Quick Reference, 5th Edition »,
O’Reilly, 2005
♦ D. Flanagan, « Java Examples in a nutshell : A Tutorial Companion to Java in a
Nutshell », 3rd Edition, 2004
♦ P. Niemeyer and J. Knudsen, « Learning Java », O’Reilly, 2005
♦ J. Bloch, « Effective Java, 2nd Edition », Addison Wesley, 2008
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 19/169
1 Introduction à Java 1.6 En savoir plus

1.6.1 Sites Web

■ 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

Questions sur les concepts Java

■ En Java tout est-il objet ?


■ La machine virtuelle Java :
♦ garantit-elle l’uniformité des variables de type primitif ?
♦ met-elle en œuvre la gestion mémoire et en particulier le ramasse miettes ?

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 21/169
Introduction au langage de programmation Java

2 Concepts de bases de Java

2.1 Syntaxe de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23


2.2 Types Primitifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.4 Méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.5 Exemple de passage d’arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

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

2.1 Syntaxe de base

■ 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

2.1.2 Premier en Java


package c o m p l e m e n t s . commeenc ;
2 pub lic c l a s s Premier {
p r i v a t e s t a t i c b o o l e a n e s t P r e m i e r ( f i n a l i n t nb ) {
i f ( nb == 1 ) { r e t u r n f a l s e ; }
f o r ( i n t i =2; i <= nb / 2 ; i ++) {
6 i f ( nb%i == 0 ) {
return false ;
}
}
10 return true ;
}
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 s ) {
i n t nombre = C o n s o l e . r e a d I n t ( " E n t r e z ␣ un ␣ nombre ␣ e n t i e r " ) ;
14 System . o u t . p r i n t l n ( " Le ␣ nombre ␣ " + nombre + " ␣ e s t − i l ␣ p r e m i e r ␣ ? " ) ;
System . o u t . p r i n t ( " Le ␣ nombre ␣ " + nombre ) ;
i f ( e s t P r e m i e r ( nombre ) ) {
System . o u t . p r i n t l n ( " ␣ e s t ␣ p r e m i e r " ) ;
18 } else {
System . o u t . p r i n t l n ( " ␣n ’ e s t ␣ p a s ␣ p r e m i e r " ) ;
}
}
22 }

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

2.2 Types Primitifs

■ pas des classes


♦ short(2 octets), int (4 octets), long (8 octets)
♦ float (4 octets), double (8 octets)
♦ boolean (true/false), byte (1 octet), char (2 octets)
■ Variables déclarées n’importe où dans un bloc

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 27/169
2 Concepts de bases de Java 2.2 Types Primitifs

2.2.1 Conversions de type

■ Conversions sur les types primitifs :


♦ Conversions sûres OK (d’un type vers un type plus complexe)
♦ Conversions non sûres (d’un type vers un type plus pauvre) nécessitent un
transtypage (en anglais, cast) explicite

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 28/169
2 Concepts de bases de Java 2.2 Types Primitifs

2.2.2 Exemple de conversions

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

■ Les tableaux sont des objets


■ Leur taille est fixe
■ Leur taille est allouée dynamiquement par l’utilisation du mot réservé new
■ L’accès aux entrées est identique à celle en langage C une fois l’allocation faite
■ Erreur d’accès en cas de dépassement de taille

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 30/169
2 Concepts de bases de Java 2.2 Types Primitifs

2.2.4 Exemple avec un tableau

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

System . o u t . p r i n t l n ( " A r r a y ␣ l e n g t h ␣ "+ a r r a y O f I n t . l e n g t h ) ; // o b t e n t i o n de l a tail


System . o u t . p r i n t l n ( a r r a y O f I n t [ 4 2 ] ) ; // i m p o s s i b l e l e v e e d ’ un e x c e p t i o n
}
10 }

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

■ Nom donné aux opérations


■ Méthodes associées aux classes (pas de méthode sans classe)
■ Surcharge (en anglais, overloading) des méthodes possible
■ Méthode d’instance
■ Méthode de classe avec mot réservé static
■ Prototype de la méthode public static void main(final String [])
■ Passage d’arguments
♦ Par valeur pour les types primitifs
♦ Par référence pour les objets et les tableaux

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

2.5 Exemple de passage d’arguments

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

Questions sur la syntaxe de base de Java

■ En Java un fichier source peut-il contenir des méthodes ?


■ Dans un bloc d’instructions (partie entre accolades) :
♦ la ligne suivante est-elle acceptable en C et en Java ?
int a = 0, b = 1, c;
♦ la ligne suivante est-elle acceptable en C et en Java ?
if ( a = b ) {
c = a;
}
■ L’accès à un élément de tableau est-il réalisé de manière identique en C et en Java ?

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 35/169
Introduction au langage de programmation Java

3 Classes et objets en 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

■ Classe Personne en UML

Nom de la classe Attributs d’instance


de la classe

Personne Personne Personne


nom : String nom : String voter(Bulletin)
prénom : String prénom : String consulterResultat(Scrutin)
nbParticipations : Integer = 0 nbParticipations : Integer seRetirerDUnScrutin(Scrutin)
nbOrganisations : Integer = 0 nbOrganisations : Integer
Constructeur(String n, String p)
voter(Bulletin b)
consulterResultat(Scrutin s) Opérations d’instance
seRetirerDUnScrutin(Scrutin s) de la classe
Personne

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 37/169
3 Classes et objets en Java 3.1 Classe

3.1.1 Classe Personne en Java

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

3.1.2 Instance de classe en UML

Nom Identifiant
de la classe de l’objet

Personne j:Personne

nom : String nom = "Dupont"


prénom : String prénom = "Julien"
nbParticipations : Integer = 0 nbParticipations = 7
nbOrganisations : Integer =0 nbOrganisations = 3

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

3.1.3 Instance de classe en Java

1 import studs . Personne ;


class InitPersonne {
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 j ; // r e f e r e n c e
5 j = 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
System . o u t . p r i n t l n ( j ) ;
}
}

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

■ Création d’un objet


♦ Disposer d’une référence : Personne p;
♦ Créer l’objet : new + appel à un constructeur
▶ p = new Personne("Dupont", "Julien");

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 41/169
3 Classes et objets en Java 3.2 Objet

3.2.1 Constructeurs en Java

■ 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

3.2.2 Exemples de constructeurs


package s t u d s c t r s ;
import studs . B u l l e t i n ;
import studs . S c r u t i n ;
4 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) {
8 nom = n ; prenom = p ;
}
p u b l i c Personne ( f i n a l String n , final String p ,
final i n t nbp , final i n t nbo ) {
12 nom = n ; prenom = p ;
n b P a r t i c i p a t i o n s = nbp ; n b O r g a n i s a t i o n s = nbo ;
}
public void voter ( f i n a l Bulletin b) { }
16 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 ) { }
public void seRetirerDUnScrutin ( f i n a l Scrutin s ) { }
}

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

■ this permet de référencer l’instance courante ;


■ Est associé au concept d’auto-référence de l’objet
■ this permet de décrire un attribut ou une méthode de l’instance courante sans
ambiguïté
■ this(...) en tant que méthode fait appel à un constructeur

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 44/169
3 Classes et objets en Java 3.2 Objet

3.2.4 Exemples d’utilisation de this


package s t u d s t h i s ;
2 import studs . B u l l e t i n ;
import studs . S c r u t i n ;
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 ;
6 private int nbParticipations = 0 , nbOrganisations = 0;

p u b l i c Personne ( f i n a l S t r i n g nom , final S t r i n g prenom ) {


t h i s . nom = nom ; t h i s . prenom = prenom ;
10 }
p u b l i c Personne ( f i n a l String n , final String p ,
final i n t nbp , final i n t nbo ) {
this (n , p ) ;
14 n b P a r t i c i p a t i o n s = nbp ; n b O r g a n i s a t i o n s = nbo ;
}
void voter ( f i n a l B u l l e t i n b ){ }
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 ) { }
18 void seRetirerDUnScrutin ( f i n a l Scrutin s ) { }
}

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 45/169
3 Classes et objets en Java 3.2 Objet

3.2.5 Destruction des objets

■ Pas de technique particulière pour détruire un objet


■ Objet détruit lorsqu’il n’est plus référencé
■ Utilisation d’un ramasse miettes
■ Le Garbage Collector détruit les objets non référencés
■ La destruction est asynchrone
■ Il n’y a pas de garantie sur la destruction (le programme peut se terminer avant que
l’objet ne soit détruit)
■ Si la classe décrit une méthode appelée finalize, cette méthode est appelée avant
la libération de la mémoire de l’objet

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 46/169
3 Classes et objets en Java 3.2 Objet

3.2.6 Abstraction et encapsulation

■ Une classe correspond aux concepts d’abstraction et d’encapsulation


■ C’est une abstraction car elle présente une interface (ensemble de méthodes) qui
permettent d’interagir avec les objets
■ Une classe encapsule des données (ensemble d’attributs)
■ Pour garantir sa robustesse et son indépendance du reste du code, une classe doit
masquer son implantation
■ En particulier, elle ne doit pas permettre la modification de ses attributs sans
contrôle

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 47/169
3 Classes et objets en Java 3.2 Objet

3.2.7 Visibilité des méthodes

■ 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

3.3 Attributs et méthodes de classe

Attribut Personne j:Personne


d’instance
nom : String nom = Dupont
prénom = Julien
prénom : String nbParticipations = 7
Attribut nbParticipations : Integer nbOrganisation = 3
de classe nbOrganisation : Integer
nbTotalParticipations = 12
nbTotalParticipations : Integer
Constructeur(String n, String p) nom = Martin
Opération voter(Bulletin) prénom = Marie
d’instance consulterResultat() nbParticipations = 5
seRetirerDUnScrutin() nbOrganisation = 1
getNbTotalParticipations()
Opération m:Personne
de classe

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

3.3.1 Attributs et méthodes de classe Java


1 package s t u d s s t a t ;
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 ;
5 private static int nbTotalParticipations = 0;
p u b l i c P e r s o n n e ( f i n a l S t r i n g nom , f i n a l S t r i n g prenom ) {
t h i s . nom = nom ; t h i s . prenom = prenom ;
}
9 p u b l i c P e r s o n n e ( f i n a l S t r i n g nom , f i n a l S t r i n g prenom ,
f i n a l i n t nbp , f i n a l i n t nbo ) {
t h i s ( nom , prenom ) ;
n b P a r t i c i p a t i o n s = nbp ;
13 n b T o t a l P a r t i c i p a t i o n s += nbp ;
n b O r g a n i s a t i o n s = nbo ;
}
public static int getNbTotalParticipations () {
17 return nbTotalParticipations ;
}
public String toString () {
r e t u r n nom + " ␣ " + prenom + " ␣ nbp ␣ " + n b P a r t i c i p a t i o n s
21 + " ␣ nbo ␣ " + n b O r g a n i s a t i o n s + " ␣ n b t ␣ "
+ nbTotalParticipations ;

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

3.3.2 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

3.4 Association entre classes

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

3.4.1 Exemple d’association


package s t u d s o r g ;
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 ;
private int nbParticipations = 0 , nbOrganisations = 0;
private Scrutin [ ] scrutinsOrganises ;
p u b l i c P e r s o n n e ( f i n a l S t r i n g nom , f i n a l S t r i n g prenom ) {
7 t h i s . nom = nom ; t h i s . prenom = prenom ;
s c r u t i n s O r g a n i s e s = new S c r u t i n [ 1 0 ] ;
}
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 ) {
11 S c r u t i n s = new S c r u t i n ( nom ) ;
scrutinsOrganises [ nbOrganisations ] = s ;
n b O r g a n i s a t i o n s ++;
return s ;
15 }
public String toString () {
r e t u r n g e t C l a s s ( ) . getName ( ) + " ␣ "+nom+" ␣ "+prenom+" ␣ nbp ␣ "
+ n b P a r t i c i p a t i o n s + " ␣ nbo ␣ " + n b O r g a n i s a t i o n s ;
19 }
}

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

public class Scrutin {


p r i v a t e S t r i n g nomScrutin ;
4 public Scrutin ( final S t r i n g nom ) {
n o m S c r u t i n = nom ;
}
/∗ @see j a v a . l a n g . O b j e c t#t o S t r i n g ( ) ∗/
8 @Override
public String toString () {
r e t u r n " S c r u t i n ␣ [ n o m S c r u t i n=" + n o m S c r u t i n + " ] " ;
}
12

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

3.4.2 Association entre classes en Java

■ Mise en place à l’aide d’attributs


■ Dans l’une ou l’autre des classes selon la navigabilité de l’association
■ Mise en place au moment de la construction des instances
■ Multiplicité de l’association représentée à l’aide d’un tableau ou d’une collection
■ Difficulté lorsque l’association est bidirectionnelle, par quoi commencer ?
♦ Utilisation d’une méthode qui permet d’affecter un attribut d’une classe en
dehors du constructeur
♦ Passage de la référence d’un des objets dans l’appel au constructeur de l’autre

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

Questions sur les classes et objet

■ 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

4 Généralisation spécialisation en Java

4.1 Généralisation spécialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59


4.2 Polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.3 Redéfinition de méthodes dans les classes dérivées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.4 Héritage, membres et visibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5 Classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.6 Exemple de classe Abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.7 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

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

4.1 Généralisation spécialisation

Personne
nom
numéroSécu

Avocat Vendeur Enseignant


nombreAffaires ancienneté nombreCours
adresseCabinet nomDuStand specialité

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

4.1.1 Héritage : comment en Java

■ 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

4.1.2 Héritage et constructeur

■ Création d’un objet de classe dérivée =⇒ création de la partie de l’objet


correspondant à la classe parente
■ Appel dans le constructeur de la classe dérivée d’un des constructeurs de la classe
parente par utilisation du mot réservé super()
♦ En première ligne du constructeur de la classe enfant
♦ Si aucun appel =⇒ appel au constructeur sans argument de la classe parente

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

4.1.3 Exemple de classe parente et classe dérivée

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

4.1.4 Utilisation de classe parente et dérivée

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 ) ) ;

System . o u t . p r i n t l n ( " e ␣ e s t ␣ une ␣ P e r s o n n e ␣ "


+ ( e i n s t a n c e o f Personne ) ) ;
15 System . o u t . p r i n t l n ( " e ␣ e s t ␣ un ␣ E n s e i g n a n t ␣ "
+ ( e 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

■ Affectation de références dans un arbre d’héritage


■ Upcast : une référence d’une classe B peut référencer toute instance de la classe B
ou de ses classes dérivées
■ Downcast : une référence d’une classe D dérivée d’une classe B peut recevoir une
référence de la classe B si et seulement si :
♦ L’objet référencé est bien du type D ou d’un de ses types dérivés
♦ Le changement de type doit être explicite (en anglais, cast) vers le nouveau type
(D)

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

4.2.1 Exemple de Upcast et Downcast


import personnes . Personne ;
2 import personnes . Enseignant ;
p u b l i c c l a s s UpDownExample {
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 ) {
Personne p ;
6 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 " ,
" 2 7 8 0 6 3 3 . . . " , 3 , " C l o u d ␣ Computing " ) ;
p = e; // UpCast
System . o u t . p r i n t l n ( " A p r e s ␣p␣=␣ e ; ␣p␣ e s t ␣ une ␣ P e r s o n n e ␣ "
10 + ( p i n s t a n c e o f Personne )
+ " ; ␣p␣ e s t ␣ un ␣ E n s e i g n a n t ␣ "
+ (p instanceof Enseignant ) ) ;
e = ( E n s e i g n a n t ) p ; // Downcast
14 System . o u t . p r i n t l n ( " A p r e s ␣ e ␣=␣p ; ␣ e ␣ e s t ␣ une ␣ P e r s o n n e ␣ "
+ ( e i n s t a n c e o f Personne )
+ " ; ␣ e ␣ e s t ␣ un ␣ E n s e i g n a n t ␣ "
+ ( e instanceof Enseignant ) ) ;
18 }
}

Apres p = e; p est une Personne true


Apres p = e; p est un Enseignant true
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 67/169
4 Généralisation spécialisation en Java 4.2 Polymorphisme

Apres e=p; e est une Personne true


Apres e=p; e est un Enseignant true

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

4.3 Redéfinition de méthodes dans les classes dérivées

■ Redéfinition possible des méthodes publiques héritées (en anglais overriding)


■ Peut être annotée par @Override.
■ Liaison dynamique :
♦ Redéfinition la plus proche dans l’arbre d’héritage invoquée
♦ Même à travers une référence d’une classe parente
♦ Accès explicite à une méthode redéfinie de la classe parente par super

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

4.3.1 Polymorphisme et liaison dynamique avec toString

1 import personnes . Personne ;


import personnes . Enseignant ;
p u b l i c c l a s s TestPolyMorph {
p u b l i c s t a t i c v o i d main ( f i n a l String [ ] args ) {
5 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 " ,
" 2 7 8 0 6 3 3 . . . " , 3 , " C l o u d ␣ Computing " ) ;
9 System . o u t . p r i n t l n ( p . t o S t r i n g ( ) ) ;
System . o u t . p r i n t l n ( e . t o S t r i n g ( ) ) ;
p = e; // UpCast
System . o u t . p r i n t l n ( p . t o S t r i n g ( ) ) ;
13 }
}

Personne: Dupont Julien


Enseignant: 3 Cloud Computing
Enseignant: 3 Cloud Computing

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

4.4 Héritage, membres et visibilité

■ Une classe D héritant d’une classe B hérite de tous ses membres :


♦ Les membres private de B sont inaccessibles depuis D
♦ Les membres protected de B sont accessibles depuis D
♦ Les membres public sont accessibles depuis D comme depuis les autres classes

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

Questions généralisation/spécialisation en Java

■ À quoi sert le mot réservé extends dans une déclaration de classe ?


■ À quoi sert le mot super ?
■ Peut-on interdire la redéfinition d’une méthode dans une classe dérivée ?
■ Peut-on interdire la généralisation/spécialisation d’une classe ?

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

4.5 Classes abstraites

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

Livre Texte Graphique Vidéo


largeur
longueur durée
hauteur

afficher() afficher() afficher() 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

4.5.1 Classes abstraites : principes

■ 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

4.5.2 Classes abstraites en Java

■ Méthodes abstraites sans corps de méthode


■ Classe abstraite si méthode abstraite
■ Classe dérivée : définit toutes les méthodes ou reste abstraite
■ Classe qualifiée abstraite pour empêcher la création d’instances

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

4.6 Exemple de classe Abstraites

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

4.6.1 Exemple : classes abstraites


package s t u d s a b s t r a c t ;
2 p u b l i c a b s t r a c t c l a s s Choix {
private Bulletin [ ] lesBulletins ;
int nbBulletinsPour , nbBulletinsContre , indexBulletins ;
p u b l i c Choix ( ) {
6 l e s B u l l e t i n s = new B u l l e t i n [ 1 0 0 ] ;
indexBulletins = 0;
nbBulletinsPour = 0;
nbBulletinsContre = 0;
10 }
public int addBulletin ( Bulletin b) {
l e s B u l l e t i n s [ i n d e x B u l l e t i n s ++] = b ;
i f (b . getValue ()){
14 n b B u l l e t i n s P o u r++ ;
} else {
n b B u l l e t i n s C o n t r e++ ;
}
18 return indexBulletins ;
}
public int getNbBulletinsPour () {
return nbBulletinsPour ;
22 }

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

public int getNbBulletinsContre (){


return nbBulletinsContre ;
}
26 p u b l i c i n t chercherRang ( B u l l e t i n b ){
f o r ( i n t i = 0 ; i < i n d e x B u l l e t i n s ; i ++){
i f (b . equals ( l e s B u l l e t i n s [ i ] ) ) return i ;
}
30 r e t u r n −1;
}
public void r e t i r e r B u l l e t i n ( f i n a l B u l l e t i n r e t r a i t ) {
i n t rang = chercherRang ( r e t r a i t ) ;
34 i f ( r a n g > −1){
c o m p a c t e r B u l l e t i n s ( rang ) ;
}
}
38 p u b l i c void c o m p a c t e r B u l l e t i n s ( i n t r ){
f o r ( i n t i = r ; i < i n d e x B u l l e t i n s ; i ++){
l e s B u l l e t i n s [ i ] = l e s B u l l e t i n s [ i +1];
}
42 i n d e x B u l l e t i n s −−;
}
p u b l i c v o i d m o d i f i e r B u l l e t i n ( f i n a l B u l l e t i n changed ) {
i n t rang = chercherRang ( changed ) ;
46 i f ( r a n g >=0) {

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

4.7.1 Interfaces en Java

■ Les membres d’une interface sont principalement des méthodes abstraites


■ Une interface est déclarée avec le mot réservé interface
■ Une interface peut hériter (extends) de plusieurs interfaces
■ Une classe peut implémenter (implements) une ou plusieurs interfaces
■ Rappel : une classe n’hérite (extends) que d’une seule classe

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 82/169
Introduction au langage de programmation Java

5 Organisation des sources Java

5.1 Programme en C (rappel) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84


5.2 Exécution d’un programme (rappel) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.3 Exécution d’un programme sur une machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.4 Dans le cas de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.5 Unités de compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.6 Paquetages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.7 Visibilité en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

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

5.1 Programme en C (rappel)


PROGRAMME

fichier1.c fichier2.c fichier3.c


(source) (source) (source)
(module) (module) (module)

Compilation Compilation Compilation

fichier1.o fichier2.o fichier3.o


(objet) (objet) (objet)
(binaire) (binaire) (binaire)
(relogeable) (relogeable) (relogeable)

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

5.2 Exécution d’un programme (rappel)

Processus
Donnees

Pile

Tas
Libc.so

Texte Operating System

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

5.3 Exécution d’un programme sur une machine virtuelle

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

Texte Operating System

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

5.4 Dans le cas de 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

5.5 Unités de compilation

■ Un fichier source Java = une unité de compilation


■ Recommandation : une seule classe par fichier source
■ Obligation : nom du fichier source = nom de sa classe publique

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

■ Paquetages : regroupement de classes dans un espace de nommage


■ Noms des classes : « packagename.classname »
■ Espace de nommage associé à la compilation et à l’exécution
♦ Classe Personne du paquetage studs doit être dans un fichier correspondant au
chemin « studs/Personne.java »
■ Ceci permet au compilateur et à la JVM de trouver les fichiers compilés
■ Mot réservé package : nom de paquetage des classes dans l’unité de compilation

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 89/169
5 Organisation des sources Java 5.6 Paquetages

5.6.1 Chemin de recherche

■ variable d’environnement CLASSPATH liste des répertoires de recherche pour le


compilateur et la JVM
■ Noms des classes complets contient le nom de paquetage
■ import : permet d’établir un alias
■ API Java est organisée en paquetages (java.lang, java.io...)

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;

public Personne(String n, String p){


n = nom; prenom = p;
}
public void voter(Bulletin b){ }
public void consulterResultat(Scrutin s) { }
public void seRetirerDUnScrutin(Scrutin s) { }
}
■ Fichier InitPersonne.java dans le répertoire /src peut contenir le code suivant :
import studs.Personne;
class InitPersonne {
public static void main(String[] args) {
Personne j; // reference
j = new Personne("Dupont", "Julien"); // instance creation
System.out.println(j);
}
}

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

5.7 Visibilité en Java

■ Un membre de la classe C peut être :


♦ private : accessible seulement à la classe
♦ package friendly (défaut) : accessible aux classes dans le même paquetage
♦ protected : accessible aux classed du paquetage et à toute classe dérivée en
dehors du paquetage
♦ public : accessible à toutes les classes

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 92/169
5 Organisation des sources Java 5.7 Visibilité en Java

5.7.1 Table de visibilité


package p1; package p2;
class C1 { class C4 extends C1 {
public int a; ...
protected int b;
}
int c; // friendly
private int d; class C5 {
} ...
class C2 extends C1 { }
...
}
class C3 {
...
}

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

Questions organisation des sources en Java

■ Le nom d’un paquetage est-il lié à l’organisation des fichiers sources ?


■ Dans quel paquetage se trouve java.lang.Object ?
■ Les paquetages servent-ils seulement à la compilation des classes ?
■ Les paquetages impactent-ils la visibilité des membres des classes ?

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 94/169
Introduction au langage de programmation Java

6 API Java

6.1 Premières classes de l’API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96


6.2 Classe java.lang.Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.3 Interface de programmation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
6.4 java.lang.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.5 java.util.*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 95/169
Introduction au langage de programmation Java 6 API Java

6.1 Premières classes de l’API

■ 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

6.2 Classe java.lang.Object

■ public String toString()


■ protected Object clone() throws CloneNotSupportedException
■ public boolean equals(Object obj)
■ protected void finalize() throws Throwable
■ public final Class getClass()
■ public int hashCode()

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

6.2.2 Exemple d’égalité

public class StringEquals {


p u b l i c s t a t i c v o i d main ( f i n a l String argv [ ] ) {
3 S t r i n g s = " Ja " , j = " J a v a " ;
S t r i n g m = s + " va " ;
System . o u t . p r i n t l n (m) ;
i f ( j == m) { System . o u t . p r i n t l n ( " j ␣==␣m␣ V r a i " ) ;
7 } e l s e { System . o u t . p r i n t l n ( " j ␣==␣m␣ Faux " ) ;
}
i f ( j . e q u a l s (m) ) {
System . o u t . p r i n t l n ( " j . e q u a l s (m) ␣ V r a i " ) ;
11 } else {
System . o u t . p r i n t l n ( " j . e q u a l s (m) ␣ Faux " ) ;
}
}
15 }

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

6.2.3 Exemple de méthode equals


1 package s t u d s e q u a l s ;
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 ;
p u b l i c P e r s o n n e ( f i n a l S t r i n g nom , f i n a l S t r i n g prenom ) {
5 t h i s . nom = nom ; t h i s . prenom = prenom ;
}
@Override
p u b l i c boolean e q u a l s ( Object obj ) {
9 i f ( t h i s == o b j ) r e t u r n t r u e ;
i f ( o b j == n u l l ) r e t u r n f a l s e ;
i f ( ! ( obj i n s t a n c e o f Personne )) return f a l s e ;
Personne other = ( Personne ) obj ;
13 i f ( nom == n u l l ) {
i f ( o t h e r . nom != n u l l ) r e t u r n f a l s e ;
} e l s e i f ( ! nom . e q u a l s ( o t h e r . nom ) ) r e t u r n f a l s e ;
i f ( prenom == n u l l ) {
17 i f ( o t h e r . prenom != n u l l ) return false ;
} e l s e i f ( ! prenom . e q u a l s ( o t h e r . prenom ) ) r e t u r n f a l s e ;
return true ;
}
21 }

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 100/169
Introduction au langage de programmation Java 6 API Java

6.3 Interface de programmation

■ API Java organisée en paquetages


■ java.lang.* importé de manière automatique
■ Interface de programmation disponible quelle que soit la plate-forme

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 101/169
6 API Java 6.3 Interface de programmation

6.3.1 Quelques paquetages Java

■ 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.*

6.4.1 Exemple avec la classe Integer

public class IntegerExample {


p u b l i c s t a t i c v o i d main ( f i n a l String argv [ ] ) {
3 Integer i = new I n t e g e r ( " 4567 " ) ;
int j = i . intValue ();
i = 4567; // b o x i n g i = new I n t e g e r ( 4 5 6 7 ) ;
j = i ; // u n b o x i n g i . i n t V a l u e ( )
7 System . o u t . p r i n t l n ( " I n t e g e r ␣ i ␣ : " + i + " ␣ i n t ␣ j ␣ : " + j + " \n " ) ;
}
}

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 104/169
6 API Java 6.4 java.lang.*

6.4.2 Classe String

■ Gestion des chaînes de caractères


■ Un objet de type String n’est pas modifiable
■ Les constantes littérales comme “abc” sont converties en String
■ L’opérateur « + » permet la concaténation des String

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 105/169
6 API Java 6.4 java.lang.*

6.4.3 Exemple pour String


i m p o r t j a v a . u t i l . Date ;
public c l a s s StringExample {
3 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 [ ] ) {
S t r i n g s = " \ u 0 0 c a t r e ␣ ou ␣ ne ␣ p a s ␣ \ u 0 0 e a t r e " ;
int lg = s . length ();
System . o u t . p r i n t l n ( s + " ␣ " + l g ) ;
7 System . o u t . p r i n t l n ( " J a v a " . s u b s t r i n g ( 2 , 3 ) ) ;
System . o u t . p r i n t l n ( " J a v a " + " S o f t " ) ;
char [ ] data = { ’ J ’ , ’ a ’ , ’ v ’ , ’ a ’ };
S t r i n g n = new S t r i n g ( d a t a ) ; System . o u t . p r i n t l n ( n ) ;
11 S t r i n g p = S t r i n g . v a l u e O f ( Math . PI ) ; System . o u t . p r i n t l n ( p ) ;
S t r i n g d = S t r i n g . v a l u e O f ( new Date ( ) ) ; System . o u t . p r i n t l n ( d ) ;
}
}

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

Questions API java.lang

■ Pourquoi faire dériver toutes les classes de java.lang.Object ?


■ Pourquoi cette classe fournit-elle les méthodes suivantes :
1. toString
2. equals
■ La classe integer est finale, à votre avis pourquoi ? (hors cours)

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.*

java.lang java.util java.io

<<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.*

6.5.1 Classe paramétrée

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.*

6.5.2 Classes Abstraites des collections

<<Interface>> java.util
java.lang.Iterable
<<Interface>> <<Interface>> <<Interface>>
Collection<E> Enumeration<E> Iterator<E>

<<Interface>> <<Interface>> <<Interface>>


Map<K,V> List<E> Set<E>

<<Abstract>> <<Abstract>> <<Abstract>>


AbstractMap<K,V> AbstractList<E> AbstractCollection<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.*

6.5.3 Classes instanciables des collections

<<Interface>>
java.util
java.lang.Iterable
<<Interface>> <<Interface>> <<Interface>>
Collection<E> Enumeration<E> Iterator<E>

<<Interface>> <<Interface>> <<Interface>>


Map<K,V> List<E> Set<E>

<<Abstract>> <<Abstract>> <<Abstract>>


AbstractMap<K,V> AbstractList<E> AbstractCollection<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

■ Collection : interface commune à toutes les collections ;


■ List : interface permettant de gérer une liste ;
■ Iterator : interface permettant de parcourir une collection ;
■ Vector : réalisation de liste dans une sorte de tableau à taille variable ;
■ Map : interface permettant de gérer des tables associant une clé à un objet ;
■ Hashtable : tableau associatif

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 112/169
6 API Java 6.5 java.util.*

6.5.5 Interface Iterable

■ 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.*

6.5.6 Interface Collection<E>

Collection la plus générale


■ Insertion à la fin avec boolean add(E )
■ Suppression de tous les éléments avec void clear()
■ Test de la présence d’un objet dans la collection avec boolean contains(E)
■ Test permettant de savoir si la collection est vide avec boolean isEmpty()
■ Suppression du premier élément égal selon equals(E) au paramètre avec boolean
remove(E)
■ Nombre d’éléments dans la collection avec int size().

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 114/169
6 API Java 6.5 java.util.*

6.5.7 Interface List<E>

Collection ordonnée supportant les objets dupliqués


■ Accès à un élément avec E get(int index )
■ Insertion à une position donnée avec add(int, E)
■ Suppression de l’élément à une position donnée avec E remove(int))
■ Recherche de l’indice d’un objet s’il est dans le vecteur avec int indexOf(E)

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 115/169
6 API Java 6.5 java.util.*

6.5.8 Classe Vector<E>

■ Gestion d’une collection d’éléments de la classe E dans un tableau dynamique


■ Pas de contrainte d’unicité sur les éléments
■ Dérive de la classe AbstractList
■ donc implémente l’interface List
■ donc implémente l’interface Collection
■ donc implémente aussi l’interface Iterable.

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 116/169
6 API Java 6.5 java.util.*

6.5.9 Boucle pour les collections

■ Simplification de l’écriture des parcours de collections à partir de Java 5.


■ Utilisation du for avec une collection, un tableau
■ Syntaxe : for(Type t : collection)
■ Itère les objets de la collection dans la référence t
■ Type de collection et type de t compatibles
■ Ressemble aux foreach de php

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 117/169
6 API Java 6.5 java.util.*

6.5.10 Exemple for-each sur un Vector

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.*

6.5.11 Exemple de classe avec Vector


import j a v a . u t i l . Vector ;
import j a v a . u t i l . L i s t ;
pub lic c l a s s VectorExampleBis {
4 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 > ( ) ;
v . add ( " un " ) ; v . add ( " deux " ) ; v . add ( 2 , " t r o i s " ) ;
System . o u t . p r i n t l n ( " Contenu ␣ du ␣ v e c t e u r ␣ : " ) ;
8 f o r ( i n t i =0; i <v . s i z e ( ) ; i ++) {
System . o u t . p r i n t l n ( " ␣ ␣ " + v . g e t ( i ) ) ;
}
i f ( v . remove ( " un " ) ) System . o u t . p r i n t l n ( " un ␣ removed " ) ;
12 v . remove ( 0 ) ;
System . o u t . p r i n t l n ( " Contenu ␣ du ␣ v e c t e u r ␣ : " ) ;
f o r ( i n t i =0; i <v . s i z e ( ) ; i ++) {
System . o u t . p r i n t l n ( " ␣ ␣ " + v . g e t ( i ) ) ;
16 }
}
}

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.*

6.5.12 Interface Iterator

■ 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.*

6.5.13 Exemple avec Iterator

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.*

6.5.14 Dictionnaires Map<K,V>


■ Les tables de correspondance permettent, à partir d’une clé, de retrouver une valeur
■ Cette interface est associée à deux paramètres qui correspondent à la classe de la clé
et à celle de la valeur
♦ C’est pourquoi sa définition est notée Map<K,V>
■ Par exemple, Map<String,String> myMap
■ Map supporte les méthodes supplémentaires suivantes, en plus de celles prescrites
par Collection :
♦ boolean containsKey(K key)
♦ boolean containsValue(V value)
♦ Set<K> keysSet()
♦ Collection<V> values()
♦ V get(K key)
♦ V put(K key, V value)

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 123/169
6 API Java 6.5 java.util.*

6.5.15 Exemple pour Map


import j a v a . u t i l . Hashtable ;
i m p o r t j a v a . u t i l . Map ;
3 p u b l i c c l a s s HashMapExample {
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 [ ] ) {
Map<S t r i n g , S t r i n g > h t = new H a s h t a b l e <S t r i n g , S t r i n g > ( ) ;
h t . p u t ( " Ba " , " Bah " ) ; h t . p u t ( " Aa " , " aha " ) ;
7 h t . p u t ( "BB" , " b e b e " ) ;
f o r ( S t r i n g k : ht . keySet ( ) ) {
System . o u t . p r i n t l n ( " C l e ␣ : ␣ "+ k
+ "␣ Valeur ␣ : ␣" + ht . get ( k ) ) ;
11 }
f o r ( S t r i n g v : ht . v a l u e s ( ) ) {
System . o u t . p r i n t l n ( " ␣ V a l e u r ␣ : ␣ " + v ) ;
}
15 }
}

Le résultat de l’exécution de l’exemple est le suivant :


Cle : Ba Valeur : Bah
Cle : BB Valeur : bebe
Cle : Aa Valeur : aha
Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 124/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.*

6.5.16 Dictionnaire Hashtable<K,V>

■ Ces dictionnaires réalisent l’interface Map.


■ La classe associée à la clé doit supporter les méthodes hashCode() et equals()

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 126/169
6 API Java 6.5 java.util.*

6.5.17 Exemple pour Hashtable


import j a v a . u t i l . Hashtable ;
i m p o r t j a v a . u t i l . Map ;
p u b l i c c l a s s HashtableExample {
4 p u b l i c s t a t i c v o i d main ( f i n a l String argv [ ] ) {
Map<S t r i n g , S t r i n g > h t = new H a s h t a b l e <S t r i n g , S t r i n g > ( ) ;
h t . p u t ( " Ba " , " Bah " ) ; h t . p u t ( " Aa " , " aha " ) ;
h t . p u t ( "BB" , " b e b e " ) ;
8 f o r ( S t r i n g k : ht . keySet ( ) ) {
System . o u t . p r i n t l n ( " C l e ␣ : ␣ "+ k + " ␣ Hash ␣ : ␣ "+ k . hashCode ( )
+ "␣ Valeur ␣ : ␣" + ht . get ( k ) ) ;
}
12 }
}

Le résultat de l’exécution de l’exemple est le suivant :


Cle : Ba Hash : 2143 Valeur : Bah
Cle : BB Hash : 2112 Valeur : bebe
Cle : Aa Hash : 2112 Valeur : aha

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 127/169
6 API Java 6.5 java.util.*

6.5.18 Représentation d’une Hashtable

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

Questions collections en Java

■ Quelles sont les opérations préconisées par l’interface Collection ?


■ À quel usage est destiné un Iterator ?
■ Quelle est l’utilité du concept de Map ?

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 129/169
Introduction au langage de programmation Java

7 Exceptions en Java

7.1 Motivation : retours sur un bug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131


7.2 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.3 Réalisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135
7.4 Traitement des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.5 Exemple de traitement d’exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 130/169
Introduction au langage de programmation Java 7 Exceptions en Java

7.1 Motivation : retours sur un bug

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

■ Séparation entre flot de gestion des erreurs et flot d’exécution normale


♦ Contrôle de flot spécifique pour les exceptions
♦ Parties de code balisées relativement au traitement d’erreurs (régions gardées)
♦ Parties de code spécifiques pour le traitement d’erreurs
■ Méthode constatant l’erreur et ne possédant pas suffisamment d’informations dans
son contexte pour la traiter
■ Nécessité de remonter le chemin d’appel jusqu’à trouver une méthode possédant
suffisamment d’informations pour traiter cette erreur

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 132/169
7 Exceptions en Java 7.2 Principes

7.2.1 Mise en œuvre

Les méthodes peuvent :


■ Lever une exception :
♦ En prévenant les autres méthodes par l’ajout d’une clause throws dans leur
prototype
♦ En créant un objet du type exception : classe qui dérive de
java.lang.Exception
♦ Et en utilisant le mot réservé « throw » pour provoquer la remontée du chemin
d’appel
■ Relayer des exceptions en ajoutant au prototype le mot clef « throws » et la liste
des exceptions
■ Traiter des exceptions par des blocs try, catch, et finally

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 133/169
7 Exceptions en Java 7.2 Principes

7.2.2 Exemple de traitement


public class ArrayControled {
s t a t i c f i n a l i n t max = 4 2 ;
3 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 s ) {
int i , j = 0;
i n t [ ] a r r a y O f I n t = new i n t [ max ] ;
f o r ( i =0; i <a r r a y O f I n t . l e n g t h ; i ++){
7 arrayOfInt [ i ] = i ;
}
f o r ( i =0; i <a r g s . l e n g t h ; i ++){
try {
11 j = Integer . parseInt ( args [ i ] ) ;
System . o u t . p r i n t l n ( a r r a y O f I n t [ 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 s [ i ] + " ␣ s h o u l d ␣ be ␣ an ␣ i n t e g e r " ) ;
15 } c a t c h ( A r r a y I n d e x O u t O f B o u n d s E x c e p t i o n oobe ) {
System . o u t . p r i n t l n ( " P a r a m e t e r ␣ " + a r g s [ i ]
+ " ␣ s h o u l d ␣ be ␣>=0␣ and ␣<" + max ) ;
}
19 }
}
}

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

■ Classes dérivées de java.lang.Exception


■ Lever une exception consiste à :
♦ Créer une instance d’une classe dérivée de java.lang.Exception
♦ Déclencher le déroulement arrière des appels de méthodes qui ont menés à la
méthode courante
♦ Arrêter le déroulement arrière à la rencontre d’un bloc try catch pour ce type
d’exception
♦ S’il n’y a aucun bloc try catch l’exception remonte jusqu’à la machine virtuelle
Java qui interrompt l’exécution
♦ Lorsqu’un bloc try catch correspondant à l’exception est trouvé :
▶ Les instructions suivantes du bloc try sont sautées
▶ Les instructions du bloc catch qui correspond le mieux sont exécutées

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

7.4 Traitement des exceptions

Pour les exceptions sous contrôle :


■ Une méthode qui fait appel à une méthode qui peut lever une exception doit définir
son comportement relativement à cette exception
♦ Traiter l’exception par un bloc try catch
♦ Relayer l’exception par le mot réservé throws
■ Réorganisation du code de manière cohérente dans les blocs try.

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 137/169
Introduction au langage de programmation Java 7 Exceptions en Java

7.5 Exemple de traitement d’exceptions


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 {
p r i v a t e s t a t i c 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 , f i n a l S t r i n g s ) {
super ( s + "␣ v a l e u r ␣ : ␣" + v a l e u r ) ;
}
}

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

Trace d’exécution avec arguments 2, -3 et 3 :


Pas d’exception le code continue en sequence
Catch dans le main NumException: Valeur positive attendue. valeur : -3.0
Pas d’exception le code continue en sequence

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 140/169
Introduction au langage de programmation Java 7 Exceptions en Java

Questions sur les exceptions

■ À 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

8 Concepts objets avancés en Java

8.1 Copie simple/légère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143


8.2 Retour sur hashCode() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8.3 Retour sur les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

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

8.1 Copie simple/légère

■ Les objets sont manipulés par des références ⇒


♦ o2 = o1 : copie la référence o1 dans o2
obj1 obj1
o1 "Jean" o1 "Jean"

"Paul" "Paul"
o2 o2
obj2 obj2

♦ o2 = o1.clone() : o2 référence un nouvel objet (copie de o1)


"Jean"
o1 "Jean" o1

"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

8.1.1 Copie pour studs

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

8.1.2 Représentation graphique d’une copie légère dans studs

p: p1:

:Personne :Personne

nom nom
prénom prénom
scrutins scrutins

:String :String :ArrayList

= "Dupont" = "Julien"

:Scrutin :String

nom = "Election bde"


organisateur

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

8.1.3 Exemple de copie légère


1 package s t u d s c l o n e l i g h t ;
import j a v a . u t i l . A r r a y L i s t ;
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 {
5 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 ;
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 P e r s o n n e ( S t r i n g nom , S t r i n g prenom ) {
9 t h i s . nom = nom ; t h i s . prenom = prenom ; 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 ( S t r i n g nom ) {
s c r u t i n s . add ( new S c r u t i n ( nom , t h i s ) ) ; r e t u r n s c r u t i n s . g e t ( nbOrg ++); }
@Override
13 p u b l i c Personne c l o n e ( ) throws CloneNotSupportedException {
return ( Personne ) super . clone ( ) ;
}
p u b l i c S t r i n g getNom ( ) { r e t u r n nom ; }
17 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 ; }
p u b l i c void v o t e r ( 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 ) { }
21 public void seRetirerDUnScrutin ( Scrutin s ) { }
}

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

for ( int i = 0 ; i < a1 . s i z e ( ) ; i ++){


26 i f ( a1 . g e t ( i ) == a2 . g e t ( i ) ) {
System . o u t . p r i n t l n ( " S c r u t i n ␣ de ␣ r a n g ␣ " + i +" ␣==" ) ;
}
}
30 }
}
}

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

8.1.4 Représentation graphique d’une copie plus profonde dans


studs
p: p1:

:Personne :Personne
nom nom
prénom prénom
scrutins scrutins

:String :ArrayList :ArrayList :String

= "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

8.1.5 Copie plus profonde dans studs


package s t u d s c l o n e d e e p ;
import j a v a . u t i l . A r r a y L i s t ;

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

p u b l i c Personne c l o n e ( ) throws CloneNotSupportedException {


24 P e r s o n n e c l o n e = new P e r s o n n e ( nom , prenom ) ;
clone . nbParticipations = nbParticipations ;
c l o n e . nbOrg = nbOrg ;
c l o n e . s c r u t i n s = ( A r r a y L i s t <S c r u t i n >) s c r u t i n s . c l o n e ( ) ;
28 return clone ;
}
p u b l i c S t r i n g getNom ( ) { r e t u r n nom ; }
p u b l i c S t r i n g getPrenom ( ) { r e t u r n prenom ; }
32 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 ; }
p u b l i c void v o t e r ( 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 ) { }
public void seRetirerDUnScrutin ( Scrutin s ) { }
36 }

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

8.1.6 Représentation graphique d’une copie profonde


p: p1:

:Personne :Personne
nom nom
prénom prénom
scrutins scrutins

:String :ArrayList :ArrayList :String

= "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

8.1.7 Clone de Scrutin


package s t u d s c l o n e ;
p u b l i c c l a s s S c r u t i n implements C l o n e a b l e {
3 p r i v a t e Personne o r g a n i s a t e u r ;
p r i v a t e S t r i n g nomScrutin ;
p u b l i c S c r u t i n ( f i n a l S t r i n g nom , f i n a l P e r s o n n e o r g a n i s a t e u r ) {
n o m S c r u t i n = nom ;
7 this . organisateur = organisateur ;
}
/∗ ∗ l e c l o n a g e d u p l i q u e l e nom m a i s ne p e u t p a s m o d i f i e r l ’ o r g a n i s a t e u r .
∗ En e f f e t l e c l o n a g e de l ’ o r g a n i s a t i o n c l o n e l e s s c r u t i n s qu ’ i l a
11 ∗ o r g a n i s à ľ e t n o u s e n t r e r i o n s d a n s une c a s c a d e d ’ a p p e l s i n f i n i e
∗ ∗/
@Override
p u b l i c S c r u t i n c l o n e ( ) throws CloneNotSupportedException {
15 r e t u r n new S c r u t i n ( new S t r i n g ( n o m S c r u t i n ) , o r g a n i s a t e u r ) ;
}
/∗ ∗ Methode p o u r m o d i f i e r l ’ o r g a n i s a t e u r en c a s de c l o n a g e . ∗/
void s e t O r g a n i s a t e u r ( f i n a l Personne norg ) {
19 o r g a n i s a t e u r = norg ;
}
p u b l i c Personne g e t O r g a n i s a t e u r () {
return organisateur ;

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

8.1.8 Clone en copie profonde de Personne


package s t u d s c l o n e ;
import j a v a . u t i l . A r r a y L i s t ;
import s t u d s a b s t r a c t . B u l l e t i n ;
4 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 ;
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 ;
8 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 ;
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 > ( ) ;
12 }
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 ) ;
s c r u t i n s . add ( s ) ;
16 nbOrg ++;
return s ;
}
/∗ ∗ 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 .
20 ∗ Ce n ’ e s t p a s n à ľ c e s s a i r e p o u r l e s o b j e t s du t y p e S t r i n g
∗ du f a i t qu ’ un S t r i n g e s t non m o d i f i a b l e .
∗/

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

8.1.9 Suite exemple de copie profonde


import j a v a . u t i l . A r r a y L i s t ;

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

23 System . o u t . p r i n t l n ( " p␣ e t ␣ p1 ␣ s c r u t i n s ␣==" ) ;


} else {
for ( int i = 0 ; i < a1 . s i z e ( ) ; i ++) {
i f ( a1 . g e t ( i ) == a2 . g e t ( i ) ) {
27 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 +"=
31 }
}
}
}
35 }
}

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

8.2 Retour sur hashCode()

■ Méthode facilitant l’utilisation de Hashtable


■ Contrat de base :
♦ Doit retourner la même valeur lorsqu’elle est appelée plusieurs fois sur le même
objet
♦ Doit retourner la même valeur pour deux objets equals
♦ Peut retourner la même valeur pour deux objets différents (limites du hachage)
■ Algorithme de J. Bloch dans Effective 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()

8.2.1 Exemple hashCode


package s t u d s e q u a l s ;
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 ;
4 p u b l i c P e r s o n n e ( f i n a l S t r i n g nom , f i n a l S t r i n g prenom ) {
t h i s . nom = nom ; t h i s . prenom = prenom ;
}
@Override
8 p u b l i c boolean e q u a l s ( Object obj ) {
i f ( t h i s == o b j ) r e t u r n t r u e ;
i f ( o b j == n u l l ) r e t u r n f a l s e ;
i f ( ! ( obj i n s t a n c e o f Personne )) return f a l s e ;
12 Personne other = ( Personne ) obj ;
i f ( nom == n u l l ) {
i f ( o t h e r . nom != n u l l ) r e t u r n f a l s e ;
} e l s e i f ( ! nom . e q u a l s ( o t h e r . nom ) ) r e t u r n f a l s e ;
16 i f ( prenom == n u l l ) {
i f ( o t h e r . prenom != n u l l ) return false ;
} e l s e i f ( ! prenom . e q u a l s ( o t h e r . prenom ) ) r e t u r n f a l s e ;
return true ;
20 }
}

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

8.3 Retour sur les exceptions

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

8.3.1 Test des exceptions


public class TestExceptInHerit {
2 /∗ ∗
∗ Methode v e r i f i a n t qu ’ une v a l e u r 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
∗ @return valeur d ’ entree
6 ∗ @th rows NumException s i v a l e u r n e g a t i v e
∗ @th rows N u l l E x c e p t i o n s i v a l e u r e g a l e a z e r o .
∗/
p r i v a t e s t a t i c double p o s i t i f O u N u l l ( f i n a l double v a l )
10 t h r o w s NumException , N u l l E x c e p t i o n {
i f ( val < 0.0) {
throw new NumException ( v a l , " P o s i t i f O u N u l l ␣ v a l e u r ␣ p o s i t i v e ␣ a t t e n d u e . " ) ;
}
14 i f ( v a l == 0 . 0 ) {
throw new N u l l E x c e p t i o n ( ) ;
}
return val ;
18 }
/∗ ∗
∗ traitement p a r t i e l d ’ exception les exceptions
∗ N u l l E x c e p t i o n s o n t t r a i t e e s , l e s e x c e p t i o n s NumException
22 ∗ sont t r a i t e e s p a r t i e l l e m e n t et r e l a y e e s .

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

L’exécution de ce programme avec les arguments du main 2 0 -2 donne l’affichage


suivant :
Dans testPositifOuNull val = 2.0
Pas d’exception le code continue en sequence
Dans le finally de testPositifOuNull 2.0
Dans testPositifOuNull val = 0.0
Catch NullException dans testPositifOuNull NullException:
Valeur nulle non attendue valeur reçue : 0.0
Dans le finally de testPositifOuNull 0.0
Catch dans le main NullException: Valeur nulle non attendue valeur reçue : 0.0
Dans testPositifOuNull val = -2.0
Catch NumException dans testPositifOuNull traitement partiel et relaisNumException:
PositifOuNull valeur positive attendue. valeur reçue : -2.0
Dans le finally de testPositifOuNull 0.0
Catch dans le main NumException: PositifOuNull valeur positive attendue. valeur reçue : -2.0

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

[Armstrong, 2006] Armstrong, D. J. (2006). The quarks of object-oriented


development. Communication of the ACM, 49(2) :123–128.
[Knuth, 1973] Knuth, D. E. (1973). The Art of Computer Programming, volume 3. :
sorting and searching. Addison-Wesley Publishing Company, Inc.
[Maurer and Lewis, 1975] Maurer, W. D. and Lewis, T. G. (1975). Hash table methods.
ACM Computing Survey, 7(1) :5–19.

Télécom SudParis — Christian Bac, Denis Conan — Octobre 2015 — CSC 4002 169/169

Das könnte Ihnen auch gefallen