Programmation en Java et J2EE PDF

Summary

This document is a presentation on Java programming and J2EE, covering topics such as Java platform elements, compilation, execution, syntax, object-oriented programming (OOP), exceptions, graphical user interfaces (GUIs), and more.

Full Transcript

OBJECTIFS DU COURS  Décrire les éléments-clé de la plate-forme Java  Compiler et exécuter une application Java  Comprendre et utiliser la documentation en ligne de Java  Décrire la syntaxe du langage  Comprendre le paradigme OO et utiliser Java pour l...

OBJECTIFS DU COURS  Décrire les éléments-clé de la plate-forme Java  Compiler et exécuter une application Java  Comprendre et utiliser la documentation en ligne de Java  Décrire la syntaxe du langage  Comprendre le paradigme OO et utiliser Java pour le mettre en œuvre  Comprendre et utiliser les exceptions  Développer un programme qui utilise une interface graphique pour introduire les données à traiter  Comprendre la gestion des événements  Développement des applets JAVA COMME PLATEFORME Plateforme = environnement hardware ou software sur lequel le programme est exécuté.  La « Java Platform » est constituée de : La « Java Virtual Machine » (JVM) Des interfaces de programmation d’application (Java API) 3 JAVA COMME LANGAGE DE PROGRAMMATION Le compilateur Java génère un bytecode, c’est à dire un format intermédiaire, neutre architecturalement, conçu pour faire transiter efficacement le code vers des hardware différents et/ou plateformes différentes Le bytecode ne peut-être interprété que par le processeur de la JVM 4 DÉPLOIEMENT D’UN PROGRAMME CLASSIQUE DE LA COMPILATION 5 DÉPLOIEMENT D’UN PROGRAMME CHANGEMENT DE LA VISION TRADITIONNELLE DE LA COMPILATION Chaque programme est compilé et interprété « Write once run everywhere » 6 JAVA ET SES VERSIONS Quelques versions de la Machine Virtuelle Java 2 Micro Edition (Java ME): cible les terminaux portables. Java 2 Standard Edition (Java SE) : cible les postes clients. Java 2 Entreprise Edition (Java EE) : définit le cadre d’un serveur d’application. Différentes finalités SDK (Software Development Kit) : fournit un compilateur et une machine virtuelle. JRE (Java Runtime Environment) : fournit uniquement une machine virtuelle. Idéal pour le déploiement de vos applications. 7 II. PREMIÈRE APPLICATION EN JAVA COMMENT DÉVELOPPER UNE APPLICATION? Deux façons d’écrire des programmes Java: En écrivant le code dans un simple éditeur de texte  Compilation et exécution du code en ligne de commande DOS En utilisant un environnement de développement (IDE)  Netbeans (http://www.netbeans.com)  Eclipse (https://www.eclipse.org/downloads/)  Borland JBuilder (http://www.borland.com/jbuilder) … UNE PREMIÈRE APPLICATION APPLICATION VERSUS APPLET Une application Java  est composée d’une classe possédant une méthode main() : public static void main (String[] args){ //code à exécuter pour initialiser l’application }  L’environnement d’exécution dépend de l’OS de la machine  Pas de restriction au niveau des API Une applet Java  Comprend une classe publique dérivant de java.applet.Applet  L’environnement d’exécution dépend du browser Web  Restrictions au niveau des API  Généralement pas autorisée à lire ou écrire sur des fichiers locaux.  Interdiction d’ouvrir des connections réseaux vers d’autres systèmes que la machine hôte qui a chargé l’applet  … INSTRUCTIONS Les instructions Java se terminent par un ; Les blocs sont délimités par { pour le début de bloc } pour la fin du bloc Un bloc permet de définir un regroupement d’instructions. La définition d’une classe ou d’une méthode se fait dans un bloc. Sauts de ligne, les espaces et les tabulations sont autorisés. Cela permet de présenter un code plus lisible. POINT D’ENTRÉE D’UN PROGRAMME JAVA Pour pouvoir faire un programme exécutable, il faut toujours une classe contenant une méthode particulière, la méthode « main ». – C’est le point d’entrée dans le programme : le microprocesseur sait qu’il va commencer à exécuter les instructions à partir de cet endroit. public static void main(String args[ ]) { …/… } APPLICATION BONJOUR LE MONDE Créer un fichier texte : Bonjour.java Règle de bonne pratique : 1 classe par fichier et 1 fichier par classe public class Bonjour La première ligne du programme doit être la { déclaration de la classe public static void main (String[]args) Tout programme doit contenir une méthode { main qui porte la signature ci-contre System.out.println("Bonjour le monde"); Écrire à l’écran “Bonjour le monde” } } Fermer les accolades  Compiler le programme : javac Bonjour.java  Le compilateur génère le bytecode dans le fichier : Bonjour.class  Exécuter l’application : java Bonjour  « Bonjour le monde » s’affiche à l’écran IDENTIFICATEURS On a besoin de nommer les classes, les variables, les constantes, etc. ; on parle d’identificateur. Les identificateurs commencent par une lettre, _ ou $ Attention : Java distingue les majuscules des minuscules. Conventions sur les identificateurs :  La première lettre est majuscule pour les classes et les interfaces.  exemples : MaClasse  La première lettre est minuscule pour les méthodes, les attributs et les variables. exemples : getLongueur(), i  Les constantes sont entièrement en majuscules. exemple : HAUTEUR_MAX COMMENTAIRES DANS LE CODE SOURCE Java dispose de trois formes de commentaires :  Tout texte entre « // » et la fin de la ligne // Commentaires sur une seule ligne  Tout texte entre « »  Les textes entre « » sont utilisés pour créer des commentaires que l’exécutable JAVADOC pourra traiter afin de produire une documentation LES MOTS RÉSERVÉS DE JAVA abstract default goto null synchronized boolean do if package this break double implements private throw byte else import protected throws case extends instanceof public transient catch false int return true char final interface short try class finally long static void continue float native super volatile const for new switch while TYPES PRIMITIFS ET TYPES DE RÉFÉRENCE Java est un langage fortement typé Le type de données précise  les valeurs que la variable peut contenir  les opérations que l’on peut réaliser dessus Deux types de données:  Donnée primitive: contient physiquement la valeur (caractère, nombre, booléen)  Référence: contient l’adresse mémoire où l’information relative à l’objet, l’interface, etc. est réellement stockée Référence: Adresse TYPES PRIMITIFS ET TYPES DE RÉFÉRENCE TYPES DE DONNÉES PRIMITIFS (1/4) Primitive Data Types Integral Floating byte 8bits -128 to 127 float 32bits 1.4E-45 3.4E38 short 16bits -32768 to 32767 double 64bits 4.9E-324 1.8E308 int 32bits -2^31 to 2^31-1 long 64 bits -2^63 to 2^63-1 Textual Logical char 16bits 0 to 65535 one bit : true or false TYPES PRIMITIFS ET TYPES DE RÉFÉRENCE TYPES DE DONNÉES PRIMITIFS (2/4) Explication:  byte : codé sur 8 bits  28 valeurs  (–27) to (27–1) = -128 à 127  int : codé sur 32 bits  232 valeurs  (–231) to (231–1) Déclaration et initialisation :  int int x=12;  short short x= 32;  long long x= 200L; // Nombre accolé à un L  byte byte x=12;  doubledouble x=23.2323;  float float x= 23.233F; // Nombre accolé à un F  char char c=‘a’;  boolean boolean b=true; TYPES PRIMITIFS ET TYPES DE RÉFÉRENCE TYPES DE DONNÉES PRIMITIFS (3/4) Déclaration, Initialisation et Assignation des types primitifs int t; Déclaration d’un entier t (t est l’identificateur) int u = 3; Déclaration et initialisation d’un entier t=7; Initialisation de t à la valeur 7 u=t; Assignation (affectation) de la valeur de t à u m=9; Erreur déclaration préalable nécessaire char c; Déclaration c=‘a’; Initialisation TYPES PRIMITIFS ET TYPES DE RÉFÉRENCE TYPES DE DONNÉES PRIMITIFS (4/4) Exemple: int a = 5; Déclaration et initialisation de 2 entiers: a et b int b = 8; Affectation de la valeur de b à a a=b; Désormais, il existe deux variables en mémoire qui ont la même valeur a=8 b=8 TYPES PRIMITIFS ET TYPES DE RÉFÉRENCE TYPES DE RÉFÉRENCE Tous les types hormis les types primitifs « Pointeur implicite » sur un objet Référence: Adresse PORTÉE D'UNE VARIABLE La portée d'une variable va de la ligne de sa définition jusqu'à la fin du bloc dans lequel elle est définie. Exemple { int n=10; … { int p=20; float n=3.5; //erreur de compilation : définition de n invalide. … } System.out.println("p = " + p); //erreur de compilation : p inconnu } ARITHMÉTIQUE ET OPÉRATEURS ARITHMÉTIQUE ÉLÉMENTAIRE Quelle est la valeur de : 5+3*4+(12/4+1) Règles de précédences sur les opérateurs: Niveau Symbole Signification 1 () Parenthèse * Produit 2 / Division % Modulo + Addition ou concaténation 3 - Soustraction OPÉRATEURS DE COMPARAISON Pour comparer deux valeurs: Opérateur Exemple Renvoie TRUE si > v1 > v2 v1 plus grand que v2 >= v1 >= v2 Plus grand ou égal < v1 < v2 Plus petit que } catch ( TypeException1 E ) { } catch ( TypeException2 E ) { }..... catch ( TypeExceptionk E ) { } La recherche va s'effectuer comme si le programme contenait des if...else if... imbriqués. Les tests seraient effectués sur l'appartenance de l'objet d'exception à une classe à l'aide de l'opérateur instanceof. On choisira donc, lorsqu’il y a une hiérarchie entre les exceptions à intercepter, de placer le code de leurs clauses dans l’ordre inverse de la hiérarchie. LES EXCEPTIONS Déclenchement d'une exception : throw Il est possible de déclencher soi-même des exceptions en utilisant l'instruction throw, voir même de déclencher des exceptions personnalisées. Déclenchement manuel d'une exception existante La Java machine peut déclencher une exception automatiquement comme dans l'exemple de la levée d'une ArithmeticException lors de l'exécution de l'instruction "x = 1/0 ;". La Java machine peut aussi lever (déclencher) une exception à votre demande suite à la rencontre d'une instruction throw. Le programme qui suit lance une ArithmeticException avec le message "Mauvais calcul !" dans la méthode meth() et intercepte cette exception dans le bloc englobant main. Le traitement de cette exception consiste à afficher le contenu du champ message de l'exception grâce à la méthode getMessage() : LES EXCEPTIONS Déclenchement d'une exception : throw LES EXCEPTIONS Déclenchement manuel d'une exception personnalisée Pour une exception personnalisée, le mode d'action est strictement identique, il vous faut seulement auparavant créer une nouvelle classe héritant obligatoirement de la classe Exception ou de n'importe laquelle de ses sous- classes. LES EXCEPTIONS Exception non vérifiée La majorité des exceptions de Java font partie du package java.lang. Certaines exceptions sont tellement courantes qu'elles ont été rangées dans une catégorie dénommée la catégorie des exceptions implicites ou non vérifiées (unchecked), les autres sont dénommées exception explicites ou vérifiées (checked). Une exception non vérifiée (implicite) est une classe dérivant de l'une des deux classes Error ou RuntimeException : java.lang.Object | +--java.lang.Throwable | +--java.lang.Error | +--java.lang.Exception | +--java.lang.RuntimeException LES EXCEPTIONS Méthode propageant une exception vérifiée : throws Une méthode dans laquelle est levée une ou plusieurs exceptions vérifiées doit obligatoirement signaler au compilateur quelles sont les classes d'exceptions qu'elle laisse se propager sans traitement par un gestionnaire (propagation vers un bloc englobant). Java dispose d'un spécificateur pour ce signalement : le mot clef throws suivi de la liste des noms des classes d'exceptions qui sont propagées. LES EXCEPTIONS Méthode propageant une exception vérifiée : throws Une méthode dans laquelle est levée une ou plusieurs exceptions vérifiées doit obligatoirement signaler au compilateur quelles sont les classes d'exceptions qu'elle laisse se propager sans traitement par un gestionnaire (propagation vers un bloc englobant). Java dispose d'un spécificateur pour ce signalement : le mot clef throws suivi de la liste des noms des classes d'exceptions qui sont propagées. Résultats de l'exécution : ---- java UseAction4 UseAction4.java:8: unreported exception java.io.IOException; must be caught or declared to be thrown throw new IOException("Problème d'E/S !"); ^ 1 error LES EXCEPTIONS Méthode propageant une exception vérifiée : throws Le compilateur Java attendait de notre part l'une des deux seules attitudes suivantes : Soit nous interceptons et traitons l'exception IOException à l'intérieur du corps de la méthode où elle a été lancée avec pour conséquence que le bloc englobant n'aura pas à traiter une telle exception puisque l'objet d'exception est automatiquement détruit dès qu'il a été traité. LES EXCEPTIONS Méthode propageant une exception vérifiée : throws Soit nous interceptons et traitons l'exception IOException à l'intérieur du bloc englobant la méthode meth() qui a lancé l'exception, auquel cas il est obligatoire de signaler au compilateur que cette méthode meth() lance et propage une IOException non traitée. Le code ci-après implante la seconde attitude possible : LES EXCEPTIONS Clause finally Supposons que nous soyons en présence d'un code contenant une éventuelle levée d'exception, mais supposons que quoiqu'il se passe nous désirions qu'un certain type d'action ait toujours lieu (comme par exemple fermer un fichier qui a été ouvert auparavant). Il existe en Java une clause spécifique optionnelle dans la syntaxe des gestionnaires d'exception permettant ce type de réaction du programme, c'est la clause finally. Voici en pseudo Java une syntaxe de cette clause : try { < action sur fichier> } finally { }.... suite LES CLASSESABSTRAITES  Concept des classesabstraites  Une classe abstraite est une classe qui ne permet pas l’instanciation des objets de son type. C’est une classe incomplète puisqu’elle contient certaines méthodes dont leurs corps sont définies dans la classe dérivée. En effet, elle doit être héritée.  Une classe abstraite comporte une ou plusieurs méthodes abstraites, et elle peut comporter d'autres méthodes non abstraites.  Une méthode abstraite est une méthode qui ne possède pas d’instructions (corps). Elle comporte seulement une signature de définition suivie du caractère point-virgule. Une méthode abstraite doit être précédée par le mot clé abstract. Exemple : public abstractdouble f(); LES CLASSES ABSTRAITES(2)  Syntaxe abstract class Personne { public void affiche() {……} // affiche() est définie dans Personne public abstract void determineAge (int n) ; //determineAge() est //une méthode abstraite, elle n’est pas définie dans Personne. }  Utilisation Personne p ; //on peut déclarer une référence sur un objet de type //Personne ou dérivé. p = new Personne (….); //Erreur, pas d’instanciation d’objets //d’une classe abstraite. LES CLASSES ABSTRAITES(3) Une classe abstraite peut être utile pour imposer l'existence de certaines méthodes dans des classes, sans savoir comment elles seront implémentées. abstract class Graphique { …. abstract void affiche(); } class Rectangle extends Graphique{ class Cercle extends Graphique{ …. …. public void affiche (){ public void affiche (){ Syso ("Je suis un rectangle") ;} Syso ("Je suis un cercle") ;} } } Une classe qui hérite d'une classe abstraite doit redéfinir les méthodes abstraites, sinon elle est abstraite également. En C++, les méthodes abstraites sont dites virtuelles pures. LES CLASSES ABSTRAITES(4)  Règles des classesabstraites  Une classe est automatiquement abstraite si une de ses méthodes est abstraite.  On doit déclarer également une classe abstraite par le mot clé abstract.  Une méthode abstraite ne peut pas être privée, ce qui est logique puisque son corps sera définit dans une classe dérivée.  Les noms d’arguments muets doivent figurer dans la définition d’une méthode abstraite. public abstract void determineAge (int); //Erreur : nom argument fictif est obligatoire  Une classe dérivée d’une classe abstraite n’est pas obligée de redéfinir toutes les méthodes abstraites, elle peut ne redéfinir aucune, mais elle reste abstraite tant qu’il y a encore des méthodes abstraites non implémentées.  Une classe dérivée d’une classe non abstraite peut être déclarée abstraite. LES CLASSES ABSTRAITES(5)  Règles des classes abstraites (2)  Une classe abstraite est non instanciable (donc il n’est pas possible d’utiliser les constructeurs de cette classe et donc on ne peut pas créer des objet de son type.)  Une classe dérivée d'une classe abstraite ne devient concrète que si elle implémente toutes les méthodes abstraites de sa classe de base.  Une méthode abstraite ne possède pas de corps, mais doit être implémentée dans les classes dérivées non abstraites : abstract fonction (arguments); ce n'est qu'une signature.  Une classe abstraite peut contenir des méthodes non abstraites et des déclarations de variables ordinaires. LES CLASSES ABSTRAITES(6)  Intérêt des classesabstraites  Les classes abstraites facilitent largement la conception orientée objet.  On peut placer dans une classe abstraite toutes les fonctionnalités dont on souhaite disposer pour les classes descendantes : Soit sous la forme d’une implémentation complète de méthodes (non abstraites) et de champs lorsqu’ils sont communs à tous lesdescendants, Soit sous forme d’interface des méthodes abstraites dont on est alors sûr qu’elles existeront dans toute classe dérivéeinstanciable. LES CLASSES ABSTRAITES(7)  Exemple :  Considérons la hiérarchie des classes suivantes : Surface () Graphique Cercle Rectangle On veut que les classes Cercle et Rectangle disposent de la méthode surface() retournant la surface de la figure géométrique définie par la classe. LES CLASSES ABSTRAITES(8) public abstract class Graphique { private int x,y; //Une classe abstraite ne peut pas être instanciée, mais elle peut avoir un //constructeur : public graphique ( int x, int y) { this.x = x ; this.y = y ;} //Voilà la méthode abstraite à compléter : public abstract double surface(); //Toutes les méthodes ne sont pas abstraites : public void affiche(){ System.out.println ("Le centre de l’objet se trouve dans :" + x+ " et " + y) ; System.out.println ("La surface de l'objet est :" +this.surface()) ; } } LES CLASSES ABSTRAITES(9) public class Cercle extends Graphique { private double rayon =1 ; public Cercle ( int x, int y,double r){ super(x,y) ; rayon = r ;} public double surface (){ return (2* 3.14 *rayon) ; } } public class Rectangle extends Graphique { private int larg, lng ; public Rectangle ( int x, int y, int larg, int lon){ super (x,y) ; this.lng = lon ;this.larg = larg ;} public double surface () { return (lng*larg);} } LES CLASSES ABSTRAITES(10) public class TestPoly2{ public static void main (String [] args) { Graphique [] tab = new Graphique ; //tab = new Graphique (3,2);//Erreur, classe abstraite est non instanciable //Même si la classe Graphique est abstraite, il est tout de même possible //de déclarer des variables de ce type qui pourront recevoir des objets //créés à partir des sous-classes concrètes : tab = new Cercle (3,2,7); tab = new Cercle (10,7,3) ; tab = new Rectangle (4,7,8,6) ; tab = new Rectangle (8,10,12,10); tab = new Cercle (8,5,3) ; tab = new Rectangle (10,17,3,8) ; for (int i=0 ; i

Use Quizgecko on...
Browser
Browser