Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf ·...

54
Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 1

Transcript of Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf ·...

Page 1: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Mise à niveau en JavaCours 1

Stéphane Airiau

Université Paris-Dauphine

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 1

Page 2: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Aujourd’hui

ë Eléments de baseVariables, opérateurs, type d’une expressionTests, bouclesTableauxméthodes

ë Programmation Orientée Objetobjets et classesattributs et méthodesconstructeurs

ë 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

Page 3: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Instructions et commentaires

1 // la suite est un commentaire

1 /* ceci est un commentaire2 sur plusieurs3 lignes */

Une instruction est une phrase qui respecte la grammaire deJava.

Une instruction se termine toujours par un point virgule ;

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 3

Page 4: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Types élémentaires

typeélémentaire

nombrede bits interval de valeurs

boolean 1 deux valeurs true et falsebyte 8 un entier entre -128 et 127short 16 un entier entre -215=−32768 et 215 −1=32767int 32 un entier entre -231 ≈−2.1 ·109 et 231 −1≈ 2.1 ·109

long 64 un entier entre -263 ≈−9.2 ·1018 et 263 −1≈ 9.2 ·1018

char 16 caractère unicode, il y a 65536 codesfloat 32 nombre flottant norme IEEEdouble 64 nombre flottant norme IEEE

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 4

Page 5: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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> <nom1>, <nom2>, . . ., <nomk>;

déclaration multiple avec affection partielle :<type> <nom1>, <nom2>= <valeur dans le type>,. . ., <nomk>;

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 5

Page 6: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 7: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 8: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 9: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 10: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 11: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 12: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Transtypage ou cast

On a la situation suivante :1 <type1> <nom1> = <valeur1>;2 <type2> <nom2> = <nom1>;

La conversion ou cast peut rester implicite si le <type1>est « moins fort »que le <type2>

1 int i = 10;2 double x = i;

La conversion doit devenir explicite si le <type1> est« strictement plus fort »que le <type2> : il faut indiquerau 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

Page 13: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 14: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 15: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 16: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 17: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 18: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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

Page 19: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Les Tableaux

Déclaration1 <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>[<taille1>];2 <type> [][] rectangle =3 new <type>[<taille2>][<taille3>];

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

Page 20: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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 1 1 10 1 1 10 0 1 10 0 0 1

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} };

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 20

Page 21: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Blocs

Un bloc rassemble des instructions.Les variables déclarées dans un bloc interne ne sont pasconnues 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 rougee est connu seulement dans la partie blueg est connu seulement dans la partie verte

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 21

Page 22: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

La structure if . . . then . . . else

1 if ( <expression booléenne> )2 <bloc d’instructions à exécuter3 si la condition est satisfaite>4 else5 <bloc d’instructions à exécuter6 si la condition n’est pas satisfaite>

1 int gains,payment,encaissement,invest;2 // opérations qui modifient la variable gains3 . . .4 if (gains<0)5 payment = gains;6 else if (gains > 10) {7 encaissement = 10;8 invest = gains-10;9 }

10 else11 encaissement = gains;

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 22

Page 23: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Choix multiples

1 int choix;2 . . .3 // l’utilisateur modifie la valeur de choix4 . . .5 switch(choix) {6 case 1:7 //instructions pour le choix 18 . . .9 break;

10 case 2:11 //instructions pour le choix 212 . . .13 break;14 default15 // instructions dans le reste des cas16 . . .17 }

Le switch peut s’effectuer sur deux types de variables : int etchar. Depuis la version 7, on peut aussi utiliser une chaîne decaractères

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 23

Page 24: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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 // instructions3 }

