Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de...

27
Programmation Orientée Objet – Java Bertrand Estellon Département Informatique et Interactions Aix-Marseille Université 12 novembre 2014 Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 1 / 171

Transcript of Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de...

Page 1: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Programmation Orientée Objet – Java

Bertrand Estellon

Département Informatique et InteractionsAix-Marseille Université

12 novembre 2014

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 1 / 171

Page 2: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les programmes informatiques

Les étapes du traitement des données :▶ Un ordinateur reçoit des données de différents périphériques d’entrée

(Carte réseau, souris, capteurs).▶ Ces données sont codées sous la forme d’une suite de 0/1.▶ Ces données sont transformées afin de produire une nouvelle

suite de 0/1.▶ Ces nouvelles données sont envoyées sur un périphérique de sortie

(Carte réseau, écran, carte son) ou de stockage.▶ Ces données sont transportées, stockées, transformées en ondes

sonores, etc.Un programme informatique spécifie une suite d’instructions à effectuersur des données afin de produire de nouvelles données en sortie.

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 2 / 171

Page 3: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les langages de programmationLes langages de programmation ont été définis par les humains afin depermettre à un humain de spécifier à un ordinateur une suited’instructions.

Il existe de nombreux langages de programmation :▶ Langages impératifs et procéduraux (C, Pascal, Fortran...)▶ Langages logiques (Prolog...)▶ Langages fonctionnels (OCaml, Haskell, Erlang...)▶ Langages à pile (PostScript...)▶ Langages à objets (Java, C++, C#...)

L’exécution se fait soit par :▶ Interprétation (Python, PHP, JavaScript, Ruby...)▶ Compilation et exécution (C++, C, Pascal...)▶ Semi-compilation et exécution sur machine virtuelle (Java...)

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 3 / 171

Page 4: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

La programmation orientée objet (POO)

Les objectifs :▶ Faciliter le développement et l’évolution des applications ;▶ Permettre le travail en équipe ;▶ Augmenter la qualité des logiciels (moins de bugs).

Solutions proposées :▶ Découpler (séparer) les parties des projets ;▶ Limiter (et localiser) les modifications lors des évolutions ;▶ Réutiliser facilement du code.

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 4 / 171

Page 5: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Le langage Java (utilisé dans ce cours)

Le langage Java :▶ est un langage de programmation orienté objet▶ créé par James Gosling et Patrick Naughton (Sun)▶ présenté officiellement le 23 mai 1995.

Les objectifs de Java :▶ simple, orienté objet et familier ;▶ robuste et sûr ;▶ indépendant de la machine employée pour l’exécution ;▶ très performant ;▶ multi-tâches.

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 5 / 171

Page 6: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Autres langages orienté objet

▶ C++ : très utilisé▶ C# : langage de Microsoft (appartient à .NET)▶ Objective C : langage utilisé par Apple▶ PHP : langage très utilisé sur le Web▶ Python▶ Ruby▶ Eiffel▶ Ada▶ Smalltalk▶ ...

La syntaxe change mais les concepts sont les mêmes !

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 6 / 171

Page 7: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Mon premier programme Java

Le programme HelloWorld.java :

class HelloWorld {public static void main(String arg[]) {

System.out.println("Hello world !");}

}

Compilation et exécution :

$ javac HelloWorld.java$ lsHelloWorld.java HelloWorld.class$ java HelloWorldHello world !

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 7 / 171

Page 8: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Commentaires

Les commentaires permettent de rajouter du texte dans votre programmesans que le compilateur ne le considère comme du code :

class HelloWorld {public static void main(String arg[]) {

/* Commentairesur plusieurs lignes.

*/// sur une seule ligne.System.out.println("Hello world !");

}}

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 8 / 171

Page 9: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Instructions, variables et expressions

Les données sont manipulées à l’aide de variables et d’expressions :

class Exemple {public static void main(String arg[]) {

int a = 5 ; // Déclaration d'une variableint b = 9 ; // Déclaration d'une deuxième variableb = b + a ; // L'expression "b+a" est évaluée

// et le résultat est affecté à "b"a = 2*b - 3 ; // 25 est affecté à "a"System.out.println(a); // Affichage du contenu de "a"System.out.println(b); // Affichage du contenu de "b"

}}

Notez que les instructions sont séparées par des points-virgules.

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 9 / 171

Page 10: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les variables

Une variable possède un nom, un type et une valeur.

int a = 3 ; // Déclaration d'une variable// de nom "a", de type "int" (entier)// avec une valeur initiale égale à 3.

Il est ensuite possible de changer la valeur de la variable :

int a = 3 ;a = 12 ; // Affectation d'une nouvelle valeur

En Java, le symbole = désigne l’affectation et n’a pas la même significationqu’en mathématiques.Lors de la compilation, Java vérifie que chaque expression située à droitede l’affectation est compatible avec le type de la variable.

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 10 / 171

Page 11: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les types primitifs

byte entier 8 bits -128 à 127 0short entier 16 bits -32768 à 32767 0int entier 32 bits −231 à 231 − 1 0long entier 64 bits −263 à 263 − 1 0float flotant 32 bits 0.0double flotant 64 bits 0.0char caractère 16 bits caractères Unicode \u0000boolean boolean 1 bit false ou true false

Les constantes :int a = 12 ;double b = 13.5 ;char c = 't' ;boolean b = true ;

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 11 / 171

Page 12: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Opérateurs de calcul

Négation -a Opposé de aAddition a + b Somme de a et bSoustraction a - b Différence de a et bMultiplication a * b Produit de a et bDivision a / b Quotient de a et bModulo a % b Reste de a divisé par b

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 12 / 171

Page 13: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Opérateurs logiques et comparaisons

non !a true si a est égal à falseet a && b true si a et b sont égaux trueou a || b true si a ou b est égal true

égal a == b true si a est égal à bdifférent a != b true si a est différent de bplus petit a < b true si a est strictement plus petit que bplus grand a > b true si a est strictement plus grand que binférieur ou égal a <= b true si a est plus petit ou égal à bsupérieur ou égal a >= b true si a est plus grand ou égal à b

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 13 / 171

Page 14: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les expressionsIl est possible de fabriquer des expressions complexes à partir des variables,constantes et opérateurs :

int a = 3 ;int b = 7 ;int c = 2*a + 7*b - (a+9)%(b-4);boolean d = a<=4 && b+2<=10 ;boolean e = !(a>=4 && b+2<=10);

▶ L’ordre du calcul respecte les priorités des opérateurs.▶ Le type de chaque partie est déterminé à la compilation.▶ Le compilateur associe les instructions “machine” qui correspondent

aux opérateurs et aux types des opérandes.▶ Le compilateur connaît le type de l’expression et vérifie s’il est

compatible avec le type de la variable (dans le cas d’une affectation).Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 14 / 171

Page 15: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Incrémentation, décrémentation et affectations

Pre-incrémente ++a Incrémente a de 1, puis retourne aPost-incrémente a++ Retourne a, puis incrémente a de 1Pré-décrémente --a Décrémente a de 1, puis retourne aPost-décrémente a-- Retourne a, puis décrémente a de 1

Exemple :

int a = 10 ;int b, c ;a++;b = a++; // Déconseillé → b = a; a++;c = --b ; // Déconseillé → b-- ; c = b;

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 15 / 171

Page 16: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les affectations

Affectation a=b Affecte b à aAddition a+=b Ajoute b à aSoustraction a-=b Soustrait b à aMultiplication a*=b Multiplie a par bDivision a/=b Divise a par b

Exemple :

int a = 10 ;a+=22 ;int c = 12 ;a+=2*c ;c*=4 ;

Il existe des opérateurs de ce type associés aux opérations logiques.Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 16 / 171

Page 17: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les affectations sont des opérateursLa valeur retournée par l’évaluation d’une affectation est égale à la valeurretournée par l’évaluation de sa partie droite.

Exemple :int a, b ;a = (b = 10);/* ou */a = b = 10 ;

Étapes de l’évaluation de l’instruction :▶ La valeur 10 est affectée à b ;▶ (b = 10) vaut 10 ;▶ la valeur 10 est affectée à a ;▶ a = (b = 10) vaut 10 ;▶ cette valeur est ignorée.

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 17 / 171

Page 18: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les tableaux

Déclaration d’une variable de type “référence vers un tableau” :

int[] arrayOfInt ;double[] arrayOfDouble ;

Allocation d’un tableau :arrayOfInt = new int[10];arrayOfDouble = new double[3];

Utilisation d’un tableau :arrayOfInt[0] = 5 ;arrayOfInt[9] = 10 ;arrayOfInt[2] = arrayOfInt[0] + 3*arrayOfInt[9];arrayOfDouble[2] = arrayOfInt[2] + 3.5 ;

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 18 / 171

Page 19: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les tableauxL’expression new int[10] retourne une “référence vers un tableau” :

int[] array = new int[10]; // Allocation d'un tableauint[] array2 = array ; // Copie de la référence

Seule la référence est copiée, il n’y a qu’un seul tableau :

array[4] = 2 ; // Affectation d'une valeur à la 5ème caseSystem.out.println(array2[4]); // "5"

Taille du tableau :int[] array = new int[10]; // Allocation d'un tableauint length = array.length ; // Récupération de la tailleSystem.out.println(length);/* ou directement */ System.out.println(array.length);

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 19 / 171

Page 20: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Références et Garbage CollectorUne variable de type “référence” peut valoir null :

int[] array = null ;// La variable "array" contient la référence "null".// Elle pointe vers aucune instance.

Important : Une référence contient soit null soit la référence d’untableau ou d’un objet compatible avec le type de la variable.

Le Garbage collector peut supprimer les éléments devenus innaccessibles :

int[] array = new int[10];array[3] = 6 ;...array = null ;// La mémoire utilisée pour le tableau peut être libérée

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 20 / 171

Page 21: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les instructions conditionnelles if

La syntaxe :

if (condition) instruction ;/* ou */if (condition) instruction ; else instruction ;

Exemple :

boolean a = true ;boolean b = false ;int c = 10, d = 12, e ;if (a || b) e = c + d ; else e = c - d ;if (a && b) e++; else e-- ;

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 21 / 171

Page 22: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les instructions conditionnelles switchLa syntaxe :switch (expression) {case valeur1 : instruction ; instruction ; /*...*/ break ;case valeur2 : instruction ; instruction ; /*...*/ break ;/* ... */default : instruction ; instruction ; /*...*/ break ;

}

Exemple :int a = 2 ;switch (a) {case 1 : System.out.println("un"); break ;case 2 : System.out.println("deux"); break ;case 3 : System.out.println("trois"); break ;default : System.out.println(a); break ;

}Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 22 / 171

Page 23: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les boucles while et do/while

La syntaxe :

while (condition) instruction ;do instruction ; while (condition);

Exemple :

int a = 3 ;while (a <= 10) a++;do a-- ; while (a>=3);

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 23 / 171

Page 24: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les boucles for

La syntaxe :

for (initialisation ; condition ; incrementation)instruction ;

Exemple :

for (int i = 0 ; i < 3 ; i++) System.out.println(i);for (int i = 10 ; i >= 10 ; i--) System.out.println(i);for (int i = 0 ; i <= 10 ; i+=2) System.out.println(i);

Équivalence avec le while :

initialisation ;while (condition) { instruction ; incrementation ; }

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 24 / 171

Page 25: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les blocs d’instructionsLa syntaxe :

{instruction_1 ;instruction_2 ;...instruction_k ;

}

Les instructions du bloc sont exécutées séquentiellement.Une instruction peut être remplacée par un bloc d’instructions :

boolean a = true ;int c = 0, d=2 ;if (a) { c++; d+=4 ; } else { c-- ; d-=2 ; }

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 25 / 171

Page 26: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les blocs d’instructions

Il est important d’indenter correctement le code :

for (int i = 0 ; i < 10 ; i++) {for (int j = i+1 ; j < 10 ; j++) {

int k = i*j ;if (k < 10) System.out.print(" ");System.out.print(i*j);System.out.print(" ");

}System.out.println();

}

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 26 / 171

Page 27: Programmation Orientée Objet – Java - … · Programmation Orientée Objet ... est un langage de programmation orienté objet créé par James Gosling et Patrick ... Autres langages

Java Introduction

Les tableaux à plusieurs indicesDéclaration :int[][] matrix ;

Création :matrix = new int[10][];for (int row = 0 ; row < matrix.length ; row++)matrix[row] = new int[5];

/* ou directement */matrix = new int[10][5];

Tableaux multidimensionnels “non rectangulaires” :

array = new int[10][];for (int row = 0 ; row < array.length ; row++)array[row] = new int[row+1];

Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 27 / 171