Vous êtes sur la page 1sur 123

Java de base 1

Universit de Nice - Sophia Antipolis


Version 7.0.1 31/8/11 Richard Grin http://deptinfo.unice.fr/~grin

Remerciements Michel Buffa, avec lequel jai eu le plaisir denseigner mes premiers cours Java. Remerciements Carine Fdle et Franoise Baude qui ont particip avec Michel lamlioration des premires versions de ce support de cours.

R. Grin

Introduction Java

Plan du cours Java


Java de base (ce document et le suivant) Hritage, polymorphisme, classes abstraites et interfaces Exceptions Complments sur le langage Collections Gnricit Interface graphique Entres-sorties
Introduction Java 3

R. Grin

Plan de cette partie


Prsentation du langage Notions sur la programmation objet Classes Structure lexicale du langage Quelques principes de programmation

R. Grin

Introduction Java

Principales proprits de Java

Langage orient objet, classes (les objets sont dcrits/regroups dans des classes) de syntaxe proche du langage C fourni avec le JDK (Java Development Kit) :
outils de dveloppement ensemble de paquetages trs riches et trs varis

portable grce lexcution par une machine virtuelle : Write once, run everywhere
Un but difficile atteindre
R. Grin Introduction Java 5

Autres proprits importantes


multi-tches (thread) sr
fortement typ nombreuses vrifications au chargement des classes et durant leur excution

adapt Internet
chargement de classes en cours dexcution (le plus souvent par le rseau : applet ou RMI) facilits pour distribuer les traitements entre plusieurs machines (sockets, RMI, Corba, EJB)

R. Grin

Introduction Java

Premier programme Java

R. Grin

Introduction Java

Le code source du premier programme point dentre


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

La classe Helloworld est public, donc le fichier qui la contient doit sappeler (en tenant compte des majuscules et minuscules)
HelloWorld.java
Introduction Java 8

R. Grin

Compilation dun code source

Un code source ne peut tre excut directement par un ordinateur Il faut traduire ce code source dans un langage que lordinateur (le processeur de lordinateur) peut comprendre (langage natif) Un compilateur est un programme qui effectue cette traduction
Introduction Java 9

R. Grin

Compilation en Java bytecode

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) dfinie par Oracle Ce langage est indpendant de lordinateur qui va excuter le programme
Introduction Java 10

R. Grin

La compilation fournit du bytecode


Programme crit en Java
Programme source
UneClasse.java

Compilateur

Programme en bytecode, indpendant de lordinateur


R. Grin

Bytecode
UneClasse.class

Introduction Java

11

Compilation avec javac

Oracle fournit le compilateur javac avec le JDK


javac HelloWorld.java cre un fichier HelloWorld.class qui

contient le bytecode, situ dans le mme rpertoire que le fichier .java Le fichier compiler peut tre dsign par un chemin absolu ou relatif :
javac util/Liste.java

R. Grin

Introduction Java

12

Excution du bytecode

Le bytecode doit tre excut par une JVM Cette JVM nexiste pas ; elle est simule par un programme qui interprte le bytecode : lit les instructions (en bytecode) du programme .class, les traduit dans le langage natif du processeur de lordinateur lance leur excution
Introduction Java 13

R. Grin

Excution avec java

Oracle fournit le programme java qui simule une Nom dune classe JVM
(pas dun fichier) ; java HelloWorld pas de suffixe .class ! excute le bytecode de la mthode main de la classe HelloWorld

HelloWorld est un nom de classe et pas un nom

de fichier. Donc on ne peut pas donner un chemin pas de suffixe .class


R. Grin Introduction Java 14

O doit se trouver le fichier .class ?

java HelloWorld HelloWorld.class doit se trouver dans le

classpath Le classpath peut recevoir une valeur


avec loption -classpath de la commande java :
java classpath rep1/rep2 HelloWorld

avec la variable denvironnement CLASSPATH (pas recommand)

Par dfaut le classpath est le rpertoire courant


Introduction Java 15

R. Grin

Les JVM

Les systmes qui veulent pouvoir excuter un programme Java doivent fournir une JVM Tous les systmes ont une JVM (Linux, Windows, MacOs,) Il existe aussi quelques JVM en dur , sous forme de processeurs dont le langage natif est le bytecode ; elles sont rarement utilises

R. Grin

Introduction Java

16

Le bytecode peut tre excut par nimporte quelle JVM


Bytecode
UneClasse.class

JVM sous Linux, processeur Intel JVM sous MacOS, processeur Motorola

JVM sous Unix, processeur SPARC

JVM sous Windows, processeur Intel

