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. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

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. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

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 28 / 171

Page 3: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

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 29 / 171

Page 4: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

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 30 / 171

Page 5: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Des tableaux aux objets

Un tableau :▶ peut être alloué (ou construit) : array = new int[5]▶ est structuré : il est constitué d’un ensemble de cases▶ possède un état : la valeur de ses cases▶ possède une interface

L’interface d’un tableau :▶ affecter une valeur à une case : array[index] = value ;▶ consulter la valeur d’une case : array[index] ;▶ récupérer sa longueur : array.length ;

Les types “référence vers des tableaux” sont définis dans le langage

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

Page 6: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Les objets

Un objet :▶ peut être construit▶ est structuré : il est constitué d’un ensemble de propriétés▶ possède un état : la valeur de ses propriétés▶ possède une interface : l’ensemble des méthodes et propriétés

accessibles par les utilisateurs de l’objet

Dans les langages orientés objet, une classe (d’objets) définit :▶ une façon de construire des objets (constructeur)▶ la structure des objets de la classe (propriétés)▶ le comportement des objets de la classe (méthodes)▶ l’interface des objets de la classe (méth. et prop. non-privées)▶ un type “référence vers des objets de cette classe”

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

Page 7: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Classes et instancesLe mot clé class permet de définir une classe :

class Counter {/* Définition des propriétés et des méthodes */

}

On peut ensuite définir une variable de type “référence vers un Counter” :

Counter counter ;

Une classe définit également un “moule” pour fabriquer des objets.La création d’une instance s’effectue avec le mot clé new :Counter counter = new Counter();

La variable counter contient alors une référence vers une instance de laclasse Counter.

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

Page 8: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Les propriétésLes propriétés décrivent la structure de données de la classe :

class Counter { int position ; int step ; }

On accède aux propriétés avec l’opérateur “.” (point) :

Counter counter = new Counter();counter.position = 12 ; counter.step = 2 ;counter.position += counter.step ;

Chaque instance possède son propre état :

Counter counter1 = new Counter();Counter counter2 = new Counter();counter1.position = 10 ; counter2.position = 20 ;if (counter1.position !=counter2.position)System.out.println("différent");

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

Page 9: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Références et Garbage Collector

Comme pour les tableaux, on peut copier les références :

Counter counter1 = new Counter();Counter counter2 = counter1 ;counter1.position = 10 ;if (counter1.position==counter2.position)System.out.println("égalité");

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

Le Garbage collector peut supprimer les objets devenus innaccessibles :

Counter c = new Counter(); ...; c = null ;// La mémoire utilisée pour l'objet peut être libérée

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

Page 10: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Les méthodesMéthodes qui modifient l’objet :class Counter {int position, step ;

void init(int initPos, int s) {position = initPos ; step = s ;

}

void count() { position += step ; }}

On invoque les méthodes avec l’opérateur “.” (point) :Counter counter = new Counter();counter.init(4, 8+12); counter.count(); counter.count();System.out.println(counter.position);

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

Page 11: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Les méthodes

Méthode permettant de consulter l’état de l’objet :

class Counter {

/* Code du slide précédent. */

int getPosition() { return position ; }}

Exemple d’utilisation :

Counter counter = new Counter();counter.init(4, 8+12); counter.count(); counter.count();System.out.println(counter.getPosition());

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

Page 12: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Les méthodes

Méthode qui modifie et retourne une valeur :

class Counter {

/* Code de la méthode init. */

int count() { position += step ; return position ; }}

Exemple d’utilisation :

Counter counter = new Counter();counter.init(4, 8+12);System.out.println(counter.count());System.out.println(counter.count());

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

Page 13: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Comparaison de référencesIl est possible de comparer deux références :

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

Counter counter1 = new Counter();Counter counter2 = counter1 ;

if (counter1==counter2) System.out.println("==");

Counter counter3 = new Counter();

if (counter1 !=counter3) System.out.println(" !=");if (counter2 !=counter3) System.out.println(" !=");

}}

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

Page 14: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Déclaration d’un constructeurLes constructeurs permettent d’agréger l’allocation et l’initialisation :class Counter {int position, step ;

Counter(int p, int s) { position = p ; step = s ; }

Counter(int p) { position = p ; step = 1 ; }

/* Méthodes count() et getPosition() */}

Exemple d’utilisation :

Counter c1 = new Counter(2,10);Counter c2 = new Counter(22);

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

Page 15: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Constructeur par défaut

Si aucun constructeur n’est défini, la classe a un constructeur par défaut :

public class Counter {int position = 10, step = 1 ;

}

Ce code est équivalent à celui-ci :

public class Counter {int position, step ;

public Counter() {position = 10 ; step = 1 ;

}}

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

Page 16: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Le mot-clé thisLe mot-clé this fait référence à l’instance en construction ou à l’instancequi a permis d’invoquer la méthode en cours d’exécution :

class Counter {int position, step ;

Counter(int position, int step) {this.position = position ; this.step = step ;

}

void count() {int position = this.position ;position += step ; this.position = position ;

}}

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

