Vous êtes sur la page 1sur 83

Programmation oriente objet Licence dInformatique

Programmation oriente Objet Langage Java


Me contacter : francois.bonneville@aricia.fr Franois Bonneville - LIFC - Universit de Franche-Comt

Historique de Java (1)

Java a t dvelopp partir de dcembre 1990 par une quipe de Sun Microsystems dirige par James Gosling Au dpart, il sagissait de dvelopper un langage de programmation pour permettre le dialogue entre de futurs ustensiles domestiques Or, les langages existants tels que C++ ne sont pas la hauteur : recompilation ds qu'une nouvelle puce arrive, complexit de programmation pour l'criture de logiciels fiables...

Franois Bonneville - Laboratoire d'Informatique de Besanon

Historique de Java (2)

1990 : Ecriture d'un nouveau langage plus adapt la ralisation de logiciels embarqus, appel OAK

Petit, fiable et indpendant de l'architecture Destin la tlvision interactive Non rentable sous sa forme initiale

1993 : le WEB dcolle , Sun redirige ce langage vers Internet : les qualits de portabilit et de compacit du langage OAK en ont fait un candidat parfait une utilisation sur le rseau. Cette radaptation prit prs de 2 ans. 1995 : Sun rebaptisa OAK en Java (nom de la machine caf autour de
laquelle se runissait James Gosling et ses collaborateurs)

Franois Bonneville - Laboratoire d'Informatique de Besanon

Historique de Java (3)

Les dveloppeurs Java ont ralis un langage indpendant de toute architecture de telle sorte que Java devienne idal pour programmer des applications utilisables dans des rseaux htrognes, notamment Internet. Le dveloppement de Java devint alors un enjeu stratgique pour Sun et l'quipe crivit un navigateur appel HotJava capable dexcuter des programmes Java. La version 2.0 du navigateur de Netscape a t dveloppe pour supporter Java, suivi de prs par Microsoft (Internet Explorer 3) L'intrt pour la technologie Java sest accru rapidement: IBM, Oracle et d'autres ont pris des licences Java.
Franois Bonneville - Laboratoire d'Informatique de Besanon 4

Les diffrentes versions de Java

De nombreuses versions de Java depuis 1995

Java 1.0 en 1995 Java 1.1 en 1996 Java 1.2 en 1999 (Java 2, version 1.2) Java 1.3 en 2001 (Java 2, version 1.3) Java 1.4 en 2002 (Java 2, version 1.4) Java 5 en 2004 Java 6 en 2006 celle que nous utiliserons dans ce cours Java 7 en 2011

volution trs rapide et succs du langage Une certaine maturit atteinte avec Java 2 Mais des problmes de compatibilit existaient

entre les versions 1.1 et 1.2/1.3/1.4 avec certains navigateurs


Franois Bonneville - Laboratoire d'Informatique de Besanon 5

Histoire rcente

En mai 2007, Sun publie lensemble des outils Java dans un package OpenJDK sous licence libre. La socit Oracle a acquis en 2009 l'entreprise Sun Microsystems. On peut dsormais voir apparatre le logo Oracle dans les documentations de l'api Java. Le 12 avril 2010, James Gosling, le crateur du langage de programmation Java dmissionne dOracle pour des motifs quil ne souhaite pas divulguer. Il tait devenu le directeur technologique de la division logicielle client pour Oracle. Aot 2012: faille de scurit importante dans Java 7

Franois Bonneville - Laboratoire d'Informatique de Besanon

Que penser de Java? (1)

Les plus :

Il a su bnficier de lessor dInternet Il a su simposer dans de nombreux domaines Un environnement gratuit et de nombreux outils disponibles Une large communaut trs active

Franois Bonneville - Laboratoire d'Informatique de Besanon

Que penser de Java? (2)

Les moins :

Trop mdiatis? Problmes de compatibilit Avec les premires versions Avec certains navigateurs (les navigateurs ne sont pas crits par Sun) Problmes de vitesse, mais existence de solutions pour y pallier (compilateur natif, compilation du bytecode la vole)
Franois Bonneville - Laboratoire d'Informatique de Besanon 8

Que penser de Java? (3)


Un bon langage Un langage adapt aux besoins de dveloppements actuels qui a su se baser sur les acquis du pass. Au del de leffet de mode, un succs mrit qui ne devrait pas se dmentir dans le futur

Franois Bonneville - Laboratoire d'Informatique de Besanon

Organisation du cours (1)

Nous verrons

Caractristiques de Java et son environnement de dveloppement Structures fondamentales La programmation par objets en Java Hritage Polymorphisme Les exceptions, les entres / sorties en Java Les collections en Java Les paquetages

