Vous êtes sur la page 1sur 61

PPOOGL

Florent de Dinechin

By Admin at 3:03 pm, Dec 09, 2006

Java pour les nuls (et les physiciens)

Java en 30 minutes

1 Introduction 2 Grands principes 3 Pour en nir avec lorganisation 4 Types de base et objets 5 Le reste est dans le manuel

Introduction
1 Introduction 2 Grands principes 3 Pour en nir avec lorganisation 4 Types de base et objets 5 Le reste est dans le manuel

La premi`re fois que vous mettez votre main dans le java e

La premi`re fois que vous mettez votre main dans le java e Fichier source Toto.java, chier objet Toto.class

La premi`re fois que vous mettez votre main dans le java e Fichier source Toto.java, chier objet Toto.class javac Toto.java cre Toto.class (le c cest pour compilo) e

La premi`re fois que vous mettez votre main dans le java e Fichier source Toto.java, chier objet Toto.class javac Toto.java cre Toto.class (le c cest pour compilo) e java Toto lance la mthode main de Toto.class dans la e machine virtuelle.

La premi`re fois que vous mettez votre main dans le java e Fichier source Toto.java, chier objet Toto.class javac Toto.java cre Toto.class (le c cest pour compilo) e java Toto lance la mthode main de Toto.class dans la e machine virtuelle. Si on faisait une applet, cest pas une mthode main quil e faudrait.

La premi`re fois que vous mettez votre main dans le java e Fichier source Toto.java, chier objet Toto.class javac Toto.java cre Toto.class (le c cest pour compilo) e java Toto lance la mthode main de Toto.class dans la e machine virtuelle. Si on faisait une applet, cest pas une mthode main quil e faudrait. Et voici le code source : class Hello { // pas dattributs ni de mthodes, sauf e // la mthode main, statique. e // cela veut dire quoi, statique, dja ? e public static void main(String[] args) { System.out.println("Hello, java ?"); } }
3

Grands principes
1 Introduction 2 Grands principes 3 Pour en nir avec lorganisation 4 Types de base et objets 5 Le reste est dans le manuel

Les trucs reposants Une classe, un chier

Les trucs reposants Une classe, un chier

Pas de chiers .h

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e


Si cela se trouve, cest mme mieux que Caml e

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e


Si cela se trouve, cest mme mieux que Caml e

Edition de lien dynamique

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e


Si cela se trouve, cest mme mieux que Caml e

Edition de lien dynamique


Lorsque la machine virtuelle a besoin de crer un objet de e classe Toto, elle charge Toto.class

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e


Si cela se trouve, cest mme mieux que Caml e

Edition de lien dynamique


Lorsque la machine virtuelle a besoin de crer un objet de e classe Toto, elle charge Toto.class Il faut quelle sache o` le trouver (on verra plus loin) u

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e


Si cela se trouve, cest mme mieux que Caml e

Edition de lien dynamique


Lorsque la machine virtuelle a besoin de crer un objet de e classe Toto, elle charge Toto.class Il faut quelle sache o` le trouver (on verra plus loin) u Pas dditeur de lien e

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e


Si cela se trouve, cest mme mieux que Caml e

Edition de lien dynamique


Lorsque la machine virtuelle a besoin de crer un objet de e classe Toto, elle charge Toto.class Il faut quelle sache o` le trouver (on verra plus loin) u Pas dditeur de lien e Pas de Makefile (je lai dj` dit ?) ea

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e


Si cela se trouve, cest mme mieux que Caml e

Edition de lien dynamique


Lorsque la machine virtuelle a besoin de crer un objet de e classe Toto, elle charge Toto.class Il faut quelle sache o` le trouver (on verra plus loin) u Pas dditeur de lien e Pas de Makefile (je lai dj` dit ?) ea Les chemins pour la compilation, pour ldition de liens et pour e lexcution sont les mmes. e e

Les trucs reposants Une classe, un chier

Pas de chiers .h La doc du code nest plus le chier .h, cest une vraie doc cre e
par javadoc

Pas besoin de Makefile ni dautoconf Pas de bug d au prprocesseur u e


Si cela se trouve, cest mme mieux que Caml e

Edition de lien dynamique


