Академический Документы
Профессиональный Документы
Культура Документы
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...
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)
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
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
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
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
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
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
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.
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)
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
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
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
Simple
Apprentissage facile faible nombre de mots-cls simplifications des fonctionnalits essentielles Dveloppeurs oprationnels rapidement
Familier
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
Fiable
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
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
Applications Java : programmes autonomes, "standalone" Applets (mini-programmes) : Programmes excutables uniquement par l'intermdiaire d'une autre application
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
21
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
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
Inconvnients :
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
25
Langage interprt
Cas de Java
Avant excution Excution
Compilation javac
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.
27
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)
28
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
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.
30
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
32
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 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
Les commentaires
Les instructions Java se terminent par un ; Les blocs sont dlimits par :
Les espaces, tabulations, sauts de ligne sont autoriss. Cela permet de prsenter un code plus lisible.
Franois Bonneville - Laboratoire d'Informatique de Besanon 37
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[ ]) { / }
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
39
Exemple (2)
Fichier Bonjour.java Accolades dlimitant le dbut et la fin de la dfinition de la class Bonjour
40
Exemple (3)
Fichier Bonjour.java
Une mthode peut recevoir des paramtres. Ici la mthode main reoit le paramtre args qui est un tableau de chane de caractres.
41
42
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
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
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)
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
45
null package private protected public return short static super switch
synchronized this throw throws transient true try void volatile while
46
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
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
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 :
15 / 4 donne 3 15 % 2 donne 1
49
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 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
Les oprateurs
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).
Les boolens
boolean
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
54
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 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
57
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
if, else switch, case, default, break for while do, while
Franois Bonneville - Laboratoire d'Informatique de Besanon 59
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
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
62
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.
63
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
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}}
65
66
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
67
import java.io.*;
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 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
69
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.
70
Initialisation
tab[0]=1; tab[1]=2; //etc. noms[0] = new String( "Boule"); noms[1] = new String( "Bill");//etc
71
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
0x0000 0x258 0 0 0 0
73
0x258
5 0 0 3 0 7 0 8
74
0x0258
0x0106 0x0116 0x0126 0x0136
75
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 ?"
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
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
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
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
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
81
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.
83