Si un systme possde une JVM, il peut excuter tous les fichiers .class compils sur nimporte quel autre systme
R. Grin Introduction Java 17

Avantages de la JVM pour Internet

Grce sa portabilit, le bytecode dune classe peut tre charg depuis une machine distante du rseau, et excute par une JVM locale La JVM fait de nombreuses vrifications sur le bytecode avant son excution pour sassurer quil ne va effectuer aucune action dangereuse La JVM apporte donc
de la souplesse pour le chargement du code excuter mais aussi de la scurit pour lexcution de ce code

R. Grin

Introduction Java

18

Une certaine lenteur...

Les vrifications effectues sur le bytecode et ltape dinterprtation de ce bytecode (dans le langage natif du processeur) ralentissent lexcution des classes Java Mais les techniques 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
Introduction Java 19

R. Grin

Java et les autres langages

Java est devenu en quelques annes un des langages de dveloppement les plus utiliss, surtout pour les applications qui ont besoin dune grande portabilit ou dune grande souplesse sur Internet Pour les applications qui ncessitent une trs grande rapidit dexcution, on peut prfrer encore les langages C, C++, ou le bon vieux Fortran (qui a des bibliothques trs utilises pour le
calcul scientifique)
Introduction Java 20

R. Grin

Spcifications de Java

Java, cest en fait


le langage Java : http://java.sun.com/docs/books/jls/ une JVM : http://java.sun.com/docs/books/vmspec/ les API : selon la documentation javadoc fournie avec les diffrents paquetages