Lorsque la machine virtuelle a besoin de crer un objet de e classe Toto, elle charge Toto.class Il faut quelle sache o` le trouver (on verra plus loin) u Pas dditeur de lien e Pas de Makefile (je lai dj` dit ?) ea Les chemins pour la compilation, pour ldition de liens et pour e lexcution sont les mmes. e e Performance : des acc`s disques (et mme rseau) cachs au e e e e milieu de votre programme
5

Applet et application applet (en franais appliquette ou programmouillette) : c destin ` tourner dans une fentre de navigateur chez des ea e gens quon ne connait mme pas e drive dune classe qui en principe prot`ge la machine hte e e o (sandbox)
pas dcriture ni de lecture du disque local e par contre acc`s en lecture ` tous les chiers du Ternet par e a leur url

Applet et application

application (en franais application) c pas les restriction prcdentes e e un navigateur na pas plus le droit de la lancer quun autre excutable e

Applet et application applet (en franais appliquette ou programmouillette) : c destin ` tourner dans une fentre de navigateur chez des ea e gens quon ne connait mme pas e drive dune classe qui en principe prot`ge la machine hte e e o (sandbox)
pas dcriture ni de lecture du disque local e par contre acc`s en lecture ` tous les chiers du Ternet par e a leur url

application (en franais application) c pas les restriction prcdentes e e un navigateur na pas plus le droit de la lancer quun autre excutable e Applications et appliquettes partagent le gros de la biblioth`que e standard, notamment lawt (abstract windowing toolkit).
6

Au fait

JavaScript na rien ` voir avec Java ` part la syntaxe supercielle : a a cest un langage interprt, plein de trous de scurit, pas OO pour ee e e un sou, et quon laissera volontiers aux authentiques kakous.

Javadoc

Un outil qui prend du code bien document, et construit une e doc html toute jolie Les commentaires pour Javadoc sont entre /** ... */ Un commentaire de ce type par mthode, attribut, classe, etc. e Ligne de commande : javadoc Toto.java Les docs de rfrence des classes standard du langage sont ee construites comme cela

Javadoc

Un outil qui prend du code bien document, et construit une e doc html toute jolie Les commentaires pour Javadoc sont entre /** ... */ Un commentaire de ce type par mthode, attribut, classe, etc. e Ligne de commande : javadoc Toto.java Les docs de rfrence des classes standard du langage sont ee construites comme cela Exemple de commentaire de lan dernier : /** * classe Cartes */ public class Cartes extends Remote ...
8

Pour en nir avec lorganisation


1 Introduction 2 Grands principes 3 Pour en nir avec lorganisation 4 Types de base et objets 5 Le reste est dans le manuel

Paquetages

10

Paquetages Un paquetage cest comme un module en Caml.

10

Paquetages Un paquetage cest comme un module en Caml. Les paquetages sont organiss hirarchiquement en rpertoires. e e e Rien ` voir avec la hirarchie des classes. a e

10

Paquetages Un paquetage cest comme un module en Caml. Les paquetages sont organiss hirarchiquement en rpertoires. e e e Rien ` voir avec la hirarchie des classes. a e Exemples tirs des biblioth`ques standard : e e java.applet java.math java.io java.awt java.awt.image java.awt.event

10

Paquetages Un paquetage cest comme un module en Caml. Les paquetages sont organiss hirarchiquement en rpertoires. e e e Rien ` voir avec la hirarchie des classes. a e Exemples tirs des biblioth`ques standard : e e java.applet java.math java.io java.awt java.awt.image java.awt.event On dclare quune classe Toto fait partie dun paquetage e projetLala.tata en mettant tout au dbut de Toto.java : e package projetLala.tata ;

10

Paquetages Un paquetage cest comme un module en Caml. Les paquetages sont organiss hirarchiquement en rpertoires. e e e Rien ` voir avec la hirarchie des classes. a e Exemples tirs des biblioth`ques standard : e e java.applet java.math java.io java.awt java.awt.image java.awt.event On dclare quune classe Toto fait partie dun paquetage e projetLala.tata en mettant tout au dbut de Toto.java : e package projetLala.tata ; En labsence dune telle ligne, la classe fait partie du paquetage par dfaut, constitu de e e
lensemble des classes dans le rpertoire courant e lensemble des classes accessibles par la variable CLASSPATH

10

Paquetages Un paquetage cest comme un module en Caml. Les paquetages sont organiss hirarchiquement en rpertoires. e e e Rien ` voir avec la hirarchie des classes. a e Exemples tirs des biblioth`ques standard : e e java.applet java.math java.io java.awt java.awt.image java.awt.event On dclare quune classe Toto fait partie dun paquetage e projetLala.tata en mettant tout au dbut de Toto.java : e package projetLala.tata ; En labsence dune telle ligne, la classe fait partie du paquetage par dfaut, constitu de e e
lensemble des classes dans le rpertoire courant e lensemble des classes accessibles par la variable CLASSPATH

On peut ranger un paquetage dans une archive zip, qui sappellera dailleurs jar, mais il faut lire le manuel.
10

Paquetages et nommages Le nom complet dune classe est paquetage.Classe

11

Paquetages et nommages Le nom complet dune classe est paquetage.Classe Unicit plantaire des noms par lURL renverse : e e e com.projetMIM2002.www.lala.test

11

Paquetages et nommages Le nom complet dune classe est paquetage.Classe Unicit plantaire des noms par lURL renverse : e e e com.projetMIM2002.www.lala.test Le nom complet dun membre est paquetage.Classe.membre

11

Paquetages et nommages Le nom complet dune classe est paquetage.Classe Unicit plantaire des noms par lURL renverse : e e e com.projetMIM2002.www.lala.test Le nom complet dun membre est paquetage.Classe.membre
la fonction sinus : java.lang.Math.sin(x)

11

Paquetages et nommages Le nom complet dune classe est paquetage.Classe Unicit plantaire des noms par lURL renverse : e e e com.projetMIM2002.www.lala.test Le nom complet dun membre est paquetage.Classe.membre
la fonction sinus : java.lang.Math.sin(x) la variable ` lunicit plantaire : a e e
com.projetMIM2002.www.lala.test.RandomTest.nombreErreurs

