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

Programmation Orientée Objet – Java · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmation Orientée Objet – Java · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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 · 2015. 8. 27. · Autres langages orienté objet C++ : très utilis ... Bertrand Estellon (DII – AMU) Programmation Orientée Objet –

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