You are on page 1of 163

Cours JAVA : Le bases du langage Java.

Version 3.01 Julien Sopena1


1 julien.sopena@lip6.fr quipe REGAL - INRIA Rocquencourt LIP6 - Universit Pierre et Marie Curie

Licence professionnelle DANT - 2012/2013

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

1 / 151

Grandes lignes du cours


Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Conception par traitements. Conception par objets. Le concept dencapsulation. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe.
J. Sopena (INRIA/UPMC)

La surcharge. Les constructeurs. Le mcanisme dinstanciation. Constructeur par dfaut. Plusieurs constructeurs. Excutable Java. Coder un executable. Compilation. Structuration des sources. Des classes utiles. La classe String Les tableaux. Les enveloppes.
2 / 151

Le bases du langage Java.

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

3 / 151

Java cest quoi ?


Un langage : Orient objet fortement typ avec classes Un environnement dexcution (JRE) : Une machine virtuelle et un ensemble de bibliothques Un environnement de dveloppement (JDK) : Une machine virtuelle et un ensemble doutils Une mascotte : Duke

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

4 / 151

Java cest qui ?


La plate-forme et le langage Java sont issus dun projet de Sun Microsystems datant de 1990. Gnralement, on attribut sa paternit a trois de ses ingnieurs : James Gosling Patrick Naughton Mike Sheridan

Figure : 1990 Barbecue chez James Gosling


J. Sopena (INRIA/UPMC) Le bases du langage Java. 5 / 151

Java pourquoi ?

Java est devenu aujourdhui lun des langages de programmation les plus utiliss. Il est incontournable dans plusieurs domaines : Systmes dynamiques : Chargement dynamique de classes Internet : Les Applets java Systmes communicants : RMI, Corba, EJB, etc.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

6 / 151

Java pour qui ?

Pour tous : Le 13 novembre 2006, Sun annonce le passage de Java, cest--dire le JDK (JRE et outils de dveloppement) sous licence GPL. Pour vous : Cette UE sur Java servira de base lensemble des UE techniques du deuxime semestre.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

7 / 151

Lenvironnement actuel Java 2 Standard Edition J2SE


Loutil de base : le JDK (Java Development Kit) de SUN : http://java.sun.com. gratuit. Dernire version : 1.6. comprend de nombreux outils :
le le le le compilateur. compilateur la vol "JIT". dbogueur. gnrateur de documentation.

Des environnements de dveloppements gratuits NetBeans : http://www.netbeans.org/ Eclipse : http://www.eclipse.org/


J. Sopena (INRIA/UPMC) Le bases du langage Java. 8 / 151

Java volue tout le temps


