0% ont trouvé ce document utile (0 vote)
2 vues212 pages

Introduction au langage Java et POO

Transféré par

kaoutherbenali03
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues212 pages

Introduction au langage Java et POO

Transféré par

kaoutherbenali03
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Module I5

- Langage Java -
Karima Boudaoud
IUT- R&T
Contenu du module
• Environnement de développement
• Introduction à Java (classes et objets)
• Héritage et polymorphisme
• Documentation en Java: Javadoc
• Classes abstraites, internes et interfaces
• Collections

Karima Boudaoud IUT GTR - Sophia Antipolis 2


Bibliographie (1)
• Ce cours a été préparé principalement à partir du support de
cours de Peter Sander, que je tiens à remercier très
particulièrement pour son aide et ses précieux conseils.
Autres supports d’où a été préparé ce cours:
l Les langages orientés objets, La programmation Java, cours de Frederic Drouhin,
IUT GTR Colmar
l Programmation orientée objet, cours de B. Botella, IUT GTR Chalon en Champagne
l Une introduction au langage Java, cours de Renaud Zigman, Xalto
l Java cours de Eric Lemaitre , CS Institut
l Supports de cours de Richard Grin, UNSA
l Introduction à Java cours de Blaise Madeline
l Une introduction au langage Java, documentation de Jbuilder
l IO Framework et Java distribué, cours de Stéphane Frénot, INSA de Lyon
l Programmation réseau en Java, cours de Patrick Itey, INRIA

Karima Boudaoud IUT GTR - Sophia Antipolis 3


Bibliographie (2)
m Pages Web
m [Link]
m Api
m Books
m Tutorial
m Livres
m Les livres sont toujours (pratiquement) une bonne façon de se documenter
m Préférer les livres d’initiation aux livres de référence plutôt destinés aux « programmeurs
confirmés »

m Livres de référence
m Java in a Nutshell (existe aussi en français)

m Livres d’initiation
m De manière générale tous les livres d’initiation

Karima Boudaoud IUT GTR - Sophia Antipolis 4


Environnement de
développement
Environnement de développoment (1)
• Editions de Java
ü il existe trois édition de Java qui sont la J2SE, la J2EE et la J2ME
ü la J2SE (Java 2 Standard Edition ) représente l’édition de base de Java
ü la J2EE (Java 2 Enterprise Edition ) qui propose des API supplémentaires
par rapport à l’édition J2SE pour pouvoir écrire des applications
distribuées. On y retrouve les notions d’EJBs, JSP et servlet
ü la J2ME (Java 2 Micro Edition ) qui a été défini pour faciliter l’écriture de
programmes embarqués sur des téléphones portables, des PDA, des
cartes à puce, etc… C’est une version allégée de la J2SE.

Richard Grin Univ. Karima Boudaoud IUT GTR - 6


Nice Sophia Antipolis Sophia Antipolis
Environnement de développement (2)
• Les principaux outils de base de la JDK
ü les principaux outils de java sont : javac, java, jdb,javap, javadoc
ü javac, représente le compilateur de java, c’est ce qui permet de compiler
un programme écrit en langage java
ü java est l’interpréteur de java, c’est la commande à utiliser pour exécuter
un programme java
ü jdb est le débogueur de java, c’est un l’outil utilisé pour débogué un
programme écrit en java
ü javap permet de déassembler un fichier compilé
ü javadoc est un générateur de documentation. Il permet de générer de la
documentation sur les programmes écrits en java

Eric Lemaître CS Karima Boudaoud IUT GTR - 7


Institut Copyright Sophia Antipolis
Environnement de développement (3)
• Le compilateur
ü le compilateur javac permet de compiler un programme java (i.e un code
source) en bytecodes java.
ü la commande à utiliser pour compiler un programme est
javac [options] [Link]
ü à l’issue de cette commande, le compilateur javac génère un fichier
[Link] afin qu’il soit ensuite interprété par la JVM (Java
Virtual Machine)
• L’interpréteur
ü l’interpréteur java permet d’exécuter une application écrite en langage
java (autre qu’une applet), plus spécifiquement un fichier
[Link] (i.e le java bytecodes).
ü par le biais de l’interpréteur java, on peut faire passer des arguments à
la fonction main
ü la commande à utiliser pour exécuter un programme est
java [options] Classname <args>

Eric Lemaître CS Karima Boudaoud IUT GTR - 8


Institut Copyright Sophia Antipolis
Environnement de développement (4)
• Le débogueur
ü le débogueur jdb permet de déboguer "en ligne » un programme
(une classe)
ü il n’est pas facile à utiliser
ü pour pouvoir déboguer un programme (i.e une classe) il faut
compiler la classe avec l’option -g
ü la commande à exécuter pour l’utiliser est
jdb Classname
ü Il existe une aide pour le débogueur. Pour accéder à cette aide, il
faut taper help ou ?
• Le générateur
ü le générateur de documentation javadoc permet de générer des
documents HTML équivalents aux documents Java de SUN (i.e
ayant la même structure)
ü la commande à exécuter pour l’utiliser est javadoc Classname

Eric Lemaître CS Karima Boudaoud IUT GTR - 9


Institut Copyright Sophia Antipolis
Environnement de développement (4)
• La JDK
ü on peut télécharger la JDK à partir du site de Sun :
[Link]
• Autres outils de développement
il existe plusieurs outils de développement dont la plupart
sont payants. Néanmoins voici quelques uns
ü Eclipse
Windows/Unix, gratuit, site : [Link]
ü JBuilder
Windows, payant mais il existe une version d’essai de 30 jours
ü Java Workshop
Windows/Unix, gratuit
ü Visual ++
Windows, payant

Karima Boudaoud IUT GTR - Sophia Antipolis 10


Environnement de développement (5)

• Variables d’environnement
ü pour pouvoir utiliser la JDK, il faut paramétrer le PATH pour l’outil Java et le CLASSPATH
pour les classes de l’utilisateur
ü PATH
§ il faut spécifier dans le PATH, le répertoire qui contient tous les outils de base de Java
c’est-à-dire javac, java,..
ü CLASSPATH
§ il faut spécifier dans le CLASSPATH, le chemin d’accès aux classes de l’utilisateur
§ pour Windows, il faut faire
set CLASSPATH=.;C:\Jdk\[Link];C:\Karima\mesClasses
§ pour Unix, il faut faire
CLASSAPTH=.:/home/Karima /mesClasses:/products/java/lib/[Link]

Karima Boudaoud IUT GTR - Sophia Antipolis 11


Introduction à la
programmation orientée
objet
Programmation Orientée Objet
• Intro
– Abstraction et encapsulation
– Objet
• instance de classe
• utilisation
– Classe
• type d'objet
• définition

15/09/99 © 1999 Peter Sander 13


Programmation Orientée Objet

• Idée clé
– Abstraction
• pour modéliser (représenter) la réalité

15/09/99 © 1999 Peter Sander 14


Programmation Orientée Objet
Langages et Abstraction (1)
machine réalité

assembleur C Fortran Lisp orientés objet


Prologue

Langages plus Langages plus


proches de la proches de la
machine réalité

15/09/99 © 1999 Peter Sander 15


Programmation Orientée Objet
Langages et Abstraction (2)
• La programmation structurée
– C, Pascal, Fortran, ...
– Programme : procédures – fonctions
– Que doit faire mon programme ?
• structure !

• La programmation orienté objet :


– Java, C++, Eiffel
– Sur quoi porte mon programme ?
• les entités manipulées

Frederic Drouhin, IUT GTR 16


Colmar
Programmation Orientée Objet
Abstraction

• Abstraction
– Représentation d’une réalité en code

MaVoiture {
couleur
abstraction vitesse
prix
...
}

15/09/99 © 1999 Peter Sander 17


Programmation Orientée Objet
Type Abstrait
...et objets spécifiques
• Idée de type d’objet
– une bicyclette
– mon vélo rouge
– des vacances – au Canada
– un éditeur de texte
– ... – Emacs
• Distinction importante
– Type d’objet
• on parle de « classe d’objet »
– Objet spécifique
• on parle d’ « instance de classe »