Page 17: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Le mot-clé thisLe mot-clé this permet également d’appeler un constructeur dans unconstructeur de façon à ne dupliquer du code :class Counter {int position, step ;

Counter(int position, int step) {this.position = position ; this.step = step ;

}

Counter(int position) {this(position, 1);

}

/* Autres méthodes. */}

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

Page 18: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Surcharge de méthodeDans une classe, deux méthodes peuvent avoir le même nom. Java doitpouvoir décider de la méthode à exécuter en fonction des paramètres :class Value {int value = 0 ;

void set() { value = 0 ; }void set(int value) { this.value = value ; }void set(double vallue) { this.value = (int)value ; }

}

Exemple d’utilisation :Value value = new Value();value.set(); // Première méthodevalue.set(2); // Deuxième méthodevalue.set(2.5); // Troisième méthode

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

Page 19: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Propriétés et méthodes statiques

Les propriétés et des méthodes statiques sont directement associées à laclasse et non aux instances de la classe :class Counter {static int step ;int position ;

Counter(int position) { this.position = position ; }

static void setStep(int step) {Counter.step = step ;

}

void count() { position += step ; }}

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

Page 20: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Données et méthodes statiquesComme les propriétés et méthodes statiques sont associées à la classe, iln’est pas nécessaire de posséder une instance pour les utiliser :public class Test {public static void main(String[] arg) {

Counter.setStep(3);Counter counter1 = new Counter(2);Counter counter2 = new Counter(3);counter1.count(); counter2.count();System.out.println(counter1.position); // → 5System.out.println(counter2.position); // → 6Counter.setStep(4); counter1.count(); counter2.count();System.out.println(counter1.position); // → 9System.out.println(counter2.position); // → 10

}}

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

Page 21: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Données et méthodes statiques

Une méthode statique ne peut utiliser que :▶ des propriétés statiques à la classe ;▶ des méthodes statiques à la classe ;

afin de garantir par transitivité l’utilisation exclusive de données statiques.

L’utilisation de this n’a aucun sens dans une méthode statique :

class Counter {/* ... */static void setStep(int step) {

Counter.step = step ;}/* ... */

}

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

Page 22: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Chaînes de caractèresTrois classes permettent de gérer les chaînes de caractères :

▶ la classe String : chaîne invariable (immutable) ;▶ la classe StringBuffer : chaîne modifiable (multi-thread).▶ la classe StringBuilder : chaîne modifiable (mono-thread).

Déclaration et création :String hello = "Hello" ;String world = "World" ;

Concaténation :String helloWorld = hello + " "+ world + " ! " ;int integer = 13 ;String helloWorld1213 = hello + " " + world

+ " " + 12 + " " + integer ;

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

Page 23: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Chaînes de caractères

Affichage :

System.out.print(helloWorld); // affiche "Hello World !"System.out.println(helloWorld); // affiche "Hello World !"

// avec retour à la ligne

Comparaison :

String a1 = "a" ;String a2 = "a" ;String a3 = new String("a");System.out.println(a1==a2); // affiche "true"System.out.println(a1==a3); // affiche "false"System.out.println(a1.equals(a3)); // affiche "true"

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

Page 24: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Point d’entrée et argumentsLe programme Echo.java :

public class Echo {public static void main(String[] args) {

for (int i = 0 ; i < args.length ; i++)System.out.println(args[i]);

}}

$ javac Echo.java$ lsEcho.java Echo.class$ java Echo toto aaatotoaaa

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

Page 25: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Programmer “proprement” : nommage

Un nommage correct des méthodes et variables améliore grandement lalisibilité et la maintenabilité d’un code.

Êtes-vous capable de dire rapidement ce que fait cette classe ?

class Structure {private int s[] = new int[100];private int t = 0 ;

public void end(int i) { s[t] = i ; t++; }

public int top() { t-- ; return s[t]; }

public bool test() { return t == 0 ; }

}

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

Page 26: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Programmer “proprement” : nommageLe nommage des variables, attributs, classes et méthodes est important :

class Stack {private int stack[] = new int[100];private int size = 0 ;

public void push(int i) {stack[size] = i ; size++;

}

public int pop() {size-- ; return stack[size];

}

public bool isEmpty() {return size == 0 ;

}}

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

Page 27: Programmation Orientée Objet – Java · 2015. 8. 27. · Java Classes et instances Les objets Un objet : peut être construit est structuré : il est constitué d’un ensemble

Java Classes et instances

Conventions de nommage en Java

Conventions officielles de nommage en Java :▶ Première lettre en majuscule pour les noms des classes ;▶ Première lettre en minuscule pour les noms des membres ;▶ Premières lettres de chaque mot en majuscule ;▶ Noms simples et descriptifs ;▶ N’utiliser que des lettres et des chiffres.

class Stack {private int stack[] = new int[100];private int size = 0 ;

public void pushInteger(int i) { stack[size] = i ; size++; }public int popInteger() { size-- ; return stack[size]; }

}

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