PPOOGL

Florent de Dinechin

Java pour les nuls (et les physiciens)

Java en 30 minutes

1 Introduction 2 Grands principes 3 Pour en finir avec l’organisation 4 Types de base et objets 5 Le reste est dans le manuel

1

Introduction
1 Introduction 2 Grands principes 3 Pour en finir avec l’organisation 4 Types de base et objets 5 Le reste est dans le manuel

2

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

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

java cr´e Toto. fichier objet Toto.class (le c c’est pour compilo) e 3 .java.class javac Toto.La premi`re fois que vous mettez votre main dans le java e Fichier source Toto.

class javac Toto.class (le c c’est pour compilo) e java Toto lance la m´thode main de Toto.class dans la e machine virtuelle.java cr´e Toto. 3 . fichier objet Toto.java.La premi`re fois que vous mettez votre main dans le java e Fichier source Toto.

La premi`re fois que vous mettez votre main dans le java e Fichier source Toto.java.java cr´e Toto.class (le c c’est pour compilo) e java Toto lance la m´thode main de Toto. Si on faisait une applet. fichier objet Toto. 3 .class javac Toto.class dans la e machine virtuelle. c’est pas une m´thode main qu’il e faudrait.

out. sauf e // la m´thode main.java cr´e Toto.class dans la e machine virtuelle. statique. statique.La premi`re fois que vous mettez votre main dans le java e Fichier source Toto. Si on faisait une applet. d´ja ? e public static void main(String[] args) { System.class (le c c’est pour compilo) e java Toto lance la m´thode main de Toto. } } 3 . c’est pas une m´thode main qu’il e faudrait.println("Hello. fichier objet Toto. e // cela veut dire quoi. Et voici le code source : class Hello { // pas d’attributs ni de m´thodes. java ?").java.class javac Toto.

Grands principes 1 Introduction 2 Grands principes 3 Pour en finir avec l’organisation 4 Types de base et objets 5 Le reste est dans le manuel 4 .

Les trucs reposants Une classe. un fichier 5 .

Les trucs reposants Une classe. un fichier ⊕ Pas de fichiers .h 5 .

h ⊕ La doc du code n’est plus le fichier . un fichier ⊕ Pas de fichiers . c’est une vraie doc cr´e e par javadoc 5 .h.Les trucs reposants Une classe.

Les trucs reposants Une classe.h.h ⊕ La doc du code n’est plus le fichier . un fichier ⊕ Pas de fichiers . c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf 5 .

c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e 5 .h.Les trucs reposants Une classe.h ⊕ La doc du code n’est plus le fichier . un fichier ⊕ Pas de fichiers .

Les trucs reposants Une classe. un fichier ⊕ Pas de fichiers .h ⊕ La doc du code n’est plus le fichier . c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e Si cela se trouve.h. c’est mˆme mieux que Caml e 5 .

Les trucs reposants Une classe.h.h ⊕ La doc du code n’est plus le fichier . un fichier ⊕ Pas de fichiers . c’est mˆme mieux que Caml e ´ Edition de lien dynamique 5 . c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e Si cela se trouve.

h ⊕ La doc du code n’est plus le fichier . c’est mˆme mieux que Caml e ´ Edition de lien dynamique Lorsque la machine virtuelle a besoin de cr´er un objet de e classe Toto. un fichier ⊕ Pas de fichiers . c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e Si cela se trouve.Les trucs reposants Une classe.class 5 .h. elle charge Toto.

h ⊕ La doc du code n’est plus le fichier . c’est mˆme mieux que Caml e ´ Edition de lien dynamique Lorsque la machine virtuelle a besoin de cr´er un objet de e classe Toto.Les trucs reposants Une classe. un fichier ⊕ Pas de fichiers . elle charge Toto.h.class Il faut qu’elle sache o` le trouver (on verra plus loin) u 5 . c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e Si cela se trouve.

class Il faut qu’elle sache o` le trouver (on verra plus loin) u ⊕ Pas d’´diteur de lien e 5 .Les trucs reposants Une classe. un fichier ⊕ Pas de fichiers . c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e Si cela se trouve. c’est mˆme mieux que Caml e ´ Edition de lien dynamique Lorsque la machine virtuelle a besoin de cr´er un objet de e classe Toto. elle charge Toto.h ⊕ La doc du code n’est plus le fichier .h.

c’est mˆme mieux que Caml e ´ Edition de lien dynamique Lorsque la machine virtuelle a besoin de cr´er un objet de e classe Toto.class Il faut qu’elle sache o` le trouver (on verra plus loin) u ⊕ Pas d’´diteur de lien e ⊕ Pas de Makefile (je l’ai d´j` dit ?) ea 5 . c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e Si cela se trouve. un fichier ⊕ Pas de fichiers .Les trucs reposants Une classe.h ⊕ La doc du code n’est plus le fichier . elle charge Toto.h.