Java nest pas normalis ; son volution est gre par le JCP (Java Community Process ; http://www.jcp.org/) dans lequel Oracle tient une place prpondrante
Introduction Java 21

R. Grin

Implmentation de rfrence

Oracle accompagne les spcifications Java dune implmentation de rfrence de nombreux tutoriels

R. Grin

Introduction Java

22

Plate-forme Java
Programme Java API

JVM
Machine relle
API (Application Programming Interface) : bibliothques de classes standard
R. Grin Introduction Java 23

3 ditions de Java

Java SE (J2SE) : Java Standard Edition ; JDK = Java SE Development Kit Java EE (J2EE) : Enterprise Edition qui ajoute les API pour crire des applications installes sur les serveurs dans des applications distribues : servlet, JSP, JSF, EJB, Java ME (J2ME) : Micro Edition, version pour crire des programmes embarqus (carte puce/Java card, tlphone portable,)
Introduction Java 24

R. Grin

Version couverte par le cours


Java SE 7 Attention, Java est pass directement de la version 1.4 la version 5.0 En effet, lancienne numrotation des diffrentes versions (1.0, 1.1, 1.2,) ne refltaient pas les importantes modifications effectues ; elles auraient plutt d sappeler 1, 2,
Introduction Java 25

R. Grin

Votre environnement de dveloppement


diteur de texte (emacs, avec JDE) Compilateur (javac) Interprteur de bytecode (java) Aide en ligne sur le JDK (sous navigateur Web) Gnrateur automatique de documentation (javadoc) Testeur pour applet (appletviewer) Integrated Development Dbogueur (jdb) Environment ... Aprs ltude des paquetages, ventuellement un IDE tel que NetBeans ou Eclipse
Introduction Java 26

R. Grin

Complments sur la compilation et lexcution

R. Grin

Introduction Java

27

Variables denvironnement

PATH : doit inclure le rpertoire qui contient les utilitaires Java (javac, java, javadoc,) CLASSPATH : indique le chemin de recherche des classes de lutilisateur vitez la variable CLASSPATH

R. Grin

Introduction Java

28

Une classe Point


/** Modlise un point de coordonnes x, y */ public class Point { private int x, y; public Point(int x1, int y1) { // un constructeur x = x1; y = y1; } public double distance(Point p) { // une mthode return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); } public static void main(String[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); } }
R. Grin Introduction Java 29

2 classes dans 1 fichier


/** Modlise un point de coordonnes x, y */ public class Point { private int x, y; public Point(int x1, int y1) { x = x1; y = y1; } public double distance(Point p) { return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); } }

Fichier Point.java

/** Teste la classe Point */ class TestPoint { public static void main(String[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); } }
R. Grin Introduction Java 30

Compilation et excution de la classe Point

La compilation du fichier Point.java


javac Point.java

fournit 2 fichiers classes : Point.class et


TestPoint.class

On lance lexcution de la classe TestPoint qui a une mthode main()


java TestPoint

R. Grin

Introduction Java

31

2 classes dans 2 fichiers


/** Modlise un point de coordonnes x, y */ public class Point { private int x, y; Fichier Point.java public Point(int x1, int y1) { x = x1; y = y1; } public double distance(Point p) { return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); } } /** Pour tester la classe Point */ class TestPoint { public static void main(String[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); } Fichier TestPoint.java }
R. Grin Introduction Java 32

Architecture dun programme source Java

Programme source Java = ensemble de fichiers .java Chaque fichier .java contient une ou plusieurs dfinitions de classes Au plus une dfinition de classe public par fichier .java (avec nom du fichier = nom de la
classe publique)

R. Grin

Introduction Java

33

Chargement dynamique des classes

Durant lexcution dun code Java, les classes (leur bytecode) sont charges dans la JVM au fur et mesure des besoins Une classe peut tre charge depuis la machine locale (le cas le plus frquent) depuis une autre machine, par le rseau par tout autre moyen (base de donnes,)
Introduction Java 34

R. Grin

Applications indpendantes et applets

R. Grin

Introduction Java

35

Deux types de programmes


Applications indpendantes Applets rfrence par une page HTML et excute dans la JVM dun navigateur Web

R. Grin

Introduction Java

36

Application indpendante

Lancement de lexcution de la classe de lancement de lapplication (dite classe principale ; main en anglais) ; par exemple :
java TestPoint

java lance linterprtation du code de la mthode main() de la classe TestPoint

R. Grin

Introduction Java

37

Mthode main

Le profil dune mthode est donn par son entte de dfinition ; celui de main() doit tre :
public static void main(String[] args)

Signature dune mthode : nom de la mthode et ensemble des types de ses paramtres Signature de la mthode main() :
main(String[])

En Java, le type de la valeur de retour de la mthode ne fait pas partie de sa signature (au contraire de la dfinition habituelle dune signature)
R. Grin Introduction Java 38

Applet

Objet Java, rfrenc dans une page Web (crite dans le langage HTML) En fait cet objet doit appartenir une classe Java qui hrite de la classe Applet (voir cours sur lhritage) Le lancement dune (un ?) applet(te ?) se fait quand la partie de la page Web qui rfrence l'applet est affiche par le client Web
Introduction Java 39

R. Grin

Exemple de page Web qui contient une applet


<HTML> <HEAD> <TITLE> Une applet </TITLE> </HEAD> <BODY> <H2> Excuter une applet </H2> <APPLET code="HelloApplet.class" Dimensions de lemplacement width=500 rserv laffichage de lapplet height=300> Votre navigateur ne peut excuter une applet </APPLET> </BODY> </HTML>
R. Grin Introduction Java 40

Exemple dapplet
import java.awt.Graphics; import java.applet.Applet;

Hritage

public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello world", 50, 25); } Pixel o commencera }

Reprsente lemplacement de la page Web o lapplet saffichera


R. Grin

laffichage : x = 50 pixels, y = 25 pixels

Introduction Java

41

tapes pour lexcution dune applet


1. Demande chargement page Web qui contient une applet 2. Chargement de la page Web et de la classe de lapplet

Client HTTP

Serveur HTTP

3. Excution de lapplet dans la JVM du client

R. Grin

Introduction Java

42

Excution de lapplet

Le navigateur a sa propre machine virtuelle Un programme Java spcial dmarr par le navigateur va lancer certaines mthodes hrites de la classe Applet : init(),
start(), stop(), destroy(), paint()
init() est excut seulement quand lapplet

est lance pour la premire fois paint() dessine lapplet dans la page Web
Introduction Java 43

R. Grin

Utilit des applets

Les applets permettent de faire des pages Web plus riches (grce aux possibilits offertes par Java) La page Web peut contenir
des animations ou des mises en forme complexes pour mettre en valeur certaines informations des rsultats de calculs complexes des informations dynamiques (pas connues au moment o la page Web statique est cre) trouves en interrogeant une base de donnes ...

R. Grin

Introduction Java

44

Notions de base sur la programmation objet

R. Grin

Introduction Java

45

Langage orient objet


Manipule des objets Les programmes sont dcoups suivant les types des objets manipuls Les donnes sont regroupes avec les traitements qui les utilisent Une classe Facture regroupe, par exemple, tout ce que lon peut faire avec une facture, avec toutes les donnes ncessaires ces traitements
Introduction Java 46

R. Grin

Quest-ce quun objet ?

Toute entit identifiable, concrte ou abstraite, peut tre considre comme un objet Un objet ragit certains messages quon lui envoie de lextrieur ; la faon dont il ragit dtermine le comportement de lobjet Il ne ragit pas toujours de la mme faon un mme message ; sa raction dpend de ltat dans lequel il est
R. Grin Introduction Java 47

Notion dobjet en Java

Un objet a
une adresse en mmoire (identifie lobjet) un comportement (ou interface) un tat interne

Ltat interne est donn par des valeurs de variables Le comportement est donn par des fonctions ou procdures, appeles mthodes
Introduction Java 48

R. Grin

Un objet
Comportement
tat (cach) (interface publique)
Un objet
R. Grin Introduction Java

Arrte-toi

Dmarre

vitesse direction ...


va x km/h

Une voiture
49

Interactions entre objets


Les objets interagissent en senvoyant des messages synchrones Les mthodes de la classe dun objet correspondent aux messages quon peut lui envoyer : quand un objet reoit un message, il excute la mthode correspondante Objet qui reoit Message envoy Exemples : le message
objet1.decrisToi(); employe.setSalaire(20000); voiture.demarre(); voiture.vaAVitesse(50); Paramtre du message
50

R. Grin

Introduction Java

Messages entre objets


arrte-toi
nom:Pierre ge:28 ans ... Conduit la ville v dmarre

vitesse:60 direction:5 ... va x km/h

va 70 km/h

Pierre
R. Grin

La voiture de Pierre
Introduction Java 51

Pierre envoie un message maVoiture.vaAVitesse(70); sa voiture :

Paradigme objet

La programmation objet est un paradigme, une manire de modliser le monde : des objets ayant un tat interne et un comportement collaborent en schangeant des messages
(pour fournir les fonctionnalits que lon demande lapplication)

Dautres paradigmes :
programmation imprative (Pascal, C) programmation fonctionnelle (Scheme, Lisp)

R. Grin

Introduction Java

52

Les classes en Java

R. Grin

Introduction Java

53

Regrouper les objets

Les objets qui collaborent dans une application sont souvent trs nombreux Mais on peut le plus souvent dgager des types dobjets : des objets ont une structure et un comportement trs proches, sinon identiques Par exemple, tous les livres dans une application de gestion dune bibliothque La notion de classe correspond cette notion de types dobjets
Introduction Java 54

R. Grin

Elments dune classe

Les constructeurs (il peut y en avoir plusieurs) servent crer les instances (les objets) de la classe Quand une instance est cre, son tat est conserv dans les variables dinstance Les mthodes dterminent le comportement des instances de la classe quand elles reoivent un message
Les variables et les mthodes sappellent les membres de la classe
Introduction Java 55

R. Grin

Exemple : classe Livre


public class Livre { private String titre, auteur; Variables dinstance private int nbPages; // Constructeur public Livre(String unTitre, String unAuteur) { titre = unTitre; auteur = unAuteur; Constructeurs } public String getAuteur() { // accesseur return auteur; Mthodes } public void setNbPages(int nb) { // modificateur nbPages = nb; } }
R. Grin Introduction Java 56

Rles dune classe

Une classe est


un type qui dcrit une structure (variables dinstances) et un comportement (mthodes) un module pour dcomposer une application en entits plus petites un gnrateur dobjets (par ses constructeurs)

Une classe permet dencapsuler les objets : les membres public sont vus de lextrieur mais les membres private sont cachs
Introduction Java 57

R. Grin

Conventions pour les identificateurs

Les noms de classes commencent par une majuscule (ce sont les seuls avec les constantes) : Cercle, Object Les mots contenus dans un identificateur commencent par une majuscule : UneClasse, uneMethode, uneAutreVariable Les constantes sont en majuscules avec les mots spars par le caractre soulign _ :
UNE_CONSTANTE Si possible, des noms pour les classes et des verbes pour les mthodes
Introduction Java 58

R. Grin

Les constructeurs

R. Grin

Introduction Java

59

Classes et instances

Une instance dune classe est cre par un des constructeurs de la classe Une fois quelle est cre, linstance a son propre tat interne (les valeurs des variables dinstance) partage le code qui dtermine son comportement (les mthodes) avec les autres instances de la classe
Introduction Java 60

R. Grin

Constructeurs dune classe

Chaque classe a un ou plusieurs constructeurs qui servent crer les instances initialiser ltat de ces instances Un constructeur a le mme nom que la classe na pas de type retour
Introduction Java 61

R. Grin

Cration dune instance


public class Employe { variables private String nom, prenom; private double salaire; dinstance // Constructeur public Employe(String n, String p) { nom = n; prenom = p; } . . . public static void main(String[] args) { Employe e1; e1 = new Employe("Dupond", "Pierre"); e1.setSalaire(1200); cration dune instance . . . de Employe } }
R. Grin Introduction Java 62

Plusieurs constructeurs (surcharge)


public class Employe { private String nom, prenom; private double salaire; // 2 Constructeurs public Employe(String n, String p) { nom = n; prenom = p; } public Employe(String n, String p, double s) { nom = n; prenom = p; salaire = s; } . . . e1 = new Employe("Dupond", "Pierre"); e2 = new Employe("Durand", "Jacques", 1500);
R. Grin Introduction Java 63

Dsigner un constructeur par this()


public class Employe { private String nom, prenom; private double salaire; // Ce constructeur appelle l'autre constructeur public Employe(String n, String p) { this(n, p, 0); } public Employe(String n, String p, double s) { nom = n; prenom = p; salaire = s; } . . . e1 = new Employe("Dupond", "Pierre"); e2 = new Employe("Durand", "Jacques", 1500);
R. Grin Introduction Java 64

Constructeur par dfaut

Lorsque le code dune classe ne comporte pas de constructeur, un constructeur sera automatiquement ajout par Java Pour une classe Classe, ce constructeur par dfaut sera : [public] Classe() { }
Mme accessibilit que la classe (public ou non)

R. Grin

Introduction Java

65

Les mthodes

R. Grin

Introduction Java

66

Accesseurs

Deux types de mthodes servent donner accs aux variables depuis lextrieur de la classe : les accesseurs en lecture pour lire les valeurs des variables ; accesseur en lecture est souvent abrg en accesseur ; getter en anglais les accesseurs en criture, ou modificateurs, ou mutateurs, pour modifier leur valeur ; setter en anglais
Introduction Java 67

R. Grin

Autres types de mthode

La plupart des mthodes permettent aux instances de la classe doffrir des services plus complexes aux autres instances Enfin, des mthodes (private) servent de sous-programmes utilitaires aux autres mthodes de la classe

R. Grin

Introduction Java

68

Paramtres dune mthode

Souvent les mthodes ou les constructeurs ont besoin quon leur passe des donnes initiales sous la forme de paramtres On doit indiquer le type des paramtres dans la dclaration de la mthode :
setSalaire(double unSalaire) calculerSalaire(int indice, double prime)

Quand la mthode ou le constructeur na pas de paramtre, on ne met rien entre les parenthses :
getSalaire()
R. Grin Introduction Java 69

Type retour dune mthode

Quand la mthode renvoie une valeur, on doit indiquer le type de la valeur renvoye dans la dclaration de la mthode :
double calculSalaire(int indice, double prime)

Le pseudo-type void indique quaucune valeur nest renvoye :


void setSalaire(double unSalaire)

R. Grin

Introduction Java

70

Exemples de mthodes
public class Employe { Modificateur . . . public void setSalaire(double unSalaire) { if (unSalaire >= 0.0) salaire = unSalaire; } public double getSalaire() { return salaire; Accesseur } public boolean accomplir(Tache t) { ... } }
R. Grin Introduction Java 71

Surcharge dune mthode

En Java, on peut surcharger une mthode, cest--dire, ajouter une mthode qui a le mme nom mais pas la mme signature quune autre mthode :
calculerSalaire(int) calculerSalaire(int, double)
indice dans la grille des salaires prime accordes aux commerciaux

R. Grin

Introduction Java

72

Surcharge dune mthode (2)

En Java, il est interdit de surcharger une mthode en changeant seulement le type de retour Autrement dit, on ne peut diffrencier 2 mthodes par leur type retour Par exemple, il est interdit davoir ces 2 mthodes dans une classe :
int calculerSalaire(int) double calculerSalaire(int)

R. Grin

Introduction Java

73

toString()

Il est conseill dinclure une mthode toString dans toutes les classes que lon crit Cette mthode renvoie une chane de caractres qui dcrit linstance Une description compacte et prcise peut tre trs utile lors de la mise au point des programmes System.out.println(objet) affiche la valeur retourne par objet.toString()
Classes et objets page 74

Richard Grin

Exemple
public class Livre { ... public String toString() { return "Livre [titre=" + titre + ",auteur=" + auteur + ",nbPages=" + nbPages + "]"; } }

Richard Grin

Classes et objets

page 75

Les variables

R. Grin

Introduction Java

76

Types de variables

Les variables dinstances


sont dclares en dehors de toute mthode conservent ltat dun objet, instance de la classe sont accessibles et partages par toutes les mthodes de la classe

Les variables locales


sont dclares lintrieur dune mthode conservent une valeur utilise pendant lexcution de la mthode ne sont accessibles que dans le bloc dans lequel elles ont t dclares

R. Grin

Introduction Java

77

Variable locale ou variable dinstance ?

Il arrive dhsiter entre rfrencer un objet par une variable locale dune mthode ou par une variable dinstance de la classe Si lobjet est utilis par plusieurs mthodes de la classe, lobjet devra tre rfrenc par une variable dinstance

R. Grin

Introduction Java

78

Dclaration des variables

Toute variable doit tre dclare avant dtre utilise Dclaration dune variable : on indique au compilateur que le programme va utiliser une variable de ce nom et de ce type
double prime; Employe e1; Point centre;

R. Grin

Introduction Java

79

Affectation

Laffectation dune valeur une variable est effectue par linstruction variable = expression; Lexpression est calcule et ensuite la valeur calcule est affecte la variable Exemple :
x = 3; x = x + 1;

R. Grin

Introduction Java

80

Initialisation dune variable

Une variable doit tre initialise (recevoir une valeur) avant dtre utilise dans une expression Si elles ne sont pas initialises par le programmeur, les variables dinstance (et les variables de classe tudies plus loin) reoivent les valeurs par dfaut de leur type (0 pour les types numriques, par exemple) Lutilisation dune variable locale non initialise par le programmeur provoque une erreur (pas
dinitialisation par dfaut) la compilation
Introduction Java 81

R. Grin

Initialisation dune variable (2)


On peut initialiser une variable en la dclarant La formule dinitialisation peut tre une expression complexe :
double prime = 200.0; Employe e1 = new Employe("Dupond", "Jean");
double salaire = prime + 500.0;

R. Grin

Introduction Java

82

Dclaration / cration
public static void main(String[] args) { Employe e1; provoque une erreur e1.setSalaire(1200); NullPointerException OK ? }

Il ne faut pas confondre


dclaration dune variable cration dun objet rfrenc par cette variable Employe e1; dclare que lon va utiliser une variable e1 qui rfrencera un objet de la classe Employe, mais aucun objet nest cr
Introduction Java 83

R. Grin

Dclaration / cration (2)

Il aurait fallu crire :


public static void main(String[] args) { Employe e1; e1 = new Employe("Dupond", "Pierre"); e1.setSalaire(1200); . . . }

R. Grin

Introduction Java

84

Dsigner les variables dune instance

Soit un objet o1 ; la valeur dune variable v de o1 est dsigne par o1.v Par exemple,
Cercle c1 = new Cercle(p1, 10); System.out.println(c1.rayon); // affiche 10

Remarque : le plus souvent les variables sont private et on ne peut pas y accder directement en dehors de leur classe

R. Grin

Introduction Java

85

Accs aux membres dune classe

R. Grin

Introduction Java

86

Degrs dencapsulation

Java permet plusieurs degrs dencapsulation pour les membres (variables et mthodes) et les constructeurs dune classe

R. Grin

Introduction Java

87

Types dautorisation daccs

private : seule la classe dans laquelle il est

dclar a accs ( ce membre ou constructeur) public : toutes les classes sans exception y ont accs Sinon, par dfaut, seules les classes du mme paquetage que la classe dans lequel il est dclar y ont accs (un paquetage est un regroupement de classes ; notion tudie plus loin dans le cours) protected sera tudi dans le cours sur lhritage R. Grin Introduction Java 88

Granularit de la protection des attributs dune classe

En Java, la protection des attributs se fait classe par classe, et pas objet par objet Un objet a accs tous les attributs dun objet de la mme classe, mme les attributs privs

R. Grin

Introduction Java

89

Protection de ltat interne dun objet

Autant que possible ltat dun objet (les variables dinstance) doit tre private Si on veut autoriser la lecture dune variable depuis lextrieur de la classe, on lui associe un accesseur, avec le niveau daccessibilit que lon veut Si on veut autoriser la modification dune variable, on lui associe un modificateur, qui permet la modification tout en contrlant la validit de la modification
Introduction Java 90

R. Grin

Exceptions pour les protections Encore des variables ( viter) plus rare !

Dans de rares cas, on peut autoriser laccs au paquetage, ou tous (public) si la variable ne risque pas de recevoir des valeurs aberrantes si lon veut un accs rapide pour amliorer les performances pour simplifier lcriture du code qui accde la variable
Introduction Java 91

R. Grin

Dsigner linstance qui reoit le message, this

R. Grin

Introduction Java

92

this

Le code dune mthode dinstance dsigne linstance qui a reu le message (linstance courante), par le mot-cl this donc, les membres de linstance courante en les prfixant par this. Lorsquil ny a pas dambigut, this est optionnel pour dsigner un membre de linstance courante
Introduction Java 93

R. Grin

Exemple de this implicite


public class Employe { private double salaire; . . . public void setSalaire(double unSalaire) { salaire = unSalaire; } Implicitement public double getSalaire() { this.salaire return salaire; } Implicitement . . . this.salaire }
R. Grin Introduction Java 94

this explicite

this est utilis surtout dans 2 occasions :

pour distinguer une variable dinstance et un paramtre qui ont le mme nom :
public void setSalaire(double salaire) this.salaire = salaire;

un objet passe une rfrence de lui-mme un autre objet :


salaire = comptable.calculeSalaire(this);

Dans quelle classe peut-on Comptable, calcule le salaire de moi R. Grin Introduction Java 95 trouver ce code ?

Autre exemple de this explicite


public class Document { ... public void imprimer(Imprimante imprimante) { imprimante.ajouterRequete(this); } ...

public class Imprimante { ... public void ajouterRequete(Document doc) { // Ajoute le fichier associ au document // dans la file dattente dimpression fileAttente.ajouter(doc.getFichier()); ...
R. Grin Introduction Java 96

Interdit de modifier this

this se comporte comme une variable final (mot-cl tudi plus loin), cest--dire quon ne

peut le modifier ; le code suivant est interdit :


this = valeur;

R. Grin

Introduction Java

97

Mthodes et variables de classe

R. Grin

Introduction Java

98

Variables de classe

Certaines variables sont partages par toutes les instances dune classe. Ce sont les variables de classe (modificateur static) Si une variable de classe est initialise dans sa dclaration, cette initialisation est excute une seule fois quand la classe est charge en mmoire

R. Grin

Introduction Java

99

Exemple de variable de classe


public class Employe { private String nom, prenom; private double salaire; private static int nbEmployes = 0; // Constructeur public Employe(String n, String p) { nom = n; prenom = p; nbEmployes++; } . . . }
R. Grin Introduction Java 100

Mthodes de classe

Une mthode de classe (modificateur static en Java) excute une action indpendante dune instance particulire de la classe Une mthode de classe peut tre considre comme un message envoy une classe Exemple :
public static int getNbEmployes() { return nbEmployes; }

R. Grin

Introduction Java

101

Dsigner une mthode de classe

Depuis une autre classe, on la prfixe par le nom de la classe :


int n = Employe.getNbEmploye(); Depuis sa classe, le nom de la mthode suffit On peut aussi la prfixer par une instance quelconque de la classe ( viter car cela nuit la lisibilit : on ne voit pas que la mthode est static) :
int n = e1.getNbEmploye();

R. Grin

Introduction Java

102

Mthodes de classe

Comme une mthode de classe excute une action indpendante dune instance particulire de la classe, elle ne peut utiliser de rfrence une instance courante (this) Il serait, par exemple, interdit dcrire
static double tripleSalaire() { return this.salaire * 3; }

R. Grin

Introduction Java

103

Mthodes de classe

Une mthode de classe ne peut avoir la mme signature quune mthode dinstance

R. Grin

Introduction Java

104

Une colle

La mthode main() est ncessairement static. Pourquoi ? La mthode main() est excute au dbut du programme. Aucune instance nest donc dj cre lorsque la mthode main() commence son excution. a ne peut donc pas tre une mthode dinstance.
Introduction Java 105

R. Grin

Blocs dinitialisation static

Ils permettent dinitialiser les variables static trop complexes initialiser dans leur dclaration :

class UneClasse { private static int[] tab = new int[25]; static { for (int i = 0; i < 25; i++) { tab[i] = -1; } } . . .

Ils sont excuts une seule fois, quand la classe est charge en mmoire
Introduction Java 106

R. Grin

Reprsentation graphique dune classe en notation UML (Unified Modeling Language)


Cercle private Point centre private int rayon public Cercle(Point, int) public void setRayon(int) public int getRayon() public double surface() Cercle - Point centre - int rayon

+ Cercle(Point, int) + void setRayon(int) + int getRayon() + double surface()

(- : private, # : protected, + : public, $ (ou soulign) : static)


R. Grin Introduction Java 107

Structure lexicale du langage Java

R. Grin

Introduction Java

108

Codage Unicode pour les programmes

Pour les identificateurs, les commentaires, les valeurs de type caractre ou chane de caractres, Java utilise les caractres du code Unicode Le reste dun programme Java est form de caractres ASCII (qui sont les 128 premiers caractres du code Unicode) Dans un programme, le caractre Unicode dont le code est la valeur hexadcimale xxxx peut tre reprsent par \uxxxx
Introduction Java 109

R. Grin

Identificateurs

Un identificateur Java est de longueur quelconque commence par une lettre Unicode (caractres ASCII recommands) peut ensuite contenir des lettres ou des chiffres ou le caractre soulign _ ne doit pas tre un mot-cl ou les constantes true, false ou null

R. Grin

Introduction Java

110

Mots-cls Java
abstract, boolean, break, byte, case, catch, char, class, const*, continue, default, do, double, enum**, else, extends, final, finally, float, for, goto*, if, implements, import, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while *: pas encore utilis ** : depuis Java SE 5
R. Grin Introduction Java 111

Commentaires

Sur une seule ligne :


// Voici un commentaire int prime = 1500; // prime fin de mois

Sur plusieurs lignes :


/* Premire ligne du commentaire suite du commentaire */

Documentation automatique par javadoc


/** * Cette mthode calcule ... * Elle utilise ... */

R. Grin

Introduction Java

112

Rappels : Quelques principes de programmation

R. Grin

Introduction Java

113

ne pas oublier !

Un programme est crit une fois Sil est utile, il sera modifi corrig on lui ajoutera des fonctionnalits des dizaines (ou centaines) de fois sans doute plusieurs annes aprs son criture
Introduction Java 114

R. Grin

Ce quil faut rechercher


Une plus grande facilit de programmation Mais surtout une maintenance plus aise et une extensibilit accrue

R. Grin

Introduction Java

115

Comment ?

Modularit : dcomposer en lments plus simples Encapsulation : cacher ce quil nest pas indispensable de voir Lisibilit : faciliter la comprhension des programmes Rutilisabilit : crire des modules rutilisables dans les futurs dveloppements (difficile)
Introduction Java 116

R. Grin

Modularit

Un programme est modulaire sil est dcoup en modules (plus ou moins) indpendants Un bon dcoupage doit satisfaire les 2 critres :
forte cohsion des lments dun module faible couplage entre deux modules diffrents

Ces 2 principes favorisent lutilisation, la rutilisation et la maintenance des modules :


plus de souplesse : un module - une fonctionnalit les modifications dun module ont le moins dimpacts possible sur les autres modules

R. Grin

Introduction Java

117

Encapsulation

Lencapsulation est le fait de ne montrer et de ne permettre de modifier que ce qui est ncessaire une bonne utilisation
on montre linterface (services offerts) dun module on cache limplmentation (comment sont rendus les services)

Les avantages en sont :


simplification de lutilisation (la complexit dutilisation ne dpend que de linterface publique) meilleure robustesse du programme simplification de la maintenance de lapplication

R. Grin

Introduction Java

118

Attribution des fonctionnalits

Il peut tre difficile de choisir lobjet qui doit tre le responsable de lexcution dune fonctionnalit On peut faire la liste des informations ncessaires lexcution Lobjet qui possde le plus dinformations est souvent le meilleur choix Localisation => modularit et encapsulation facilites
Introduction Java 119

R. Grin

Vers une programmation par composants

Sur le modle des circuits lectroniques :


chaque composant remplit des fonctionnalits bien dtermines et offre des possibilits de connexion avec dautres composants pas besoin daller lire le code pour les utiliser (on ne
sait rien de limplmentation)

En mieux
on peut configurer le composant et sauvegarder cette configuration, ou un assemblage de composants, pour la rutiliser

R. Grin

Introduction Java

120

Bibliographie - Gratuit

On peut apprendre Java sans dbourser un sou Tutoriel dOracle consulter dabord lorsque lon tudie une nouvelle API (en anglais) : http://download.oracle.com/javase/tutorial/ Un bon livre gratuit en ligne (un peu bavard) : Thinking in Java de Bruce Eckel ; site Web http://mindview.net/Books/TIJ/DownloadSites ; en franais : http://penserenjava.free.fr/
Introduction Java 121

R. Grin

Bibliographie 2 classiques

Un livre qui couvre de nombreux paquetages : Core Java , en 2 volumes mais le premier suffit pour commencer, diteur Prentice-Hall ; http://www.horstmann.com/corejava.html ; en franais : Au cur de Java , ditions Campus Press Java in a Nutshell de David Flanagan, diteur OReilly ; en franais : Java en concentr
Introduction Java 122

R. Grin

Bibliographie utilisateur avanc

En anglais : Effective Java , 2me dition adapte Java SE 6 ; trs bon livre pour apprendre bien programmer en Java ; auteur Joshua Bloch ; The Java Series , diteur Addison-Wesley ; seule la 1re dition a t traduite en franais ( Java efficace )

R. Grin

Introduction Java

123