11

Paquetages et nommages Le nom complet dune classe est paquetage.Classe Unicit plantaire des noms par lURL renverse : e e e com.projetMIM2002.www.lala.test Le nom complet dun membre est paquetage.Classe.membre
la fonction sinus : java.lang.Math.sin(x) la variable ` lunicit plantaire : a e e
com.projetMIM2002.www.lala.test.RandomTest.nombreErreurs

Si on a la emme de taper tout cela tout le temps dans Toto.java, on peut importer une fois pour toutes, au dbut e de ce chier,
une classe : import java.lang.Math ; ou bien toutes les classes dun paquetage : import java.lang.* ;

11

Paquetages et nommages Le nom complet dune classe est paquetage.Classe Unicit plantaire des noms par lURL renverse : e e e com.projetMIM2002.www.lala.test Le nom complet dun membre est paquetage.Classe.membre
la fonction sinus : java.lang.Math.sin(x) la variable ` lunicit plantaire : a e e
com.projetMIM2002.www.lala.test.RandomTest.nombreErreurs

Si on a la emme de taper tout cela tout le temps dans Toto.java, on peut importer une fois pour toutes, au dbut e de ce chier,
une classe : import java.lang.Math ; ou bien toutes les classes dun paquetage : import java.lang.* ;

On nest pas dispens de taper Classe.membre ou e objet.membre... Exemple Math.sin(x).


11

Quelques conventions

Tout le monde appelle ses classes avec une majuscule. Du coup les chiers aussi. Les membres de la plupart des programmeurs sont minuscules. Vous faites bien ce que vous voudrez.

12

Porte des classes, porte des identicateurs e e

13

Porte des classes, porte des identicateurs e e

Dans le corps dune mthode, cest comme en C. e

13

Porte des classes, porte des identicateurs e e

Dans le corps dune mthode, cest comme en C. e Dans le corps dune classe, un membre peut tre e
public : tout le monde le voit mme en dehors de la classe e private : visible uniquement ` lintrieur de la classe a e protected : visible dans la classe, ses sous-classes, et le paquetage rien du tout : visible dans le paquetage

13

Porte des classes, porte des identicateurs e e

Dans le corps dune mthode, cest comme en C. e Dans le corps dune classe, un membre peut tre e
public : tout le monde le voit mme en dehors de la classe e private : visible uniquement ` lintrieur de la classe a e protected : visible dans la classe, ses sous-classes, et le paquetage rien du tout : visible dans le paquetage

Dans un paquetage, une classe peut-tre e


public : tout le monde le voit mme en dehors du paquetage e rien du tout : visible dans le paquetage seulement

13

Porte des classes, porte des identicateurs e e

Dans le corps dune mthode, cest comme en C. e Dans le corps dune classe, un membre peut tre e
public : tout le monde le voit mme en dehors de la classe e private : visible uniquement ` lintrieur de la classe a e protected : visible dans la classe, ses sous-classes, et le paquetage rien du tout : visible dans le paquetage

Dans un paquetage, une classe peut-tre e


public : tout le monde le voit mme en dehors du paquetage e rien du tout : visible dans le paquetage seulement

Vous trouverez plein dexemples sur le Ternet.


13

Types de base et objets


1 Introduction 2 Grands principes 3 Pour en nir avec lorganisation 4 Types de base et objets 5 Le reste est dans le manuel

14

Les faciles Entiers signs de direntes tailles : byte (8 bits), short e e (16), int (32), long (64) Nombres en virgule ottante : float et double boolean qui vaut true ou false char est un caract`re Unicode (sur 16 bits !) e Tous ces types ont une valeur initiale spcie par le langage, e e mais javac fait des warning si on ne les initialise pas.
class HelloHello { public static void main(String[] args) { int i; for(i=0; i<10; i++) { System.out.println("Hello, java, " + i + " fois?"); } } }
15