c’est mˆme mieux que Caml e ´ Edition de lien dynamique Lorsque la machine virtuelle a besoin de cr´er un objet de e classe Toto. pour l’´dition de liens et pour e l’ex´cution sont les mˆmes.class Il faut qu’elle sache o` le trouver (on verra plus loin) u ⊕ Pas d’´diteur de lien e ⊕ Pas de Makefile (je l’ai d´j` dit ?) ea ⊕ Les chemins pour la compilation.h.h ⊕ La doc du code n’est plus le fichier . un fichier ⊕ Pas de fichiers . e e 5 . elle charge Toto. c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e Si cela se trouve.Les trucs reposants Une classe.

e e Performance : des acc`s disques (et mˆme r´seau) cach´s au e e e e milieu de votre programme 5 . c’est une vraie doc cr´e e par javadoc ⊕ Pas besoin de Makefile ni d’autoconf ⊕ Pas de bug dˆ au pr´processeur u e Si cela se trouve. c’est mˆme mieux que Caml e ´ Edition de lien dynamique Lorsque la machine virtuelle a besoin de cr´er un objet de e classe Toto. pour l’´dition de liens et pour e l’ex´cution sont les mˆmes.h ⊕ La doc du code n’est plus le fichier .h.class Il faut qu’elle sache o` le trouver (on verra plus loin) u ⊕ Pas d’´diteur de lien e ⊕ Pas de Makefile (je l’ai d´j` dit ?) ea ⊕ Les chemins pour la compilation. un fichier ⊕ Pas de fichiers . elle charge Toto.Les trucs reposants Une classe.

Applet et application applet (en fran¸ais appliquette ou programmouillette) : c destin´ ` tourner dans une fenˆtre de navigateur chez des ea e gens qu’on ne connait mˆme pas e d´rive d’une classe qui en principe prot`ge la machine hˆte e e o (sandbox) pas d’´criture ni de lecture du disque local e par contre acc`s en lecture ` tous les fichiers du Ternet par e a leur url 6 .

Applet et application application (en fran¸ais application) c pas les restriction pr´c´dentes e e un navigateur n’a pas plus le droit de la lancer qu’un autre ex´cutable e 6 .

notamment l’awt (abstract windowing toolkit).Applet et application applet (en fran¸ais appliquette ou programmouillette) : c destin´ ` tourner dans une fenˆtre de navigateur chez des ea e gens qu’on ne connait mˆme pas e d´rive d’une classe qui en principe prot`ge la machine hˆte e e o (sandbox) pas d’´criture ni de lecture du disque local e par contre acc`s en lecture ` tous les fichiers du Ternet par e a leur url application (en fran¸ais application) c pas les restriction pr´c´dentes e e un navigateur n’a pas plus le droit de la lancer qu’un autre ex´cutable e Applications et appliquettes partagent le gros de la biblioth`que e standard. 6 .

7 .Au fait JavaScript n’a rien ` voir avec Java ` part la syntaxe superficielle : a a c’est un langage interpr´t´. et qu’on laissera volontiers aux authentiques kakous. plein de trous de s´curit´. pas OO pour ee e e un sou.

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

.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 m´thode. etc. 8 . classe.. e Ligne de commande : javadoc Toto.java Les docs de r´f´rence des classes standard du langage sont ee construites comme cela Exemple de commentaire de l’an dernier : /** * classe Cartes */ public class Cartes extends Remote .. attribut..

Pour en finir avec l’organisation 1 Introduction 2 Grands principes 3 Pour en finir avec l’organisation 4 Types de base et objets 5 Le reste est dans le manuel 9 .

Paquetages 10 .

10 .Paquetages Un paquetage c’est comme un module en Caml.

Les paquetages sont organis´s hi´rarchiquement en r´pertoires. e e e Rien ` voir avec la hi´rarchie des classes. a e 10 .Paquetages Un paquetage c’est comme un module en Caml.

awt java. a e Exemples tir´s des biblioth`ques standard : e e java.applet java.math java.awt.awt.image java. e e e Rien ` voir avec la hi´rarchie des classes. Les paquetages sont organis´s hi´rarchiquement en r´pertoires.event 10 .Paquetages Un paquetage c’est comme un module en Caml.io java.

e e e Rien ` voir avec la hi´rarchie des classes.math java.event On d´clare qu’une classe Toto fait partie d’un paquetage e projetLala.awt.applet java.tata . Les paquetages sont organis´s hi´rarchiquement en r´pertoires.awt java. 10 .io java.java : e package projetLala.awt.image java.tata en mettant tout au d´but de Toto. a e Exemples tir´s des biblioth`ques standard : e e java.Paquetages Un paquetage c’est comme un module en Caml.

a e Exemples tir´s des biblioth`ques standard : e e java. En l’absence d’une telle ligne.tata en mettant tout au d´but de Toto.java : e package projetLala. constitu´ de e e l’ensemble des classes dans le r´pertoire courant e l’ensemble des classes accessibles par la variable CLASSPATH 10 .awt.event On d´clare qu’une classe Toto fait partie d’un paquetage e projetLala. la classe fait partie du paquetage par d´faut. Les paquetages sont organis´s hi´rarchiquement en r´pertoires.awt java.io java.applet java.Paquetages Un paquetage c’est comme un module en Caml.tata .image java.awt.math java. e e e Rien ` voir avec la hi´rarchie des classes.

mais il faut lire le manuel. la classe fait partie du paquetage par d´faut. En l’absence d’une telle ligne.awt java. Les paquetages sont organis´s hi´rarchiquement en r´pertoires. constitu´ de e e l’ensemble des classes dans le r´pertoire courant e l’ensemble des classes accessibles par la variable CLASSPATH On peut ranger un paquetage dans une archive zip.io java.Paquetages Un paquetage c’est comme un module en Caml. e e e Rien ` voir avec la hi´rarchie des classes. qui s’appellera d’ailleurs jar.awt.math java.java : e package projetLala.awt.tata .event On d´clare qu’une classe Toto fait partie d’un paquetage e projetLala. a e Exemples tir´s des biblioth`ques standard : e e java.image java.tata en mettant tout au d´but de Toto.applet java. 10 .

Classe 11 .Paquetages et nommages Le nom complet d’une classe est paquetage.

Paquetages et nommages Le nom complet d’une classe est paquetage.Classe Unicit´ plan´taire des noms par l’URL renvers´e : e e e com.projetMIM2002.www.lala.test

11

Paquetages et nommages Le nom complet d’une classe est paquetage.Classe Unicit´ plan´taire des noms par l’URL renvers´e : e e e com.projetMIM2002.www.lala.test Le nom complet d’un membre est paquetage.Classe.membre

11

Paquetages et nommages Le nom complet d’une classe est paquetage.Classe Unicit´ plan´taire des noms par l’URL renvers´e : e e e com.projetMIM2002.www.lala.test Le nom complet d’un membre est paquetage.Classe.membre
la fonction sinus : java.lang.Math.sin(x)

11

Classe.nombreErreurs 11 .projetMIM2002.test.projetMIM2002.www.membre la fonction sinus : java.www.sin(x) la variable ` l’unicit´ plan´taire : a e e com.Classe Unicit´ plan´taire des noms par l’URL renvers´e : e e e com.lala.Math.test Le nom complet d’un membre est paquetage.RandomTest.lang.lala.Paquetages et nommages Le nom complet d’une classe est paquetage.

Paquetages et nommages Le nom complet d’une classe est paquetage.lala.nombreErreurs Si on a la flemme de taper tout cela tout le temps dans Toto.java.* .lang.membre la fonction sinus : java.www. au d´but e de ce fichier.Math .projetMIM2002.lang. 11 .test. ou bien toutes les classes d’un paquetage : import java.projetMIM2002.lang.Classe.test Le nom complet d’un membre est paquetage.RandomTest. on peut importer une fois pour toutes.sin(x) la variable ` l’unicit´ plan´taire : a e e com.Classe Unicit´ plan´taire des noms par l’URL renvers´e : e e e com.Math. une classe : import java.lala.www.

nombreErreurs Si on a la flemme de taper tout cela tout le temps dans Toto.lang. Exemple Math. au d´but e de ce fichier.sin(x) la variable ` l’unicit´ plan´taire : a e e com.membre la fonction sinus : java. une classe : import java..Classe.lala.lang.lala.. On n’est pas dispens´ de taper Classe.* .Classe Unicit´ plan´taire des noms par l’URL renvers´e : e e e com.projetMIM2002. 11 .lang.projetMIM2002.test.Math.test Le nom complet d’un membre est paquetage.java.www.Math .membre. ou bien toutes les classes d’un paquetage : import java.RandomTest. on peut importer une fois pour toutes.membre ou e objet.sin(x).Paquetages et nommages Le nom complet d’une classe est paquetage.www.

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

Port´e des classes. port´e des identificateurs e e 13 .

port´e des identificateurs e e Dans le corps d’une m´thode.Port´e des classes. e 13 . c’est comme en C.

c’est comme en C. un membre peut ˆtre e public : tout le monde le voit mˆme en dehors de la classe e private : visible uniquement ` l’int´rieur de la classe a e protected : visible dans la classe. ses sous-classes. e Dans le corps d’une classe. port´e des identificateurs e e Dans le corps d’une m´thode. et le paquetage rien du tout : visible dans le paquetage 13 .Port´e des classes.

c’est comme en C. et le paquetage rien du tout : visible dans le paquetage Dans un paquetage. e Dans le corps d’une classe. ses sous-classes.Port´e des classes. port´e des identificateurs e e Dans le corps d’une m´thode. un membre peut ˆtre e public : tout le monde le voit mˆme en dehors de la classe e private : visible uniquement ` l’int´rieur de la classe a e protected : visible dans la classe. une classe peut-ˆtre e public : tout le monde le voit mˆme en dehors du paquetage e rien du tout : visible dans le paquetage seulement 13 .

Port´e des classes. ses sous-classes. un membre peut ˆtre e public : tout le monde le voit mˆme en dehors de la classe e private : visible uniquement ` l’int´rieur de la classe a e protected : visible dans la classe. et le paquetage rien du tout : visible dans le paquetage Dans un paquetage. c’est comme en C. une classe peut-ˆtre e public : tout le monde le voit mˆme en dehors du paquetage e rien du tout : visible dans le paquetage seulement Vous trouverez plein d’exemples sur le Ternet. e Dans le corps d’une classe. 13 . port´e des identificateurs e e Dans le corps d’une m´thode.

Types de base et objets 1 Introduction 2 Grands principes 3 Pour en finir avec l’organisation 4 Types de base et objets 5 Le reste est dans le manuel 14 .

int (32). e e mais javac fait des warning si on ne les initialise pas. class HelloHello { public static void main(String[] args) { int i. " + i + " fois?").Les faciles Entiers sign´s de diff´rentes tailles : byte (8 bits). for(i=0. short e e (16). } } } 15 . i<10.println("Hello. java. i++) { System. long (64) Nombres en virgule flottante : 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 sp´cifi´e par le langage.out.

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

uoqcmqlaf = new ObjetHello().La vraie classe import java. public class ObjetHello { private Frame fenetre. fenetre. // plus besoin ici public class ProjetHello { public static void main(String[] args) { // un objet que c’est moi qui l’ai fait ObjetHello uoqcmqlaf.*.*.setVisible(true). uoqcmqlaf = new ObjetHello("Youpi!"). } // Pas besoin de main() ici } } } //import java.100). fenetre. java ?"). } //constructeurs public ObjetHello(){ construit("Hello.awt.setSize(300.awt. } public ObjetHello(String titre){ construit(titre). public void construit(String titre){ fenetre = new Frame(titre) . 17 .

H´ritage e Reprenons cet UML bˆcl´ : 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 .

terrain. package straterisk.terrain. import straterisk. public Meteo meteo.terrain. /** * Operation * */ public void dessine_tes_occupants ( ){ } } public class Terre extends Case { /** Attributes */ public facilite.Case.jeu.Plateau. /** * Operation * */ abstract public void dessine_toi ( ). public abstract class Case { /** Attributes */ public Unite[] occupants. public class Desert extends Terre { /** * Operation * */ public void dessine_toi ( ){ } } 19 . import straterisk.Terre. import straterisk. /** * Operation * */ public void dessine_toi ( ){ } } package straterisk. /** Associations */ private Plateau.terrain.terrain.H´ritage e et passons-le ` dia2code a package straterisk.

.. 20 . mais e ne construit pas la hi´rarchie des r´pertoires e e La version du CRI est un peu vieille Utilisable uniquement en phase initiale Mais bon.Remarques sordides dia2code c’est pas encore cela Il g`re bien les import et package dans le code source. cela vous oblige ` bien r´fl´chir votre mod`le objet a e e e avant de coder.

et plein e ıne d’autres. because we started the project two days before the deadline" .j .. e int i.. M´thodes d’une chaˆ : errorMessage.) mais avec du sucre syntaxique dans le langage pour le constructeur.Retour aux types de base : les bizarres String est une classe d’objets (majuscule..length(). (. String errorMessage . Il y a aussi des chaˆ ınes de taille variable (StringBuffer)... . etc 21 .) errorMessage="Feature not implemented. la concat´nation (+)..

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

Le reste est dans le manuel 1 Introduction 2 Grands principes 3 Pour en finir avec l’organisation 4 Types de base et objets 5 Le reste est dans le manuel 23 .

R´f´rences ee Le site de Sun Des tutoriels La doc de r´f´rence sur le langage (on s’en passe bien) ee La doc de r´f´rences sur les classes standard (` parcourir ee a absolument !) le tout t´l´chargeable pour pouvoir partir en vacances avec ee Plein de bouquins ` la biblioth`que a e Celui de Brondeau en fran¸ais c ⊕ court ⊕ en fran¸ais c un peu l`ge sur l’OO e 24 .

Sign up to vote on this title
UsefulNot useful