Révision de la syntaxe Java Révision – Les mots réservés de Java ▶ Programmation et Conception Orientées Objet Gestions des paquets : package import ▶ Bertrand Estellon Définitions des classes, interfaces et énumérations : class interface enum Département Informatique et Interactions Aix-Marseille Université 17 novembre 2016 ▶ Héritage : extends implements Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 17 novembre 2016 1 / 466 Bertrand Estellon (DII – AMU) Révision de la syntaxe Java Révision – Les classes 17 novembre 2016 236 / 466 Révision – Interfaces class Counter { interface Printer { /** * Imprime la chaîne s. * @param s chaîne à imprimer */ void print(String document); int counter; Counter(int initialValue) { counter = initialValue; } /** * Permet de savoir si l'instance est prête. * @return true si l'instance est prête, false sinon */ boolean isReady(); void count() { counter++; } } Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet Révision de la syntaxe Java } Prog. et Conception Orientées Objet 17 novembre 2016 237 / 466 Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 17 novembre 2016 238 / 466 Révision de la syntaxe Java Révision de la syntaxe Java Révision – Implémentation d’une interface Révision – Extension class MyPrinter implements Printer { String name; class MyBracePrinter extends MyPrinter { MyBracePrinter(String name) { super(name); } MyPrinter(String name) { this.name = name; } @Override void print(String document) { System.out.println(name+" : "+document); } @Override void print(String document) { System.out.println("{"+super.print(document)+"}"); } @Override boolean isReady() { return true; } } } Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 17 novembre 2016 239 / 466 Bertrand Estellon (DII – AMU) Révision de la syntaxe Java Prog. et Conception Orientées Objet Révision – Polymorphisme Révision – Les mots réservés Qu’affiche ce programme ? Modificateurs pour les membres et les variables : Prog. et Conception Orientées Objet 240 / 466 17 novembre 2016 242 / 466 public protected private static final abstract throws public static void main(String args[]) { Printer printer; if (args[0].length()>0) printer = new MyBracePrinter("bracePrinter"); else printer = new MyPrinter("printer"); printer.print("document"); } Bertrand Estellon (DII – AMU) 17 novembre 2016 Révision de la syntaxe Java 17 novembre 2016 241 / 466 Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet Révision de la syntaxe Java Révision de la syntaxe Java Révision – Modification de la visibilité Révision – Données et méthodes statiques Les méthodes et des données statiques sont associées à la classe et non aux instances de la classe : Private Default Protected Public Classe ✓ ✓ ✓ ✓ Paquet Extension Extérieur ✓ ✓ ✓ ✓ ✓ ✓ class Counter { private static int counter = 0; static void count() { counter++; } static int value() { return counter; } } Un exemple d’utilisation de la classe précédente : Counter.count(); Counter.count(); Counter.count(); System.out.println(Counter.value()); Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 17 novembre 2016 243 / 466 Bertrand Estellon (DII – AMU) Révision de la syntaxe Java Prog. et Conception Orientées Objet 17 novembre 2016 Classes abstraites Classes abstraites et extension Une classe est abstraite si des méthodes ne sont pas implémentées : Évidemment, il n’est pas possible d’instancier une classe abstraite : List list = new List(); // erreur System.out.println(list.eval()) // car que faire ici ? public abstract class List { private int[] list = new int[10]; private int size = 0; Nous allons étendre la classe List afin de récupérer les propriétés et les méthodes de List et définir le code des méthodes abstraites : public class ListSum extends List { public int neutral() { return 0; } public int compute(int a, int b) { return a+b; } } public void add(int value) { list[size] = value; size++; } public int eval() { int result = neutral(); // utilisation d'une méthode abstraite for (int i = 0; i < size; i++) result = compute(result, list[i]); // idem return result; } La classe ListSum n’est plus abstraite, toutes ses méthodes sont définies : public abstract int neutral(); // méthode abstraite public abstract int compute(int a, int b); // idem ListSum listSum = new ListSum(); listSum.add(3); listSum.add(7); System.out.println(listSum.eval()); } Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 244 / 466 Révision de la syntaxe Java 17 novembre 2016 245 / 466 Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 17 novembre 2016 246 / 466 Révision de la syntaxe Java Révision de la syntaxe Java Classes abstraites et extension Révision – Les mots réservés dans le code Évidemment, il n’est pas possible d’instancier une classe abstraite : List list = new List(); // erreur System.out.println(list.eval()) // car que faire ici ? Nous allons étendre la classe List afin de récupérer les propriétés et les méthodes de List et définir le code des méthodes abstraites : public class ListProduct extends List { public int neutral() { return 1; } public int compute(int a, int b) { return a*b; } } La classe ListSum n’est plus abstraite, toutes ses méthodes sont définies : ListProduct listProduct = new ListProduct(); listProduct.add(3); listProduct.add(7); System.out.println(listProduct.eval()); Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 17 novembre 2016 247 / 466 if/else for do/while switch/case/default continue/break try/catch/finally throw return new null false true this super instanceof Bertrand Estellon (DII – AMU) Révision de la syntaxe Java Révision – Les mots réservés et les types simples 17 novembre 2016 248 / 466 Révision – Les types primitifs byte short int long float double char boolean boolean byte char short int long double float void Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet Révision de la syntaxe Java entier entier entier entier flotant flotant caractère boolean 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits 16 bits 1 bit -128 à 127 -32768 à 32767 −231 à 231 − 1 −263 à 263 − 1 caractères Unicode false ou true 0 0 0 0 0.0 0.0 \u0000 false int intValue = 12; double doubleValue = 13.5; boolean booleanValue = true; Prog. et Conception Orientées Objet 17 novembre 2016 249 / 466 Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 17 novembre 2016 250 / 466 Révision de la syntaxe Java Révision – Les autres mots réservés assert goto native assert strictfp volatile transient synchronized Bertrand Estellon (DII – AMU) Prog. et Conception Orientées Objet 17 novembre 2016 251 / 466