un exemple classique :0 int n=10;1 for (int i=0; i< n; i++ ){2 // instructions3 }

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 24

Page 25: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

autre exemple

0 int n=10;1 for (int i=0, j=n; j< i; i++; j−− ){2 // instructions3 }

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 25

Page 26: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Boucle while

1 while(<condition>)2 <bloc d’instructions>

Le bloc d’instructions est exécuté tant que la condition estsatisfaite.

un exemple qui va essayer de déterminer si la suite définiepar u : n→ rn 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

Page 27: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Boucle do . . . while

1 do2 <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 do4 u = u * r;5 while ( -epsilon >= u-u*r || u - u* r >= epsilon);

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 27

Page 28: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

choix du type de de la boucle

généralement, si on connait le nombre d’itérations, onutilise une boucle for.qu’est-ce qui est plus élégant ?qu’est-ce qui sera le plus facile à lire pour un autrelecteur ?

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

Page 29: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Méthodes

But : rassembler une suite d’instructions que l’on répètedans le code.

en utilisant des méthodes, le code devientplus lisiblemoins long

si on veut modifier le code, il n’y a plus qu’un seulendroit à changer.

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 29

Page 30: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Méthode

1 public static <type de retour> <nom>2 ( <liste de paramètres>) {3 corps de la méthode : suite d’instructions4 }

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 estvoid.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

Page 31: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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éthode1 int tab = {7, 12, 15, 9, 11, 17, 13};2 int m = max(tab);

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 31

Page 32: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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’argu-ments différenteon 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

Page 33: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Passage des arguments de types primitifs

1 public int f(int n){2 n = 3 * n * n -2 *n + 13 if (n > 0)4 return n;5 else6 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 lavaleur de la variable passée en arguments).

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 33

Page 34: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Programmation orientée Objet en Java

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 34

Page 35: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Objets et Classes

Un objet se définit par ses états (on peut aussi parler de sescaractéristiques) et son comportement.

exemple d’un objet voitureEtats Comportementsmarque accélerermodèle passer rapport supérieurcylindrée passer rapport inférieurquantité d’essence tourner volantniveau d’huile ouvrir portepression des pneus fermer portenombre de tours freiner

Une classe est un plan ou un moule pour fabriquer des ob-jets.

les états d’un objet vont être représentés par des variablesles comportements d’un objet seront representés par desméthodes.

Un objet est une instance d’une classe.

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 35

Page 36: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Autrement dit

Une classe est un type abstrait caractérisé par des propriétés(attributs et méthodes) communes à un ensemble d’objets etpermettant de créer des objets ayant ces propriétés.

Un objet ou une instance de classe possède un comporte-ment et un état qui ne peut être modifié que par les actionsdu comportement.

On peut créer une classe Personnage car tous les person-nages partagent les mêmes caractéristiques. Lorsqu’on veutcréer un personnage, on instantie la classe Personnage

N.B. par convention, le nom d’une classe commence tou-jours par une majuscule.

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 36

Page 37: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Des classes déjà existentes

Java possède une large librairie de classes. La librairie secompose 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 classesde bases du langage Java. On y trouve aussi une classepour manipuler les chaînes de caractères appelée String.

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 37

Page 38: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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 obligatoireaccès : <nom de classe>.<nom variable de classe>

exemple : classe Float pour encapsuler un nombre flottantfloat.

variables de classes : MAX_VALUE, MAX_EXPONENT, NaN,etc.

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 38

Page 39: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

méthodes d’instance et méthodes de classe

méthode d’instance : ces méthodes permettent demodifier ou d’accéder à l’état de l’objet.méthode de classe : ces méthodes ne modifient pas l’étatinterne 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

Page 40: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Encapsulation

Les comportements et les états d’un objets peuvent êtreconnus de tous ë publictoute classe peut

exécuter la méthode publiquemodifier ou accéder à un attribut publique

cachés ë private la méthode ou l’attribut ne peut êtreaccédée que depuis l’intérieur de la classe

ë cacher un méchanisme interne(on pourra changer une implémentation sans que cela aitun impact sur la partie publique).

ë protection

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 40

Page 41: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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 desconstructeurs. Un constructeur

porte le nom de la classen’a pas de type de retour.

On appelle constructeur par défaut le constructeur sans ar-guments :

1 public class <nom classe> {2 // déclaration des variable d’instances et3 // variables de classe... . . .

5 // constructeur par défaut6 public <nom classe>(){7 // corps de la méthode8 }9 }

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 41

Page 42: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Exemple

La surcharge permet d’avoir des constructeurs avec des si-gnatures différentes.Pour une classe Personnage, on peut donc écrire :

1 public class Personnage {2 public String nom;34 // constructeur par défaut5 public Personnage(){6 nom = ”Inconnu";7 }89 public Personnage(String name){

10 nom = name;11 }12 }

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 42

Page 43: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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 appeldu constructeur :new <Nom de classe>(<liste d’arguments>);.comme pour les types primitifs, on peut déclarer etinitialiser plusieurs objets du même type en mêmetemps.

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

Page 44: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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 else7 System.out.println("Rouge");8 if (asterix == asterixTer)9 System.out.println("Bleu");

10 else11 System.out.println("Rouge");

Qu’est-ce qui est affiché sur la console ?

la variable est une référence vers l’objetet non l’objet lui même== désigne l’égalité de la référence :deux variables peuvent pointer vers le même objetpour 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

Page 45: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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 else7 System.out.println("Rouge");8 if (asterix == asterixTer)9 System.out.println("Bleu");

10 else11 System.out.println("Rouge");

Qu’est-ce qui est affiché sur la console ?

la variable est une référence vers l’objetet non l’objet lui même== désigne l’égalité de la référence :deux variables peuvent pointer vers le même objetpour 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

Page 46: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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 nesont référencés par aucun autre objet.Les destructions sont asynchrones et il n’y a pas degaranties que les objets soient détruits.Une méthode optionnelle nommée finalize estappelée lorsque l’objet est détruit.Elle peut par exemple s’assurer que des fichiers ou desconnexions sont bien fermées avant la destruction de l’objet.

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 46

Page 47: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Compilation, exécution, machine virtuelle

Java n’est pas seulement la description d’un langage et unebibliothè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

Page 48: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Compilation

Chaque classe <MaClasse> est enregistrée dans un fichier<MaClasse>.java : il porte le même nom que la classe etpossède l’extension .java.

Le développeur doit compiler l’ensemble de classes à l’aided’un programme appelé javac.

Le compilateur traduit le code écrit par le développeur en unlangage plus simple qui pourra être exécuté.

Pour Java, le compilateur produit un code dans le langagebytecode.

Le résultat de la compilation est un fichie nommé<MaClasse>.class

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 48

Page 49: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Compilation

Pour simplifier, il y a deux étapes lors de la compilation :

analyse syntaxique : le code est lu, on forme un arbre desyntaxique.on vérifie la syntaxe du code(i.e. on vérifie la grammaire du code).analyse sémantique : l’arbre syntaxique est analysé ettraduit en bytecode.les références à des classes extérieures sont vérifiées (oncherche si la classe existe bien, si elle a besoin d’êtrecompilée, etc).

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 49

Page 50: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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, onlancera 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 classestatic : pour être appelée sans avoir instancié un objetvoid : la méthode ne retourne rienString[] args : lors du lancement de l’exécution, onpeut ajouter du texte et chaque mot sera inséré dans untableau de String qui peut servir à paramétrerl’exécution.

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 50

Page 51: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Machine virtuelle

Java fournit une machine virtuelle : c’est un programmequi lit du code en bytecode et interprète ce code dans lelangage de la machine pour l’exécuter : Lors de l’exécutionjava MaClass

on lance un programme appelée javase programme interprète le code lancé à partir de laméthode main de la classe MaClasse

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 51

Page 52: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Machine Virtuelles

avantages :le code est portable :

ë On peut écrire, compiler et exécuter sur des machinesd’architectures différentes. (ordinateur windows, apple,linux, téléphone mobile, caisse enregistreuse, etc).

la machine virtuelle permet de partager d’une manièresécurisée une machinele code est généralement plus compact (pas besoind’inclure les bibliothèques comme en C ou C++).la machine virtuelle donne l’impression que l’on disposed’une machine entière (la machine réelle donner dutemps processeur à la machine virtuelle).

inconvenients : coût en ressources de la machine virtuelle.

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 52

Page 53: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

Code Source .java

Compilation javac

Bytecode .java

sous

win

dow

s souslinux

sousm

acO

S

Exécution javamachinevirtuelle

machine windows machine linux machine apple portable android

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 53

Page 54: Mise à niveau en Java - Cours 1 - Université Paris …airiau/Teaching/MaN-Java-M2/cours1.pdf · Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane

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, divisionobtenir la partie réelle, la partie imaginaire, l’angle et lemoduleopé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, parexemple ”par toutatis ”+ asterix.nom

Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 54