Introduction à Java et Eclipse pour Java Félix-Antoine Bourbonnais Jean-François Roy IFT-10541 Structure de données 17 avril 2008 Java Plan Plan 1 Notions de base 2 Syntaxe de base 3 Programmation orienté objet 4 Gestion des erreurs et exceptions 5 Entrée et sortie 6 Collections d’objets Félix-Antoine Bourbonnais Jean-François Roy 2 / 32 Java Notions de base Garbage collection La gestion de la mémoire en Java est automatique La notion de pointeur n’existe pas en Java pur On utilise donc toujours l’opérateur point (.) pour accéder aux membres d’une structure (ou d’un objet) Félix-Antoine Bourbonnais Jean-François Roy 3 / 32 Java Notions de base Code binaire Java et la JVM Java est compilé comme le C Le compilateur produit du code binaire Java (ce code n’est pas exécutable sur un processeur d’Intel, d’AMD, d’IBM ou de Motorola) La Java Virtual Machine Traduit sur demande le code binaire Java en code natif exécutable Implémentée pour chaque architecture processeur réelle C’est ce qu’on appelle la compilation juste à temps (Just In Time compiling) Félix-Antoine Bourbonnais Jean-François Roy 4 / 32 Java Syntaxe de base Types de base Fondamentalement les mêmes qu’en C, avec quelques additions boolean (nouveau, peut prendre les valeurs true ou false) short (16 bits) int (32 bits) long (64 bits) float (32 bits IEEE 754-1985) double (64 bits IEEE 754-1985) char (caractère unicode de 16-bit) byte (char) Il n’y a que des types signés, le mot clé C unsigned n’existe pas en Java Pour les chaines de caractères, on n’utilise pas de tableau, mais plutôt la classe String Félix-Antoine Bourbonnais Jean-François Roy 5 / 32 Java Syntaxe de base Classes Une classe est un concept fondamental en orientation object (voir plus loin) Java est fortement orienté object, donc les classes sont incontournables Évolution structure en C (struct) ; on ajoute les notions suivantes : Contient des méthodes Restriction de l’accès aux membres via des qualificateurs (private, protected, public) Une classe peut hériter d’une autre classe Donc en Java, il n’y a pas de struct, seulement des class En Java, tout doit être dans une classe Félix-Antoine Bourbonnais Jean-François Roy 6 / 32 Java Syntaxe de base Fonctions Une fonction Java est très similaire à une fonction C Elle possède un type de retour Elle possède un nom Elle possède une liste d’arguments Par contre, en Java, Le terme pour une telle fonction est méthode car Java est 100% orienté objet Un méthode a des qualificateurs supplémentaires propres à Java (voir section sur la programmation OO) Félix-Antoine Bourbonnais Jean-François Roy 7 / 32 Java Syntaxe de base Variables Locales : À l’intérieur d’une méthode (comme en C) Portée : la méthode Membres Aussi appelées attributs À l’intérieur d’une classe Portée : toutes les méthodes de la classe Félix-Antoine Bourbonnais Jean-François Roy 8 / 32 Java Syntaxe de base Structures de contrôle Les mêmes qu’en C if (expression) { } else { } for (...) { } while (expression) { } do { } while(expression) ; Java est plus stricte sur les expressions booléennes utilisées dans le if-else, le while et le do-while Félix-Antoine Bourbonnais Jean-François Roy 9 / 32 Java Syntaxe de base Assignations Comme en C Assignations 1 2 Félix-Antoine Bourbonnais i = 2; myBank.foo = 2; // foo est un attribut public; CE N’EST PAS UN BON DESIGN OO Jean-François Roy 10 / 32 Java Syntaxe de base Cast Java est très stricte sur les types Vous devrez faire plus de cast qu’en C en général ; Eclipse va vous aider Quelques points particuliers Les expressions dans les structures if et while doivent être de type boolean Les objets peuvent être convertis en chaine de caractères automatiquement Félix-Antoine Bourbonnais Jean-François Roy 11 / 32 Java Programmation orienté objet Concepts de bases L’unité de base en programmation orienté objet est l’objet Un object est créé à partir d’un modèle, la classe Possède des attributs pour conserver son état Peut faire des actions grâce à ses méthodes, qui ont un accès direct aux attributs Une classe peut hériter des méthodes et attributs d’une autre classe et en changer la définition L’héritage permet la spécialisation en évitant la duplication de code Félix-Antoine Bourbonnais Jean-François Roy 12 / 32 Java Programmation orienté objet Distinction entre classe et objet Une classe est un modèle pour créer des objets L’acte de créer un objet est l’instanciation ; par conséquent, un synonyme d’objet est instance La classe d’une instance est donc le type de l’instance La classe peut posséder des attributs et méthodes statiques qui appartiennent à ou agissent sur la classe Classe Personne p = new Personne("Jean-Francois") Instance Félix-Antoine Bourbonnais Jean-François Roy 13 / 32 Java Programmation orienté objet Distinction entre classe et objet Exemple Chien leChien = new Chien() ; Chien est une classe C’est un type, une famille Fait référence au concept (à l’idée) des chiens Réprésentation abstraite leChien est un chien leChien est concret et a une existance leChien est un chien parmis tous les chiens C’est une instance de la classe Chien C’est un objet réel Félix-Antoine Bourbonnais Jean-François Roy 14 / 32 Java Programmation orienté objet Interface Une interface décrit un ensemble de méthodes que doit posséder une classe Si une classe implémente une interface, alors elle doit définir au minimum toutes les méthodes prescrites par l’interface. C’est l’évolution OO des fichiers d’entêtes (.h) du C Java offre une syntaxe pour définir des interfaces Félix-Antoine Bourbonnais Jean-François Roy 15 / 32 Java Programmation orienté objet Qualificateurs Les qualificateurs s’appliquent aux classes, aux attributs et aux méthodes Qualificateurs d’accès ; qui peut utiliser la méthode (ou l’attribut, ...) private : seulement le propriétaire direct protected : seulement le propriétaire direct et ses descendants public : tout le monde Exemple : une méthode privée ne peut être appelé qu’à partir d’autres méthodes de la même classe Le qualificateur static indique que la méthode (ou l’attribut) appartient à la classe plutôt qu’à l’instance Exemple : un attribut static a la même valeur pour toutes les instances de la classe Félix-Antoine Bourbonnais Jean-François Roy 16 / 32 Java Programmation orienté objet Instanciation L’instanciation d’un objet se fait grâce à l’opérateur new Similaire au malloc en C Permet de créer et d’initialiser une nouvelle instance d’une classe Un object est créé à partir d’une classe Instanciation de la classe Personne 1 Félix-Antoine Bourbonnais Personne p = new Personne("Jean-Francois"); Jean-François Roy 17 / 32 Java Programmation orienté objet Constructeurs Un constructeur est une méthode de la classe qui est exécutée quand un objet est créé afin de l’initialiser Un constructeur est l’évolution des fonctions init Une classe peut avoir plusieurs constructeurs avec différents arguments En Java, un constructeur est une méthode dont le nom est celui de la classe et qui n’a pas de type de retour Félix-Antoine Bourbonnais Jean-François Roy 18 / 32 Java Programmation orienté objet Définition d’une classe Définition de la classe Personne 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Félix-Antoine Bourbonnais public class Personne { private String nom; public static String type() { return "Personne"; } public Personne(String nom) { super(); this.setNom(nom); } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String toString() { return getNom(); } } Jean-François Roy 19 / 32 Java Programmation orienté objet Types de base orientés objet Java offre un équivalent objet pour les types de base Integer : représente un entier Double : un double Boolean etc. Un des avantages principal de ces types est qu’il est possible de les mettre dans des collections (tableaux, tables de dispertion) Félix-Antoine Bourbonnais Jean-François Roy 20 / 32 Java Gestion des erreurs et exceptions Concept d’exception Java gère les erreurs de manière complètement différente que le C avec les exceptions Le principe de l’exception est d’interrompre complètement le flot d’exécution normal d’un programme lorsqu’une erreur survient Les exceptions en Java sont des objets Une exception contient une trace d’exécution permettant de savoir depuis quel endroit dans le programme l’exception à été tirée et généralement un message d’erreur détaillant l’erreur Félix-Antoine Bourbonnais Jean-François Roy 21 / 32 Java Gestion des erreurs et exceptions Tirer une exception Exemple de tir d’exception 1 Félix-Antoine Bourbonnais throw new Exception("Une erreur fatale est survenue!"); Jean-François Roy 22 / 32 Java Gestion des erreurs et exceptions Gestion des exceptions Après le tir d’une exception, l’exécution reprend dans le bloc try {} catch {} le plus proche pouvant gérer l’exception Bloc try {} catch {} Le code qui peut tirer une exception est placé dans le bloc try Le code qui gère les exceptions est placé dans le bloc catch Le bloc catch peut filtrer le type d’exceptions qu’il veut gérer Exemple de bloc try-catch 1 2 3 4 5 Félix-Antoine Bourbonnais try { // Code pouvant tirer une exception } catch (Exception e) { // Code de gestion des exceptions } Jean-François Roy 23 / 32 Java Entrée et sortie System.out L’objet System.out permet d’écrire sur stdout (ce que printf fait en C) Méthodes utiles println : imprime un objet String avec un retour de chariot automatique print : imprime un objet String format : équivalent de printf Utilisation de System.out 1 Félix-Antoine Bourbonnais System.out.format("Bonjour %s!", p.getNom()); Jean-François Roy 24 / 32 Java Entrée et sortie String.format() La méthode statique String.format() permet de créer un nouvel objet String à partir d’une chaine de formattage et d’arguments à formatter [Java > 5.0] L’équivalent de sprintf en C Utilisation de String.format() 1 Félix-Antoine Bourbonnais String messageDeBonjour = String.format("Bonjour %s!", p.getNom()); Jean-François Roy 25 / 32 Java Entrée et sortie Scanner Scanner est une classe permettant de lire des entiers, nombres décimals ou autres valeurs dans une chaine de caractères On peut initialiser une instance de Scanner à partir de l’objet System.in, qui permet de lire stdin (la console) C’est un remplacement très puissant à scanf Utilisation de Scanner 1 2 3 4 Félix-Antoine Bourbonnais Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); int age = scanner.nextInt(); Jean-François Roy 26 / 32 Java Entrée et sortie FileReader et FileWriter Les classes FileReader et FileWriter permettent de lire et d’écrire des fichiers textes On peut également envelopper ces objets avec BufferedReader et BufferedWriter pour de meilleures performances Utilisation de FileReader et FileWriter 1 2 3 4 5 Félix-Antoine Bourbonnais BufferedWriter writer = new BufferedWriter(new FileWriter("hello.txt")); writer.write("hello"); Scanner scanner = new Scanner(new BufferedReader(new FileReader("hello.txt"))); String helloString = scanner.nextLine(); Jean-François Roy 27 / 32 Java Collections d’objets Collections Une collection d’objet est un ensemble d’objets, comme un tableau ou une table de dispersion Les collections sont elles-mêmes des objets Les collections ne peuvent contenir que des objets Java offre une vaste gamme de collections prêtes à utiliser Félix-Antoine Bourbonnais Jean-François Roy 28 / 32 Java Collections d’objets List et Map List est une interface pour toute les collections qui se comportent comme des listes. Map est une interface pour toute les collections qui se comportent comme des relations clés-valeurs Félix-Antoine Bourbonnais Jean-François Roy 29 / 32 Java Collections d’objets ArrayList ArrayList est une classe implémentant l’interface List Se comporte comme un tableau en C Accès aléatoire en temps constant Recherche en temps linéaire Félix-Antoine Bourbonnais Jean-François Roy 30 / 32 Java Collections d’objets HashMap La classe HashMap implémente l’interface Map Se comporte comme une table de dispersion Recherche en temps constant (en moyenne) Félix-Antoine Bourbonnais Jean-François Roy 31 / 32 Java Collections d’objets Itération sur une collection Java offre une syntaxe particulière pour la boucle for permettant d’itérer sur les éléments d’une collection Itération sur une collection 1 2 3 Félix-Antoine Bourbonnais for (Personne p : listeDePersonnes) { System.out.println(p); // Personne implements toString(), automatic conversion } Jean-François Roy 32 / 32