h"p://www.isima.fr/~loic Novembre 2014 – Support étudiant 2 ObjecDfs • Écrire u

h"p://www.isima.fr/~loic Novembre 2014 – Support étudiant 2 ObjecDfs • Écrire un programme JAVA • UDliser les concepts objets avec JAVA • Concevoir des IHM • Syntaxe C/C++ • Concepts objets Pré-­‐requis 3 Cadre • Le Java vu par SUN et uniquement • Préparer les premières cerDficaDons • ExcepDon : uDliser l'EDI Eclipse • Présence • Examen final ÉvaluaDon NetBeans vs Eclipse • Sun / Oracle • Supporte toujours les dernières technos Java • ConcepDon de GUI naDve (maDsse) • IBM • RéputaDon plus pro ? • Plugin : délai ? IncompaDbilité ? • Plugin : WindowBuilder 4 Ne pas uDliser tout de suite… 5 Plan 1. Premier programme 8 2. NoDons de base & syntaxe 23 3. Concepts objets en Java 44 4. Les excepDons 94 5. IHM : AWT & Swing 108 6. Concurrence (Threads) 144 7. Fichiers & flux, sérialisaDon 155 HS Compléments 173 6 IntroducDon • Langage • Machine virtuelle • Plateforme • Île ? • Javascript (ECMA) ? 7 MoDvaDons • Langage créé en 1995 § Patrick Naughton § James Gosling • Simple • Sécurisé (réseaux, Internet) • Portable • Performant Concepts difficiles du C++ évacués 2. Premier programme 9 Premier programme /** ma première classe */ public class Exemple { } Fichier source (texte) Exemple.java public static void main(String[] argv) { // afficher un message java.lang.System.out.println(”Bonjour”); } System.out.println(”;-)”); 10 Pour voir le résultat… 1. Compiler le programme javac Exemple.java java Exemple .exe ? .class ? 2. Lancer le programme 11 Fichier source • Extension : .java • Nom du fichier = nom de la classe publique • Respecter la casse Exemple • 1 classe publique par fichier • Pas de point virgule en fin de classe ! • Mélange déclaraDon + implémentaDon + commentaires 12 CompilaDon • Fichier compilé : .class • Pseudo-­‐code (byte-­‐code) • ≠ Code machine javac Exemple.java Certains compilateurs transforment le code java en code naDf : • Portabilité nulle • GesDon de la mémoire ? 13 ExécuDon java Exemple • Pseudo-­‐code interprété par la JVM Java Virtual Machine • voire compilé en naDf à la volée (JVM hotspot) • Programme seul embarqué dans (standalone) une page HTML (applet) § Différences : son, sécurité (gesDonnaire) • Processeur JAVA (Smart Cards) • Systèmes Android • Portabilité totale si bonne JVM 14 Exercice • Tester le programme Exemple • Consulter la documentaDon § Google : java documentaDon api 7 ou 8 § h"p://docs.oracle.com/javase/7/docs/api/ § h"p://docs.oracle.com/javase/8/docs/api/ • Consulter les tutoriaux officiels • h"p://docs.oracle.com/javase/tutorial/ 15 DocumentaDon Plateforme 16 Paquetage / package (1) • Un ensemble de classes/fichiers rassemblés pour une finalité besoin foncDonnel • [C++] espace de nommage • par défaut (java.lang) • Standard (gesDon E/S, graphisme) • Personnel / Tiers Version 17 Paquetage / package (2) • Nom spécifique suivant le type : § java.lang (sys), java.awt (std) § javax.swing (std), javax.xml (std) § org.w3c.dom (tiers/std) § loic.classeperso (perso) • Sous-­‐package § Mécanisme arborescent comme les répertoires § Séparateur : le point • Retrouver les packages : classpath § Variable système § Paramètres en ligne de commande (-­‐cp ou –classpath) 18 Clause import • SpécificaDon complète d’une classe d’un package qui n’est pas chargé par défaut • Facilité : clause import • EnuméraDon § À l’unité § Par package (*) non récursif ;-­‐( import javax.swing.SwingUtilities; import javax.swing.*; javax.swing.SwingUtilities; import javax.swing.event.*; • 1.0 (1.1) – applet , jni, awt [1995] § 236 classes pour 1.0.2 • 1.2 – swing (version 2) [1998] § 1524 classes • 1.3 – débogage [2000] • 1.4 – performances – nio [2002] • 1.5 -­‐ patrons / templates [2004] § 3279 classes • 1.6 – sécurité, scripts, performance [2006] § 3795 classes • AcquisiDon de Sun par [2010] • 1.7 – open JDK -­‐ 4024 classes [2011] • 1.8 – 4240 classes [2014] 19 L E G A C Y Aujourd’hui ? • Java 7 update 71/72 § Open JDK § SimplificaDon de syntaxe § Framework de parallélisaDon • Java 8 update 25 § Streams § Lambdas § Code dans les interfaces • Java 9 ? 2016 ? § Modularité 20 etud Java 7 u71 berzet Java 8 u20 21 Plateforme L Plus grosse difficulté du java connaître ces classes standards classes deprecated J DocumentaDon bien faite : javadoc & tutoriels java –showversion javac -version // version > 1.3, // options : –source et -target 22 DistribuDon ? • Usage § ExécuDon seule (JRE) § Développement (JDK < 2, SDK v ≥ 2) • Cibles § Standard Java SE / J2SE § Entreprise Java EE / J2EE § Micro Java ME / J2ME (v ≥ 5) 3. NoDons de base Syntaxe public class Exemple { } { Accolades } • Classe • Méthode • Bloc : ensemble séquenDel d’instrucDons 24 public static void main(String[] argv) { // afficher un commentaire monoligne /* commentaire sur plusieurs lignes */ /** commentaire javadoc */ } 25 A"ribut / Variable ? • Objet § Prédéfini ou uDlisateur § Chaîne de caractères : String "Essai" § ManipulaDon par « références » (pointeurs ?) • Scalaire / PrimiDve § enDer / réel / booléen § caractère ’A’ § pour l'efficacité § doublé par un type objet 26 Types de données scalaires (1) • char § type caractère § ≠ String § unicode '\u0000' • boolean § true ou false. § non homomorphe aux enDers • types enDers § byte (8 bits) § short (16 bits) § int (32 bits) § long (64 bits) • types réels § float (32 bits) § double (64 bits) 27 Types de données scalaires (2) • Normalisés (portabilité) • Doublés par des types objets : § Double § Integer • Méthodes • toString() • Double.parseDouble() 28 DéclaraDon de variables • N'importe où dans le bloc • IniDalisaDon d'une variable pas automaDque § Erreur : "might not be iniDalized" public static void main(String[] argv) { int i = 0; char c = 'A'; Classe objet; String s; double d = 1.0; float f = 1.3f; double[] tableau; } 29 { int i = 0 ; { int j= 3 ; // i est utilisable dans ce bloc } // j n’est plus disponible ici } { int i = 0 ; boolean b = true; { double i= 3 ; boolean b = false; } } 30 ManipulaDon de variables public static void main(String[] a) { int i = 0; i = i + 1; i += 1 ; i *= 2 ; System.out.println(i) ; System.out.println(++i) ; System.out.println(i) ; System.out.println(i++) ; System.out.println(i) ; i = (int) 10.6; } 31 CondiDon (1) if (test) { … } if (test) { … } else { … } (i==5) (i!=5) Un test est un booléen : true ou false (test)?VRAI:FAUX boolean b1 =(i==5); boolean b2 = !b1; Opérateur ternaire Test 32 CondiDon (2) if (test) instruction1; else instruction2; if (b1) … if (!b1)… Opérateur NON if (b1 || b2) … Opérateur OU if (b1 && b2) … Opérateur ET ALORS Une séquence de test n’est pas complètement évaluée si ce n’est pas nécessaire. 33 CondiDon (3) switch (variable) { case valeur1 : instructions; break; case valeur2 : case valeur3 : instructions; break; default: instructions; [break;] } • Variable de type simple (String possible dans 1.7) • Oubli du break ? ( ≠ C#) • default facultaDf 34 Boucles condiDonnelles for (initialisation;test;incrémentation) { … } while (test) { … } do { … } while (test); Accolades facultaDves s'il n’y a qu'une instrucDon for (int i=0;i<10;++i) System.out.println(i); 35 { int i; for(i=0; i<10; ++i) { … } } { for (int i=0; i<10; ++i) { … } for (int i=0; i<10; ++i) { … } } { int i; for (int i=0; i<10; ++i) { … } } Variable de boucle et visibilité… 36 Tableaux (1) • Taille fixe, donnée par le champ length • Premier indice du tableau : 0 • VérificaDon de la validité des indices § ExcepDon : OutOfBoundsArray // création d'un tableau vide de 10 entiers int[] t1 = new int[10]; // déclaration d'un tableau sans élément int[] t2; for(int i=0; i<t1.length; ++i) System.out.println(t1[i]); 37 Tableaux (2) • IniDalisaDon du tableau § Par des valeurs scalaires § Par des références nulles • "Libérer" un tableau • Tableau mulDdimensionnel t1 = null; String[][] chaines = new String[10][5]; t1[i] = ?; 38 Chaîne de caractères (1) • String ≠ char[] • sta7que String • dynamique StringBuffer StringBuilder • UTF-­‐16 • Bibliothèque fournie § Comparaison de chaînes : equals( ), compareTo( ) § Recherche : indexOf( ) § ExtracDon : substring( ), StringTokenizer, split, regexp § TransformaDon aisée de type scalaire vers StringBBBB 39 Chaîne de caractères (2) String s1 = "hello"; String s2 = new String("hello"); String s3 = null; • CréaDon de chaîne(s) • Que se passe-­‐t'il ? String s3 = s1 + " " + s1; 40 String s1 = "loic" ; String s2 = "loic"; String s3 = new String("loic"); String s4 = new String("loic"); String s5 = s3; String s6 = null; System.out.println(s1==s2); System.out.println(s1==s3); System.out.println(s3==s4); System.out.println(s5==s3); System.out.println(s1.equals(s3)); System.out.println(s1.equals(s6)); System.out.println(s6.equals(s1)); ManipulaDon de chaînes 41 // Un peu vieux, utiliser plutôt split OU uploads/Philosophie/ support-de-cour-java.pdf

  • 46
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager