Les interface homme-machine et le langage Java
Transcription
Les interface homme-machine et le langage Java
Java et les objets Ressources infodoc.iut.univ-aix.fr/~ihm/ : sujets des TP, pointeurs utiles, polys, ces transparents, etc. Les interface homme-machine et le langage Java java.sun.com (en réalité www.oracle.com/technetwork/java) : logiciel et documentation, dont JRE (Java Runtime Environment) : machine java + bibliothèques, ce qu’il faut pour exécuter les programmes java JDK (Java Development Kit) : compilateur et outils pour développer les programmes – contient un JRE la doc en ligne de l’API (docs.oracle.com/javase/7/docs/api) DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d’Aix-Marseille (Aix) avec le JDK n’importe quel éditeur de textes, mais JDK + eclipse (ou JDK + NetBeans) pour plus d’efficience Cours 1: Java et les objets c H. Garreta, 2014 IHM et Java henri.garreta.perso.luminy.univmed.fr : diverses ressources, dont : « Le langage Java » (poly très complet) 1 / 21 c H. Garreta, 2014 Java et les objets IHM et Java 2 / 21 Java et les objets POO, esprit de la chose POO, esprit de la chose (suite) un programme est un ensemble d’objets les objets interagissent en s’envoyant des messages un objet est déterminé par un état et un comportement un message a toujours un destinataire état : donné par les valeurs d’un ensemble de données membres, champs ou variables d’instance comportement : implémenté par un ensemble de fonctions membres ou méthodes d’instance un message dit quoi faire, mais non comment : il incombe au destinataire du message de savoir les détails que prend chez lui l’exécution du message une classe est la description d’une sorte d’objets de même type, les instances de la classe indice : si p et q représentent des points r = distance(p, q) s’écrit plutôt r = p.distance(q) il y a aussi des données et des fonction non attachées aux objets : l’ensemble des messages qu’un objet accepte constitue son interface l’interface est la partie publique de l’objet ; elle doit être simple, robuste, documentée les données membres static ou variables de classe les fonctions membres static ou méthodes de classe c H. Garreta, 2014 IHM et Java 3 / 21 c H. Garreta, 2014 IHM et Java 4 / 21 Java et les objets Java et les objets Structure générale d’un fichier source package En Java, il n’y a pas des directives pour le préprocesseur (lignes commençant par #) notamment, il n’y a pas besoin de #include des fichiers de spécification (« .h ») et des fichiers d’implémentation (« .cpp ») séparés des variables globales des fonctions autonomes subdivision de l’espace des noms, à la manière des namespace Fichier Liste.java package mesOutils.mesListes; class Maillon { ... } Fichier Liste.java public class Liste { ... } package mesOutils.mesListes; import java.outil.Vector; import java.awt.*; class Maillon { déclaration des membres (variables et fonctions) de la classe Maillon } le nom complet de la classe Liste est : l’instruction package doit être la première du fichier si absente, la classe est dans le « paquet sans nom » (unnamed package) public class Liste { déclaration des membres (variables et fonctions) de la classe Liste } une classe publique (qualifiée public) est accessible partout une classe non publique l’est uniquement dans les autres classes du même package pour une classe publique, le package et le nom imposent le chemin du fichier source : la classe mesOutils.mesListes.Liste doit se trouver dans le fichier ./mesOutils/mesListes/Liste.java recommandation : une seule classe par fichier obligation : une seule classe « public » par fichier c H. Garreta, 2014 IHM et Java 5 / 21 c H. Garreta, 2014 Java et les objets IHM et Java 6 / 21 Java et les objets import Compiler et exécuter une classe Les exécutables Java sont de plusieurs sortes : définition d’une certaine classe : package mesOutils.mesListes; – les applications s’exécutent sur une machine virtuelle Java qui, elle-même, s’exécute sur un couple (processeur, système), – les applets s’exécutent dans les navigateurs web, – les servlets s’exécutent dans les serveurs d’applications. public class Liste { ... } les applications Java sont compilées et interprétées : le compilateur produit un bytecode que la machine java interprète l’application la plus simple (en rouge, les éléments invariables) utilisation de cette classe dans le même package : Liste L = new Liste(); utilisation de cette classe dans un autre package : mesOutils.mesListes.Liste L = new mesOutils.mesListes.Liste(); Fichier Bonjour.java public class Bonjour { public static void main(String[] args) { System.out.println("Bonsoir !"); } } dans ce cas, import permet d’utiliser le nom court : import mesOutils.mesListes.Liste; ... Liste L = new Liste(); forme « collective » : import mesOutils.mesListes.*; compilation : I javac Bonjour.java exécution : I java Bonjour Bonsoir ! cela désigne toutes les classes du paquet mesOutils.mesListes import n’est pas « #include » c H. Garreta, 2014 mesOutils.mesListes.Liste IHM et Java 7 / 21 c H. Garreta, 2014 IHM et Java 8 / 21 Java et les objets Java et les objets Java, le langage Notion de référence en Java Sauf indication contraire, Java = C : même syntaxe, mêmes concepts de base... référence = pointeur géré discrètement par Java. Exemple (on suppose avoir défini une classe Point) : Point p; p contiendra une référence sur un objet Point. Pour l’instant, p contient null ou « non initialisé » ...avec la surcharge des noms des fonctions, comme en C++ Types primitifs (simples) : byte (1 octet) float (4 octets) short (2 octets) double (8 octets) int (4 octets) char long (8 octets) boolean instantiation (création) d’un objet : p = new Point(25, 50); Maintenant p pointe un morceau de mémoire contenant (au moins) les coordonnées (25,50). Tous les entiers sont « avec signe ». De plus on peut aussi associer déclaration et instantiation : Point q = new Point(100, 200); Les types primitifs obéissent à la sémantique de l’accès par valeur Exemple : x == y signifie « x et y ont même valeur » désignation des membres (sous réserve que x et distance soient membres de la classe Point et qu’on ait le droit de les mentionner) p.x p.distance(q) Types objets : – tableaux – chaı̂nes de caractères (String, une classe avec privilèges) – toutes les autres classes ( en C++ cela s’écrirait Exemple : x == y signifie « x et y ont même adresse » IHM et Java 9 / 21 c H. Garreta, 2014 Java et les objets p->x et p->distance(q) ) IHM et Java 10 / 21 Java et les objets Tableaux Chaı̂nes de caractères Déclaration : UnType tab[]; ou UnType[] tab; (ici tab vaut null) Création du tableau : tab = new UnType[nombre d’éléments]; Accès au ieme élément : tab[i] Nombre d’éléments du tableau : tab.length Un exemple : public class Echo { public static void main(String args[]) { for (int i = 0; i < args.length; i++) System.out.println(i + " : " + args[i]); } } I javac Echo.java I java Echo poids 200+30 ’au revoir’ 0 : poids 1 : 200+30 2 : au revoir I c H. Garreta, 2014 puis les références sont modifiables. Par la suite, on pourra écrire : p = new Point(300, 0); la précédente valeur de p est « oubliée » Les objets obéissent à la sémantique de l’accès par référence c H. Garreta, 2014 Point *p; IHM et Java 11 / 21 Les objets String représentent des chaı̂nes de caractères immuables. Notation : String s = "Bonjour"; Concaténation : s + " à tous" → "Bonjour à tous" Propriété remarquable : si seul exp1 est de type String exp1 + exp2 ⇔ exp1 + conversionEnString(exp2 ) exemple : System.out.println("x = " + x); Comment ça marche ? Deux cas : a) si exp2 est d’un type primitif exp1 + exp2 ⇔ exp1 + String.valueOf(exp1 ) b) si exp2 est un objet exp1 + exp2 ⇔ exp1 + exp2 .toString() (tous les objets possèdent une telle méthode toString()) c H. Garreta, 2014 IHM et Java 12 / 21 Java et les objets Java et les objets Classes, variables, méthodes Une classe simple Fichier Point.java En Java il n’y a pas : public class Point { int x, y; void placer(int a, int b) { test de la validité de a et b x = a; y = b; } double distance(Point q) { int dx = x - q.x; int dy = y - q.y; return Math.sqrt(dx * dx + dy * dy); } public String toString() { return "(" + x + "," + y + ")"; } exemple d’emploi : } Point p; p = new Point(); p.placer(10, 20); System.out.println("p : " + p); p : (10,20) des variables ou des méthodes définies en dehors de toute classe des méthodes qualifiées inline le compilateur se charge de détecter certaines méthodes qui le méritent des classes ou méthodes amies (friend) mais être du même paquet est une forme d’amitié d’opérateur “::” pour la résolution de portée ; au lieu de UneClasse::unMembre on écrit UneClasse.unMembre c H. Garreta, 2014 IHM et Java 13 / 21 c H. Garreta, 2014 Java et les objets 14 / 21 Java et les objets Le pointeur this Constructeurs Fichier Point.java Fichier Point.java public class Point { int x, y; void placer(int x, int y) { test de la validité de a et b this.x = x; this.y = y; } double distance(Point q) { int dx = this.x - q.x; int dy = this.y - q.y; return Math.sqrt(dx * dx + dy * dy); } public String toString() { return "(" + this.x + "," + this.y + ")"; } } exemple d’emploi : Point p; p = new Point(); p.placer(10, 20); System.out.println("p : " + p); p : (10,20) c H. Garreta, 2014 IHM et Java IHM et Java public class Point { int x, y; Point(int x, int y) { test de la validité de a et b this.x = x; this.y = y; } Point(int x) { test de la validité de x et 0 this.x = x; this.y = 0; } Point() { this.x = this.y = 0; } ... } emploi : Point p = new Point(10, 20); Point q = new Point(30); Point r = new Point(); 15 / 21 c H. Garreta, 2014 IHM et Java 16 / 21 Java et les objets Java et les objets Collaboration entre constructeurs Construction par défaut, destruction des objets Fichier Point.java Constructeur par défaut : si le programmeur n’a écrit aucun constructeur, alors le compilateur fournit le constructeur sans argument qui consiste à initialiser tous les champs avec 0 (ou 0.0, ou null). public class Point { int x, y; Point(int x, int y) { test de la validité de a et b this.x = x; this.y = y; } L’écriture d’un constructeur quelconque suspend ce mécanisme. —————————– Destruction des objets : il n’y a rien à faire, la machine Java s’en occupe. Autrement dit : quand un objet n’est plus utile il suffit de l’« oublier » Point p = new Point(x1, x1); ... p = new Point(x2, x2); Point(int x) { this(x, 0); } } Point() { this(0, 0); } ... emploi : Point p = new Point(10, 20); Point q = new Point(30); Point r = new Point(); c H. Garreta, 2014 IHM et Java mécanisme du garbage collector, ou nettoyeur de mémoire – déclenchement lorsque la mémoire manque ou la machine est oisive – 1˚) marquage des cellules occupées par des objets accessibles – 2˚) récupération des cellules non marquées : chaı̂nage, parfois regroupement 17 / 21 c H. Garreta, 2014 Java et les objets IHM et Java 18 / 21 Java et les objets Droits d’accès Droits d’accès, exemple Fichier Point.java Quatre niveaux de visibilité : public class Point { le membre est accessible dans... private int x, y; int x; ...les méthodes de sa classe exclusivement public Point(int x, int y) { test de la validité de x et y this.x = x; this.y = y; } int y; ...les méthodes de sa classe et celles des autres classes du même paquet public class UneClasse { private protected int z; ...les méthodes de sa classe, des classes du même paquet et des sous-classes public ... int t; ...les méthodes de n’importe quelle classe public int return } public int return } accesseurs (getters) getX() { x; getY() { y; public void setX(int x) { test de la validité de x this.x = x; } public void setY(int y) { test de la validité de y this.Y = y; } ... } mutateurs (setters) } c H. Garreta, 2014 IHM et Java 19 / 21 c H. Garreta, 2014 IHM et Java 20 / 21 Java et les objets Membres static et final, exemple Fichier Truc.java public class Truc { int valeur; Variable d’instance : chaque instance en a son propre exemplaire. final int rang; Constante d’instance : chaque instance en a une, dont on ne peut pas modifier la valeur. static int nombreDeTrucs; Variable de classe : il en existe un seul exemplaire, accessible par toutes les instances. static final int VAL_MAX = 100; Constante de classe : un seul exemplaire, immuable (analogue à #define VAL_MAX 100 de C++) public Truc(int valeur) { assert valeur < VAL_MAX; this.valeur = valeur; rang = nombreDeTrucs; nombreDeTrucs++; } ... } c H. Garreta, 2014 IHM et Java 21 / 21