15/09/99 © 1999 Peter Sander 18


Programmation Orientée Objet
Objet
• Caractéristiques de la POO
– Il n’y a que des objets
• tout est objet (à part les primitifs en Java !)
– Un programme est composé d’objets
– Ces objets communiquent entre eux
• en s'envoyant des messages
– Chaque objet a son propre espace mémoire
• qui peut contenir d'autres objets
– Chaque objet a un type
• un objet est une instance d'un type (on dit aussi « classe »)
– Un message peut s'adresser à n'importe quel objet d'un type
donné

15/09/99 © 1999 Peter Sander 19


Programmation Orientée Objet
Type Abstrait
• Type abstrait possède
– État interne
– Actions
• En réalité
– Pour changer l'état, il faut appliquer une action

click
off on
15/09/99 © 1999 Peter Sander 20
Programmation Orientée Objet
Type Abstrait / Classe
• Accès aux variables via des méthodes
– Normalement aucun accès direct (data
hiding)
• En Java
état
– Des variables constituent l'état
– Les actions sont des méthodes
• c'est l'interface visible
variables

actions méthodes
15/09/99 © 1999 Peter Sander 21
Programmation Orientée Objet
Encapsulation
• En abstrait, classe Bébé encapsule état
et actions
– Pour changer l'état, il faut passer par
l'interface
• i.e., faire appel à une méthode message

donnerAManger

coucher hurler
faim

changer câliner
15/09/99 © 1999 Peter Sander 22
Programmation Orientée Objet
Encapsulation
• Un programme
– Un ensemble d'objets qui communiquent
entre eux et avec l’extérieur

O7
O1
O3
O0
O6
O5
O2
O4
15/09/99 © 1999 Peter Sander 23
Classes
L’Encapsulation

• Une classe comprend des membres


– ses variables d’instance
• son état interne
– ses méthodes
• des services qu’on peut lui demander
• L’encapsulation isole les variables
– Oblige à y accéder par un service

15/09/99 © 1999 Peter Sander 24


Classes
L’Encapsulation

getMarque()

setPrix() marque setMarque()


prix
getPrix() score getScore()

setScore()

15/09/99 © 1999 Peter Sander 25


Classes
L’Encapsulation

• Partie visible de l’objet est son interface


– Ses méthodes publiques
• public String getMarque() {…}
• public void setMarque(String marque) {…}
public double getPrix() {…}
• public void setPrix(double prix) {…}
• public double getScore() {…}
• public void setScore(double score) {…}
• Mais il y aussi... interface

15/09/99 © 1999 Peter Sander 26


Programmation Orientée Objet
Réutilisabilité
• Par composition
– Réutilisation d’un objet existant
– J’utilise ma voiture…
• …une banale Mercedes-Benz SL500
• Par héritage
– Définition d’un nouvelle classe d’objet basée sur
une classe existant
– La société AMG propose son modèle SL55…
• …une Mercedes-Benz SL500 légèrement modifiée

15/09/99 © 1999 Peter Sander 27


Programmation Orientée Objet
Classe et objet

• Une classe...
– est une usine à fabriquer des objets
– spécifie les méthodes des objets de ce
type
• Un objet…
– est une instance d’une classe

15/09/99 © 1999 Peter Sander 28


Programmation Orientée Objet
Classe et objet

• Classes
– Des objets vus de l'intérieur
• Point de vue du développeur
• Objets
– Des classes vues de l'extérieur
• Point de vue de l'utilisateur

15/09/99 © 1999 Peter Sander 29


Introduction au langage
Java
Hiérarchie (1)
Une ligne de code Java...

Project Hacks
package [Link];
public class HelloWorld {
...
public static void main(String[] args) {
...
[Link]("Ah que hello !");
...
}
...
}
15/09/99 © 1999 Peter Sander 31
Hiérarchie (2)
…est contenue dans une méthode...

Project Hacks
package [Link];
public class HelloWorld {
...
public static void main(String[] args) {
...
[Link]("Ah que hello !");
...
}
...
}
15/09/99 © 1999 Peter Sander 32
Hiérarchie (4)
…qui est contenue dans une classe...

Project Hacks
package [Link];
public class HelloWorld {
...
public static void main(String[] args) {
...
[Link]("Ah que hello !");
...
}
...
}
15/09/99 © 1999 Peter Sander 33
Hiérarchie (5)
…qui appartient a un package…

Project Hacks
package [Link];
public class HelloWorld {
...
public static void main(String[] args) {
...
[Link]("Ah que hello !");
...
}
...
}
15/09/02 © 1999-2002 Peter Sander 34
Hiérarchie (6)
…qui appartient a un projet

Project Hacks
package [Link];
public class HelloWorld {
...
public static void main(String[] args) {
...
[Link]("Ah que hello !");
...
}
...
}
15/09/02 © 1999-2002 Peter Sander 35
Hiérarchie (7)

TPJava
CCJ

decision type ccj

class class class


A B AA class
B
...
meth00
mith1
meth0 muthN
methN
meth4
meth666
meth1

methyl

15/09/99 © 1999 Peter Sander 36


Hiérarchie (8)
• Projet
ü Organise plusieurs package autour d’un thème
• Package
ü Organise plusieurs classes autour d’une
fonctionnalité
• [Link]
• [Link]
• [Link]
• [Link]
ü Nom en minuscules

8/09/00 © 1999-2000 Peter Sander 37


Hiérarchie (9)
• Classe
ü Type abstrait
ü Contient
• variables d’instance (données)
– (aussi variables de classe)
• méthodes (actions)
ü Sert de gabarit pour instanciation (création) d’objets
• les variables décrivent l’état de l’objet
• les méthodes présentent l’interface publique de l’objet

15/09/99 © 1999 Peter Sander 38


Hiérarchie (10)
• Classe
ü Nom court commence par majuscule
• System
• HelloWorld
ü Nom complet comprend le package
• [Link]
• [Link]
• Méthode
ü Nom commence par minuscule
• main

15/09/02 © 1999-2002 Peter Sander 39


Éléments du Langage
Syntaxe
Éléments du Langage
• Typage
ü Primitif
ü Référencé
ü Collections
• Décisions
• Itérations
• Méthodes

15/09/99 © 1999 Peter Sander 41


Les Types
Fondamentaux
Types Primitifs
Commentaires

ü bloc
/* le code qui suit fait des choses tellement
intéressantes qu’il faut plusieurs lignes rien
que pour le décrire */
int france = 3;
int brazil = 0;

ü fin de ligne
int sénégal = 1; // pas de commentaire
int france = 0; // non plus

15/09/02 © 1999-2002 Peter Sander 43


Types Primitifs
Variables (1)
• Une variable, c’est une case mémoire
• Il faut
– un nom
– un type
• Java est un langage fortement typé

14/09/01 © 1999-2001 Peter Sander 44


Types Primitifs
Variables (2)
• Nom de variable
– Constitué de
• lettres : a z E R t Y...
• nombres : 3 1 4 5...
• certains autres caractères : _
– Commence par lettre (minuscule par
convention)

15/09/02 © 1999-2002 Peter Sander 45


Types Primitifs
Variables (3)
int ru496, point3, maVariableAMoi; // ok
int 123hop, pour%cent; // non !
int moiMême; // prudence
int mes_notes, Pi; // oui, mais non-
standard
int mesNotes; // mieux, usage standard

– Min- et majuscules sont différents

int moiMeme, moimeme, Moimeme;

15/09/02 © 1999-2002 Peter Sander 46


Types Primitifs
Variables (4)
• Il faut initialiser les variables…
int qiFilles = 120;
int qiGarcons; // alors, c ’est combien ?
double qiMoyen = (nombF * qiFilles + nombG *
qiGarcons) / (nombF + nombG)
• …sinon (en Java)
– initialisation par défaut (variables d’instance)
– erreur de compilation (variables locales)
• …sinon (en bien d’autres langages)
– une valeur aléatoire

15/09/99 © 1999 Peter Sander 47


Types Fondamentaux

• Taxonomie Types « référencés »


