Académique Documents
Professionnel Documents
Culture Documents
J. Sopena (INRIA/UPMC)
1 / 151
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
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)
3 / 151
J. Sopena (INRIA/UPMC)
4 / 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)
6 / 151
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)
7 / 151
J. Sopena (INRIA/UPMC)
9 / 151
Tout se complique
Attention, avec larrive de la GPL tout se complique :
J. Sopena (INRIA/UPMC)
10 / 151
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)
11 / 151
J. Sopena (INRIA/UPMC)
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)
13 / 151
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)
14 / 151
Notes
gain de abilit (pas de dsallocation errone). a un cot (perte en rapidit par rapport au C++).
J. Sopena (INRIA/UPMC)
15 / 151
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)
16 / 151
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)
17 / 151
Execution : ./monProg
J. Sopena (INRIA/UPMC)
18 / 151
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)
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)
20 / 151
J. Sopena (INRIA/UPMC)
21 / 151
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)
22 / 151
Note
Java perd (un peu) en ecacit par rapport C++// mais gagne (beaucoup) en portabilit.
J. Sopena (INRIA/UPMC)
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)
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)
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)
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)
26 / 151
J. Sopena (INRIA/UPMC)
27 / 151
P ROGRAMME Structures de donnes Variable Variable Variable Variable Algorithmes Procdure Fonction Procdure Fonction
J. Sopena (INRIA/UPMC)
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)
30 / 151
J. Sopena (INRIA/UPMC)
31 / 151
P ROGRAMME Objet Variable Variable Procdure Fonction Objet Variable Variable Procdure Fonction
J. Sopena (INRIA/UPMC)
32 / 151
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)
33 / 151
retenir
Ne commencez pas par vous demander ce que fait lapplication mais ce quelle manipule.
J. Sopena (INRIA/UPMC)
34 / 151
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)
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)
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)
37 / 151
Capsule
nautorisant que les demandes de service public
Demande de service
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)
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)
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)
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)
41 / 151
Pour tre vritablement intressante, la notion dobjet doit permettre un certain degr dabstraction notion de classe.
J. Sopena (INRIA/UPMC)
42 / 151
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)
42 / 151
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)
42 / 151
prnom
nom mdailles
Instanciation (new)
Joe
Dalton
Averell
Instances de la classe
J. Sopena (INRIA/UPMC)
43 / 151
J. Sopena (INRIA/UPMC)
44 / 151
J. Sopena (INRIA/UPMC)
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)
45 / 151
rponseCorrecte
?
Aucune hypothse sur la structure interne
J. Sopena (INRIA/UPMC) Le bases du langage Java. 46 / 151
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)
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)
48 / 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 () {
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)
52 / 151
J. Sopena (INRIA/UPMC)
53 / 151
J. Sopena (INRIA/UPMC)
55 / 151
J. Sopena (INRIA/UPMC)
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)
57 / 151
Variable de classe
Classe Question
rponseCorrecte question
choix
rponse
bonneRponse
Instance q1
rponseCorrecte
Instance q2
rponseCorrecte
rponse 1
bonneRponse 2
rponse 2
bonneRponse 1
J. Sopena (INRIA/UPMC)
58 / 151
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)
59 / 151
J. Sopena (INRIA/UPMC)
60 / 151
J. Sopena (INRIA/UPMC)
60 / 151
J. Sopena (INRIA/UPMC)
60 / 151
J. Sopena (INRIA/UPMC)
60 / 151
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)
61 / 151
J. Sopena (INRIA/UPMC)
62 / 151
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)
63 / 151
Attention
Un attribut de type primitif nest pas un objet !
J. Sopena (INRIA/UPMC)
64 / 151
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)
65 / 151
J. Sopena (INRIA/UPMC)
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)
67 / 151
J. Sopena (INRIA/UPMC)
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)
69 / 151
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)
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)
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)
72 / 151
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)
73 / 151
J. Sopena (INRIA/UPMC)
74 / 151
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)
75 / 151
J. Sopena (INRIA/UPMC)
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)
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)
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)
79 / 151
J. Sopena (INRIA/UPMC)
80 / 151
J. Sopena (INRIA/UPMC)
81 / 151
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)
82 / 151
setX(int x) setY(int y)
J. Sopena (INRIA/UPMC)
83 / 151
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)
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
J. Sopena (INRIA/UPMC)
85 / 151
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)
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)
87 / 151
J. Sopena (INRIA/UPMC)
88 / 151
J. Sopena (INRIA/UPMC)
89 / 151
Attention
Ici, on ne peut pas utiliser le mot cl this pour accder lattribut de classe ageRetraitre.
J. Sopena (INRIA/UPMC)
90 / 151
J. Sopena (INRIA/UPMC)
91 / 151
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)
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)
94 / 151
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
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)
97 / 151
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)
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)
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)
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)
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)
102 / 151
J. Sopena (INRIA/UPMC)
103 / 151
J. Sopena (INRIA/UPMC)
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)
105 / 151
J. Sopena (INRIA/UPMC)
106 / 151
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)
107 / 151
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)
108 / 151
J. Sopena (INRIA/UPMC)
109 / 151
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)
110 / 151
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)
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)
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)
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)
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)
115 / 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)
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)
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)
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)
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)
121 / 151
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)
122 / 151
J. Sopena (INRIA/UPMC)
123 / 151
J. Sopena (INRIA/UPMC)
124 / 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)
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)
127 / 151
Important
Un chier ne peut contenir quune seule classe publique.
J. Sopena (INRIA/UPMC)
128 / 151
HelloWorld.java
public class HelloWorld { public static void main (String args[]) { System.out.println("Hello World!");
} }
J. Sopena (INRIA/UPMC)
129 / 151
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
Excution
Systme dexploitation
J. Sopena (INRIA/UPMC)
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)
131 / 151
J. Sopena (INRIA/UPMC)
132 / 151
Important
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)
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)
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)
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)
136 / 151
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)
137 / 151
J. Sopena (INRIA/UPMC)
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)
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)
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)
141 / 151
La taille dun tableau ne peut plus tre modie par la suite. Dimension du tableau : tableau.length
J. Sopena (INRIA/UPMC)
142 / 151
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)
143 / 151
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)
144 / 151
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)
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)
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)
147 / 151
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)
148 / 151
J. Sopena (INRIA/UPMC)
149 / 151
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)
150 / 151
J. Sopena (INRIA/UPMC)
151 / 151