Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 1
Aujourd hui Eléments de base Variables, opérateurs, type d une expression Tests, boucles Tableaux méthodes Programmation Orientée Objet objets et classes attributs et méthodes constructeurs un mot sur la compilation et l exécution en Java une première classe Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 2
Instructions et commentaires 1 // la suite est un commentaire 1 /* ceci est un commentaire 2 sur plusieurs 3 lignes */ Une instruction est une phrase qui respecte la grammaire de Java. Une instruction se termine toujours par un point virgule ; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 3
Types élémentaires type élémentaire nombre de bits interval de valeurs boolean 1 deux valeurs true et false byte 8 un entier entre -128 et 127 short 16 un entier entre -2 15 = 32768 et 2 15 1=32767 int 32 un entier entre -2 31 2.1 10 9 et 2 31 1 2.1 10 9 long 64 un entier entre -2 63 9.2 10 18 et 2 63 1 9.2 10 18 char 16 caractère unicode, il y a 65536 codes float 32 nombre flottant norme IEEE double 64 nombre flottant norme IEEE Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 4
Variables : déclaration et initialisation déclaration simple : <type> <nom>; déclaration avec affectation : <type> <nom> = <valeur dans le type> <variable> <expression> ; déclaration multiple : <type> <nom 1 >, <nom 2 >,..., <nom k >; déclaration multiple avec affection partielle : <type> <nom 1 >, <nom 2 >= <valeur dans le type>,..., <nom k >; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 5
Exemples 1 short population ; 2 population = 30000; 1 short population = 1.000.000 ; 1 long nbparticules = 10.000.000.000 ; 1 long nbparticules = 10.000.000.000L ; 1 char lettre = c ; 1 boolean test = true; 2 test = false; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 6
Exemples 1 short population ; 2 population = 30000; 1 short population = 1.000.000 ; 1 long nbparticules = 10.000.000.000 ; 1 long nbparticules = 10.000.000.000L ; 1 char lettre = c ; 1 boolean test = true; 2 test = false; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 7
Exemples 1 short population ; 2 population = 30000; 1 short population = 1.000.000 ; 1 long nbparticules = 10.000.000.000 ; 1 long nbparticules = 10.000.000.000L ; 1 char lettre = c ; 1 boolean test = true; 2 test = false; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 8
Exemples 1 short population ; 2 population = 30000; 1 short population = 1.000.000 ; 1 long nbparticules = 10.000.000.000 ; 1 long nbparticules = 10.000.000.000L ; 1 char lettre = c ; 1 boolean test = true; 2 test = false; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 9
Exemples 1 short population ; 2 population = 30000; 1 short population = 1.000.000 ; 1 long nbparticules = 10.000.000.000 ; 1 long nbparticules = 10.000.000.000L ; 1 char lettre = c ; 1 boolean test = true; 2 test = false; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 10
Exemples 1 short population ; 2 population = 30000; 1 short population = 1.000.000 ; 1 long nbparticules = 10.000.000.000 ; 1 long nbparticules = 10.000.000.000L ; 1 char lettre = c ; 1 boolean test = true; 2 test = false; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 11
Transtypage ou cast On a la situation suivante : 1 <type 1 > <nom 1 > = <valeur 1 >; 2 <type 2 > <nom 2 > = <nom 1 >; La conversion ou cast peut rester implicite si le <type 1 > est «moins fort»que le <type 2 > 1 int i = 10; 2 double x = i; La conversion doit devenir explicite si le <type 1 > est «strictement plus fort»que le <type 2 > : il faut indiquer au compilateur d effectuer la conversion. 1 double x= 3.1416; 2 int i = (int)x; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 12
Opérateurs unaires Opérateur priorité action exemples + 1 signe positif +a; +7-1 signe négatif -a; -(a-b); -7! 1 négation logique!(a<b); ++ affectation et incrément de 1 n++;++n; affectation et incrément de 1 n++; i; Opérateurs unaires Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 13
Opérateurs binaires Opérateur priorité action exemples * 2 multiplication a * i / 2 division n/10 % 3 reste de la division entière k%n + 3 addition 1+2-3 soustraction x-5 < 5 strictement inférieur i<n <= 5 inférieur ou égal i <= n > 5 strictement supérieur i < n >= 5 supérieur ou égal i >= n == 6 égalité i==j!= 6 différent i!=j & 7 conjonction (et logique) (i<j) & (i<n) 9 disjonction (ou logique) (i<j) (i<n) && 10 conjonction optimisée (i<j) && (i<n) 11 disjonction optimisée (i<j) (i<n) = affectation x = 10; x=n; +=, -= affectation et incrément i += 2; j-=4 Opérateurs binaires Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 14
Exemple 1 int i=2, j = i++ ; 2 i=2 ; 3 j= ++i ; Attention à ne pas utiliser = pour faire un test d égalité! Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 15
Opérateur conditionnel ternaire 1 result = unecondition? value1 : value2; Si le test (une expression booléenne) unecondition est vérifié, alors la variable result prend la valeur value1, sinon elle prend la valeur value2. 1 double x,y, r=1.0; 2... 3 boolean interieur = x*x + y*y < r? true : false Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 16
Type d une expression Le code suivant est-il correct? 1 int i = 5,j; 2 double x = 5.0; 3 j=i/2; 4 j=x/2; 1 double x=2.75; 2 int y = (int) x * 2; 3 int z = (int) (x *2); Quelles sont les valeurs de y et z? Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 17
Type d une expression Le code suivant est-il correct? 1 int i = 5,j; 2 double x = 5.0; 3 j=i/2; 4 j=x/2; 1 double x=2.75; 2 int y = (int) x * 2; 3 int z = (int) (x *2); Quelles sont les valeurs de y et z? Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 18
Les Tableaux Déclaration 1 <type> [] ligne; 2 <type> [][] rectangle; 3 <type> [][][] cube; Création d un tableau : il faut connaître la taille du tableau. 1 <type> [] ligne = new <type>[<taille 1 >]; 2 <type> [][] rectangle = 3 new <type>[<taille 2 >][<taille 3 >]; La taille du tableau : cube.length Attention! le premier élément d un tableau a pour index 0, et donc le dernier élément a pour index length-1. Accès aux éléments du tableau avec [] : rectangle[3][4] + cube[1][2][5]; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 19
Exemples 1 int[][][] cube = new int[3][4][5]; 2 int[][] rectangle = cube[2]; 3 int n1 = cube.length; 4 int n2 = cube[0].length; 5 int n3 = cube[0][0].length; Initialisation possible avec une syntaxe de type «liste» : premiers : 2 3 5 7 11 13 17 19 triangle : 1 int[] premiers = {2, 3, 5, 7, 11, 13, 17, 19 }; 2 int[][] triangle = {{1,1,1,1}, { 0,1,1,1}, 3 { 0, 0, 1, 1}, {0, 0, 0, 1} } ; 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 20
Blocs Un bloc rassemble des instructions. Les variables déclarées dans un bloc interne ne sont pas connues dans un bloc plus externe. 1 int a,b=10; 2 { 3 int d=2*b; 4 { 5 int e=b+d; 5 a=e*d; 6 { 5 int g= b+ d*e; 6 } 6 } 7 } a et b sont connus partout. d est connu seulement dans la partie rouge e est connu seulement dans la partie blue g est connu seulement dans la partie verte Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 21
La structure if... then... else 1 if ( <expression booléenne> ) 2 <bloc d instructions à exécuter 3 si la condition est satisfaite> 4 else 5 <bloc d instructions à exécuter 6 si la condition n est pas satisfaite> 1 int gains,payment,encaissement,invest; 2 // opérations qui modifient la variable gains 3... 4 if (gains<0) 5 payment = gains; 6 else if (gains > 10) { 7 encaissement = 10; 8 invest = gains-10; 9 } 10 else 11 encaissement = gains; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 22
Choix multiples 1 int choix; 2... 3 // l utilisateur modifie la valeur de choix 4... 5 switch(choix) { 6 case 1: 7 //instructions pour le choix 1 8... 9 break; 10 case 2: 11 //instructions pour le choix 2 12... 13 break; 14 default 15 // instructions dans le reste des cas 16... 17 } Le switch peut s effectuer sur deux types de variables : int et char. Depuis la version 7, on peut aussi utiliser une chaîne de caractères Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 23
Boucle for 1 for (<initialisation> 2 <condition de fin> ; 3 <mise à jour des valeurs>) 4 <bloc d instructions> que se passe-t-il? 1 for ( ; ; ){ 2 // instructions 3 } un exemple classique : 0 int n=10; 1 for (int i=0; i< n; i++ ){ 2 // instructions 3 } Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 24
autre exemple 0 int n=10; 1 for (int i=0, j=n; j< i; i++; j ){ 2 // instructions 3 } Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 25
Boucle while 1 while(<condition>) 2 <bloc d instructions> Le bloc d instructions est exécuté tant que la condition est satisfaite. un exemple qui va essayer de déterminer si la suite définie par u : n r n converge : 1 double epsilon = 0.0000001; 2 double r = 0.75, u=1; 3 while(-epsilon >= u-u*r u - u* r >= epsilon) 4 u = u * r ; Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 26
Boucle do... while 1 do 2 <bloc d instructions> 3 while(<condition>); Attention : ne pas oublier le ; à la fin du while! 1 double epsilon = 0.0000001; 2 double r = 0.75, u=1; 3 do 4 u = u * r ; 5 while ( -epsilon >= u-u*r u - u* r >= epsilon); Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 27
choix du type de de la boucle généralement, si on connait le nombre d itérations, on utilise une boucle for. qu est-ce qui est plus élégant? qu est-ce qui sera le plus facile à lire pour un autre lecteur? ex : chercher un élément dans un tableau? chercher l élément le plus grand d un tableau? déterminer si un nombre est premier? Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 28
Méthodes But : rassembler une suite d instructions que l on répète dans le code. en utilisant des méthodes, le code devient plus lisible moins long si on veut modifier le code, il n y a plus qu un seul endroit à changer. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 29
Méthode 1 public static <type de retour> <nom> 2 ( <liste de paramètres>) { 3 corps de la méthode : suite d instructions 4 } Le sens de public et static seront vus plus tard dans le cours l ordre des arguments est important! si la méthode ne retourne rien, son type de retour est void. sinon, on retourne la valeur en utilisant le mot-clé return. choisir un nom de méthodes parlant Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 30
Exemple 1 public static int max( int[] tableau) { 2 int m= tableau[0]; 3 for (int i=1;i<tableau.length; i++){ 4 if (tableau[i] > m) 5 m = tableau[i]; 6 } 7 return m; 8 } Appel de la méthode 1 int tab = {7, 12, 15, 9, 11, 17, 13}; 2 int m = max(tab); Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 31
Surcharge nom de méthode + liste d arguments = signature La signature est unique. On peut utiliser le même nom mais avoir une liste d arguments différente on appelle cette possibilité la surcharge de la méthode. 1 public static double max( double[] tableau) { 2 double m= tableau[0]; 3 for (int i=1;i<tableau.length; i++){ 4 if (tableau[i] > m) 5 m = tableau[i]; 6 } 7 return m; 8 } Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 32
Passage des arguments de types primitifs 1 public int f(int n){ 2 n = 3 * n * n -2 *n + 1 3 if (n > 0) 4 return n; 5 else 6 return 0; 7 } 1 int i=13; 2 int j= f(i); Quelle est la valeur de i? Le passage des arguments se fait par valeur (i.e. on copie la valeur de la variable passée en arguments). Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 33
Programmation orientée Objet en Java Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 34
Objets et Classes Un objet se définit par ses états (on peut aussi parler de ses caractéristiques) et son comportement. exemple d un objet voiture Etats marque modèle cylindrée quantité d essence niveau d huile pression des pneus nombre de tours Comportements accélerer passer rapport supérieur passer rapport inférieur tourner volant ouvrir porte fermer porte freiner Une classe est un plan ou un moule pour fabriquer des objets. les états d un objet vont être représentés par des variables les comportements d un objet seront representés par des méthodes. Un objet est une instance d une classe. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 35
Autrement dit Une classe est un type abstrait caractérisé par des propriétés (attributs et méthodes) communes à un ensemble d objets et permettant de créer des objets ayant ces propriétés. Un objet ou une instance de classe possède un comportement et un état qui ne peut être modifié que par les actions du comportement. On peut créer une classe Personnage car tous les personnages partagent les mêmes caractéristiques. Lorsqu on veut créer un personnage, on instantie la classe Personnage N.B. par convention, le nom d une classe commence toujours par une majuscule. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 36
Des classes déjà existentes Java possède une large librairie de classes. La librairie se compose de différents packages et sous-packages. http://docs.oracle.com/javase/7/docs/api/ overview-summary.html Par exemple, le package java.lang contient des classes de bases du langage Java. On y trouve aussi une classe pour manipuler les chaînes de caractères appelée String. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 37
Attributs et variables de classe variables d instance ou attributs : ces variables définissent les caractéristiques de l objet. initialisation optionnelle. accès : <nom objet>.<nom attribut> variables de classe : ces variables sont communes à toutes les instances de la classe, déclaration avec le mot clé static initialisation obligatoire accès : <nom de classe>.<nom variable de classe> exemple : classe Float pour encapsuler un nombre flottant float. variables de classes : MAX_VALUE, MAX_EXPONENT, NaN, etc. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 38
méthodes d instance et méthodes de classe méthode d instance : ces méthodes permettent de modifier ou d accéder à l état de l objet. méthode de classe : ces méthodes ne modifient pas l état interne d un objet. exemple : la classe Float méthode d instance String tostring() retourne une représentation en chaîne de caractères de l objet courant méthode de classe static String tostring(float f) retourne une représentation en chaîne de caractères du float passé en paramètre 1 Float f; 2 System.out.println(f.toString()); 3 System.out.println(Float.toString(3.1419)); Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 39
Encapsulation Les comportements et les états d un objets peuvent être connus de tous public toute classe peut exécuter la méthode publique modifier ou accéder à un attribut publique cachés private la méthode ou l attribut ne peut être accédée que depuis l intérieur de la classe cacher un méchanisme interne (on pourra changer une implémentation sans que cela ait un impact sur la partie publique). protection Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 40
Constructeurs Une classe est un plan ou un moule pour fabriquer un objet, ce qu on appelle instancier un objet. Les méthodes pour instancier un objet sont appelées des constructeurs. Un constructeur porte le nom de la classe n a pas de type de retour. On appelle constructeur par défaut le constructeur sans arguments : 1 public class <nom classe> { 2 // déclaration des variable d instances et 3 // variables de classe.... 5 // constructeur par défaut 6 public <nom classe>(){ 7 // corps de la méthode 8 } 9 } Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 41
Exemple La surcharge permet d avoir des constructeurs avec des signatures différentes. Pour une classe Personnage, on peut donc écrire : 1 public class Personnage { 2 public String nom; 3 4 // constructeur par défaut 5 public Personnage(){ 6 nom = Inconnu"; 7 } 8 9 public Personnage(String name){ 10 nom = name; 11 } 12 } Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 42
Création d un objet Déclaration : comme pour les types primitifs : <Nom de la classe> <nom objet>; Création/initialisation à l aide du mot clé new et appel du constructeur : new <Nom de classe>(<liste d arguments>);. comme pour les types primitifs, on peut déclarer et initialiser plusieurs objets du même type en même temps. 1 Personnage asterix = new Personnage("Astérix"); 2 Personnage obelix = new Personnage("Obelix"), 3 Personnage idefix = new Personnage( Idéfix ), 4 Personnage romain = new Personnage(); Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 43
Egalité 1 Personnage asterix = new Personnage("Astérix"); 2 Personnage asterixbis = asterix; 3 Personnage asterixter = new Personnage("Astérix"); 4 if (asterix == asterixbis) 5 System.out.println("Bleu"); 6 else 7 System.out.println("Rouge"); 8 if (asterix == asterixter) 9 System.out.println("Bleu"); 10 else 11 System.out.println("Rouge"); Qu est-ce qui est affiché sur la console? la variable est une référence vers l objet et non l objet lui même == désigne l égalité de la référence : deux variables peuvent pointer vers le même objet pour tester l égalité entre les propriétés de l objet, on utilise la méthode boolean equals(object o). Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 44
Egalité 1 Personnage asterix = new Personnage("Astérix"); 2 Personnage asterixbis = asterix; 3 Personnage asterixter = new Personnage("Astérix"); 4 if (asterix == asterixbis) 5 System.out.println("Bleu"); 6 else 7 System.out.println("Rouge"); 8 if (asterix == asterixter) 9 System.out.println("Bleu"); 10 else 11 System.out.println("Rouge"); Qu est-ce qui est affiché sur la console? la variable est une référence vers l objet et non l objet lui même == désigne l égalité de la référence : deux variables peuvent pointer vers le même objet pour tester l égalité entre les propriétés de l objet, on utilise la méthode boolean equals(object o). Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 45
Destruction d un objet La destruction des objets est prise en charge par Java à l aide d un garbage collector (GC). Le GC détruit les objets (i.e. efface la mémoire) qui ne sont référencés par aucun autre objet. Les destructions sont asynchrones et il n y a pas de garanties que les objets soient détruits. Une méthode optionnelle nommée finalize est appelée lorsque l objet est détruit. Elle peut par exemple s assurer que des fichiers ou des connexions sont bien fermées avant la destruction de l objet. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 46
Compilation, exécution, machine virtuelle Java n est pas seulement la description d un langage et une bibliothèque de classes. Java dispose d outils pour générer et exécuter du code. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 47
Compilation Chaque classe <MaClasse> est enregistrée dans un fichier <MaClasse>.java : il porte le même nom que la classe et possède l extension.java. Le développeur doit compiler l ensemble de classes à l aide d un programme appelé javac. Le compilateur traduit le code écrit par le développeur en un langage plus simple qui pourra être exécuté. Pour Java, le compilateur produit un code dans le langage bytecode. Le résultat de la compilation est un fichie nommé <MaClasse>.class Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 48
Compilation Pour simplifier, il y a deux étapes lors de la compilation : analyse syntaxique : le code est lu, on forme un arbre de syntaxique. on vérifie la syntaxe du code (i.e. on vérifie la grammaire du code). analyse sémantique : l arbre syntaxique est analysé et traduit en bytecode. les références à des classes extérieures sont vérifiées (on cherche si la classe existe bien, si elle a besoin d être compilée, etc). Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 49
Exécution On exécute une méthode spéciale appelée main. Cette méthode se trouvera dans une classe de votre choix. Si la méthode main se trouve dans une classe MaClasse, on lancera l exécution en lançant l application Java : java MaClass (on peut taper cette commande sous linux ou mac os) La méthode main a une signature fixée par convention 1 public static void main(string[] args) public : pour être appelée de l extérieur de la classe static : pour être appelée sans avoir instancié un objet void : la méthode ne retourne rien String[] args : lors du lancement de l exécution, on peut ajouter du texte et chaque mot sera inséré dans un tableau de String qui peut servir à paramétrer l exécution. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 50
Machine virtuelle Java fournit une machine virtuelle : c est un programme qui lit du code en bytecode et interprète ce code dans le langage de la machine pour l exécuter : Lors de l exécution java MaClass on lance un programme appelée java se programme interprète le code lancé à partir de la méthode main de la classe MaClasse Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 51
Machine Virtuelles avantages : le code est portable : On peut écrire, compiler et exécuter sur des machines d architectures différentes. (ordinateur windows, apple, linux, téléphone mobile, caisse enregistreuse, etc). la machine virtuelle permet de partager d une manière sécurisée une machine le code est généralement plus compact (pas besoin d inclure les bibliothèques comme en C ou C++). la machine virtuelle donne l impression que l on dispose d une machine entière (la machine réelle donner du temps processeur à la machine virtuelle). inconvenients : coût en ressources de la machine virtuelle. Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 52
sous mac OS Code Source.java sous windows sous linux Compilation javac Bytecode.java machine virtuelle Exécution java machine windows machine linux machine apple portable android Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 53
Travaux Pratiques Coder une classe pour manipuler des nombres complexes. retourner une représentation en chaîne de caractères. opérations de base : addition, soustraction, multiplication, division obtenir la partie réelle, la partie imaginaire, l angle et le module opération de rotation et d homothetie Ecrire une méthode main ou vous testerez chaque opération PS : Pour imprimer sur la console utilisez cette méthode : System.out.println(<une chaine de caractères>) PPS : l opérateur + concatène les chaînes de caractères, par exemple par toutatis + asterix.nom Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 54