Nous essaierons daborder les thmes suivants si nous en avons le temps :


La programmation des interfaces graphiques en Java (AWT et Swing), les applets Les threads (appels aussi processus lgers) La programmation rseau Laccs aux bases de donnes
Franois Bonneville - Laboratoire d'Informatique de Besanon 10

Rfrences (1)

Bibliographie

Au cur de Java 2 : Volume I - Notions fondamentales. C. Hortsmann et G. Cornell. The Sun Microsystems Press. Java Series. CampusPress. Au cur de Java 2 : Volume II - Fonctions avances. C. Hortsmann et G. Cornell. The Sun Microsystems Press. Java Series. CampusPress. Passeport pour lalgorithmique objet. Jean-Pierre Fournier. Thomsom Publishing International.

Franois Bonneville - Laboratoire d'Informatique de Besanon

11

Rfrences (2)

Webographie

Pour rcuprer le kit de dveloppement de Sun http://java.sun.com/ (racine du site) Outils de dveloppement Eclipse : http://www.eclipse.org JBuilder 5 : http://www.borland.fr/download/jb5pers/ Des exemples de programmes comments http://www.technobuff.com/javatips/ (en anglais) http://developer.java.sun.com/developer/JDCTechTips/ (en anglais)

Franois Bonneville - Laboratoire d'Informatique de Besanon

12

Du problme au programme

Ncessit danalyser le problme pour pouvoir le traduire en une solution informatique (cela semble vident, mais pourtant!)

avant de construire un btiment, on fait un plan. Ce nest pas diffrent en informatique : conception de lalgorithme, i.e. une rponse (rationnelle) au problme pos puis mise en uvre technique - le codage - dans un langage de programmation, dans notre cas Java.
Franois Bonneville - Laboratoire d'Informatique de Besanon 13

Analyse du problme (1)


Se

poser les bonnes questions

Quelles sont les objets qui interviennent dans le problme? Quelles sont les donnes, les objets, que le programme va manipuler? Quelles vont tre les relations entre ces objets? Quelles sont les oprations que je vais pouvoir effectuer sur ces objets?
Franois Bonneville - Laboratoire d'Informatique de Besanon 14

Analyse du problme (2)


Savoir

tre :

efficace : quelle mthode me permettra dobtenir le plus vite, le plus clairement, le plus simplement possible les rsultats attendus ? paresseux : dans ce que jai dvelopp avant, que puis-je rutiliser ? prvoyant : comment sassurer que le programme sera facilement rutilisable et extensible ?
Franois Bonneville - Laboratoire d'Informatique de Besanon 15

Caractristiques du langage Java

Caractristiques du langage Java (1)

Simple

Apprentissage facile faible nombre de mots-cls simplifications des fonctionnalits essentielles Dveloppeurs oprationnels rapidement

Familier

Syntaxe proche de celle de C/C++


Franois Bonneville - Laboratoire d'Informatique de Besanon 17

Caractristiques du langage Java (2)

Orient objet

Java ne permet d'utiliser que des objets (hors les types de base) Java est un langage objet de la famille des langages de classe comme C++ ou SmallTalk Les grandes ides reprises sont : encapsulation, dualit classe /instance, attribut, mthode / message, visibilit, dualit interface/implmentation, hritage simple, redfinition de mthodes, polymorphisme

Sr

Seul le bytecode est transmis, et vrifi par linterprteur Impossibilit daccder des fonctions globales ou des ressources arbitraires du systme
Franois Bonneville - Laboratoire d'Informatique de Besanon 18

Caractristiques du langage Java (3)

Fiable

Gestion automatique de la mmoire


(ramasse-miette ou "garbage collector")

Gestion des exceptions Sources d'erreurs limites typage fort, pas d'hritage multiple, pas de manipulations de pointeurs, etc. Vrifications faites par le compilateur facilitant une plus grande rigueur du code
Franois Bonneville - Laboratoire d'Informatique de Besanon 19

Caractristiques du langage Java (4)


Java est indpendant de l'architecture

Le bytecode gnr par le compilateur est indpendant de toute architecture. Toute application peut donc tourner sur une plate-forme implmentant une machine virtuelle Java Ecrire une fois, excuter partout
Excution de plusieurs processus effectuant chacun une tche diffrente Mcanismes de synchronisation Fonctionnement sur des machines multiprocesseurs
Franois Bonneville - Laboratoire d'Informatique de Besanon 20

Java est multi-tches


Java, un langage de programmation


Applications Java : programmes autonomes, "standalone" Applets (mini-programmes) : Programmes excutables uniquement par l'intermdiaire d'une autre application

navigateur web : Netscape, Internet explorer, Hotjava application spcifique : Appletviewer