• tableaux
Types « primitifs » • classes
• caractères String
• numériques
int
double
• logique
boolean

types fondamentaux
14/09/01 © 1999-2001 Peter Sander 48
Types Fondamentaux
Types Primitifs
• Numérique
– int
– double

15/09/99 © 1999 Peter Sander 49


Types Primitifs
Numérique (1)
public class RecetteRU {
int portionsFrites = 120;
int nombreSteackes = 145;
double prixFrites = 10.50;
double prixSteacke = 7.25;

double totale = (portionsFrites *


prixFrites) + (nombreSteackes *
prixSteacke);
}
15/09/99 © 1999 Peter Sander 50
Types Primitifs
Numérique (2)
public class RecetteRU {
int portionsFrites = 120;
int nombreSteackes = 145;
...
}

15/09/99 © 1999 Peter Sander 51


Types Primitifs
Numérique (3)
public class RecetteRU {
int portionsFrites = 120;
int nombreSteackes = 145;

déclaration de type

15/09/99 © 1999 Peter Sander 52


Types Primitifs
Numérique (4)

public class RecetteRU {


int portionsFrites = 120;
int nombreSteackes = 145;

nom de variable

15/09/99 © 1999 Peter Sander 53


Types Primitifs
Numérique (5)

public class RecetteRU {


int portionsFrites = 120;
int nombreSteackes = 145;

initialisation

15/09/99 © 1999 Peter Sander 54


Types Primitifs
Numérique (6)

public class RecetteRU {


int portionsFrites = 120;
int nombreSteackes = 145;

fin d’expression

15/09/99 © 1999 Peter Sander 55


Types Primitifs
Numérique (7)
int pieces10centimes = 5;
int pieces20centimes = 12;

double valeurJaunes = pieces10centimes * 0.1


+ pieces20centimes * 0.2;
• Les entiers int
– Des entités indivisibles
• nombres cardinaux ou ordinaux
• Les flottants double
– Des entités d’échelle continue
• nombres réels

14/09/01 © 1999-2001 Peter Sander 56


Types Primitifs
Numérique (8)
• Tous les types d’entiers
byte 8 bit -128 .. 127
short 16 bit -32768 .. 32767
int 32 bit -21474483648 .. 21474483647
long 64 bit -9223372036854775808 .. 9223372036854775807
• Initialisés à 0 par défaut
• Entiers sont int par défaut
int i = -42;
int total = i + 17; // 17 est un int
byte botal = i * 10; // faux résultat

15/09/99 © 1999 Peter Sander 57


Types Primitifs
Numérique (8)
• Tous les types de flottants
float 32 bit ±3.40283247E+38 .. ±1.40239846E-45
double 64 bit ±1.79769313486231570E+308 ..
±4.94065645841246544E-324
• Initialisés à 0.0
• Flottants sont double par défaut
double d = 3.14159; // ok
float f = 3.14159; // nonono !
float x = 3.14159f; // ok, faut spécifier
• double est à préférer à float

15/09/99 © 1999 Peter Sander 58


Types Primitifs
Numérique (9)
• Conversion automatique
– permis s’il n’y a pas de perte de précision
short s = -39;
int t = s + 356; // ok 16 bits -> 32 bits
s = t - 12; // nonono 32 bits -> 16 bits
• Conversion manuelle (cast)
int t = 356;
short s = (short) (t - 30); // oui,c’est exprès
t = (int) 365.25; // oui, sous ma responsabilité

15/09/99 © 1999 Peter Sander 59


Types Primitifs
Logique

• Le type boolean
• Valeurs
true
false

• Traité plus tard (voir Décisions)

15/09/99 © 1999 Peter Sander 60


Types Primitifs
Constantes (1)
static final double L_PAR_100KM = 8.2;
static final double PRIX = 5.8;
double km = 437. 3;
[Link](km / 100.0 * L_PAR_100KM *
PRIX);

• Sont des constantes


L_PAR_100KM
PRIX // si seulement c'était vrai...

14/09/01 © 1999-2001 Peter Sander 61


Types Primitifs
Constantes (2)
• Par convention, nom tout en majuscules

static final double L_PAR_100KM = 8.2;


static final double PRIX = 5.8;

• Mot clé final interdit réaffectation de valeur


– Mot clé static, nous le verrons plus tard
static final double PRIX = 5.8;
PRIX = 6.2; // nonono

15/09/99 © 1999 Peter Sander 62


Types Primitifs
Constantes (3)
• Ne jamais utiliser des nombres magiques (magic
numbers)
if (temp > 41) {
panique();
}

• Préférez une constante


static final int JOURS_PAR_AN = 365;
static final int NB_COLONNES = 4;
static final double TEMP_NORMALE = 37.0;

15/09/99 © 1999 Peter Sander 63


Types Primitifs
Arithmétique (1)

• Opérations élémentaires

addition a + b
soustraction i - j
multiplication quant * prix
division qi / nbCafes
modulo qi % nbCafes
exponentiation [Link](x, n)

15/09/99 © 1999 Peter Sander 64


Types Primitifs
Arithmétique (2)

• Affectation

t = a + b - c * d / e; // a + b - ((c * d) / e)
t = a + (b - c) * d / (e - 1);

• Utiliser () pour regrouper des termes

15/09/99 © 1999 Peter Sander 65


Types Primitifs
Arithmétique (3)

• Incrément / décrément
– l’expression du type...

heure = heure + 1;

– ...est si banale qu’il y a le raccourci

heure++;

15/09/99 © 1999 Peter Sander 66


Types Primitifs
Arithmétique (4)
int i = 0; int i = 0;
i++; i = i + 1;
int t = i++; int t = i;
i = i + 1;
int s = ++i; équivalent à i = i + 1;
int s = i;
int r = --i; i = i - 1;
int r = i;
r += i; r = r + i;

s *= i; s = s * i;
i /= 2; i = i / 2;

15/09/99 © 1999 Peter Sander 67


Types Primitifs
Arithmétique (5)
• Autres fonctions
[Link](x) sinus x (en radians)
[Link](x) cosinus x (en radians)
[Link](x) tangente x (en radians)
[Link](x) ex
[Link](x) ln x, x > 0
[Link](x) plus petit entier  x
[Link](x) plus grand entier  x
[Link](x) valeur absolue |x|

15/09/99 © 1999 Peter Sander 68


Types Fondamentaux
String (1)
• Chaîne de caractères entourée de ""
String nom; // déclaration
nom = "Jacques"; // affectation
String unAutre = "Nicolas"; //décl. & affect.
unAutre = ""; // String vide
– Méthode length() donne nb. de caractères

[Link]([Link]());
-> 7
[Link]([Link]());
-> 0

15/09/99 © 1999 Peter Sander 69


Types Fondamentaux
String (2)
• Entrée au terminal ([Link] importée)
String nom = [Link]();//un seul
mot
<- Fox Mulder
[Link](nom);
-> Fox
[Link](); // deuxième mot
[Link](nom);
-> Mulder
nom = [Link](); //une ligne entière
<- Dana Scully
[Link](nom);
-> Dana Scully
15/09/99 © 1999 Peter Sander 70
Types Fondamentaux
substring()
• substring(debut, finPlus) extrait un
morceau

String salut = "Hello, life!";


String antiSalut = [Link](0, 4);
[Link]("Life is " + antiSalut);
-> Life is Hell

– debut est le premier caractère à prendre


– finPlus est le premiere caractère à ne pas
prendre

15/09/99 © 1999 Peter Sander 71


Types Fondamentaux
substring()

0 1 2 3 4 5 6 7 8 9

debut finPlus
• Premier élément du String est l’élément 0
• length() est dernier élément - 1
– [Link]() == finPlus - debut

15/09/99 © 1999 Peter Sander 72


Types Fondamentaux
String (3)
• Toute entrée au terminal est un String
String nom = "Nicolas";
nom = "Jacques";
nom = [Link](); // un seul mot
<- Fox Mulder
[Link](nom);
-> Fox
nom = [Link](); //une ligne
entière
<- Dana Scully
[Link](nom);
-> Dana Scully

15/09/99 © 1999 Peter Sander 73


Types Fondamentaux
String (4)

• Pour avoir un numérique

int promo = [Link]();


double moyenne = [Link]();

15/09/99 © 1999 Peter Sander 74


Types Fondamentaux
String (5)

• L’opérateur « + » enchaîne deux String

String s1 = "Ah que ";


[Link](s1 + "coucou");
-> Ah que coucou

15/09/99 © 1999 Peter Sander 75


Types Fondamentaux
String (6)

• Opérateurs
[Link]() Longueur de s
[Link](i, j) Sous-chaÓne des de pos. i ß j-1
[Link]() s toute en majuscules
[Link]() s toute en minuscules
"" + x Le nombre x en caractËres
[Link](s) double reprÈsentÈ pars
[Link](s) int reprÈsentÈ pars

15/09/99 © 1999 Peter Sander 76


Types Fondamentaux
Mise en Forme

• Caractères spéciaux
\n ß la ligne
\t tab

• Sont équivalents
[Link]("Ah que coucou");
[Link]("Ah que coucou\n");

15/09/99 © 1999 Peter Sander 77


Les Décisions
Décisions
Typage

• Type boolean
– Prend des valeurs
• true
• false

boolean javaEstFacile = true;

21/09/02 © 1999-2002 Peter Sander 79


Décisions (1)
• Interruption de la progression linéaire
du programme suite à une décision
– Basée sur une condition qui peut être
• true
• false
condition false
?

true

expressions

21/09/01 © 1999-2001 Peter Sander 80


Décisions (2)
• Conditions basées sur des opérateurs
relationnels
– e.g. « égal à », « supérieur à »…
• Opérateurs relationnels combinées par
opérations logiques
– e.g. « et », « ou »…
• Traduction en code par des structures
– if
– while
– for
– do

21/09/01 © 1999-2001 Peter Sander 81


Décisions
Opérateurs Relationnels

Math Java Description


> > SupÈrieur ß
 >= SupÈrieur ou Ègal ß
< < InfÈrieur ß
<= InfÈrieur ou Ègal ß
= == EgalitÈ
 != InÈgalitÈ

15/09/99 © 1999 Peter Sander 82


Décisions
if
if (condition) {
expressions
false
condition
}
?
stopVoiture();
if (piecesJaunes <= 0) {
baisseVitre(); true
[Link](
"Désolé, mec !"); expressions
leveVitre();
}
demarreEnTrombe();

15/09/99 © 1999 Peter Sander 83


Décisions
if…else
if (condition) { true condition false
?
oui expressions
} else {
non expressions oui non
expressions expressions
}

if (r >= 0) {
sqrt = [Link](r);
} else {
[Link]("Erreur");
}

15/09/99 © 1999-2000 Peter Sander 84


Décisions
Égalité – le Piège du Débutant
• Lequel est le bon ?
if (vitesse = 160) {
• Evidemment...
points == -8;
}
if (vitesse == 90) {
if (vitesse == 130) { points = 0;
points = -6; }
}
• Ne pas confondre
if (vitesse = 110) { – Affectation =
points = -4;
– Égalité ==
}

21/09/01 © 1999-2001 Peter Sander 85


Décisions
Opérateurs Relationnels
• Comparaison des String
String nom = "Fred";
if ([Link]("Frod")) {
[Link]("Alors, Frod…");
}

– C’est la méthode equals() appliquée à une


variable de type String
false
– Caractère par caractère : F r e d

F r o d
15/09/99 © 1999 Peter Sander 86
Décisions
Opérations Logiques
• Et : &&
• Ou : ||
• Négation : !
• Ordre de priorité
– ! précède && précède ||
– a || !b && c est équivalent à a || ((!b) && c)
– () peuvent rendre l’expression plus claire

21/09/01 © 1999-2001 Peter Sander 87


Décisions
&&
a b a && b
true true true
true false false
• Fonctionnalité false ? false

int vent = [Link]();


String type = "Ouragan";

if (vent < 64 && vent >= 56) {


type = "Violente tempête";
}
if (vent < 56 && vent >= 48) {
type = "Tempête";
}

15/09/99 © 1999 Peter Sander 88


Décisions
||
a b a || b
true ? true
false true true
• Fonctionnalité false false false

int beaufort = [Link]();

if (beaufort < 0 || beaufort > 12) {


[Link]("Entrée erronnée");
} else {
fait quelquechose
}

15/09/99 © 1999 Peter Sander 89


Décisions
!
a !a
true
• Fonctionnalité false true

int beaufort = [Link]();

if (!(beaufort > 9)) {


[Link]("Sortons");
} else {
[Link]("Au plumard");
}

21/09/01 © 1999-2001 Peter Sander 90


Décisions
Variables Logiques
• Type fondamental boolean

boolean beau = true;


boolean riche = true;

if (beau && riche) {


[Link]("Ça vaut mieux
!");
}
• Valeurs possibles : true false
21/09/01 © 1999-2001 Peter Sander 91
L’Itération
Itération
while (1)
• Boucle tant que (while) une condition est
vraie

while (condition) {
false
expressions condition
vrai
} ?
true

expressions

15/09/99 © 1999 Peter Sander 93


Itération
while (2)

• La boucle la plus souvent rencontrée

i = valInit;
while (i <= valeurFin) {
expressions
i++;
}
– Si souvent qu’elle s’écrit...

15/09/99 © 1999 Peter Sander 94


Itération
for (1)
for (i = start; i <= end;
i++) {
expressions i = start

}
false i<=end
?

true i++

expressions

15/09/99 © 1999 Peter Sander 95


Itération
for (2)
• Exemple - pour calculer n ! = 1  2  3 ··· n

public int factoriel(int n) {


int facteur;
int produit = 1;
for (facteur = n; facteur > 0; facteur--)
{
produit = produit * facteur;
}
return produit;
}

15/09/99 © 1999 Peter Sander 96


Itération
do
do {
expressions
} while (condition);

expressions

true
condition
vrai
?
false

15/09/99 © 1999 Peter Sander 97


Itération
Conditions
• Conditions de bouclage
– Compteur
• i < 100
– Sentinelle
• valeurEntree != 0
– Flag
• fait != true
– Borne
• montant < 0.5

21/09/01 © 1999-2001 Peter Sander 98


Itération
Compteur

• Passer par toutes les valeurs

for (int i = 1; i <= 100; i++) {


[Link](i);
}

21/09/01 © 1999-2001 Peter Sander 99


Itération
Sentinelle
• En attente d’une condition particulière
do {
int valeurEntree =
[Link]();
if (valeurEntree != -1) {
fait quelquechose
}
} while (valeurEntree != -1)

21/09/01 © 1999-2001 Peter Sander 100


Itération
Flag

• Signale une condition

boolean fait = false;


while (!fait) {
essaie de faire le nécessaire
}

21/09/02 © 1999-2002 Peter Sander 101


Itération
Borne

• Limite à ne pas dépasser

double montant = soldeInitiale;


while (montant > 0.5) {
dépenser (presque) sans compter
}

21/09/01 © 1999-2001 Peter Sander 102


Tableaux
Structures de Données
• Une variable de type primitif
– Stockage d’un élément d’un type donné
• int, double, char, boolean, String…
• Un tableau
– Stockage d’éléments tous du même type
• int[], double[], char[], boolean[],
String[]…
• Une collection d’objets
– Stockage divers et varié
• Vector, ArrayList, HashMap, LinkedList…

23/09/02 © 2002 Peter Sander 104


Stockage d’Éléments Similaires
• Peu pratique en variables…
String dept01 = "Ain";
String dept02 = "Aisne";

String dept95 = "Val d’Oise";
• Mieux en tableau…
String[] dept = {"Québec","Ain","Aisne",
…,"Val d’Oise"};

23/09/02 © 1999-2002 Peter Sander 105


Tableaux

• Array
– Stockage d’éléments tous du même type
– Structure à part entière
– Un tableau est un objet référencé
– Assimilable à une classe
– Création en trois étapes
1. déclaration
2. allocation de mémoire
3. initialisation des éléments

23/09/02 © 1999-2002 Peter Sander 106


Tableaux
Déclaration
• Indiqué par []
– Deux possibilités
type[] nom;
type nom[];
int[] tableau1;
int tableau2[];
int[][] matrice; // tableau bidimensionnel
int[] x, y[]; //équivalent à int x[],y[][];
int tab[10]; // ne compile pas

15/09/99 © 1999 Peter Sander 107


Tableaux
Allocation
• Alloué dynamiquement
– à l'aide du mot clé new
int[] tableau1; // déclaration
tableau1 = new int[10]; // allocation
int tableau2[]; // déclaration
tableau2 = new int[35]; // allocation
int[][] matrice; // déclaration
matrice = new int[2][4]; // allocation
int[] x, y[]; // déclaration
x = new int[5]; // allocation
y = new int[3][2]; // allocation
24/09/01 © 1999-2001 Peter Sander 108
Tableaux
Déclaration et Allocation
• Peut combiner déclaration et allocation

int[] tableau1 = new int[10];


int tableau2[] = new int[35];
int[][] matrice = new int[2][4];
int[] x = new int[5];
int[] y[] = new int[3][2];

15/09/99 © 1999 Peter Sander 109


Tableaux
Initialisation (1)

• Chaque élément initialisé séparément

int[] tablo = new int[10];


for (int i = 0; i < 10; i++) {
tablo[i] = i;
}

15/09/99 © 1999 Peter Sander 110


Tableaux
Initialisation (2)
• Valeurs initiales peuvent être énumérées

int[] joursParMois = {31, 28, 31,


30, 31, 30, 31, 31, 30, 31, 30, 31};

– Expédie déclaration, allocation,


intialisation

24/09/01 © 1999-2001 Peter Sander 111


Tableaux
De String

• Pareil que pour tableaux de primitifs

String[] jours = {"lundi",


"mardi", "mercredi", "jeudi",
"vendredi", "samedi",
"dimanche"};

15/09/99 © 1999 Peter Sander 112


Tableaux
Accès
• Indexage à partir de 0
• Accès aux éléments par []
tablo[i] i = 0..[Link] - 1
• Nombre d’éléments donné par la variable
[Link]
for (int i = 0; i < [Link]; i++)
{
[Link](tablo[i] + " ");
tablo[i] = -tablo[i];
}
24/09/01 © 1999-2001 Peter Sander 113
Tableaux
Accès - l’Erreur du Débutant

• Y a-t-il un problème ?

for (int i = 0; i <= [Link]; i++) {


[Link](tablo[i] + " ");
}

• Le compilateur balance
[Link]:
10 at [Link]([Link])

15/09/99 © 1999 Peter Sander 114


Tableaux
En Mémoire
• Variable type référencée
• Variable type primitive String titi = "cinq";
int toto = 5; • Case mémoire contient
• Case mémoire contient référence de la valeur
la valeur • Suivre la référence pour
trouver la valeur
toto 5

titi

cinq

23/09/02 © 1999-2002 Peter Sander 115


Tableaux
Copier un Tableau
• Copie d’un tableau ou une partie de tableau
dans un autre tableau
– [Link](...)

• Il s’agit d’une copie « de surface »


– Les références aux objets sont copiées
• pas les objets
• les objets seront donc partagés

15/09/99 © 1999 Peter Sander 116


Classes et Objets
Programmation Orientée Objet
Création d’objet
• Cas spécial : String
String maCaisse = "R5";
String maVoiture = new String("Z4");
maVoiture = new String("DB5");

• Classe de type Toto


Toto unToto = new Toto();
Toto unAutreToto = new Toto(17, "euh");

15/09/99 © 1999 Peter Sander 118


Programmation Orientée Objet
Création d’objet
• Création d’objet
– String
String maCaisse = "R5";
String maVoiture = new String("Z4");
maVoiture = new String("DB5");

affectation création d’objet


– Toto
Toto unToto = new Toto();

déclaration de variable

29/09/02 © 1999-2002 Peter Sander 119


Programmation Orientée Objet
Création d’objet

int valeurNutritive = 0;

création
déclaration

Produit diner = new Produit(0,"BigMac");


création par
constructeur

29/09/02 © 1999-2002 Peter Sander 120


Programmation Orientée Objet
Création d’objet
• Signature du constructeur dans la documentation
– public Time(int y, int m, int d, int hr, int min, int sec)

• Donc on peut créer Time

Time millenium = new Time(2000, 1, 1, 0, 0, 0);

29/09/02 © 1999-2002 Peter Sander 121


Programmation Orientée Objet
Utilisation d’objet
• Invocation de méthode
[Link]();
• Méthodes d’accès
– Accesseur (getter)
[Link]();
– Mutateur (setter)
[Link]();
Time ahui = new Time(); // créaton
int annee = [Link]();// utilisation

15/09/99 © 1999 Peter Sander 122


Classe et Objet
• Le rêve Voiture... • La réalité
– Une classe – Un objet
public class Voiture { public class Toto {
String marque = "Citroën"; ...
String modele = "2CV"; public static void
Color couleur = [Link]; main(String[]
public void demarre() { args) {
... Voiture tire = new
Voiture("Porsche","911",
}
[Link]);
public void accelere(int
v) { [Link]();
... [Link](260);
} ...
... }
} }
15/09/99 © 1999 Peter Sander 123
Variables

• « d’Instance »
– Contenues :
• dans une classe
• dans aucune méthode
– Représentent l’état interne d’un objet
• « Locales »
– Contenues
• dans une méthode
– Utilisées par la méthode pendant son exécution

15/09/99 © 1999 Peter Sander 124


Variables
d’Instance
public class Voiture {
String marque = "Citroën";
String modele = "2CV";
Color couleur = [Link];

public void demarre() {


...
}

public void accelere(int v) {


...
}
...
}

15/09/99 © 1999 Peter Sander 125


Variables
Locales
public class Toto {
...
public static void main(String[] args) {
Voiture tire = new Voiture(
"Porsche",
"911",
[Link]);
[Link]();
[Link](260);
...
}
}

15/09/99 © 1999 Peter Sander 126


Classe et Objet

JVM exécute public class Voiture {


String marque = "Citroën";
public class Toto {
String modele = "2CV";
...
Color couleur = [Link];
public static void

main(String[] args) { public Voiture(…) {


Voiture tire = new ...
Voiture("Porsche","911",
}
...);
...
[Link]();
}
[Link](260);
...
} Toto utilise Toto demande une
} l’objet nouvelle instance

15/09/99 © 1999 Peter Sander 127


Affectation
public class SalarieTest {
public static void main(String[] args) {
Salarie fred = new Salarie(
"BABASSEUR, Fred", 24000);
double nouvPaie = [Link]() + 3000;
[Link](nouvPaie);
[Link]("Nom : " + [Link]());
[Link] ("Paie : "+ [Link]());
}
}

BABASSEUR, Fred
24000
27000

15/09/99 © 1999 Peter Sander 128


Affectation
public class SalarieTest {
public static void main(String[] args) {
Salarie fred = new Salarie(
"BABASSEUR, Fred", 24000);
Salarie boss = fred;
[Link](60000);
}
}

BABASSEUR, Fred
24000
60000

15/09/99 © 1999 Peter Sander 129


Programmation Orientée Objet
Copie de Type Primitif
• Pour types primitifs

int a = 7;
int b = a;
a = 32;
[Link](a + ", " + b);
-> 32, 7
a 32
7

b 7

15/09/99 © 1999 Peter Sander 130


Programmation Orientée Objet
Copie de Type Référencé
• Pour types référencés
Point p = new Point(12, 34);
Point q = p;
[Link](56, 78);
[Link](p + ", " + q);
-> Point[x=68.0,y=112.0],
Point[x=68.0,y=112.0]
p 12, 112
68, 34

q
15/09/99 © 1999 Peter Sander 131
Programmation Orientée Objet
clone de Type Référencé
• Pour types référencés
Point p = new Point(12, 34);
Point q = (Point) [Link]();
[Link](56, 78);
[Link](p + ", " + q);
-> Point[x=68.0,y=112.0],
Point[x=12.0,y=34.0]
p 12, 112
68, 34

q 12, 34
15/09/99 © 1999 Peter Sander 132
Les Méthodes
Méthodes
Points de Vue (1)
• Utilisation d’une • Définition d’une
méthode méthode

... ...
[Link]("Ah public void
que" + " hello world maMethode(byte qi)
!"); {
... ...
}
...

28/09/02 © 1999-2002 Peter Sander 134


Méthodes
Points de Vue (2)
• Une ligne de code Java…est contenue dans une
méthode...
package [Link];

public class HelloWorld {


...
public static void main(String[] args) {
...
[Link]("Ah que" +
" hello world !");
...
}
...
}

29/09/02 © 1999-2002 Peter Sander 135


Méthodes
Boîte Noir
• Une méthode fournit un service
– Nous savons ce qu’elle fait
– Nous ignorons comment elle le fait

r2 = b * b - 4 * a * c;
r = [Link](r2);
soln1 = (-b + r) / (2 * a);
soln2 = (-b - r) / (2 * a);

Calcul de la
racine carrée Mais selon quel
algorithme ?
15/09/99 © 1999 Peter Sander 136
Méthodes
Entrées / Sorties

• Peut prendre zéro ou plusieurs paramètres


en entrée

r = [Link](r2);
r = [Link](r2, 2);
[Link]("Racine = " + r);

• Zéro ou une seule valeur de retour

29/09/02 © 1999-2002 Peter Sander 137


Méthodes
Création - Structure

Signature

public static void main(String[] args) {



[Link]("Bienvenue au cauchemar");

}

Corps
29/09/01 © 1999-2001 Peter Sander 138
Méthodes
Signature
• La signature décrit une méthode
– Nom
– Nombre et type des paramètres
• D’autres infos n’en font pas partie
– Niveau d’accès
– Autres mots clé
– Type de valeur retournée

15/09/99 © 1999 Peter Sander 139


Méthodes
Signature

Nom Nombre et type


de paramètres

public static void main(String[] args) {


..
}

29/09/01 © 1999-2001 Peter Sander 140


Méthodes
D’autres Informations

Mots
clé

public static void main(String[] args){


}
Niveau
d’accès Type de valeur
retournée
29/09/01 © 1999-2001 Peter Sander 141
Méthodes
Passage de Paramètres
• Création d ’une méthode
• Utilisation d'une
méthode public void fou(boolean
… dingue) {
boolean bilan = if (dingue) {

[Link]( [Link]("Apte");
);
} else {
fou(bilan);
fou(false);
[Link]("Inapte")

;
}
Comment lier ? }

29/09/01 © 1999-2001 Peter Sander 142


Méthodes
Passage de Paramètres
• Java passe des paramètres par valeur
– Pass by value
• D'autres langages permettent le
passage par référence
– Pass by reference

29/09/01 © 1999-2001 Peter Sander 143


Méthodes
Passage par Valeur (1)

...
tauxAnnuel = 6;
b = soldeFutur(tauxAnnuel); p reçoit la valeur 6
... (la valeur de tauxAnnuel)

public double soldeFutur(double p) {


...
...
}

15/09/99 © 1999 Peter Sander 144


Méthodes
Passage par Valeur (2)

...
tauxAnnuel = 6;
b = soldeFutur(tauxAnnuel);
...
public double soldeFutur(double p) {
double r = 1000 * [Link](1 + p / (12*100),
b reçoit la valeur
12*10);
du résultat
return r;
}

15/09/99 © 1999 Peter Sander 145


Méthodes
Passage par Valeur (3)

p 6

tauxAnnuel 6
rÈponse

rÈponse

Mémoire soldeFutur

15/09/99 © 1999 Peter Sander 146


Méthodes
Passage par Valeur (4)
• Modifier un paramètre dans une méthode…
public void compteEnBanque(double solde) {
double solde2 = solde * solde;
solde = solde2;
}
...n’a aucun effet à l’extérieur

double monSolde = 12.34;


compteEnBanque(monSolde);
[Link](monSolde);
-> 12.34

15/09/99 © 1999 Peter Sander 147


Méthodes
Passage par Valeur (5)

solde 12.34

monSolde 12.34

Mémoire soldeFutur

15/09/99 © 1999 Peter Sander 148


Méthodes
Passage par Valeur (5)

solde 12.34

monSolde 12.34
152.28

Mémoire soldeFutur

15/09/99 © 1999 Peter Sander 149


Méthodes
Passage par Valeur (5)

solde 152.28

monSolde 12.34
152.28

Mémoire soldeFutur

15/09/99 © 1999 Peter Sander 150


Méthodes
Passage de Type Référencé
• Java passe les types référencés
par…valeur
• Subtilité - valeur passée est la
référence !

15/09/99 © 1999 Peter Sander 151


Méthodes
Passage de Type Référencé (1)
String[] pablo = [Link]("Séjour
{"Málaga", "La final : " + pablo[4]);
Corogne", "Barcelone", -> Cannes
"Vallauris", "Cannes"};
artiste(pablo);
public void
artiste(String[]
sejour) { [Link]("Séjour
... final : " + pablo[4]);
sejour[4] = "Mougins"; -> Mougins
...
} • Pourquoi ça change ?

29/09/02 © 1999-2002 Peter Sander 152


Méthodes
Passage de Type Référencé (2)
• La méthode reçoit la valeur de la
référence
• Une méthode peut agir sur l’objet
sejour

pablo

sejour[4] = "Mougins";
0 Malága
1 La Corogne
2 Barcelone Mémoire artiste
3 Vallauris
4 Mougins
Cannes
29/09/01 © 1999-2001 Peter Sander 153
Méthodes
Passage de Paramètres
• Java n’ayant pas de pointeurs...
– …n’a pas de passage de primitifs par
référence
• Mais, Java a des références sur des types…
…référencés (des objets)
– Nous les rencontrerons plus tard...
• En Java,
– on ne dit pas « pointeur »
– on dit « référence »

15/09/99 © 1999 Peter Sander 154


Méthodes
Le Retour
• Valeur retournée par mot clé return
• return termine immédiatement la méthode
public int beaufort(int vent) {
if (vent >= 64) {
return 12;
}
else if (vent >= 56) {
return 11;
}
else if (vent >= 48) {
...
}
else {
return 0;
}
}

29/09/02 © 1999-2002 Peter Sander 155


Méthodes
Le Retour de l’Erreur du
Débutant
• return est un mot clé et non un appel
de méthode

public String inelegant() {


return("Encore un !");
}

29/09/01 © 1999-2001 Peter Sander 156


Méthodes
Le Retour
• Valeur de retour n’est pas obligatoire
public void beaufort(int vent) {
if (vent >= 64) {
[Link]("Ouragan");
return;
} return
else if (vent >= 56) {
... explicite
}
[Link]("Le calme plat");
}

return
15/09/99 © 1999 Peter Sander implicite 157
Méthodes
Le Retour
• Une fois promis, il faut livrer…

public boolean dansIntervalle(int val,


int min, int max) {
if (val >= min && val <= max) {
return true;
}
}

Et si la condition
était fausse ?
15/09/99 © 1999 Peter Sander 158
Méthodes
Le Retour

• Une fois promis, il faut livrer…

public boolean dansIntervalle(int val,


int min, int max) {
return val >= min && val <= max;
}

15/09/99 © 1999 Peter Sander 159


Méthodes
Typage
• Paramètres doivent s’accorder avec signature
public boolean dansIntervalle(int val,
int min, int max) {
return val >= min && val <= max;
}

– Sinon, utilisation erronnée


...
dansIntervalle(3.5, 3, 4);
...

15/09/99 © 1999 Peter Sander 160


Méthodes
Typage

• Valeur retournée doit s’accorder avec


déclaration

...
double malheur = [Link]();
int malheurAbs = [Link](malheur);
...

15/09/99 © 1999 Peter Sander 161


Méthodes
Coercition (Cast)
• Changement explicite du type

...
double malheur = [Link]();
int malheurAbs = (int) [Link](malheur);
...

Je, soussigné Machin, m’engage


sur l’honneur à prendre toute
responsabilité pour cette affectation
15/09/99 © 1999 Peter Sander 162
Méthodes
Coercition (Cast)
• Traitement spéciale de String
– l’opérateur + enchaîne 2 String

String msg = [Link]();


[Link]("J’ai reçu " + msg);

– + convertit ses arguments en String

String racine2 = "" + [Link](2);

15/09/99 © 1999 Peter Sander 163


Méthodes
Variables

• Déclarées dans une méthode


– Variables locales à la méthode
– Faut les initialiser, sinon…
– Durée de vie limité (automatic duration)
• créées en début d’exécution de la méthode
• existent le temps d’exécution de la méthode
• disparaissent au return de la méthode
– Visibilité limitée

29/09/02 © 1999-2002 Peter Sander 164


Méthodes
Variables Locales

public double compteEnBanque(double


solde) {
double gnouveau;
if (solde >= 0) {
gnouveau = solde * solde;
}
return gnouveau;
Variable locale
}

15/09/99 © 1999 Peter Sander 165


Méthodes
Variables Locales
public double compteEnBanque(double solde) {
double gnouveau;
if (solde >= 0) {
gnouveau = solde * solde;
}
return gnouveau;
}
• Où est le problème ?
– Si solde < 0, gnouveau a quelle valeur ?

15/09/99 © 1999 Peter Sander 166


Méthodes
Variables Locales
public double compteEnBanque(double
solde) {
double gnouveau = solde;
if (solde >= 0) { Faut
gnouveau = solde * solde; l’initialiser
}
return gnouveau;
}

15/09/99 © 1999 Peter Sander 167


Méthodes
Variables Locales
...
double solde = 1000;
solde = comteEnBanque(solde);
solde = comteEnBanque(solde);
...
Variable
créée public double compteEnBanque(double solde) {
double gnouveau = solde;
Variable if (solde >= 0) {
détruite gnouveau = solde * solde;
}
return gnouveau;
}
15/09/99 © 1999 Peter Sander 168
Méthodes
Variables Locales
...
double solde = 1000;
solde = comteEnBanque(solde);
solde = comteEnBanque(solde);
...

Variable public double compteEnBanque(double solde) {


créée double gnouveau = solde;
if (solde >= 0) {
Variable gnouveau = solde * solde;
détruite }
return gnouveau;
}
15/09/99 © 1999 Peter Sander 169
Méthodes
Visibilité des Variables

• Visibilité limitée (scope) par {}


– Les {} déterminent un bloc
– Variable déclarée dans un bloc est
• visible dans le bloc
• invisible depuis l’extérieur

15/09/99 © 1999 Peter Sander 170


Méthodes
Visibilité des Variables
...
{
int solde = [Link]();
solde *= 17; // à l’intérieur -
visible
[Link]("Solde = " +
solde);
}
solde++; //à l’extérieur - invisible

15/09/99 © 1999 Peter Sander 171


Méthodes
Blocs
• Utilisations multiples et variées
public int intRoot(double r2) {
int r = 0;
if (r2 >= 0) {
r = (int) [Link]([Link](r2));
}
return r;
}
– Bloc {} imbriqué dans bloc {}
– r déclarée dans {}
• visible de partout, même depuis {}

15/09/99 © 1999 Peter Sander 172


Méthodes
Blocs - l’Erreur du Débutant
public int intRoot(double r2) {
if (r2 >= 0) {
int r = 0;
r = (int) [Link]([Link](r2));
}
return r; // r invisible
}
– Bloc {} imbriqué dans bloc {}
– r déclarée dans {}
• invisible depuis {}

15/09/99 © 1999 Peter Sander 173


Méthodes
Blocs - l’Erreur du Débutant
public int intRoot(double r2) {
int r = 0;
if (r2 >= 0) {
int r = 0; // redéclaration de r
r = (int) [Link]([Link](r2));
}
return r;
}
– Bloc {} imbriqué dans bloc {}
– r déclarée dans {}
• visible depuis {}
• redéclarée dans {}
15/09/99 © 1999 Peter Sander 174
Classes
Variables et Méthodes

• Variables
– locales
• déclarées à l’intérieur d’une méthode
• connues uniquement dans la méthode
– d’instance
• déclarées à l’extérieur de toute méthode
• déclarées à l’intérieur d’une classe

15/09/99 © 1999 Peter Sander 175


Classes
Variables et Méthodes
• Quel en sera le résultat
– à la compilation ? Ça compile !
– à l’exécution ?

private String moi = "et moi"; //


d ’instance

public void maMethode() {


[Link](moi);
} -> et moi

15/09/99 © 1999 Peter Sander 176


Classes
Variables et Méthodes
• Quel en sera le résultat
Ça compile !
– à la compilation ?
– à l’exécution ?
private String moi = "et moi"; //d’instance
public void maMethode() {
String moi = "Moi "; // locale
[Link](moi);
}

-> Moi
15/09/99 © 1999 Peter Sander 177
Classes
Variables et Méthodes
• Pas de confusion entre
– variable local moi
– variable d’instance moi
private String moi = "et moi";//d’instance
public void maMethode() {
String moi = "Moi ";//locale
Cherche d ’abord
[Link](moi);
variable locale
}
En trouve
une
15/09/99 © 1999 Peter Sander 178
Classes
Variables et Méthodes
• Pas de confusion entre
– variable local moi
– variable d’instance moi
private String moi = "et moi";//d’instance
public void maMethode() {
Cherche d ’abord
[Link](moi);
variable locale
}
Cherche ensuite
variable d’instance
En trouve
une
15/09/99 © 1999 Peter Sander 179
Classes
Variables et Méthodes

• Pas de confusion entre


– variable local moi
– variable d’instance moi
• Comment utiliser les 2 ?
– Deuxième effet du mot clé this
– Fait référence à l’objet courant

15/09/99 © 1999 Peter Sander 180


Classes
Variables et Méthodes
• Pas de confusion entre
– variable local moi
– variable d’instance this. moi
private String moi = "et moi";//d’instance

public void maMethode() {


String moi = "Moi "; // locale
[Link](moi + " " +
[Link]);
} -> Moi et moi

15/09/99 © 1999 Peter Sander 181


Classes
Variables et Méthodes
• Règle
– Toute référence à une variable d’instance passe
par
[Link]
– Par exemple
[Link]
[Link]
[Link]
• Exception à la règle
– Pour [Link] on peut écrire nom
• this est facultatif

15/09/99 © 1999 Peter Sander 182


Classes
Variables et Méthodes
• Règle
– Toute référence à une méthode d’instance passe
par
[Link](...)
– Par exemple
[Link](21000)
[Link]()
[Link]("vite")
• Exception à la règle
– Pour [Link]() on peut écrire
methode()
• this est facultatif

15/09/99 © 1999 Peter Sander 183


Classes
Variables et Méthodes
public class Boss extends Employee {
static final double BASE = 24000;
private double salary = BASE;
Employee fred = new Employee("Fred", BASE);

public raise(double raise) {


[Link]([Link]() + raise);
[Link]([Link]() + 2 *
raise);
}
} Facultatif
15/09/99 © 1999 Peter Sander 184
Construction
Classes et Objets
Construction
• Un constructeur n’est pas obligatoire…
– …mais quand y en a pas, y en a toujours…
– …sinon impossible d’instancier un objet
• Aucun constructeur déclaré pour Toto ?
– Java invoque automagiquement le constructeur
par défaut :

public Toto() {
super(); // késako ?
}

2/10/02 © 1999-2002 Peter Sander 186


Classes
Construction
• Le constructeur - une méthode spéciale
– Même nom que la classe
– Pas de valeur de retour
– Sert à initialiser les variables Invocation du
– Invoqué par new constructeur
• Exemple - pour la classe Clock de Time

public Clock() { Invocation du


time = new Time(); constructeur
clockFace = new Circle(); de Circle
...
}

15/09/99 © 1999 Peter Sander 187


Classes
Construction
• Multiples constructeurs possible
– Méthode surchargée (overloaded)

public Time() { // l’heure actuelle


...
}

public Time(int y, int m, int d,


int hr, int min, int sec) {
...
}

15/09/99 © 1999 Peter Sander 188


Classes
Construction
• Constructeur sans arguments
– Initialisation aux valeurs par défaut

static final String DEF_NAME = "";


static final double DEF_SALARY = 16000;

String name;
double salary;

public Employee() {
name = DEF_NAME;
salary = DEF_SALARY;
}

29/09/02 © 1999-2002 Peter Sander 189


Classes
Construction
• Un constructeur peut en appeler un autre en
cascade
– Premier effet du mot clé this
• référence à l'objet courant

public Constructeur(…) {
this(...); // appelle au constructeur

}

– N.B. : obligatoirement sur la première ligne !


15/09/99 © 1999-2000 Peter Sander 190
Classes
Construction
public Employee() {
// 37 lignes de code
}
public Employee(String nom) {
name = nom;
// ensuite les mêmes 36 lignes de code
}
public Employee(String nom, double salaire) {
name = nom;
salary = salaire;
// ensuite les mêmes 35 lignes de code
}

29/09/02 © 1999-2002 Peter Sander 191


Classes
Construction
public Employee() {
// 37 lignes de code
}
public Employee(String name) {
this(name, DEF_SALARY);
}

public Employee(String nom, double salaire) {


name = nom;
salary = salaire;
// les mêmes 35 lignes de code
}

15/09/99 © 1999 Peter Sander 192


Classes
Construction
public Employee() {
this(DEF_NAME);
}

public Employee(String name) {


this(name, DEF_SALARY);
}
public Employee(String nom, double salaire) {
name = nom;
salary = salaire;
// les mêmes 35 lignes de code
}

15/09/99 © 1999 Peter Sander 193


Classes et Objets
Construction
• Un constructeur peut en appeler un autre
– Premier effet du mot clé super

public Classe(…) {
super(...); // constructeur de la
superclasse

}
– N.B. : obligatoirement sur la première ligne !
– S’il y en a pas explicitement, Java invoque
automagiquement super()
2/10/02 © 1999-2002 Peter Sander 194
Classes et Objets
Construction

• this(…)
– Invoque le constructeur de l’objet en
cours de construction
• super(…)
– Invoque le constructeur de sa superclasse

2/10/02 © 1999-2002 Peter Sander 195


Classes et Objets
Construction
• Mais avant d’invoquer le constructeur…
– intialisation des variables
static final String DEF_NAME = "";
static final double DEF_SALARY = 16000;
String name = DEF_NAME;
double salary = DEF_SALARY;

public Employee() {
super(); // invocation explicite
}

15/09/99 © 1999 Peter Sander 196


Classes et Objets
Construction
• Séquence d’événements
1. Construction de la superclasse
• explicitement dans le code
public SousEmployee(String nom, double salaire) {
super(nom, salaire);
}
• implicitement par Java
– invocation automatique super()
– erreur si constructeur sans arguments pas défini dans
superclasse
2. Initialisation de variables
3. Invocation du constructeur

15/09/99 © 1999 Peter Sander 197


Membres de Classe
Classes et Objets
Membres d’Instance et de Classe

• Variables d’instance
– Déclarées par accès type nom
– Référencées par [Link]
– Une copie pour chaque instance (objet)
• Variables de classe
– Déclarées par accès static type nom
– Référencées par [Link]
– Une seule copie pour toutes les instances

2/10/02 © 2001-2002 Peter Sander 199


Classes et Objets
Variables de Classe
• Mot clé static indique variable de classe

public class Boss {


public static final double BASE =
24000;
private Boss() {} // non instanciable
}
public class Manager {
private double salary = [Link];
...
}

15/09/99 © 1999 Peter Sander 200


Classes et Objets
Variables de Classe
• Niveau d’accès
– public static utilisable depuis une
autre classe
• généralement réservé aux constantes
public static final String BLAH =
"Blah";
– private static visible que dans sa
propre classe
• variable partagée par toutes les instances de la
classe

15/09/99 © 1999 Peter Sander 201


Classes et Objets
Variables de Classe
• Exemple :
– compteur du nombre d’instances d’une classe

public class Gadget {


private static int nombreExistant = 0;
private int noDeSerie; // un par objet
public Gadget() { // nouvel objet créé
noDeSerie = ++[Link];
}
public int getNoDeSerie() {
return noDeSerie;
}
...
}

15/09/99 © 1999 Peter Sander 202


Classes et Objets
Méthodes d’Instance et de Classe

• Méthodes d’instance
– Déclarées par accès retour nom(…)
– Référencées par [Link](…)
• Méthodes de classe
– Déclarées par accès static retour
nom(…)
– Référencées par [Link](…)

2/10/02 © 2001-2002 Peter Sander 203


Classes et Objets
Méthodes de Classe
• Pareil que pour variables
– Méthode partagée par toutes les instances de
la classe

aireCercle = [Link] *[Link](radius, 2);

Variable de la classe Méthode de la classe


[Link] [Link]

15/09/99 © 1999 Peter Sander 204


Classes et Objets
Méthodes de Classe

• Mot clé static indique méthode de classe


public class Boss {
...
public static void main(String[] args) {
...
}
}

– main : point d’entrée de la JVM


– Pourquoi est-ce obligatoirement static ?

15/09/99 © 1999 Peter Sander 205


Classes et Objets
Méthodes de Classe
• JVM exécute main() de Toto
– Aucune instance de classe (objet) n’existe
• aucune invocation de new Toto() nulle part
• aucune variable d’instance n’existe encore
• aucune méthode d’instance n’existe encore
– La classe, elle existe : la classe a été chargée
• variables de classe accessibles
• méthodes de classe accessibles
– variables locales des ces méthodes utilisables

15/09/99 © 1999 Peter Sander 206


Classes et Objets
Méthodes de Classe
public class PME {
...
public static void main(String[] args) {
String gerant = "personne";
...
[Link]("Notre gérant : "
+ gerant);
}
}
Oui :
– Légale ? • aucune instance d’objet de type PME
• n’utilise que des variables locales
15/09/99 © 1999 Peter Sander 207
Classes et Objets
Méthodes de Classe
public class PME {
private static final double BASE = 14000;
public static double augmente(double prime) {
return BASE + prime;
}
public static void main(String[] args) {
[Link]("Salaire augmenté : "
+ augmente(40000));
}
}
– Légale ? Oui :
• aucune instance d’objet de type PME
• n’utilise que des méthodes et
variables statiques (de classe)
15/09/99 © 1999 Peter Sander 208
Classes et Objets
Méthodes de Classe
public class PME {
private double salaire;
public static void main(String[] args) {
salaire = 36712.49;
}
}

– Légale ? Non :
• salaire raccourcit [Link]
• this désigne un objet de type PME
• aucun objet de type PME n’existe

15/09/99 © 1999 Peter Sander 209


Classes et Objets
Méthodes de Classe
public class PME {
private double salaire;
public static void main(String[] args) {
PME pme = new PME();
[Link] = 36712.49;
}
}

– Légale ? Oui :
• pme désigne un objet de type PME
• salaire est variable d’objet de type PME

15/09/99 © 1999 Peter Sander 210


Classes et Objets
Méthodes de Classe
public class PME {
private static final double BASE = 14000;
public double augmente(double prime) {
return BASE + prime;
}
public static void main(String[] args) {
[Link]("Salaire augmenté : "
+ augmente(40000));
}
}
– Légale ? Non :
• augmente() raccourcit
[Link]()
• this désigne un objet de type PME
15/09/99 • aucun objet dePeter
© 1999 type PME n’existe
Sander 211
Classes et Objets
Méthodes de Classe
public class PME {
private static final double BASE = 14000;
public double augmente(double prime) {
return BASE + prime;
}
public static void main(String[] args) {
PME pme = new PME();
[Link]("Salaire augmenté : "
+ [Link](40000));
}
}
– Légale ? Oui :
• pme désigne un objet de type PME
• augmente() est méthode d’objet de type PME
15/09/99 © 1999 Peter Sander 212

Vous aimerez peut-être aussi