Java nest pas un langage normalis et il continu dvoluer. Cette volution se fait en ajoutant de nouvelle API, mais aussi en modiant la machine virtuelle. Lensemble de ces modications est gr par le JCP (Java Community Process ; http ://www.jcp.org/) dans lequel Sun continue de tenir une place prpondrante. Il peut alors tre ncessaire didentier une version prcise du compilateur et/ou de la machine virtuelle : a nest pas simple. La numrotation des versions : 1.0 1.1 1.2 1.3 1.4 5.0 6.0
Toutes ces versions : Java 2

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

9 / 151

Tout se complique
Attention, avec larrive de la GPL tout se complique :

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

10 / 151

Les versions de Java

JDK 1.0 (1996 - 211 classes et interfaces) Version initiale. JDK 1.1 (1997 - 477 classes et interfaces) Ajoute : classes internes, JavaBeans, JDBC, Java
Remote Invocation (RMI).

J2SE 1.2 (1998 - 1 524 classes et interfaces) Playground Ajoute : rection, SWING, compilateur JIT (Just in
Time), Java IDL pour Corba.

J2SE 1.3 (2000 - 1 840 classes et interfaces) Kestrel Ajoute : HotSpot JVM, service de nomage (JNDI) et
JavaSound.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

11 / 151

Les versions de Java (suite)


J2SE 1.4 (2002 - 2 723 classes et interfaces) Merlin Ajoute : mot-cl assert, expressions rationnelles, chanage dexception, parser XML et du moteur XSLT (JAXP), extensions de scurit JCE (Java Cryptography Extension) et Java Web Start. J2SE 5.0 (2004 - 3 270 classes et interfaces) Tiger Ajoute : syntaxe la foreach, enumerations (enum), classe Integer, autoboxing/unboxing Java SE 6 (2006 - 3 777 classes et interfaces) Mustang Ajoute : covariance (rednition avec modication du type de retour), @overhiding. Java SE 7 Nom de code Dolphin Ajoutera : des closures (en cours de spcications). Ce sera la premire Version 100% open source.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

12 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

13 / 151

Java versus C++


Filiation historique :
1983 (AT&T Bell) : C++ 1991 (Sun Microsystems) : Java

Java est trs proche du langage C++ (et donc du langage C). Toutefois Java est plus simple que le langage C++, car les points "critiques" du langage C++ (ceux qui sont lorigine des principales erreurs) ont t supprims. Cela comprend :
Les pointeurs La surcharge doprateurs Lhritage multiple

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

14 / 151

Java versus C++ : concepts (2)


De plus,  Tout est dynamique : les instances dune classe sont instancies dynamiquement.  La libration de mmoire est transparente pour lutilisateur. Il nest pas ncessaire de spcier de mcanisme de destruction. La libration de lespace mmoire est prise en charge un gestionnaire appel garbage collector charg de dtecter les objets dtruire.

Notes
gain de abilit (pas de dsallocation errone). a un cot (perte en rapidit par rapport au C++).

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

15 / 151

Java versus C++ : production du binaire

Une fois acheve la production du logiciel, un choix doit tre fait entre fournir le source ou le binaire pour la machine du client. Gnralement, une entreprise souhaite protger le code source et distribuer le code binaire. Le code binaire doit donc tre portable sur des architectures direntes (processeur, systme dexploitation, etc.).

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

16 / 151

Java versus C++ : compilateur C++

linstar du compilateur C, le compilateur C++ produit du code natif, i.e., quil produit un excutable propre lenvironnement de travail ou le code source est compil. On doit donc crer les excutables pour chaque type darchitecture potentielle des clients.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

17 / 151

Java versus C++ : chane de production du C


source.c compilation : gcc source.c -o monProg monProg

Execution : ./monProg

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

18 / 151

Java versus C++ : compilateur Java


En Java, le code source nest pas traduit directement dans le langage de lordinateur. Il est dabord traduit dans un langage appel "bytecode", langage dune machine virtuelle (JVM Java Virtual Machine) dnie par Sun.

Portabilit
Le bytecode gnr par le compilateur ne dpend pas de larchitecture de la machine o a t compil le code source, cest--dire que les bytecodes produits sur une machine pourront sexcuter (au travers dune machine virtuelle) sur des architectures direntes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

19 / 151

Excution du bytecode

Le bytecode doit tre excut par une Machine Virtuelle Java. Cette JVM nexiste pas. Elle est simule par un programme qui : 1. lit les instructions (en bytecode) du programme .class 2. fait une passe de vrication (type oprande, taille de pile, ot donnes, variable bien initialis,...) pour sassurer quil ny a aucune action dangereuse. 3. fait plusieurs passes doptimisation du code 4. les traduit dans le langage natif du processeur de lordinateur 5. lance leur excution

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

20 / 151

Java versus C++ : chane de production du Java


source.java

Compilation : javac source.java source.class Machine virtuelle : java source.class

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

21 / 151

Cot de la JVM sur les performances.

Les vrications eectues sur le bytecode et la compilation du bytecode vers le langage natif du processeur, ralentissent lexcution des classes Java. Mais les techniques de compilation la vole "Just In Time (JIT)" ou "Hotspot" rduisent ce problme : elles permettent de ne traduire quune seule fois en code natif les instructions qui sont (souvent pour Hotspot) excutes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

22 / 151

Java versus C++ : en rsum...


Le langage Java est : C-like : Syntaxe familire aux programmeurs de C Orient objet : Tout est objet, sauf les types primitifs (entiers, ottants, boolens, ...) Robuste : Typage fort, pas de pointeurs, etc. Code intermdiaire : Le compilateur ne produit que du bytecode indpendant de larchitecture de la machine o a t compil le code source

Note
Java perd (un peu) en ecacit par rapport C++// mais gagne (beaucoup) en portabilit.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

23 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Conception par traitements. Conception par objets. Le concept dencapsulation. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

24 / 151

Problmatique de la programmation
Le schma simpli dun systme informatique peut se rsumer par la formule : Systme informatique = Structures de donnes + Traitements

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

25 / 151

Problmatique de la programmation
Le schma simpli dun systme informatique peut se rsumer par la formule : Systme informatique = Structures de donnes + Traitements Le cycle de vie dun systme peut tre dcompos en deux grandes phases : Une phase de production qui consiste raliser le logiciel. Une phase de maintenance qui consiste corriger et faire voluer le logiciel.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

25 / 151

Problmatique de la programmation
Le schma simpli dun systme informatique peut se rsumer par la formule : Systme informatique = Structures de donnes + Traitements Le cycle de vie dun systme peut tre dcompos en deux grandes phases : Une phase de production qui consiste raliser le logiciel. Une phase de maintenance qui consiste corriger et faire voluer le logiciel. Lors de la production du systme (au sens industriel du terme), le concepteur a deux grandes options : soit orienter sa conception sur les traitements. soit orienter sa conception sur les donnes.
J. Sopena (INRIA/UPMC) Le bases du langage Java. 25 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Conception par traitements. Conception par objets. Le concept dencapsulation. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

26 / 151

Conception par traitements.


Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Conception par traitements. Conception par objets. Le concept dencapsulation. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

27 / 151

Conception par traitements : principe


Principe : On spare les donnes des moyens de traitement de ces donnes.

P ROGRAMME Structures de donnes Variable Variable Variable Variable Algorithmes Procdure Fonction Procdure Fonction

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

28 / 151

Conception par traitements : +/Les premiers concepteurs de systme informatique ont adopt cette approche : systmes dexp., gestionnaires de fentres, logiciels de gestion, logiciels de bureautique, logiciels de calcul scientique, etc. De nombreux systmes informatiques sont encore dvelopps selon cette approche. Systmes ad-hoc, i.e., adapts au problme de dpart, mais dont la maintenance est dicile. Les traitements sont gnralement beaucoup moins stables que les donnes : changement de spcication, ajout de nouvelles fonctionnalits, etc. Les structures de donnes sous-jacentes sont choisies en relation troite avec les traitements eectuer.
J. Sopena (INRIA/UPMC) Le bases du langage Java. 29 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Conception par traitements. Conception par objets. Le concept dencapsulation. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

30 / 151

Conception par objets.


Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Conception par traitements. Conception par objets. Le concept dencapsulation. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

31 / 151

Conception par objets : principe


Principe : an dtablir de faon stable et robuste larchitecture dun systme, il semble raisonnable de sorganiser autour des donnes manipules.

P ROGRAMME Objet Variable Variable Procdure Fonction Objet Variable Variable Procdure Fonction

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

32 / 151

Conception par objets : points cls

La construction dun systme va saxer principalement sur la dtermination des donnes dans un premier temps et la ralisation les traitements (de haut-niveau) agissant sur ces donnes dans un second temps. Cette approche permet de btir des systmes plus simples maintenir et faire voluer. On regroupe dans une mme entit informatique, appel objet, les structures de donnes et les moyens de traitement de ces donnes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

33 / 151

Le concept dobjet : dnition


Dnition Un objet est une entit autonome, qui regroupe un ensemble de proprits (donnes) cohrentes et de traitements associs.

retenir
Ne commencez pas par vous demander ce que fait lapplication mais ce quelle manipule.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

34 / 151

Le concept dobjet : vocabulaire

Les structures de donnes dnies dans lobjet sont appels ses attributs (proprits). Les procdures et fonctions dnies dans lobjet sont appels ses mthodes (oprations). Les attributs et mthodes dun objet sont appels ses membres. Lensemble des valeurs des attributs dun objet un instant donn est appel tat interne.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

35 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Conception par traitements. Conception par objets. Le concept dencapsulation. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

36 / 151

Le concept dencapsulation.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Conception par traitements. Conception par objets. Le concept dencapsulation. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

37 / 151

Protection de linformation : encapsulation.


Interface
ensemble des services publics offerts

Capsule
nautorisant que les demandes de service public

Demande de service

Accs aux donnes

Lucky

Luke

123

Rgle
Les donnes dun objet (son tat) peuvent tre lues ou modies uniquement par les services proposs par lobjet lui-mme (ses mthodes)
J. Sopena (INRIA/UPMC) Le bases du langage Java. 38 / 151

Encapsulation : dnition
Dnition Le terme encapsulation dsigne le principe consistant cacher linformation contenue dans un objet et de ne proposer que des mthodes de modication/accs ces proprits (attributs).

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

39 / 151

Encapsulation : dnition
Dnition Le terme encapsulation dsigne le principe consistant cacher linformation contenue dans un objet et de ne proposer que des mthodes de modication/accs ces proprits (attributs). Lobjet est vu de lextrieur comme une bote noire ayant certaines proprits et ayant un comportement spci. La manire dont le comportement a t implment est cache aux utilisateurs de lobjet.

Intrt
Protger la structure interne de lobjet contre toute manipulation non contrle, produisant une incohrence.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

39 / 151

Encapsulation : en pratique

Lencapsulation ncessite la spcication de parties publics et prives de lobjet. lments publics : correspond la partie visible de lobjet depuis lextrieur. cest un ensemble de mthodes utilisables par dautres objets (environnement). lments prives : correspond la partie non visible de lobjet. Il est constitu des lments de lobjet visibles uniquement de lintrieur de lobjet et de la dnition des mthodes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

40 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

41 / 151

Le concept dobjet : notion de classe

Pour tre vritablement intressante, la notion dobjet doit permettre un certain degr dabstraction notion de classe.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

42 / 151

Le concept dobjet : notion de classe

Pour tre vritablement intressante, la notion dobjet doit permettre un certain degr dabstraction notion de classe. Dnition On appelle classe la structure dun objet, i.e., la dclaration de lensemble des membres qui composeront un objet.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

42 / 151

Le concept dobjet : notion de classe

Pour tre vritablement intressante, la notion dobjet doit permettre un certain degr dabstraction notion de classe. Dnition On appelle classe la structure dun objet, i.e., la dclaration de lensemble des membres qui composeront un objet.

Dnition La classe peut tre vue comme un moule pour la cration des objets, quon appelle alors des instances de la classe.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

42 / 151

Classe = Modle dobjets

Classe dcrivant les caractristiques des instances

prnom

Signature et code du service (mthode)

nom mdailles

Nom et type de lattribut

Instanciation (new)

Lucky Luke 123


Dalton

Joe
Dalton

Averell

Instances de la classe

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

43 / 151

Dirences entre classe et objet.


Il est important de saisir les dirences entre les notions de classe et instance de la classe : classe = attributs + mthodes + mcanismes dinstanciation + mcanismes de destruction

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

44 / 151

Dirences entre classe et objet.


Il est important de saisir les dirences entre les notions de classe et instance de la classe : classe = attributs + mthodes + mcanismes dinstanciation + mcanismes de destruction instance de la classe = valeurs des attributs + accs aux mthodes

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

44 / 151

Dirences entre classe et objet.


Il est important de saisir les dirences entre les notions de classe et instance de la classe : classe = attributs + mthodes + mcanismes dinstanciation + mcanismes de destruction instance de la classe = valeurs des attributs + accs aux mthodes Linstanciation est le mcanisme qui permet de crer des instances dont les traits sont dcrits par la classe. La destruction est le mcanisme qui permet de dtruire une instance de la classe. Lensemble des instances dune classe constitue lextension de la classe .
J. Sopena (INRIA/UPMC) Le bases du langage Java. 44 / 151

Exemple : Un QCM.

On veut produire une application permettant des tudiants de rpondre des QCM. Comme un QCM est form dune suite de questions, on sintresse dnir la classe Question. Elle doit permettre de 1. Poser une question (lachage ou, mieux, la production dune chane de caractres reprsentant la question sera employ cet eet) 2. Enregistrer la rponse fournie par un tudiant 3. Dterminer si la rponse fournie est la bonne

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

45 / 151

Conception de la classe Question


Les services oerts par la classe :
Savoir si la rponse est correcte Enregistrer une rponse Obtenir une chane de caractres reprsentant la question

rponseCorrecte

?
Aucune hypothse sur la structure interne
J. Sopena (INRIA/UPMC) Le bases du langage Java. 46 / 151

Diagramme UML correspondant

Question
+repondre(r: int): void +reponseCorrecte(): boolean +toString(): String

Du point de vue de lutilisateur de la classe, seuls les services publics sont pertinents

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

47 / 151

Classe : dclaration.
En Java, pour dclarer une classe on utilise le mot-cl class suivi du nom de la classe.
p u b l i c class P o i n t { ... }

Rgles
1. La premire lettre du nom dune classe doit toujours tre une lettre majuscule (ex : Chat). 2. Mlange de minuscule, majuscule avec la premire lettre de chaque mot en majuscule (ex : ChatGris). 3. Une classe se trouve dans un chier portant son nom suivi lextention .java (ex : ChatGris.java)

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

48 / 151

Classe : visibilit dun membre


En Java, lencapsulation est assure par un ensemble de modicateurs daccs permettant de prciser la visibilit des membres de la classe : Dnition Un membre dont la dclaration est prcde par le mot cl public est visible depuis toutes instances de toutes classes. Dnition Un membre dont la dclaration est prcde par le mot cl private nest visible que dans les instances de la classe. Remarque(s) Il existe dautres types de visibilit pour un membre que nous nvoquerons pas dans limmdiat.
J. Sopena (INRIA/UPMC) Le bases du langage Java. 49 / 151

Dnition Java du squelette de la classe Question


Le mot cl public permet dindiquer les services qui sont accessibles lutilisateur.
public class ... public ... } public ... } public ... } ... }
J. Sopena (INRIA/UPMC) Le bases du langage Java. 50 / 151