Java est souvent considr comme tant uniquement un langage pour crire des applets alors que c'est aussi un vrai langage de programmation Java est souvent confondu avec le langage de script Javascript auquel il n'est en aucune manire apparent

Franois Bonneville - Laboratoire d'Informatique de Besanon

21

Java, un langage indpendant? (1)

Java est un langage interprt


La compilation d'un programme Java cre du pseudo-code portable : le "byte-code" Sur n'importe quelle plate-forme, une machine virtuelle Java peut interprter le pseudo-code afin qu'il soit excut des interprteurs de byte-code indpendants (pour excuter les programmes Java) contenues au sein d'un navigateur (pour excuter des applets Java)
Franois Bonneville - Laboratoire d'Informatique de Besanon 22

Les machines virtuelles Java peuvent tre


Java, un langage indpendant? (2)

Avantages :

Portabilit Des machines virtuelles Java existent pour de nombreuses plates-formes dont : Linux, Windows, MacOS Dveloppement plus rapide courte tape de compilation pour obtenir le byte-code, pas d'dition de liens, dboguagge plus ais, Le byte-code est plus compact que les excutables pour voyager sur les rseaux.
Franois Bonneville - Laboratoire d'Informatique de Besanon 23

Java, un langage indpendant? (3)

Inconvnients :

Ncessite linstallation dun interprteur pour pouvoir excuter un programme Java


L'interprtation du code ralentit l'excution Les applications ne bnficient que du dnominateur commun des diffrentes plate-formes limitation, par exemple, des interfaces graphiques Gestion gourmande de la mmoire Impossibilit doprations de bas niveau lies au matriel

Franois Bonneville - Laboratoire d'Informatique de Besanon

24

Langage compil
Etapes qui ont lieu avant l'excution pour un langage compil comme C++
Fichier de code

Librairies

Compilation

Code objet

Edition de liens

Programme excutable

Autres code objet Fichier d'entte

Franois Bonneville - Laboratoire d'Informatique de Besanon

25

Langage interprt
Cas de Java
Avant excution Excution

Autres byte code

Fichier de code Java MaClasse.java

Compilation javac

Byte code MaClasse.class

Machine virtuelle Java (JVM) java

Franois Bonneville - Laboratoire d'Informatique de Besanon

26

LAPI de Java

Java fournit de nombreuses librairies de classes remplissant des fonctionnalits trs diverses : c'est l'API Java

API (Application and Programming Interface /Interface pour la programmation d'applications) : Ensemble de bibliothques permettant une programmation plus aise car les fonctions deviennent indpendantes du matriel.

Ces classes sont regroupes, par catgories, en paquetages (ou "packages").

Franois Bonneville - Laboratoire d'Informatique de Besanon

27

LAPI de Java (2)

Les principaux paquetages


java.util : structures de donnes classiques java.io : entres / sorties java.lang : chanes de caractres, interaction avec l'OS, threads java.applet : les applets sur le web java.awt : interfaces graphiques, images et dessins javax.swing : package rcent proposant des composants lgers pour la cration dinterfaces graphiques java.net : sockets, URL java.rmi : Remote Method Invocation (pas abord dans ce cours) java.sql : fournit le package JDBC (pas abord dans ce cours)

Franois Bonneville - Laboratoire d'Informatique de Besanon

28

LAPI de Java (3)

La documentation de Java est standard, que ce soit pour les classes de l'API ou pour les classes utilisateur

possibilit de gnration automatique avec loutil Javadoc. intrt de l'hypertexte pour naviguer dans la documentation
Franois Bonneville - Laboratoire d'Informatique de Besanon 29

Elle est au format HTML.

LAPI de Java (4)

Pour chaque classe, il y a une page HTML contenant :


la hirarchie d'hritage de la classe, une description de la classe et son but gnral, la liste des attributs de la classe (locaux et hrits), la liste des constructeurs de la classe (locaux et hrits), la liste des mthodes de la classe (locaux et hrits), puis, chacune de ces trois dernires listes, avec la description dtaille de chaque lment.

Franois Bonneville - Laboratoire d'Informatique de Besanon

30

LAPI de Java (5)

O trouver les informations sur les classes de lAPI

sous le rpertoire jdk1.x/docs/api dans le JDK les documentations de lAPI se tlchargent et sinstallent (en gnral) dans le rpertoire dans lequel on installe java. Par exemple si vous avez installer Java dans le rpertoire D:/Apps/jdk1.4/, vous dcompresser le fichier zip contenant les documentations dans ce rpertoire. Les docs de lAPI se trouveront alors sous : D:/Apps/jdk1.4/docs/api/index.html Sur le site de Sun, on peut la retrouver http://java.sun.com/docs/index.html
Franois Bonneville - Laboratoire d'Informatique de Besanon 31

LAPI de Java (6)

Franois Bonneville - Laboratoire d'Informatique de Besanon

32

Outil de dveloppement : le JDK


Environnement de dveloppement fourni par Sun JDK signifie Java Development Kit (Kit de dveloppement Java). Il contient :

les classes de base de l'API java (plusieurs centaines), la documentation au format HTML le compilateur : javac la JVM (machine virtuelle) : java le visualiseur d'applets : appletviewer le gnrateur de documentation : javadoc etc.
Franois Bonneville - Laboratoire d'Informatique de Besanon 33

Java, un langage novateur?

Java n'est pas un langage novateur : il a puis ses concepts dans d'autres langages existants et sa syntaxe sinspire de celle du C++. Cette philosophie permet Java

De ne pas drouter ses utilisateurs en faisant "presque comme ... mais pas tout fait" D'utiliser des ides, concepts et techniques qui ont fait leurs preuves et que les programmeurs savent utiliser

En fait, Java a su faire une synthse efficace de bonnes ides issues de sources d'inspiration varies

Smalltalk, C++, Ada, etc.


Franois Bonneville - Laboratoire d'Informatique de Besanon 34

Syntaxe du langage Java

Les commentaires

/* commentaire sur une ou plusieurs lignes */

Identiques ceux existant dans le langage C


Identiques ceux existant en C++ Les commentaires d'explication se placent gnralement juste avant une dclaration (d'attribut ou de mthode) Ils sont rcuprs par l'utilitaire javadoc et inclus dans la documentation ainsi gnre.
Franois Bonneville - Laboratoire d'Informatique de Besanon 36