Les objets

import java.awt.*; class HelloLaFenetre { public static void main(String[] args) { Frame objet_fenetre; objet_fenetre = new Frame("Hello, java ?") ; objet_fenetre.setSize(300,100); objet_fenetre.setVisible(true); } }

16

La vraie classe

import java.awt.*; public class ObjetHello { private Frame fenetre; public void construit(String titre){ fenetre = new Frame(titre) ; fenetre.setSize(300,100); fenetre.setVisible(true); } //constructeurs public ObjetHello(){ construit("Hello, java ?"); } public ObjetHello(String titre){ construit(titre); } // Pas besoin de main() ici } } } //import java.awt.*; // plus besoin ici public class ProjetHello { public static void main(String[] args) { // un objet que cest moi qui lai fait ObjetHello uoqcmqlaf; uoqcmqlaf = new ObjetHello(); uoqcmqlaf = new ObjetHello("Youpi!");

17

Hritage e Reprenons cet UML bcl : a e


straterisk

jeu

Plateau
+cases: Case[][] = +tour_de_jeu(): void +afficher(): void +enregistrer(): void +charger(): void

armee

Unite
terrain +force_de_frappe: int +dessine_toi(): void

Case
+occupants: Unite[] +meteo: Meteo +dessine_toi(): void +dessine_tes_occupants(): void

UniteAerienne

UniteNavale

UniteTerrestre

Mer
+dessine_toi(): void

Terre
+facilite +dessine_toi(): void

Desert
+dessine_toi(): void

Plaine

Montagne

18

Hritage e et passons-le ` dia2code a


package straterisk.terrain; import straterisk.terrain.Case; package straterisk.terrain; import straterisk.jeu.Plateau; public abstract class Case { /** Attributes */ public Unite[] occupants; public Meteo meteo; /** Associations */ private Plateau; /** * Operation * */ abstract public void dessine_toi ( ); /** * Operation * */ public void dessine_tes_occupants ( ){ } } public class Terre extends Case { /** Attributes */ public facilite; /** * Operation * */ public void dessine_toi ( ){ } } package straterisk.terrain; import straterisk.terrain.Terre; public class Desert extends Terre { /** * Operation * */ public void dessine_toi ( ){ } }

19

Remarques sordides

dia2code cest pas encore cela Il g`re bien les import et package dans le code source, mais e ne construit pas la hirarchie des rpertoires e e La version du CRI est un peu vieille Utilisable uniquement en phase initiale Mais bon, cela vous oblige ` bien rchir votre mod`le objet a e e e avant de coder...

20

Retour aux types de base : les bizarres

String est une classe dobjets (majuscule...) mais avec du sucre syntaxique dans le langage pour le constructeur, la concatnation (+), ... e int i,j ; String errorMessage ; (...) errorMessage="Feature not implemented, because we started the project two days before the deadline" ; Mthodes dune cha : errorMessage.length(), et plein e ne dautres. Il y a aussi des cha nes de taille variable (StringBuffer), etc

21

Retour aux types : les bizarres (2) Les tableaux sont aussi des objets avec du sucre syntaxique et smantique (classe paramtre). e e e
public class SpaceHello { public static void main(String[] args) { ObjetHello[] plein_de_fenetres; if(args.length == 0) System.err.println("Usage: java SpaceHello text "); else { int i; plein_de_fenetres = new ObjetHello[args.length]; for(i=0; i<args.length; i++) plein_de_fenetres[i] = new ObjetHello(args[i]); } } }
22

Le reste est dans le manuel


1 Introduction 2 Grands principes 3 Pour en nir avec lorganisation 4 Types de base et objets 5 Le reste est dans le manuel

23

Rfrences ee

Le site de Sun
Des tutoriels La doc de rfrence sur le langage (on sen passe bien) ee La doc de rfrences sur les classes standard (` parcourir ee a absolument !) le tout tlchargeable pour pouvoir partir en vacances avec ee

Plein de bouquins ` la biblioth`que a e Celui de Brondeau en franais c

court en franais c
un peu l`ge sur lOO e

24