Question {

void r e p o n d r e ( i n t r e p o n s e ) {

boolean r e p o n s e C o r r e c t e ( ) {

String toString () {

Dnition Java du squelette de la classe Question


Le mot cl private assure lencapsulation
p u b l i c class Q u e s t i o n { // i n t i t u l de l a q u e s t i o n private private private private String question ; String [ ] choix ; int reponse ; i n t bonneReponse ; // t a b l e a u d e s c h o i x p o s s i b l e s // numro de l a r p o n s e de l t u d i a n t // numro de l a bonne r p o n s e

p u b l i c void r e p o n d r e ( i n t r e p o n s e ) { ... } ... }


J. Sopena (INRIA/UPMC) Le bases du langage Java. 51 / 151

Diagramme UML complet

Question
+Question(q: String, c: String[], b :int) +repondre(r: int): void +reponseCorrecte(): boolean +toString(): String -question: String -choix: String[] -bonneReponse: int -reponse(): int

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

52 / 151

Accs aux membres dune classe.


Dnition Lensemble des mthodes dun objet accessibles de lextrieur (depuis un autre objet) est appel interface. Elle caractrise le comportement de lobjet. Dnition Laccs un membre dune classe se fait au moyen de loprateur . . Dnition Linvocation dune mthode dinterface est appel appel de mthode. Il peut tre vu comme un envoi de message entre objet.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

53 / 151

Accs aux membres.


p u b l i c class P o i n t { p u b l i c double x , y ; } p u b l i c class R e c t a n g l e { p u b l i c double l o n g e u r , l a r g e u r ; public Point c o i n ; public Point c a l c u l e r C e n t r e ( ) ; } p u b l i c class T e s t F i g u r e { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { Rectangle rect ; P o i n t c o i n D u R e c t = rect.coin ; double xDuCoinDuRect = coinDuRect.x ; P o i n t c e n t r e D u R e c t = rect.calculerCentre() ; double yDuCentreDuRect = centreDuRect.y ; } }
J. Sopena (INRIA/UPMC) Le bases du langage Java. 54 / 151

Accs rcursifs aux membres.


p u b l i c class P o i n t { p u b l i c double x , y ; } p u b l i c class R e c t a n g l e { p u b l i c double l o n g e u r , l a r g e u r ; public Point c o i n ; public Point c a l c u l e r C e n t r e ( ) ; } p u b l i c class T e s t F i g u r e { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { Rectangle rect ; double xDuCoinDuRect = rect.coin.x ; double yDuCentreDuRect = rect.calculerCentre().y } } ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

55 / 151

Classe : membres dinstance et de classes


Quelque soit le niveau de visibilit, on distingue deux types de membres : Dnition Un membre de classe est un membre commun toutes les instances de la classe et existe ds que la classe est dnie en dehors et indpendamment de toute instanciation. Les membres de classe sont dclars laide du mot-cl static. Dnition Un membre qui nest pas de classe, i.e. dont la dclaration nest pas prcde du mot-cl static est dit membre dinstance. Chaque instance dune classe possde son propre exemplaire dun attribut dinstance de la classe.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

56 / 151

Variable de classe
On veut introduire des choix par dfaut
p u b l i c class Q u e s t i o n { ... private S t r i n g [ ] c h o i x D f a u t = {" v r a i " , " faux " } ; ... }

Problme : chaque instance dispose de son propre tableau choixDfaut alors quil devrait tre commun tous les objets
p u b l i c class Q u e s t i o n { ... private ... } static String [ ] choixDfaut = {" v r a i " , " faux " } ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

57 / 151

Variable de classe
Classe Question
rponseCorrecte question

choix

rponse

bonneRponse

choixDfaut "vrai" "faux"

Instance q1
rponseCorrecte

Instance q2
rponseCorrecte

question "Vous tes" choix "beau" "moche"

question "Vous avez" choix "5 ans" "10 ans"

rponse 1

bonneRponse 2

rponse 2

bonneRponse 1

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

58 / 151

Classe : laccs aux membres de classe


Les membres de classes dune classe donne tant communs toutes les instances de la classe, laccs un membre de classe se fait en appliquant loprateur . sur le nom de la classe.
System . o u t . p r i n t l n ( Question. c h o i x D e f a u t [ 1 ] ) ;

Laccs aux membres de classe peut aussi se faire avec une instance de la classe suivie de loprateur . . Mais ceci est peu lisible et nutiliser que pour le polymorphisme (voir cours suivant).
Q u e s t i o n q1 = new Q u e s t i o n ( ) ; System . o u t . p r i n t l n ( q1. c h o i x D e f a u t [ 1 ] ) ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

59 / 151

Classe java type


Une classe java types contient trois grands types de membres :
p u b l i c class P o i n t {

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

60 / 151

Classe java type


Une classe java types contient trois grands types de membres :
p u b l i c class P o i n t { // ( 1 ) A t t r i b u t s p r i v a t e double x , y ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

60 / 151

Classe java type


Une classe java types contient trois grands types de membres :
p u b l i c class P o i n t { // ( 1 ) A t t r i b u t s p r i v a t e double x , y ; // ( 2 ) C o n s t r u c t e u r s p u b l i c P o i n t ( double x , double y ) { . . . }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

60 / 151

Classe java type


Une classe java types contient trois grands types de membres :
p u b l i c class P o i n t { // ( 1 ) A t t r i b u t s p r i v a t e double x , y ; // ( 2 ) C o n s t r u c t e u r s p u b l i c P o i n t ( double x , double y ) { . . . } // ( 3 ) Mthodes p u b l i c double d i s t a n c e A v e c ( P o i n t p2 ) { . . . } }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

60 / 151

Classe java type


Une classe java types contient trois grands types de membres :
p u b l i c class P o i n t { // ( 1 ) A t t r i b u t s p r i v a t e double x , y ; // ( 2 ) C o n s t r u c t e u r s p u b l i c P o i n t ( double x , double y ) { . . . } // ( 3 ) Mthodes p u b l i c double d i s t a n c e A v e c ( P o i n t p2 ) { . . . } }

Remarque(s) Les constructeurs sont des mthodes particulires, ils seront donc introduits aprs celles-ci dans ce cours. Cependant, vous devez toujours dclarer les constructeurs aprs les attributs et avant les autres mthodes (voir ci-dessus).
J. Sopena (INRIA/UPMC) Le bases du langage Java. 60 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

61 / 151

Dclaration dun attributs


En Java, toutes les variables doivent tre dclares avant dtre utilises (les attributs comme les variable locales des mthodes). La dclaration des attributs se fait de prfrence en dbut de classe et leurs noms commencent par des minuscules. On indique au compilateur : 1. Un ensemble de modicateurs (facultatif ). 2. Le type de la variable. 3. Le nom de la variable.
p r i v a t e double z ; public S t r i n g s t r ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

62 / 151

Les types en Java

Le type dune variable en Java peut tre : Types dits primitifs : int, double, boolean, etc. nom dune classe : par exemple, les chanes de caractres sont des instances de la classe String. Remarque(s) Nous laissons de ct pour linstant le cas des tableaux sur lesquels nous reviendrons plus tard.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

63 / 151

Les types primitifs


Type byte short int long oat double boolean char Taille (en bits) 8 16 32 64 32 64 1 16 Exemple 1 345 -2 2L 3.14f, 2.5e+5 0.2d, 1.567e-5 true ou false a

Attention
Un attribut de type primitif nest pas un objet !

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

64 / 151

Aecter une valeur un attribut


Laectation dune valeur une variable est eectue par linstruction
variable = expression ;

Laectation se fait en deux temps : 1. lexpression est calcule ; 2. la valeur calcule est aecte la variable. Exemple
x = 36.0 d ; y = x + 1; s t r = " Linus " ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

65 / 151

Initialisation dun attribut


En Java, une variable doit tre initialise (recevoir une valeur) avant dtre utilise dans une expression. Sils ne sont pas initialiss expressment par le programmeur, les attributs seront automatiquement initialiss par le compilateur. Ils reoivent alors une valeur par dfaut de leur type : 0 pour les int, 0.0d pour les double, false pour les boolean, null pour les String, etc. Remarque(s) On peut initialiser un attribut lors de sa dclaration.
p r i v a t e i n t x = 1; p u b l i c S t r i n g s t r = " L i c e n c e MIAGE" ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

66 / 151

Les constantes

On peut bloquer la modication de la valeur dun attribut (en dehors de linstanciation) laide du mot-cl nal.
nal private int x ;

Remarque(s) On utilise souvent un attribut de classe dclar nal pour dnir une constante :
nal s t a t i c p u b l i c double PI = 3 . 1 4 d ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

67 / 151

Les types en Java : dclarer les attributs

p u b l i c class Logement { // l e s a t t r i b u t s f i n a l p u b l i c double s u r f a c e ; p u b l i c double p r i x ; public S t r i n g p r o p r i e t a i r e ; p r i v a t e boolean vendu ; }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

68 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

69 / 151

Les mthodes en Java : syntaxe et dnition

La syntaxe pour dnir le corps dune mthode est identique celle utilise en C pour dnir une fonction. Notamment, les noms et la syntaxe des instructions (conditionnelles, itratives, etc.) et, des oprateurs (arithmtiques, de comparaison, logiques, etc.) sont les mmes quen C.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

70 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

71 / 151

Le mot cl this.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

72 / 151

Dnition du mot cl this.

Dnition Dans le corps dune mthode, le mot cl this dsigne linstance sur laquelle est invoque la mthode. Ce mot cl est utilis dans 3 circonstances : 1. pour accder aux attributs de lobjets 2. pour comparer la rfrence de lobjet invoquant la mthode une autre rfrence 3. pour passer la reference de lobjets invoquant la mthode en paramtre dune autre mthode

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

73 / 151

Utilisation du this : accs un attribut.


Dans le corps dune mthode, this permet daccder aux attributs de lobjet lorsque ceux-ci sont masqus par un paramtre ou par une variable locale.
p u b l i c class Q u e s t i o n { int reponse ; ... p u b l i c void r e p o n d r e ( i n t r e p o n s e ) { this . r e p o n s e = r e p o n s e ; } p u b l i c boolean r e p o n s e C o r r e c t e ( ) { r e t u r n r e p o n s e == bonneReponse ; } ... }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

74 / 151

Utilisation du this : comparer la rfrence.

Dans le corps dune mthode, this permet de comparer la rfrence de lobjet sur lequel est invoqu la mthode une autre rfrence.
p u b l i c class Animal { Estomac e s t o m a c ; ... p u b l i c void manger ( Animal v i c t i m e ) { // On ne p e u t p a s s e manger c o m p l t e m e n t s o i mme i f ( this != victime ) { estomac . a d d N o u r i t u r e ( v i c t i m e ) ; } } }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

75 / 151

Utilisation du this : rfrence en paramtre


Dans le corps dune mthode, this permet de passer la rfrence de lobjet sur lequel est invoqu une autre mthode.
p u b l i c class E n t r e p r i s e { public i n t c a l c u l e r S a l a i r e ( I n d i v i d u x ) { . . . } } p u b l i c class I n d i v i d u { i n t compte ; Entreprise entreprise ; ... p u b l i c void d e m i s s i o n n e r ( ) { compte += e n t r e p r i s e . c a l c u l e r S a l a i r e ( this ) ; e n t r e p r i s e = null ; } }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

76 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

77 / 151

Les accesseurs.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

78 / 151

Respect de lencapsulation

Rgle
Les attributs doivent : toujours tre dclars privs : private int longeur ; tre accd en lecture par un accesseurs en lecture : public int getLongeur() ; tre accd en criture par un accesseurs en criture : public void setLongeur(int l) ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

79 / 151

Pourquoi cacher les attributs ?

p u b l i c class P o i n t { public i n t x , y ; } p u b l i c class F i g u r e { public Point c ; p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) { t h i s . c . x += x ; t h i s . c . y += y ; } }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

80 / 151

Pourquoi cacher les attributs ?

p u b l i c class P o i n t { public } p u b l i c class F i g u r e { public Point c ; p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) { t h i s . c . x += x ; t h i s . c . y += y ; } } int[] tuple ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

81 / 151

Pourquoi cacher les attributs ?

p u b l i c class P o i n t { public } p u b l i c class F i g u r e { public Point c ; p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) { this.c.x += x; this.c.y += y; } } int[] tuple ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

82 / 151

Pourquoi cacher les attributs ?


p u b l i c class P o i n t { private int x , y ; getX() getY() {...} {...} {...} {...} public i n t p u b l i c void public i n t p u b l i c void } p u b l i c class F i g u r e { public Point c ; p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) { t h i s . c . s e t X ( t h i s . c . getX ()+ x ) ; t h i s . c . s e t Y ( t h i s . c . getY ()+ y ) ; } }

setX(int x) setY(int y)

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

83 / 151

Pourquoi cacher les attributs ?

p u b l i c class P o i n t { p r i v a t e int[] t u p l e ; p u b l i c i n t getX ( ) { . . . } p u b l i c void s e t X ( i n t x ) { . . . } p u b l i c i n t getY ( ) { . . . } p u b l i c void s e t Y ( i n t y ) { . . . } } p u b l i c class F i g u r e { public Point c ; p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) { t h i s . c . s e t X ( t h i s . c . getX ()+ x ) ; t h i s . c . s e t Y ( t h i s . c . getY ()+ y ) ; } }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

84 / 151

Rappel

Une classe implmente un concept associant des donnes manipules exclusivement par les instances de la classe
les attributs : mode daccs private pour garantir la protection de linformation

les traitements que lon souhaite eectuer


les mthodes publiques : mode daccs public visibles depuis lextrieur de la classe = vision client les mthodes prives : mode daccs private visibles uniquement depuis lintrieur de la classe (autres mthodes) = vision fournisseur

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

85 / 151

Accesseurs : bonne et mauvaise pratique

Mauvaise pratique La cration des mthodes publiques ou prives doit se faire en fonction des besoins et non -priori. On ne dnit pas des accesseurs ou (pire) des accesseurs publics systmatiquement Bonne pratique Si on a besoin dun accesseur en lecture et/ou en criture, alors on le/les cre :
si le besoin est lintrieur de la classe (fournisseur) = accesseur priv si le besoin est lextrieur de la classe (client) = accesseur public mais attention, danger ! Il faut assurer lindpendance de la reprsentation

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

86 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

87 / 151

Les mthodes de classe.


Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

88 / 151

Les mthodes static en java.


Dnition Comme pour les attributs, une mthode de classe est une mthode dont la dclaration est prcde du modicateur static. Elle ne sexcute pas relativement une instance de classe et ne peut donc pas utiliser "directement" : des attributs instances des methodes instances le mot cle this Les mthodes de classe peuvent tre utilses pour : 1. Manipuler les attributs de classe (lecture ou aectation) ; 2. Dnir une mthode gnrique sur la classe.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

89 / 151

Mthode de classe (1) : Utilisation des attributs de classe.


Une mthode de classe peut tre utilise pour manipuler des attributs de classe.
p u b l i c class I n d i v i d u { static int ageRetraite ; s t a t i c void m o d i f i e r A g e R e t r a i t e ( i n t a g e R e t r a i t e ) { Individu . ageRetraite = ageRetraite ; } }

Attention
Ici, on ne peut pas utiliser le mot cl this pour accder lattribut de classe ageRetraitre.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

90 / 151

Mthode de classe (2) : Les mthodes gnrique.


Une mthode de classe nutilise pas toujours des attributs de classe. Elle peut tre introduite pour eectuer des actions gnriques sur des ensembles dinstances de la classe.
p u b l i c class P o i n t { public f l o a t d i s t a n c e ( Point p ) { . . . } static } p u b l i c class T e s t P o i n t { p u b l i c void main ( S t r i n g [ ] a r g s ) { Point a , b ; ... dist = a . distance (b ); d i s t = Point . d i s t a n c e E n t r e ( a , b ) ; } } f l o a t d i s t a n c e E n t r e ( P o i n t p1 , P o i n t p2 ) { . . . }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

91 / 151

Classes nayant que des mthodes static.


Remarque(s) Une classe peut ne contenir que des membres static. Dans ce cas elle ne sert pas a creer des objets ! ! ! Exemple 1 - La classe Math est une classe bote outils ne possdant que des constantes (E et PI) et mthodes de classes.
i n t r a y o n = 30 ; double s u r f a c e = Math . PI Math . pow ( r a y o n , 2 ) ;

Exemple 2 - La classe System qui reprsente la VM ne possdant que des attributs et mthodes de classes : il ny a pas de raison den avoir plusieurs instances.
// Permet d a f f i c h e r d e s m e s s a g e s d a n s l a c o n s o l e System . o u t . p r i n t l n ( " H e l l o , World ! " ) ; // Permet d a r r t e r b r u t a l e m e n t un programme . System . e x i t ( 0 ) ;
J. Sopena (INRIA/UPMC) Le bases du langage Java. 92 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

93 / 151

La surcharge.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Le mot cl this. Les accesseurs. Les mthodes de classe. La surcharge. Les constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

94 / 151

La signature dune mthode Java


Dnition On appelle signature dune mthode, lensemble compos de : son nom des types de ses arguments Elle permet didentier de manire unique une mthode au sein dune classe.

ATTENTION
En java, ne font pas partie de la signature dune mthode : 1. le nom de ses arguments (comme en C) 2. son type de retour de la mthode (void ou non)
J. Sopena (INRIA/UPMC) Le bases du langage Java. 95 / 151

La signature dune mthode Java


Dnition On appelle surcharge (en anglais overloading ) dune mthode, la possibilit de dnir des comportements dirents pour la mme mthode selon les arguments passs en paramtres. Dans ce cas, deux mthodes dune mme classe peuvent porter le mme "nom" mais nont pas la mme signature.
p u b l i c class R e c t a n g l e { p u b l i c void r e d i m e n s i o n n e r ( int f a c t e u r ) { largeur = largeur facteur ; longueur = longueur facteur ; } p u b l i c void r e d i m e n s i o n n e r ( oat a , oat b ) { largeur = largeur + a ; l o n g u e u r = l o n g u e u r +b ; } }
J. Sopena (INRIA/UPMC) Le bases du langage Java. 96 / 151

La signature dune mthode Java

p u b l i c class R e c t a n g l e { p u b l i c void r e d i m e n s i o n n e r ( int } p u l i c class T e s t R e c t a n g l e { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { Rectangle r1 ; ... r1 . redimensionner ( 2 ) ; r 1 . r e d i m e n s i o n n e r ( 2 , 3.1 ) ; } } facteur ) {...} p u b l i c void r e d i m e n s i o n n e r ( oat a , oat b ) { . . . }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

97 / 151

La signature dune mthode Java

ATTENTION
Il ne faut pas confondre la surcharge ( en anglais overloading ) et la rednition (en anglais overriding ) qui sera tudie dans le cours sur le polymorphisme et qui correspond la possibilit de spcier le comportement dune mthode lexcution selon le type dobjets linvoquant.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

98 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Le mcanisme dinstanciation. Constructeur par dfaut. Plusieurs constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

99 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Le mcanisme dinstanciation. Constructeur par dfaut. Plusieurs constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

100 / 151

Le mcanisme dinstanciation.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Le mcanisme dinstanciation. Constructeur par dfaut. Plusieurs constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

101 / 151

Instanciation de classe.

Les instances dune classe sont cres (construits) par une mthode particulire de la classe appele constructeur.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

102 / 151

Constructeur en Java : dnition (suite)


Dnition Un constructeur est une mthode qui na pas de type de retour, qui porte le mme nom que la classe. Cest cette mthode qui sera automatiquement appele linstanciation de la classe, i.e.,au moment de la cration dun objet. Les constructeurs permettent, entre autres, dinitialiser les attributs de la classe.
p u b l i c class P o i n t { private int x ; private int y ; p u b l i c Point ( i n t x , i n t y ) { this . x = x ; this . y = y ; } }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

103 / 151

Constructeur en Java : invocation


Dnition Pour crer une instance dune classe, on utilise loprateur new avec lun des constructeurs de la classe : p = new Point(2,3); Cette invocation : 1. alloue lespace mmoire ncessaire pour stocker les proprits 2. cre une rfrence sur cet espace mmoire 3. excute le code du constructeur pour initialiser les donnes 4. retourne la rfrence ainsi cre. Remarque(s) Tout est dynamique : les instances dune classe sont instancies dynamiquement.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

104 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Le mcanisme dinstanciation. Constructeur par dfaut. Plusieurs constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

105 / 151

Constructeur par dfaut.


Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Le mcanisme dinstanciation. Constructeur par dfaut. Plusieurs constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

106 / 151

Constructeur par dfaut : dnition. Rgle


Toute classe possde au moins un constructeur.

Dnition En abscence de dclaration explicite dun constructeur, un constructeur par dfaut sera automatiquement ajout par le compilateur Java. Pour classe Toto, ce constructeur par dfaut sera :
[ p u b l i c ] Toto ( ) {}

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

107 / 151

Constructeur par dfaut : ce qui est fait.

Remarque(s) La notion de constructeur par dfaut est en partie li lhritage ; elle sera donc complte plus tard lorsque nous introduirons cette notion. Dans un premier temps, on retiendra quun constructeur par dfaut : 1. initialise les attributs numrique de types primitif 0 ; 2. initialise les attributs de (boolean) false ; 3. initialise les attributs de types Objet null.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

108 / 151

Constructeur par dfaut : exemple.


p u b l i c class P o i n t { private int x ; private int y ; public a f f i c h e r ( ) { System . o u t . p r i n t l n ( " x="+x+" e t y="+y ) ; } } p u b l i c class T e s t P o i n t ( ) { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { P o i n t p = new P o i n t ( ) ; p. afficher (); } } java TestPoint x=0 et y=0

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

109 / 151

Constructeur par dfaut : la limite.

Attention
Le constructeur par dfaut nest ajout par Java si et seulement sil ny a pas de constructeur explicite. Une classe ne possde donc pas toujours un construceur sans paramtre. Si lon en veut un en plus dun constructeur paramtre, il faut le dclarer explicitement.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

110 / 151

Constructeur par dfaut : la limite.

p u b l i c class P o i n t { private int x ; private int y ; p u b l i c Point ( i n t x , i n t y ) { this . x = x ; this . y = y ; } } p u b l i c class T e s t P o i n t ( ) { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { Point p = new Point() ; } }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

111 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Le mcanisme dinstanciation. Constructeur par dfaut. Plusieurs constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

112 / 151

Plusieurs constructeurs.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Le mcanisme dinstanciation. Constructeur par dfaut. Plusieurs constructeurs. Excutable Java. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

113 / 151

Surcharge de constructeur.

Si une classe a plusieurs constructeurs, il sagit de surcharge : mme nom (celui de la classe) types des paramtres dirents.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

114 / 151

Exemple de constructeurs.
p u b l i c class Q u e s t i o n { ... p u b l i c Question ( S t r i n g q u e s t i o n , S t r i n g [ ] c h o i x , i n t bonneReponse ) { this . question = question ; this . choix = choix ; t h i s . bonneReponse = bonneReponse ; this . reponse = 0; } p u b l i c Question ( S t r i n g q u e s t i o n , S t r i n g [ ] c h o i x ) { this . question = question ; this . choix = choix ; t h i s . bonneReponse = 0 ; this . reponse = 0; } ... }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

115 / 151

Exemple de constructeurs imbriqus.


On peut utiliser un constructeur pour dnir un autre constructeur, au moyen du mot-cl this, mais cette invocation dun autre constructeur doit tre la premire instruction.
p u b l i c class Q u e s t i o n { ... p u b l i c Question ( S t r i n g q u e s t i o n , S t r i n g [ ] c h o i x , i n t bonneReponse ) { this . question = question ; this . choix = choix ; t h i s . bonneReponse = bonneReponse ; this . reponse = 0; } p u b l i c Question ( S t r i n g q u e s t i o n , S t r i n g [ ] c h o i x ) { this ( question , choix , 0 ) ; } ... }
J. Sopena (INRIA/UPMC) Le bases du langage Java. 116 / 151

Exemple dinstanciation

p u b l i c class A p p l i Q u e s t i o n { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { S t r i n g [ ] rep = { " Blanc " , " Noir " }; Question q = new Question ( " Le c h e v a l b l a n c e s t " , r e p , 1 ) ; System . o u t . p r i n t l n ( q . t o S t r i n g ( ) ) ; ... }

q est une rfrence vers une instance de Question La valeur particulire null peut lui tre aecte

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

117 / 151

Classe : dnition.
Dnir une classe en Java, cest dnir ses membres savoir : (1) ses attributs, (2) le(s) constructeur(s), (3) et ses mthodes. Il nest pas ncessaire de spcier de mcanisme de destruction, transparente pour lutilisateur, prise en charge par un gestionnaire appel garbage collector charg de dtecter les instances dtruire.

Consquences
gain de abilit (pas de dsallocation errone). a un cot (perte en rapidit).

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

118 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Coder un executable. Compilation. Structuration des sources. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

119 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Coder un executable. Compilation. Structuration des sources. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

120 / 151

Coder un executable.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Coder un executable. Compilation. Structuration des sources. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

121 / 151

La mthode main de Java : concept


Il ne sut pas de dnir les attributs, constructeurs et mthodes des direntes classes, il faut pouvoir excuter un programme, les concepteurs de Java ont choisi pour cela de particulariser une mthode : la mthode main. La mthode main est une mthode de classe publique, qui contient le programme principal excuter et qui a pour signature :
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s )

Attention
La mthode main ne peut pas retourner dentier comme en C.
public s t a t i c int main ( S t r i n g [ ] a r g s )

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

122 / 151

Un premier programme Java

p u b l i c class H e l l o { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { System . o u t . p r i n t l n ( " H e l l o w o r l d ! ! ! " ) ; } }

Hello world !!!

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

123 / 151

Un deuxime programme Java


import j a v a . u t i l . S c a n n e r ; p u b l i c class Main { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { i n t age ; S c a n n e r s c = new S c a n n e r ( System . i n ) ; System . o u t . p r i n t ( " S a i s i s s e z v o t r e ge : " ) ; age = s c . n e x t I n t ( ) ; i f ( age > 2 0 ) System . o u t . p r i n t l n ( " v o u s t e s ag " ) ; e l s e i f ( age > 0 ) System . o u t . p r i n t l n ( " v o u s t e s j e u n e " ) ; else System . o u t . p r i n t l n ( " v o u s t e s en d e v e n i r " ) ; } }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

124 / 151

Un deuxime programme Java


import j a v a . u t i l . S c a n n e r ; p u b l i c class Main { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { i n t age ; S c a n n e r s c = new S c a n n e r ( System . i n ) ; System . o u t . p r i n t ( " S a i s i s s e z v o t r e ge : " ) ; age = s c . n e x t I n t ( ) ; i f ( age > 2 0 ) System . o u t . p r i n t l n ( " v o u s t e s ag " ) ; e l s e i f ( age > 0 ) System . o u t . p r i n t l n ( " v o u s t e s j e u n e " ) ; else System . o u t . p r i n t l n ( " v o u s t e s en d e v e n i r " ) ; } } Saisissez votre ge : 16 vous tes jeune
J. Sopena (INRIA/UPMC) Le bases du langage Java. 124 / 151

Un troisime programme Java


p u b l i c class Main { p u b l i c s t a t i c void f ( i n t [ ] t a b ) { f o r ( i n t i = 0 ; i < t a b . l e n g t h ; ++i ) f o r ( i n t j = 0 ; j < t a b . l e n g t h i 1 ; ++j ) i f ( tab [ j ] > tab [ j + 1 ] ) { i n t tmp = t a b [ j ] ; tab [ j ] = tab [ j + 1 ] ; t a b [ j + 1 ] = tmp ; } } p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { int [ ] t = { 2 , 7 , 1 , 5 }; Main . f ( t ) ; for } } 1 2 5 7
J. Sopena (INRIA/UPMC) Le bases du langage Java. 125 / 151

( i n t i : t ) System . o u t . p r i n t ( i + " " ) ;

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Coder un executable. Compilation. Structuration des sources. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

126 / 151

Compilation.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Coder un executable. Compilation. Structuration des sources. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

127 / 151

Compilation et excution (1)


tape 1 : on cre un chier texte dont le nom est le nom de la classe auquel on rajoute lextension .java. On crit la dnition de la classe Logement dans un chier texte nomm HelloWord.java.

Important
Un chier ne peut contenir quune seule classe publique.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

128 / 151

Compilation et excution (2)


tape 2 : on compile le programme Java laide de la commande javac.

HelloWorld.java
public class HelloWorld { public static void main (String args[]) { System.out.println("Hello World!");
} }

javac HelloWorld.java HelloWorld.class


0 3 5 8 getstatic #7 <Field java.io.PrintStream out> ldc #1 <String "Hello World!" > invokevirtual #8 <Method void println(java.lang.String)> return

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

129 / 151

Compilation et excution (3)


tape 3 : le JIT de la machine virtuelle compile la vole le bytecode produit (cest--dire on excute la mthode main) laide la commande java.

HelloWorld.class
0 3 5 8 getstatic #7 <Field java.io.PrintStream out> ldc #1 <String "Hello World!" > invokevirtual #8 <Method void println(java.lang.String)> return

java HelloWorld

JIT

Machine virtuelle Java

Excution

Systme dexploitation

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

130 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Coder un executable. Compilation. Structuration des sources. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

131 / 151

Structuration des sources.


Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Coder un executable. Compilation. Structuration des sources. Des classes utiles.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

132 / 151

Compilation et interprtation (4)

Important

Bien positionner les variables denvironnement

PATH : doit contenir le rpertoire du compilateur et de la machine virtuelle. CLASSPATH : indique le chemin ou se trouve les classes (par dfaut, le rpertoire courant) sinon vous aurez le message derreur
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

133 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles. La classe String Les tableaux. Les enveloppes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

134 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles. La classe String Les tableaux. Les enveloppes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

135 / 151

La classe String
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles. La classe String Les tableaux. Les enveloppes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

136 / 151

Les chanes de caractres : le type String (1)


Les chanes de caractres sont des instances de la classe String. Loprateur de concatnation des chanes de caractres est loprateur +.

Attention
Pour comparer deux chanes de caractres, on utilise la mthode equals (ou equalsIgnoreCase) de la classe String.
String str1 = . . . . ; String str2 = . . . . ; i f ( s t r 1 . e q u a l s ( s t r 2 ) ) { . . . } else { . . . }

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

137 / 151

Les chanes de caractres : le type String (2)


La classe String ore de nombreuses autres possibilits : length() renvoie la longueur de la chane de caractres. toUpperCase et toLowerCase permettent, respectivement, de mettre la chane de caractres en lettres majuscules et minuscules. int indexOf (char ch) renvoie lindice de la premire occurence du caractre ch dans la chane de caractres. String substring(int beginIndex,int endIndex) qui retourne la sous-chane constitu des caractres dindice beginIndex endIndex - 1. etc ...

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

138 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles. La classe String Les tableaux. Les enveloppes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

139 / 151

Les tableaux.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles. La classe String Les tableaux. Les enveloppes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

140 / 151

Les tableaux

Important
Un tableau est un objet !

Deux tapes : 1. Dclaration : dterminer le type de ses lments. 2. Dimensionnement : dterminer la taille du tableau (cest--dire le nombre dlments).

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

141 / 151

Les tableaux unidimensionnels

La dclaration dun tableau prcise simplement le type des lments du tableau :


int [ ] tableau ;

La dimension du tableau est prcis lors de son instanciation


// c r e un t a b l e a u p o u v a n t c o n t e n i r 50 e n t i e r s t a b l e a u = new i n t [ 5 0 ] ;

La taille dun tableau ne peut plus tre modie par la suite. Dimension du tableau : tableau.length

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

142 / 151

Les tableaux unidimensionnels

On accde llment dindice i du tableau en crivant tableau[i]. Les indices commencent 0. Java vrie automatiquement lindice lors de laccs. Remarque(s) On peut aussi donner explicitement la liste des lments :dun tableau au moment de son instanciation :
int [ ] tableau = {1 ,2 ,3}; S t r i n g [ ] mots = [ " L i c e n c e " , "MIAGE" , "POO" } ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

143 / 151

Les tableaux unidimensionnels


Remarque(s) Si lon dclare un tableau dont les lments sont des rfrences de type logement :
Logement [ ] ville ;

Alors, la ligne de commande


v i l l e = new Logement [ 1 0 0 ] ;

instancie un tableau de 100 rfrences initialises null. Si lon veut quune case contienne une rfrence vers une instance de la classe Logement, on doit instancier une instance de la classe Logement et crire la rfrence de linstance dans la case :
v i l l e [ 5 0 ] = new Logement ( 6 7 . 0 d , 5 e +5);

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

144 / 151

Les tableaux unidimensionnels

Largument args de la mthode main est un tableau dont les lments sont des rfrences vers des chanes de caractres. Il permet de passer la mthode main des paramtres en ligne de commande Si lon crit
java Programme a 3 5.7 true

alors args est un tableau de 1 dimension de taille 4 contenant les rfrences vers les chanes de caractres "a", "3", "5.7" et "true". Les rfrences sont mises dans le mme ordre que sur la ligne de commande. Par exemple, args[1] est une rfrence vers la chane de caractres "3".

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

145 / 151

Outline
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles. La classe String Les tableaux. Les enveloppes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

146 / 151

Les enveloppes.
Java en quelques mots Comparatif Java et C++ Programmation oriente objets. Les classes Java Les attributs. Les mthodes. Les constructeurs. Excutable Java. Des classes utiles. La classe String Les tableaux. Les enveloppes.

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

147 / 151

Les classes enveloppes des types primitifs

chaque type primitif est associ une classe quon appelle classe enveloppe de ce type primitif. La classe enveloppe du type int est la classe Integer.
I n t e g e r e n t i e r = new I n t e g e r ( 5 6 ) ;

De plus, chaque classe enveloppe dun type primitif possde une mthode pour convertir une instance de la classe en une valeur du type primitif associ.
int i = entier . intValue ();

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

148 / 151

Les classes enveloppes des types primitifs


Pour les autres types primitifs, les noms des classes enveloppes sont : Type primitif short int long byte oat double boolean char classe enveloppe Short Integer Long Byte Float Double Boolean Character

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

149 / 151

Les classes enveloppes des types primitifs


Pour chaque classe enveloppe, il existe plusieurs constructeurs qui permettent de faire des conversions explicites depuis les dirents types primitifs ou depuis une chane de caractre.
I n t e g e r i = new I n e t g e r ( 3 3 ) ; I n t e g e r i = new I n t e g e r ( " 6 " ) ;

Ces classes enveloppe permettent aussi de convertir, grce des mthodes de classe, une chane de caractres en types primitifs (int, oat, boolean, ...)
i n t i = I n t e g e r . p a r s e I n t ( "6" ) ; double d = Double . p a r s e D o u b l e ( " 6 . 8 9 " ) ; boolean b = B o o l e a n . p a r s e B o o l e a n ( " f a l s e " ) ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

150 / 151

Les classes enveloppes : Autoboxing/Unboxing


La version 5.0 de Java introduit un mcanisme dautoboxing (mise en bote) qui automatise le passage des types primitifs vers les classes enveloppe. Lopration inverse sappelle unboxing. Avant la version 5.0, pour grer une liste dInteger on devait crire :
l i s t e . add ( new I n t e g e r ( 8 9 ) ) ; int i = l i s t e . get (n ) . intValue ( ) ;

Maintenant avec lautoboxing, le code est beaucoup moins lourd :


l i s t e . add ( 8 9 ) ; int i = l i s t e . get (n ) ;

J. Sopena (INRIA/UPMC)

Le bases du langage Java.

151 / 151