// commentaire de fin de ligne

/** commentaire d'explication */

Instructions, blocs et blancs


Les instructions Java se terminent par un ; Les blocs sont dlimits par :

{ pour le dbut de bloc } pour la fin du bloc


Un bloc permet de dfinir un regroupement dinstructions. La dfinition dune classe ou dune mthode se fait dans un bloc.

Les espaces, tabulations, sauts de ligne sont autoriss. Cela permet de prsenter un code plus lisible.
Franois Bonneville - Laboratoire d'Informatique de Besanon 37

Point dentre dun programme Java

Pour pouvoir faire un programme excutable il faut toujours une classe qui contienne une mthode particulire, la mthode main

cest le point dentre dans le programme : le microprocesseur sait quil va commencer excuter les instructions partir de cet endroit
public static void main(String arg[ ]) { / }

Franois Bonneville - Laboratoire d'Informatique de Besanon

38

Exemple (1)
Fichier Bonjour.java La classe est lunit de base de nos programmes. Le mot cl en Java pour dfinir une classe est class

public class Bonjour { //Accolade dbutant la classe Bonjour public static void main(String args[]) { //Accolade dbutant la mthode main /* Pour linstant juste une instruction */ System.out.println(bonjour); } //Accolade fermant la mthode main } //Accolade fermant la classe Bonjour

Franois Bonneville - Laboratoire d'Informatique de Besanon

39

Exemple (2)
Fichier Bonjour.java Accolades dlimitant le dbut et la fin de la dfinition de la class Bonjour

public class Bonjour { public static void main(String args[]) { System.out.println(bonjour); } }

Accolades dlimitant le dbut et la fin de la mthode main

Les instructions se terminent par des ;

Franois Bonneville - Laboratoire d'Informatique de Besanon

40

Exemple (3)
Fichier Bonjour.java

public class Bonjour { public static void main(String args[]) { System.out.println(bonjour); } }

Une mthode peut recevoir des paramtres. Ici la mthode main reoit le paramtre args qui est un tableau de chane de caractres.

Franois Bonneville - Laboratoire d'Informatique de Besanon

41

Compilation et excution (1)


Fichier Bonjour.java Compilation en bytecode java dans une console DOS: javac Bonjour.java Gnre un fichier Bonjour.class Excution du programme (toujours depuis la console DOS) sur la JVM : java Bonjour Affichage de bonjour dans la console Le nom du fichier est ncessairement celui de la classe avec lextension .java en plus. Java est sensible la casse des lettres.

public class Bonjour


{ public static void main(String[] args) { System.out.println(bonjour); } }

Franois Bonneville - Laboratoire d'Informatique de Besanon

42

Compilation et excution (3)

Pour rsumer, dans une console DOS, si jai un fichier Bonjour.java pour la classe Bonjour :

javac Bonjour.java Compilation en bytecode java Indication des erreurs de syntaxe ventuelles Gnration dun fichier Bonjour.class si pas derreurs java Bonjour Java est la machine virtuelle Excution du bytecode Ncessit de la mthode main, qui est le point dentre dans le programme

Franois Bonneville - Laboratoire d'Informatique de Besanon

43

Identificateurs (1)

On a besoin de nommer les classes, les variables, les constantes, etc. ; on parle didentificateur. Les identificateurs commencent par une lettre, _ ou $
Attention : Java distingue les majuscules des minuscules

Conventions sur les identificateurs :

Si plusieurs mots sont accols, mettre une majuscule chacun des mots sauf le premier. exemple : uneVariableEntiere La premire lettre est majuscule pour les classes et les interfaces exemples : MaClasse, UneJolieFenetre
Franois Bonneville - Laboratoire d'Informatique de Besanon 44

Identificateurs (2)

Conventions sur les identificateurs :

La premire lettre est minuscule pour les mthodes, les attributs et les variables exemples : setLongueur, i, uneFenetre Les constantes sont entirement en majuscules exemple : LONGUEUR_MAX

Franois Bonneville - Laboratoire d'Informatique de Besanon

45

Les mots rservs de Java


abstract boolean break byte case catch char class continue const default do double else extends false final finally float for goto if implements import instanceof int interface long native new

null package private protected public return short static super switch

synchronized this throw throws transient true try void volatile while

Franois Bonneville - Laboratoire d'Informatique de Besanon

46

Les types de bases (1)


En Java, tout est objet sauf les types de base. Il y a huit types de base :

un type boolen pour reprsenter les variables ne pouvant prendre que 2 valeurs (vrai et faux, 0 ou 1, etc.) : boolean avec les valeurs associes true et false un type pour reprsenter les caractres : char quatre types pour reprsenter les entiers de divers taille : byte, short, int et long deux types pour reprsenter les relles : float et double

La taille ncessaire au stockage de ces types est indpendante de la machine.


Avantage : portabilit Inconvnient : "conversions" coteuses


Franois Bonneville - Laboratoire d'Informatique de Besanon 47

Les types de bases (2) : les entiers

Les entiers (avec signe)

byte : cod sur 8 bits, peuvent reprsenter des entiers allant de -27 27 1 (-128 +127) short : cod sur 16 bits, peuvent reprsenter des entiers allant de -215 215 1 int : cod sur 32 bits, peuvent reprsenter des entiers allant de -231 231 1 long : cod sur 64 bits, peuvent reprsenter des entiers allant de -263 263 1
Franois Bonneville - Laboratoire d'Informatique de Besanon 48

Les types de bases (3) : les entiers

Notation

2 entier normal en base dcimal 2L entier au format long en base dcimal 010 entier en valeur octale (base 8) 0xF entier en valeur hexadcimale (base 16) oprateurs arithmtiques +, -, * / :division entire si les 2 arguments sont des entiers % : reste de la division entire exemples :

Oprations sur les entiers


15 / 4 donne 3 15 % 2 donne 1
49

Franois Bonneville - Laboratoire d'Informatique de Besanon

Les types de bases (4) : les entiers

Oprations sur les entiers (suite)

les oprateurs dincrmentation ++ et de dcrmentation et -

ajoute ou retranche 1 une variable


int n = 12; n ++; //Maintenant n vaut 13

n++; quivalent n = n+1; n--; quivalent n = n-1; 8++; est une instruction illgale peut sutiliser de manire suffixe : ++n. La diffrence avec la version prfixe se voit quand on les utilisent dans les expressions. En version suffixe la (d/inc)rmentation seffectue en premier
int m=7; int n=7; int a=2 * ++m; //a vaut 16, m vaut 8 int b=2 * n++; //b vaut 14, n vaut 8
Franois Bonneville - Laboratoire d'Informatique de Besanon 50

Les types de bases (5) : les rels

Les rels

float : cod sur 32 bits, peuvent reprsenter des nombres allant de -1035 + 1035 double : cod sur 64 bits, peuvent reprsenter des nombres allant de -10400 +10400

Notation

4.55 ou 4.55D rel double prcision 4.55f rel simple prcision


Franois Bonneville - Laboratoire d'Informatique de Besanon 51

Les types de bases (6) : les rels

Les oprateurs

oprateurs classiques +, -, *, / attention pour la division :


15 / 4 donne 3 division entire 15 % 2 donne 1 11.0 / 4 donne 2.75 (si lun des termes de la division est un rel, la division retournera un rel).

puissance : utilisation de la mthode pow de la classe Math.

double y = Math.pow(x, a) quivalent x^a, x et a tant de type double


52

Franois Bonneville - Laboratoire d'Informatique de Besanon

Les types de bases (7) : les boolens

Les boolens
boolean

contient soit vrai (true) soit faux (false)

Les oprateurs logiques de comparaisons


: oprateur == Diffrence : oprateur != suprieur et infrieur strictement : oprateurs > et < suprieur et infrieur ou gal : oprateurs >= et <=
Egalit
Franois Bonneville - Laboratoire d'Informatique de Besanon 53

Les types de bases (8) : les boolens

Notation

boolean x; x= true; x= false; x= (5==5); // l expression (5==5) est value et la valeur est affecte x qui vaut alors vrai x= (5!=4); // x vaut vrai, ici on obtient vrai si 5 est diffrent de 4 x= (5>5); // x vaut faux, 5 n'est pas suprieur strictement 5 x= (5<=5); // x vaut vrai, 5 est bien infrieur ou gal 5

Franois Bonneville - Laboratoire d'Informatique de Besanon

54

Les types de bases (9) : les boolens

Les autres oprateurs logiques


et logique : && ou logique : || non logique : ! Exemples : si a et b sont 2 variables boolennes boolean a,b, c; a= true; b= false; c= (a && b); // c vaut false c= (a || b); // c vaut true c= !(a && b); // c vaut true c=!a; // c vaut false
Franois Bonneville - Laboratoire d'Informatique de Besanon 55

Les types de bases (10) : les caractres

Les caractres

char : contient une seule lettre le type char dsigne des caractres en reprsentation Unicode Codage sur 2 octets contrairement ASCII/ANSI cod sur 1 octet. Le codage ASCII/ANSI est un sous-ensemble dUnicode Notation hexadcimale des caractres Unicode de \u0000 \uFFFF . Plus dinformation sur Unicode : www.unicode.org
Franois Bonneville - Laboratoire d'Informatique de Besanon 56

Les types de bases (11) : les caractres


Notation
char a,b,c; // a,b et c sont des variables du type char a='a'; // a contient la lettre 'a' b= '\u0022' //b contient le caractre guillemet : " c=97; // x contient le caractre de rang 97 : 'a'

Franois Bonneville - Laboratoire d'Informatique de Besanon

57

Les types de bases (12) exemple et remarque


int x = 0, y = 0; float z = 3.1415F; double w = 3.1415; long t = 99L; boolean test = true; char c = 'a';

Remarque importante :

Java exige que toutes les variables soient dfinies et initialises. Le compilateur sait dterminer si une variable est susceptible d'tre utilise avant initialisation et produit une erreur de compilation.
Franois Bonneville - Laboratoire d'Informatique de Besanon 58

Les structures de contrles (1)


Les

structures de contrle classiques existent en Java :

if, else switch, case, default, break for while do, while
Franois Bonneville - Laboratoire d'Informatique de Besanon 59

Les structures de contrles (2) : if / else

Instructions conditionnelles

Effectuer une ou plusieurs instructions seulement si une certaine condition est vraie if (condition) instruction; et plus gnralement : if (condition) { bloc dinstructions}
condition doit tre un boolen ou renvoyer une valeur boolenne

Effectuer une ou plusieurs instructions si une certaine condition est vrifie sinon effectuer dautres instructions if (condition) instruction1; else instruction2; et plus gnralement if (condition) { 1er bloc dinstructions} else {2me bloc dinstruction}
Franois Bonneville - Laboratoire d'Informatique de Besanon 60

Les structures de contrles (3) : if / else


Max.java
import java.io.*; public class Max { public static void main(String args[]) { Console console = System.console(); int nb1 = Integer.parseInt(console.readLine("Entrer un entier:")); int nb2 = Integer.parseInt(console.readLine("Entrer un autre entier:")); if (nb1 > nb2) System.out.println("l'entier le plus grand est "+ nb1); else System.out.println("l'entier le plus grand est "+ nb2); } }
Franois Bonneville - Laboratoire d'Informatique de Besanon 61

Les structures de contrles (4) : while

Boucles indtermines

On veut rpter une ou plusieurs instructions un nombre indtermins de fois : on rpte linstruction ou le bloc dinstruction tant que une certaine condition reste vraie nous avons en Java une premire boucle while (tant que) while (condition) {bloc dinstructions} les instructions dans le bloc sont rptes tant que la condition reste vraie. On ne rentre jamais dans la boucle si la condition est fausse ds le dpart

Franois Bonneville - Laboratoire d'Informatique de Besanon

62

Les structures de contrles (5) : while

Boucles indtermines

un autre type de boucle avec le while: do {bloc dinstructions} while (condition) les instructions dans le bloc sont rptes tant que la condition reste vraie. On rentre toujours au moins une fois dans la boucle : la condition est teste en fin de boucle.

Franois Bonneville - Laboratoire d'Informatique de Besanon

63

Les structures de contrles (6) : while


Facto1.java import java.io.*;

public class Facto1 { public static void main(String args[]) { int n, result,i; n = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:")); result = 1; i = n; while (i > 1) { result = result * i; i--; } System.out.println("la factorielle de "+n+" vaut "+result); } }
Franois Bonneville - Laboratoire d'Informatique de Besanon 64

Les structures de contrles (7) : for

Boucles dtermines

On veut rpter une ou plusieurs instructions un nombre dtermins de fois : on rpte linstruction ou le bloc dinstructions pour un certain nombre de pas. La boucle for for (int i = 1; i <= 10; i++) System.out.println(i); //affichage des nombres de 1 10 une boucle for est en fait quivalente une boucle while for (instruction1; expression1; expression2) {bloc} est quivalent instruction 1; while (expression1) {bloc; expression2}}

Franois Bonneville - Laboratoire d'Informatique de Besanon

65

Les structures de contrles (8) : for


Facto2.java import java.io.*; public class Facto2 { public static void main(String args[]) { int n, result,i; n = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:")); result = 1; for(i =n; i > 1; i--) { result = result * i; } System.out.println("la factorielle de "+n+" vaut "+result); } }

Franois Bonneville - Laboratoire d'Informatique de Besanon

66

Les structures de contrles (9) : switch

Slection multiples

lutilisation de if / else peut savrer lourde quand on doit traiter plusieurs slections et de multiples alternatives pour cela existe en Java le switch / case assez identique celui de C/C++ La valeur sur laquelle on teste doit tre un char ou un entier ( lexclusion dun long). Lexcution des instructions correspondant une alternative commence au niveau du case correspondant et se termine la rencontre dune instruction break ou arrive la fin du switch

Franois Bonneville - Laboratoire d'Informatique de Besanon

67

Les structures de contrles (10) : switch


Alternative.java

import java.io.*;

Variable contenant la valeur que lon veut tester.

public class Alternative Premire alternative : { on affiche Un et on sort public static void main(String args[]) du bloc du switch au break; { int nb = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:")); switch(nb) { Deuxime alternative : case 1: on affiche Deux et on sort System.out.println("Un"); break; du bloc du switch au break; case 2: System.out.println("Deux"); break; default: Alternative par dfaut: System.out.println("Autre nombre"); break; on ralise une action } par dfaut. } } Franois Bonneville - Laboratoire d'Informatique de Besanon 68

Les tableaux (1)

Les tableaux permettent de stocker plusieurs valeurs de mme type dans une variable.

Les valeurs contenues dans la variable sont repres par un indice En langage java, les tableaux sont des objets int tab [ ]; String chaines[ ];

Dclaration

Cration d'un tableau


tab = new int [20]; // tableau de 20 int chaines = new String [100]; // tableau de 100 chaine

Franois Bonneville - Laboratoire d'Informatique de Besanon

69

Les tableaux (2)

Le nombre d'lments du tableau est mmoris. Java peut ainsi dtecter l'excution le dpassement d'indice et gnrer une exception. Mot cl length Il est rcuprable par nomTableau.length
int taille = tab.length; //taille vaut 20

Comme en C/C++, les indices dun tableau commencent 0 . Donc un tableau de taille 100 aura ses indices qui iront de 0 99.

Franois Bonneville - Laboratoire d'Informatique de Besanon

70

Les tableaux (3)

Initialisation
tab[0]=1; tab[1]=2; //etc. noms[0] = new String( "Boule"); noms[1] = new String( "Bill");//etc

Cration et initialisation simultanes


String noms [ ] = {"Boule","Bill"}; Point pts[ ] = { new Point (0, 0), new Point (10, -1)};

Franois Bonneville - Laboratoire d'Informatique de Besanon

71

Les tableaux (4)


Tab1.java public class Tab1 { public static void main (String args[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } }

Pour dclarer une variable tableau on indique le type des lments du tableau et le nom de la variable tableau suivi de [ ] on utilise new <type> [taille]; pour initialiser le tableau On peut ensuite affecter des valeurs au diffrentes cases du tableau : <nom_tableau>[indice]
72

Les indices vont toujours de 0 (taille-1)

Franois Bonneville - Laboratoire d'Informatique de Besanon

Les tableaux (5)


Tab1.java public class Tab1 { public static void main (String args[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } } Mmoire

0x0000 0x258 0 0 0 0

Franois Bonneville - Laboratoire d'Informatique de Besanon

73

Les tableaux (6)


Tab1.java public class Tab1 { public static void main (String args[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } } Mmoire

0x258

5 0 0 3 0 7 0 8

Franois Bonneville - Laboratoire d'Informatique de Besanon

74

Les tableaux (7)


Tab2.java public class Tab2 { public static void main (String args[]) { String tab[ ] ; tab = new String[4]; tab[0]=new String("Pierre"); tab[1]=new String("Paul"); tab[2]=new String("Jacques"); tab[3]=new String("Philippe"); } } Mmoire

0x0258
0x0106 0x0116 0x0126 0x0136

"Pierre" "Paul" "Jacques" "Philippe"

Franois Bonneville - Laboratoire d'Informatique de Besanon

75

La classe String (1)

Attention ce nest pas un type de base. Il s'agit d'une classe dfini dans lAPI Java (Dans le package java.lang)
String s="aaa"; // s contient la chane "aaa" mais String s=new String("aaa"); // identique la ligne prcdente

La concatnation
loprateur + entre 2 String les concatne : String str1 = "Bonjour ! "; String str2 = null; str2 = "Comment vas-tu ?"; String str3 = str1 + str2; / * Concatnation de chanes : str3 contient " Bonjour ! Comment vas-tu ?"

Franois Bonneville - Laboratoire d'Informatique de Besanon 76

Diffrences entre objets et types de base


Mmoire int x=3,y=3; x == y est vrai 3

3
0x768 0x852

String s1="abc",s2="abc"; s1 == s2 est faux... Quand on compare 2 variables dun type de base on compare leur valeur. Quand on compare 2 objet avec les oprateurs on compare leur rfrence (leur adresse en mmoire). Introduction de la mthode equals() pour les objets : s1.equals(s2) est vrai
Franois Bonneville - Laboratoire d'Informatique de Besanon

Abc ....

Abc ....

77

La classe String (2)

Longueur dun objet String :

mthode int length() : renvoie la longueur de la chane String str1 = "bonjour"; int n = str1.length(); // n vaut 7 mthode String substring(int debut, int fin) extraction de la sous-chaine depuis la position debut jusqu la position fin non-comprise. String str2 = str1.substring(0,3); // str2 contient la valeur "bon" le premier caractre dune chane occupe la position 0 le deuxime paramtre de substring indique la position du premier caractre que l on ne souhaite pas copier
Franois Bonneville - Laboratoire d'Informatique de Besanon 78

Sous-chanes

La classe String (3)

Rcupration dun caractre dans une chane

mthode char charAt(int pos) : renvoie le caractre situ la position pos dans la chane de caractre laquelle on envoie se message String str1 = "bonjour"; char unJ = str1.charAt(3); // unJ contient le caractre 'j' Les String sont inaltrables en Java : on ne peut modifier individuellement les caractres dune chane. Par contre il est possible de modifier le contenu de la variable contenant la chane (la variable ne rfrence plus la mme chane). str1 = str1.substring(0,3) + " soir"; /* str1 contient maintenant la chane "bonsoir" */
Franois Bonneville - Laboratoire d'Informatique de Besanon 79

Modification des objets String


La classe String (4)

Les chanes de caractres sont des objets :


pour tester si 2 chanes sont gales il faut utiliser la mthode boolean equals(String str) et non == pour tester si 2 chanes sont gales la casse prs il faut utiliser la mthode boolean equalsIgnoreCase(String str) String str1 = "BonJour"; String str2 = "bonjour"; String str3 = "bonjour"; boolean a, b, c, d; a = str1.equals("BonJour"); //a contient la valeur true b = (str2 = = str3); //b contient la valeur false c = str1.equalsIgnoreCase(str2);//c contient la valeur true d = "bonjour".equals(str2); //d contient la valeur true
Franois Bonneville - Laboratoire d'Informatique de Besanon 80

La classe String (5)

Quelques autres mthodes utiles


boolean startsWith(String str) : pour tester si une chaine de caractre commence par la chaine de caractre str boolean endsWith(String str) : pour tester si une chane de caractre se termine par la chaine de caractre str String str1 = "bonjour "; boolean a = str1.startsWith("bon");//a vaut true boolean b = str1.endsWith("jour");//b vaut true

Franois Bonneville - Laboratoire d'Informatique de Besanon

81

La classe String (7)


Plus dinformations dans les documentations de lAPI dans le package java.lang

Franois Bonneville - Laboratoire d'Informatique de Besanon

82

La classe Math

Les fonctions mathmatiques les plus connues sont regroupes dans la classe Math qui appartient au package java.lang

les fonctions trigonomtriques les fonctions darrondi, de valeur absolue, ... la racine carre, la puissance, lexponentiel, le logarithme, etc.

Ce sont des mthodes de classe (static)


double calcul = Math.sqrt (Math.pow(5,2) + Math.pow(7,2)); double sqrt(double x) : racine carre de x double pow(double x, double y) : x puissance y

Franois Bonneville - Laboratoire d'Informatique de Besanon

83