Introduction à Java et Eclipse pour Java

publicité
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
Téléchargement