Le Langage JAVA Introduction à la Programmation Orientée Objet Dominique Archambault - APACHES
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Le Langage JAVA Introduction à la Programmation Orientée Objet Dominique Archambault Equipe Interfaces Non Visuelles et Accessibilité Département d’Informatique, UFR d’Ingénierie Université Pierre et Marie Curie - Paris 6 2008 – 2011
Java Plan du Cours 1 Préalable – Algorithmique et bases de langages structurés 3 2 Introduction/La notion d’Objet 9 3 Éléments de syntaxe 15 4 Héritage 19 5 Packages/Classes de Base/Collections 23 6 Exceptions/Interfaces Utilisateur 29 7 E/S, Threads 41 A Aspects pratiques 49 B Vie et mort d’un Objet 51 C Un exemple détaillé : La classe Robot 53 D Exemple : GUI 55 2
Cours 2 Introduction/La notion d’Objet 2.1 Introduction Ennuis fréquents – Effets de bord 2.1.1 Présentation et Historique – Portée des variables (Variables globales, locales, pa- ramètres) JAVA est : – Accès direct à la mémoire (pointeurs) – un Langage de Programmation – Variables – . . . généraliste – Initialisation – . . . orienté Objet – Décomposition en fonctions – . . . portable – Nombre de paramètres – . . . structurellement orienté réseau – Difficulté pour regrouper des données Historique des langages de programmation Main Données – Les premiers ordinateurs Mark I (1943), Eniac (1946) – Assembleur (1947) – Langages évolués Fortran (1957) – Langages structurés Algol 58, Pascal (1970), C (1972) Fonction Fonction – Langages fonctionnels LISP (1959), CAML (1985) – Programmation logique Prolog (1972) Fonction – Langages modulaires Modula (1973), ADA (1983) – Langages Orientés Objet Simula (1960) SmallTalk (1980), JAVA (1995), Python (1990) Programmation Orientée Objet Données et fonctions de traitement de ces données 2.1.2 De la programmation Structurée à la sont réunies programmation Orientée Objet – Structurer le programme autour des objets manipulés Rapide point sur les langages structurés – Associer les traitements à ces objets Principe : Décomposer un problème en séquences Tout en conservant tous les éléments de la programma- tion Structurée – Organisation des données – Variables (abstrait) – Pointeurs (concret : emplacement mémoire) Programmation Orientée Objet – Structures de contrôle (Blocs, Conditions, Boucles) – Décomposition en fonctions Données Données – Passage de paramètres Données Methods Methods Methods pi 3.141592 Main Emplacement Variable Données Données mémoire Methods Methods 9
Java Cours 2. Introduction/La notion d’Objet 2.1.3 JAVA Les version de Java : Le JDK1 Caractéristiques principales – JDK 1.0 (23/01/96 - 211 classes et interfaces) – JAVA est Orienté Objet : tout ou presque est Objet – JDK 1.1 (02/97 - 477 classes et interfaces) – JAVA est portable : le code est interprété par une Ma- – J2SE 1.22 (Playground, 12/98 - 1524 classes et inter- chine Virtuelle faces) – JAVA est structurellement Orienté Réseau : Applets et En fait plusieurs versions de Java apparaissent : Applications réseau (RMI, Corba) – J2SE : Java 2 Standard Edition – J2EE : Java 2 Entreprise Edition (⇒ serveurs) – Autres caractéristiques importantes : – J2ME : Java 2 Micro Edition (destiné aux systèmes – Garbage Collector légers : téléphones, palm, systèmes embarqués) – Aucun accès direct à la mémoire (pas de pointeurs) – J2SE 1.3 (Kestrel, 05/00 - 1840 classes et interfaces) – Chargement de code dynamique – J2SE 1.4 (Merlin, 02/02 - 2723 classes et interfaces) – Multiprocessus (Threads) – J2SE 5.02 (Tiger, 09/04 - 3270 classes et interfaces) – Syntaxe de C++ (elle même reprise de C) – Java SE 62 (Mustang, 12/06 - 3777 classes et inter- – Langage propriétaire mais licence ouverte faces) – Java 73 : Open JDK (Dolphin) La machine virtuelle La licence Le Code JAVA est compilé et interprété Utilisation – le compilateur JAVA génère du byte-code (ou p-code) Le JDK est gratuit, Son utilisation (même commerciale) – le byte-code est interprété par n’importe quelle ma- est gratuite, depuis la première version. chine virtuelle JAVA (de même version) – Il existe des machines virtuelles pour un grand nombre Depuis novembre 2006, le code source du compilateur ja- de plateformes : Unix, Ms Windows, Mac OS, Pla- vac et de la machine virtuelle HotSpot ont été publiés en teformes matérielles (téléphones), Navigateurs Web Open Source sous la Licence publique générale GNU. (Applets) OpenJDK Code source de Java publié en Open Source sous la Li- – Portabilité mais moins bonnes performances cence publique générale GNU. – Compilateurs JIT (Just In Time) Voir http://openjdk.java.net/ Le Garbage Collector – La mémoire est libérée automatiquement – Pas de “delete” – Gain de 30 à 40% en temps de développement – Le système compte le nombre de références sur chaque objet – Quand ce nombre est nul, l’objet est détruit (et la mé- moire libérée) – Perte de performance (limitée) – Processus de faible priorité Historique – 1990/1993 Sun Microsystems développe un langage pour la domotique (TV interactive, PDA, etc), OAK – Code compact et efficace – Indépendant de l’architecture – 1994 Rencontre avec le Web, OAK devient JAVA – 1995-1999 Java devient un langage généraliste – Succès considérable (bien au delà des prévisions de SUN) – Devient incontournable dans l’industrie de l’infor- matique – Puces JAVA, Systèmes Embarqués 1 src[http ://fr.wikipedia.org/wiki/Langage_Java] 2 Changement de système de nommage 3 Voir https ://jdk7.dev.java.net/ 10
Dominique Archambault, UPMC-Paris 6 2.2 La notion d’Objet (arguments...) { // Implémentation de la méthode 2.2.1 Définitions } Classe Exemples : Une classe est un type d’Objet défini par public int getScore() { // accesseur return score; – un ensemble de données (les attributs) } – les méthodes de traitement de ses données public void ajouteUnPoint() { score = score + 1; Classes, Objet } Un objet est une instance d’une classe – accessible via une référence public void ajouteDesPoint(int points) { – instancié grâce à un constructeur de la classe score = score + points; Il possède : } – un état (l’ensemble des valeurs des attributs) public Matrice multiplie(Matrice m1, – un comportement (défini par les méthodes de la classe) Matrice m2) { Matrice m = new Matrice(); ... // implémentation du produit de matrices Attributs return m; Les attributs décrivent les éléments qui composent } chaque objet de la classe, et les relations entre objets. – Les caractéristiques d’un objet private int fibo(int n) { – Les composants d’un objet complexe if (n
Java Cours 2. Introduction/La notion d’Objet 2.2.2 Syntaxe 24 this.re=c.re; 25 this.im=c.im; Définition d’une Classe 26 } UneClasse.java 27 28 // Une méthode de traitement public class UneClasse { 29 public void add(Complex c) { // Déclaration des attributs 30 this.re+=c.re; private ident; 31 this.im+=c.im; ... 32 } 33 } // Déclaration de méthodes // Contructeur} Voir un exemple détaillé en Annexe C, “La classe Robot”. public UneClasse() {...} Accessibilité des éléments // Accesseur – private indique que l’attribut ou la méthode ne sera public getIdent() {...} accessible que depuis les méthodes de la classe – public indique que (l’attribut ou) la méthode sera // Méthodes de traitement accessible depuis les méthodes d’autres classes utili- public calculeQQChose() {...} sant une instance de cette classe – protected indique que l’attribut ou la méthode ne // Méthode main sera accessible que depuis les méthodes de la classe et public static void main (String[] args) {...} de ses classes héritées } – /*package*/ indique que l’attribut ou la méthode sera accessible à toutes les classes du package. Note : Le mot clé class sert à définir une classe. Le corps de ce dernier est le comportement par défaut. Il n’est pas la classe est placé entre des accolades : nécessaire d’utiliser un mot-clé, néanmoins on pla- – des déclarations d’attributs cera le commentaire /*package*/ systématique- – des déclarations de méthodes ment par souci de clarté. – Constructeurs Dans ce module, tous les attributs seront systématique- – Accesseurs ment privés – Méthodes de traitement Java accepte que les attributs soient déclarés pu- – Méthode “main” blic ou protected, mais c’est une très mauvaise ha- Attention : toute classe publique doit être placée dans un bitude. Dans un souci de programmation "sure", il fichier portant le même nom, avec l’extension “.java” faut se l’interdire. Dans tous les TP et devoirs, Java est sensible à la casse, c’est à dire que ’a’ et ’A’ sont ce sera considéré comme une faute. 2 lettres différentes ! this Un exemple : une classe “nombres complexes” – this est une référence vers l’instance courante Complex.java – Dans le constructeur ci-contre les paramètres re et im 1 public class Complex { masquent les attributs de même nom. 2 // Déclaration des attributs – this.re permet d’accéder à l’attribut re de l’ins- 3 private double re, im; tance courante 4 Ne pas hésiter à utiliser this même lorsque ce n’est pas 5 // Accesseurs absolument nécessaire 6 public double getRe() {return re;} 7 public double getIm() {return im;} Constructeurs 8 – Le constructeur initialise les attributs de l’instance en 9 // Constructeur cours de création 10 public Complex(double re, – Si aucun constructeur n’est créé explicitement, JAVA 11 double im) { créé un constructeur par défaut, sans arguments, qui 12 this.re=re; initialise les attributs avec les valeurs par défaut. 13 this.im=im; – Un constructeur par copie permet de recopier les va- 14 } 15 leurs d’une instance dans une autre instance. 16 // Constructeur par défaut 49 Complex c1; 17 public Complex() { 50 // c1 ne peut être utilisée tant 18 this.re=0; 51 // qu’elle n’est pas initialisée 19 this.im=0; 52 c1 = new Complex(); // initialisation 20 } 53 // Appel du constructeur par défaut 21 54 22 // Constructeur par copie 55 Complex c2=null; 23 public Complex(Complex c) { 56 c2 = new Complex(1,-1); 12
Dominique Archambault, UPMC-Paris 6 57 2.2.3 Compléments 58 Complex c3 = new Complex(c1); 59 // Appel du constructeur par copie La méthode toString 60 61 Complex c4 = c1; class Complex { 62 // Simple copie de références, c1 // ... 63 // et c4 pointent vers le même objet // La méthode toString public String toString() { – La déclaration Complex c1; ne fait que créer une return this.re+" + "+this.im+"i"; référence vers un Complex. Elle ne crée pas d’instance. } – L’instance est créée par l’opérateur new qui alloue un } emplacement mémoire et appelle un constructeur (cf C’est une méthode définie par défaut sur tous les objets. lignes 52, 56 et 58). Une référence à l’objet instancié Elle permet d’afficher facilement l’objet. Il faut la redéfi- (son adresse) est retournée. nir pour chaque classe, car son comportement par défaut – Toute référence doit être initialisée avant d’être utili- est d’afficher l’adresse physique de l’objet en mémoire. sée, soit avec la valeur null (cf ligne 55), soit avec une autre référence (cf ligne 61) ou en créant un nou- Exemple vel object avec new. – Toute référence qui est attribut de classe est initialisée Complex c1=new Complex(1,1); Complex c2=new Complex(-2,3); à null. Complex c3=new Complex(1,0); Complex c4=new Complex(0,-1); Vie et mort d’un objet System.out.println("voici c1: "+c1); System.out.println("voici c2: "+c2); Que se passe-t-il précisément en mémoire lors de créa- System.out.println("voici c3: "+c3); tions, de copies et de suppression d’objets ? System.out.println("voici c4: "+c4); Voir Annexe B, “Vie et mort d’un Objet”. Écran voici c1 : 1.0+1.0i voici c2 : -2.0+3.0i voici c3 : 1.0+0.0i voici c4 : 0.0+-1.0i // Une meilleure méthode toString public String toString() { String s=""; if (this.re==0) { if (this.im==0) s+="0"; } else { s+=this.re; if (this.im>0) s+="+"; } if (this.im!=0) { if (this.im==-1) s+="-"; else if (this.im!=1) s+=this.im; s+="i"; } return s; } Écran voici c1 : 1.0+i voici c2 : -2.0+3.0i voici c3 : 1.0 voici c4 : -i 13
Java Cours 2. Introduction/La notion d’Objet Attributs et méthodes statiques c1 = new Complex(); System.out.println(c1); class Complex { // Déclaration des attributs Complex c2 = new Complex(1,-1); private double re, im; c1.add(c2); private static int nbCplx; System.out.println(c1); // Constructeur c1.add(new Complex(2,3)); public Complex(double re, System.out.println(c1); double im) { System.out.println("Nb d’instances:" this.re = re; + Complex.getNbComplexes()); this.im = im; } Complex.nbCplx += 1; } – Le mot clé static permet de définir un attribut ou une méthode de classe. C’est à dire un attribut ou une // Methode statique méthode qui ne sera pas attaché à une instance de la public static int getNbComplexes() { classe mais à la classe elle-même return Complex.nbCplx; – On invoque une méthode statique en utilisant le nom } de la classe : Complex.getNbComplexes() – this ne peut pas être utilisé dans une méthode sta- // Méthode main tique (elle n’est pas liée à une instance) public static void main (String[] args) { – On ne peut appeler à aucun attribut dans une méthode System.out.println("Nb d’instances:" statique + Complex.getNbComplexes()); Le point d’entrée d’un programme est une méthode pu- Complex c1; blique statique main, qui prend un tableau de chaînes en System.out.println("Nb d’instances:" argument et ne renvoie rien (void). + Complex.getNbComplexes()); public static void main(String[] args) 14
Cours 3 Éléments de syntaxe 3.1 Commentaires Types numériques réels Précision type constantes défaut bits // Un commentaire sur une seule ligne Double double 2.23 0.0 64 -4.32e-12 /* Un commentaire qui s’étend\\ Simple float 8.42f 0.0f 32 sur plusieurs lignes\\ -6.63e-4f * / Operateurs : - (unaire, binaire) + * / > >= /** Un commentaire destiné à produire < >= < >= <
Java Cours 3. Éléments de syntaxe int vecteur[]; Tableaux multidimensionnels vecteur=new int[n]; vecteur[0]=1; Des tableaux de tableaux [][] ; int[] premiers={1, 2, 3, 5, 7, 7+4}; [][][] ; – Crée une référence vers un tableau de références vers Robot[] equipe; des tableaux. equipe=new Robot[20]; – Permet de créer aussi bien des tableaux de dimensions for (i=0;i
Dominique Archambault, UPMC-Paris 6 Quelques méthodes Alternatives – char charAt(int i) Retourne le caractère numéro i ; – if () – String concat(String str) [ else ] Retourne une chaîne formée par concaténation d’une copie de la chaîne courante et de la chaîne str. ; – switch () { – static String valueOf(int i) case : [ break; ] Retourne une chaîne représentant l’entier i ; case : [ break; ] – static String valueOf(double d) ... Retourne une chaîne représentant du réel double d ; [ default: [ break; ] ] } Voir String et StringBuffer sur : [http ://java.sun.com/javase/6/docs/api/] Petite différence : Les conditions doivent être booléennes Boucles 3.4 Structures de contrôle – while () On retrouve les mêmes structures qu’en C/C++, à – do while () quelques détails près. – for (;;) Séquence Contrôle de boucles Les instructions en séquence sont séparées par des ; (point- – continue virgule). reprend au début du bloc instruction0 ; – break instruction1 ; interrompt la boucle instruction2 ; instruction3 ; On n’utilise quasiment jamais continue ni break. ... Il vaut toujours mieux structurer correctement ses algo- rithmes ! En fait le point-virgule en Java est plus qu’un séparateur, il signale la fin d’une instruction. Il doit donc être présent après toute instruction, même si on est en fin de bloc ou 3.5 Conventions d’écriture de méthode. classes ClassName variables maVariable attributs monAttribut methodes maMethode packages monpackage constantes MACONSTANTE (ou MaConstante) 17
Java 18
Vous pouvez aussi lire