Formation Programmation Java
Formation Programmation Java
Java
[email protected]
Plan du cours
1. Introduction générale et historique
• Le langage de programmation Java
• La plateforme Java
2. Première application en Java
3. Syntaxe et sémantique de Java
• Identificateurs
• Types primitifs et types de référence
• Tableaux et chaînes de caractères
• Arithmétique et opérateurs
• Instructions de contrôle
4. Premiers concepts de l’orienté objets
• Programmation procédurale v/s Programmation OO
• Concepts de l’OO
• Représentations UML
Plan du cours
I. Introduction et historique
Survol du chapitre
MyProgram
.c
MyProgram
.o
010110…
Introduction à Java
1 - Téléchargement du JDK
2 - installation du JDK
3 - Analyse contenu et répertoires du jdk
4 - test de l’installation
Une première application
∙ 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 première application EX 2.1
Application HelloWorld
∙ Créer un fichier texte : HelloWorld.java
∙ Règle de bonne pratique : 1 classe par fichier et 1 fichier par classe
• Les textes entre « /** » et « */ » sont utilisés pour créer des commentaires que
l’exécutable JAVADOC pourra traiter afin de produire une documentation (cf.
documentation de l’API Java)
/** Commentaires destinés
à la documentation */
Identificateurs
Référence Adresse
:
Types primitifs et types de référence
Types de données primitifs (1/4)
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; (short x=33000; // Hors limite)
• long long x= 200L; // Nombre accolé à un L
• byte byte x=012; // Nombre commençant avec un 0
• double double x=23.2323;
• float float x= 23.233F; // Nombre accolé à un F
• charchar c=‘a’; char c=‘\u0061’; char c=(char)97;
• 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 a = 5;
Déclaration et initialisation de 2 entiers: a et b
int b = 8;
Référence Adresse
:
Les tableaux (“Array”) (1/3)
Exemple:
∙ Créer et initialiser une matrice contenant deux tableaux de 2 et 3 points respectivement
∙ Créer 5 objets de type « Point »
∙ Affecter ces 5 objets aux 5 éléments de la matrice
Les tableaux (“Array”) (3/3)
Point[][] matriceDePoints;
matriceDePoints
matriceDePoints = new Point[2][];
matriceDePoints[0] = new Point[2];
matriceDePoints[1] = new Point[3];
[0]
Point p1, p2, p3, p4, p5;
10,
p1 = new Point(10,15); ox0adfc12 p1
15 [0]
p2 = new Point(11,16); [1]
p3 = new Point(12,17); 11,
ox0adfc43 p2
16
p4 = new Point(13,18);
p5 = new Point(14,19); 12, [1]
dy0adfc14 p3
matriceDePoints[0][0] = p1; 17
[0]
matriceDePoints[0][1] = p2;
13,
ox0fdfc17 p4 [1]
matriceDePoints[1][0] = p3; 18
matriceDePoints[1][1] = p4; [2]
14,
matriceDePoints[1][2] = p5; ox0agrc57 p5
19
La classe String
* Produit
2 / Division
% Modulo
+ Addition ou concaténation
3
- Soustraction
Arithmétique et opérateurs
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
<= v1 <= v2 Plus petit ou égal à
=== v1 == v2 égal
!= v1 != v2 différent
∙ Opérateurs logiques:
Opérateur Usage Renvoie TRUE si
||
expr1 || expr2 Expr1 ou expr2, ou les deux sont vraies
if (expression)
{
//instructions
}
if (expression)
{
//instructions
}
else
{
//instructions dans les autres cas
}
Instructions et structures de contrôle
Structures de contrôle
SWITCH – CASE
switch (number)
{
case 1 : instructions; break;
case 2 : instructions; break;
default : instructions;
}
Instructions et structures de contrôle
Structures de contrôle
FOR
for (initialisation; condition; mise à jour de valeurs){
// instructions
}
∙ Initialisation: à exécuter lorsque le programme rentre pour la première
fois dans la boucle
∙ Condition : à remplir pour recommencer le bloc d’instructions
∙ Mise à jour: instruction exécutée chaque fois que la boucle est terminée
Exemples:
for (int i=0 ; i<10 ; i++) {
System.out.println("The value of i is : " + i);
}
Instructions et structures de contrôle
Structures de contrôle
WHILE – DO WHILE
while (test logique) {
//instructions
}
Boucle infinie:
while (true) {
//instructions
}
Instructions et structures de contrôle
Structures de contrôle
∙ BREAK / CONTINUE
outer:
for (int i=0 ; i<10 ; i++) {
for(int j=20;j>4;j--){
if (i==5) continue; // if i=5, you jump to the beginning of the loop
if (i==7) break outer; // if i=7, you jump outside the loop and continue
System.out.println(«The value of i,j is :»+i+ «,»+j);
}
Exercices
∙ Compte de 1 à 100
• Ecrire un programme qui compte de 1 à 100
• Affiche ces nombres à l’écran
• Remplace les multiples de 5 par « multiple 5»
• Remplace les multiples de 7 par « multiple 7»
∙ Calcul de factorielle
• Ecrire un programme qui calcule la factorielle d’un nombre
∙ Dessiner une Pyramide
*
**
***
Compiler et exécuter les programmes créé
Introduction à Java
Appareil de Communication
Téléphone Walkie-Talkie Téléfax
GSM Fixe
Les concepts de l’OO
Héritage
∙ Ex: Dans l’écosystème
• La classe Faune regroupe les animaux
• La classe Ressource regroupe l’eau et la plante
Les concepts de l’OO
Héritage
∙ Quid du multi-héritage?
• Possible ou non d’un langage à un autre
Les concepts de l’OO
Héritage
∙ Qu’est-ce que le polymorphisme?
• Concept basé sur la notion de redéfinition de méthodes
• Permet à une tierce classe de traiter un ensemble de classes sans connaître
leur nature ultime
• Permet de factoriser des dénominations d’activité mais pas les activités elles-
mêmes
• Consiste à permettre à une classe de s’adresser à une autre en sollicitant un
service générique qui s’appliquera différemment au niveau de chaque sous-
classe du destinataire du message
• En d’autres termes, permet de changer le comportement d’une classe de base
sans la modifier 🡺 Deux objets peuvent réagir différemment au même appel de
méthode
• Uniquement possible entre classes reliées par un lien d’héritage
∙ Exemple dans l’écosystème?
• Demander à tous les animaux de se déplacer (selon leurs propres règles) en
leur adressant un message en tant qu’objets de type “Faune”
Exercices
Classes,
interfaces, Components
Use cases
collaborations
Use Case View
Active Node
classes s
Les concepts de l’OO
La modélisation devient la référence
∙ Diagrammes UML
• Les diagrammes des cas d’utilisation: les fonctions du système, du
point de vue de l’utilisateur ou d’un système extérieur - l’usage que
l’on en fait
• Les diagrammes de classes: une description statique des relations
entre les classes
• Les diagrammes d’objet: une description statique des objets et de
leurs relations. Une version « instanciée » du précédent
• Les diagrammes de séquence: un déroulement temporel des objets et
de leurs interactions
• Les diagrammes de collaboration: les objets et leurs interactions en
termes d ’envois de message + prise en compte de la séquentialité
Les concepts de l’OO
La modélisation devient la référence
∙ Diagrammes UML
• Les diagrammes d’états-transitions: scrute les cycles de vie
d’une classe d’objet, la succession d ’états et les transitions
• Les diagrammes d’activité: le comportement des différentes opérations
en termes d’actions
• Les diagrammes de composants: représente les composants
physiques d ’une application
• Les diagrammes de déploiements: le déploiement des composants sur
les dispositifs et les supports matériels
Les concepts de l’OO
La modélisation devient la référence
∙ Diagramme de cas d’utilisation
• Cela répond aux spécifications du système:
🢭 Ses fonctionnalités, son utilisation, les attentes de l ’utilisateur
∙ Ex: Distributeur
Effectuer
La
un
Gérer le Banque
virement
distributeu
Le r
client Retirer
de
l ’argent Effectuer la
Un
Consulter maintenanc
employé
e
un
compte
Les concepts de l’OO
La modélisation devient la référence
∙ Exemple de diagramme de cas d’utilisation détaillé
Insérer carte
Vérifier carte
Demander code
Vérifier code
Message d ’erreur
Demander code
...
Les concepts de l’OO
La modélisation devient la référence
∙ Diagramme de classes
• Le but du diagramme de classes est de représenter les classes au sein d’un
modèle
• Dans une application OO, les classes possèdent:
🢭 Des attributs (variables membres)
🢭 Des méthodes (fonctions membres)
🢭 Des relations avec d’autres classes
• C’est tout cela que le diagramme de classes représente
• L’encapsulation est représentée par:
- (private), + (public), # (protected) Nom Classe
• Les attributs s’écrivent: Attributs
+/-/# nomVariable : Type Méthodes()
• Les méthodes s’écrivent:
+/-/# nomMethode(Type des arguments) : Type du retour ou « void »
Les concepts de l’OO
La modélisation devient la référence
∙ Les relations d’héritage sont représentées par:
deposit(int):int 1
withdraw(int):int Bank
addALoan(Loan l):void
payYourLoans():void
calculInterest():int
isReimbursed(int):void Loan
- amount : int
- mensuality : int
Loan(int,int,BankAccount)
reimbourse():void
NormalAccount SparingAccount
calculInterest():int calculInterest():int
Les concepts de l’OO
La modélisation devient la référence
∙ Exemple de diagramme de séquence
retirer(500)
lireN°Compte()
retirerDeLArgent(500,88219)
débiter(500)
sortirDesBillets(5)
sortirBillets ()
Les concepts de l’OO
Les avantages de l’OO
∙ Les programmes sont plus stables, plus robustes et plus faciles à
maintenir car le couplage est faible entre les classes
(«encapsulation»)
∙ elle facilite grandement le ré-emploi des programmes: par petite
adaptation, par agrégation ou par héritage
∙ émergence des «design patterns»
∙ il est plus facile de travailler de manière itérée et évolutive car les
programmes sont facilement extensibles. On peut donc
graduellement réduire le risque plutôt que de laisser la seule
évaluation pour la fin.
∙ l’OO permet de faire une bonne analyse du problème suffisamment
détachée de l’étape d’écriture du code - on peut travailler de manière
très abstraite 🡺 UML
∙ l’OO colle beaucoup mieux à notre façon de percevoir et de découper
le monde
Les concepts de l’OO
Les avantages de l’OO
∙ Tous ces avantages de l’OO se font de plus en plus évidents avec le
grossissement des projets informatiques et la multiplication des
acteurs. Des aspects tels l’encapsulation, l’héritage ou le
polymorphisme prennent vraiment tout leur sens. On appréhende
mieux les bénéfices de langage plus stable, plus facilement
extensible et plus facilement ré-employable
∙ JAVA est un langage strictement OO qui a été propulsé sur la scène
par sa complémentarité avec Internet mais cette même
complémentarité (avec ce réseau complètement ouvert) rend encore
plus précieux les aspects de stabilité et de sécurité
Les concepts de l’OO
Langages et plateformes
∙ Quels sont les principaux langages orienté objet aujourd’hui?
• C++
🢭 Hybride, permet la coexistence d’OO et procédural
🢭 Puissant et plus complexe
🢭 Pas de « ramasse-miettes », multihéritage, etc.
• Java
🢭 Très épuré et strictement OO
🢭 Neutre architecturalement (Multi-plateformes)
🢭 Ramasse-miettes, pas de multihéritage, nombreuses librairies disponibles
• C#
🢭 Très proche de Java
🢭 Conçu par Microsoft
Les concepts de l’OO
En résumé
∙ Tout est un objet
∙ L’exécution d’un programme est réalisée par échanges de messages entre
objets
∙ Un message est une demande d’action, caractérisée par les paramètres
nécessaires à la réalisation de cette action
∙ Tout objet est une instance de classe, qui est le « moule » générique des
objets de ce type
∙ Les classes définissent les comportements possibles de leurs objets
∙ Les classes sont organisées en une structure arborescente à racine unique :
la hiérarchie d’héritage
∙ Tout le code des programmes de trouve entièrement et exclusivement dans le
corps des classes
∙ A l’exception toutefois de deux instructions:
• package 🡺 définit l’ensemble auquel la classe appartient
• import 🡺 permet l’utilisation de classes extérieures au package
∙ UML permet la représentation graphique des applications
Introduction à Java
Référence Adresse
:
class Point{
int x=7, y=10;
Point(int x,int y){this.x=x;this.y=y;}
void move(int dx,int dy){x+=dx;y+=dy;}
}
Les variables
Types de référence (2/3)
Déclaration et création d’objets
∙ Déclaration : Point p; p ????
∙ Création : p = new Point(2,3);
x 0
1. Cherche une place p ????
y 0
x 7
2. Assignation d’une valeur p ????
y 10
x 2
3. Exécution du p ????
constructeur y 3
ox0123abc x 2
4. Création du p
d y 3
pointeur
Les variables
Types de référence (3/3)
Il n’y a désormais plus de
Assignation d’un type de référence référence vers l’ancien
Point « start », il sera donc
∙ Point start=new Point(4,3); détruit par le Garbage
∙ Point end=new Point(23,32); Collector
∙ Point p=end;
∙ p.x=12;
ox0123abc x 4
∙ start=p; star
d y 3
t
oxcafebab x 23 12
end
e y 32
oxcafebab
p
e
Exercice EX 5.3
∙ Classe MyPoint
• Lire le code et prévoir ce qui apparaîtra à l’écran à l’exécution
• Observer en particulier les mécanismes de création et d’assignation de
variables de références dans la classe
Les méthodes (1/4)
Déclaration d’une méthode
∙ Une méthode est composée de: public void deposit (int amount) { Sa déclaration
solde+=amount ; Son corps
}
∙ Signature d’une méthode:
🢭 Modificateurs d’accès : public, protected, private, aucun
🢭 [modificateurs optionnels] : static, native, synchronized, final, abstract
🢭 Type de retour : type de la valeur retournée
Signature
private Y
variable
sold sold
d’instance
class BankAccount { e e
soldePri
int solde;
m
static int soldePrim;
variable de void deposit(int amount){
Accou Accou
classe solde+=amount;
nt1 nt2
soldePrim+=amount;
}
}
Membres d’instance et membres de classe (2/2)
Le mot-clé « static »
∙ Variables et méthodes statiques
• Initialisées dès que la classe est chargée en mémoire
• Pas besoin de créer un objet (instance de classe)
∙ Méthodes statiques
• Fournissent une fonctionnalité à une classe entière
• Cas des méthodes non destinées à accomplir une action sur un objet
individuel de la classe
• Exemples: Math.random(), Integer.parseInt(String s), main(String[] args)
• Les méthodes statiques ne peuvent pas accéder aux variables d’instances
(elles sont “au-dessus” des variables d’instances)
class AnIntegerNamedX {
x est une variable
int x; d’instance, donc
static public int x() { return x; } inaccessible pour la
static public void setX(int newX) { this.x = newX; }méthode static setX
}
Exercice EX 5.5
super.aNumber
class BankAccount{
Number aNumber;
}
class NormalAccount extends BankAccount{
Float aNumber;
}
Utilisation de l’héritage (3/5)
Les mots-clé « this » et « super »
∙ Dans une méthode
• « this » est une référence sur l’objet en cours lui-même
• « super » permet d’accéder aux membres de la superclasse (peut être
nécessaire en cas de redéfinition, par ex.)
∙ Dans le constructeur
• Il existe toujours un constructeur. S’il n’est pas explicitement défini, il sera un
constructeur par défaut, sans arguments
• « this » est toujours une référence sur l’objet en cours (de création) lui-même
• « super » permet d’appeler le constructeur de la classe parent, ce qui est
obligatoire si celui-ci attend des arguments
class MyClass{
class Child extends MyClass {
int x;
Child(){
MyClass(int x){
super(6); // appel du constructeur parent
this.x=x;// constructeur parent
}
}
}
}
Utilisation de l’héritage (4/5)
Les mots-clé « this » et « super »
∙ En cas de surcharge du constructeur:
class Employee {
String name,firstname;
Address a;
int age;
Employee(String name,String firstname,Address a,int age){
super();
this. firstname= firstname;
this.name=name;
this.a=a;
this.age=age;
}
Employee(String name,String firstname){
this(name,firstname,null,-1);
}
Utilisation de l’héritage (5/5)
Redéfinition de méthodes
∙ La redéfinition n’est pas obligatoire !! Mais elle permet d’adapter un
comportement et de le spécifier pour la sous-classe.
class BankAccount {
public void computeInterest(){
solde+=300; //annual gift
}}
class NormalAccount extends BankAccount {
public void computeInterest(){
super.computeInterest();//call the overriden method
solde*=1.07; //annual increase
}}
double d = 3.1416;
int i = (int) d;
Conversion de types (2/2)
Application
∙ Appliquer un opérateur de « cast » au nom d’une variable
• Ne modifie pas la valeur de la variable
• Provoque le traitement du contenu de la variable en tant que variable du type
indiqué, et seulement dans l’expression où l’opérateur de cast se trouve
∙ S’applique aux variables de types primitifs et aux variables de types
de références
∙ Types primitifs:
• Seulement vers un type plus large (ou risque de perte de données)
• Interdit pour le type boolean
• Ex: Short 🡺 Integer 🡺 Long
∙ Types de références:
• Vers une classe parent ou une interface implémentée (ou risque d’erreur)
• Dans ce cas, l’opérateur de cast n’est pas nécessaire (en fonction du contexte)
• Peuvent toujours être castés vers OBJECT
• Ex: Voiture 🡺 VéhiculesMotorisés 🡺 Véhicules 🡺 Object
Polymorphisme (1/2)
Définition
∙ Concept basé sur la notion de redéfinition de méthodes
∙ Consiste à permettre à une classe de s’adresser à une autre en
sollicitant un service générique qui s’appliquera différemment au
niveau de chaque sous-classe du destinataire du message
∙ En d’autres termes, permet de changer le comportement d’une classe
de base sans la modifier 🡺 Deux objets peuvent réagir différemment
au même appel de méthode
∙ Uniquement possible entre classes reliées par un lien d’héritage et
suppose un cast « vers le haut » des objets des classes enfants
class Bank{
BankAccount[] theAccounts = new BankAccount[10];
public static void main(String[] args){
theAccounts[0] = new NormalAccount("Joe",10000);
theAccounts[0].computeInterest();
}}
Polymorphisme (2/2)
Utilisation du polymorphisme sur des collections hétérogènes
BankAccount[] ba=new BankAccount[5];
for(int i=0;i<ba.length();i++)
{
ba[i].computeInterest();
}
Exercice EX 5.4c
Animal
int age Si cette méthode appelle des méthodes
move():void abstraites, alors on parle
eat():void d’une classe abstraite « template »
runAway():void
Cat
Dog move():void
eat():void
runAway():void
move():void
eat():void
Les interfaces (1/3)
Définition
∙ L’interface d’une classe = la liste des messages disponibles
= signature des méthodes de la classe
∙ Certaines classes sont conçues pour ne contenir précisément que la
signature de leurs méthodes, sans corps. Ces classes ne
contiennent donc que leur interface, c’est pourquoi on les appelle
elles-mêmes interface
∙ Ne contient que la déclaration de méthodes, sans définition (corps)
∙ Permet des constantes globales
∙ Une classe peut implémenter une interface, ou bien des interfaces
multiples
∙ Exemple:
Rectangle Oval
int width,height,x,y int width,height,x,y
Rectangle(int x,int y,int width,int height) Oval(int x,int y,int width,int height)
draw(Graphics g):void draw(Graphics g):void
intersects(Object o):boolean intersects(Object o):boolean
Square
Square(int x,int y,int size)
Exercice EX 5.7
BankAccount *
MyProgram
- String owner
- String number
- int solde
- double interst
deposit(int):int 1
withdraw(int):int Bank
addALoan(Loan l):void
payYourLoans():void
calculInterest():int
isReimbursed(int):void Loan
- int amount
- int mensuality
Loan(int,int,BankAccount)
reimbourse():void
NormalAccount SparingAccount
calculInterest():int calculInterest():int
Exercice EX 5.8
∙ Envoi de messages
• Ecrire un programme le plus simple possible pour envoyer un message d’un
objet A à un objet B, en plaçant néanmoins le main dans une classe
spécialement dédiée à cet effet
Introduction à Java
∙ Introduction
• Organisation générale des API
∙ Packages
• JAVA
• JAVAX
• ORG
Introduction
Organisation générale des API Java
Package Description
org.ietf Framework pour le développement d’applications avec
services de sécurité provenant de mécanismes comme le
Kerberos
org.omg Contient tous les packages liés aux spécifications de l’Object
Management Group tels que CORBA, IDL et IOP
org.w3c Contient un parseur DOM pour XML
org.xml Contient des parseurs SAX pour XML
Introduction à Java
∙ Java 2: SWING
• Nouveau package
• Composants graphiques « légers », en pur Java
• Tous les composants sont détachés de l’OS
• Look & Feel indépendant de l’OS
Les interfaces graphiques
Structure de l’AWT (1/2)
∙ L’AWT offre trois types d’éléments graphiques
• Les « Containers » (contenants)
• Les « Components » (composants ou contenus)
• Les « LayoutManagers » (disposition des objets d’un contenant)
∙ Les « Containers »
• Sont destinés à accueillir des composants
• Gèrent l’affichage des composants
• Ex: Frame, Panel, Window
∙ Les « Components »
• Constituent différents éléments de l’affichage (boutons, barres de menus, etc.)
• Ex: Button, Canvas, Label, Scrollbar, Checkbox
∙ Les « LayoutManagers »
• Gèrent la disposition des composants au sein d’un conteneur
Les interfaces graphiques
Structure de l’AWT (2/2)
*
Componen
t
add
Canvas Containe
Button 1 r
1
LayoutManage
r
Fram Panel
BorderLayou FlowLayou e
t t
Les interfaces graphiques
Les « Components »
∙ Héritage de méthodes:
• paint(Graphics g) : Affiche le composant
• repaint() : Rafraîchit l’affichage du composant (rappelle la méthode paint)
• getGraphics() : Crée un contexte graphique pour le composant
• Etc. voir documentation Java en ligne
∙ La classe « Frame »
• Composant du plus haut niveau
• La fenêtre d’une application est une instance de cette classe
• Le Frame contient les différents composants graphiques de l’application
• Ne peut être intégré dans un autre conteneur
∙ Types principaux:
• BorderLayout: divise le conteneur en 5 zones
• FlowLayout: rajoute les composants au fur et à mesure
• GridLayout: applique une grille au conteneur pour aligner les composants
• CardLayout: pour un conteneur qui contient plusieurs cartes
• GridBagLayout: grille de cellules élémentaires
Les interfaces graphiques
Les « LayoutManagers » (2/5)
BorderLayout
∙ Principe
• Positionne les composants suivants les points cardinaux
• Layout par défaut des « Frame »
∙ Répartition
NORTH
• La largeur l’emporte pour le Nord et le Sud
• La hauteur l’emporte pour l’Est et l’Ouest
WEST CENTER EAST
• Le centre occupe tout ce qui reste
∙ Utilisation SOUT
• add(unBouton, BorderLayout.NORTH) H
• new BorderLayout(int, int)
🢭 Intervalles horizontal et vertical entre les éléments
Les interfaces graphiques
Les « LayoutManagers » (3/5)
FlowLayout
∙ Principe
• Rajoute les composants au fur et à mesure
• La taille des composants l’emporte
∙ Utilisation
• new FlowLayout (int alignment)
🢭 alignment: LEFT, CENTER, RIGHT
• new FlowLayout (int alignment, int hintervalle,int vintervalle)
🢭 alignment: LEFT, CENTER, RIGHT
🢭 hintervalle: L’intervalle horizontal entre les composants
🢭 vintervalle: L’intervalle vertical entre les composants
Les interfaces graphiques
Les « LayoutManagers » (4/5)
GridLayout
∙ Principe
• Définit une grille a 2 dimensions
∙ Utilisation
• new GridLayout (int, int)
🢭 Définit le nombre de lignes et de colonnes
• new GridLayout (int, int, int, int)
🢭 Définit le nombre de lignes et de colonnes
🢭 Définit l’alignement horizontal et vertical
CardLayout
∙ Principe
• Pour un container qui contient plusieurs cartes
• Seule une carte est visible à chaque fois
• L’utilisateur peut passer d’une carte à l’autre
Les interfaces graphiques
Les « LayoutManagers » (5/5)
GridBagLayout
∙ Principe
• Le plus compliqué et le plus flexible
• Une grille de cellules élémentaires
• Les composants graphiques peuvent s’étaler indifféremment sur ces cellules
• Pour positionner un composant, il faut utiliser un objet GridBagConstraints
• On peut spécifier le comportement des composants quand on étire la fenêtre
∙ Utilisation
• new GridBagLayout()
• new GridBagConstraints();
Exercice EX 7.1a
addXXXListene
contrôl
e
r * MyXXXListene
r
J VM
Exemples :
∙ Calculatrice
• Créer une classe « Calculette » héritant de Frame et y ajouter:
• Un Label pour l’écran d’affichage
• Un Panel pour le clavier
• Ajouter un GridLayout au Panel, le divisant en 4 x 4 zones
• Un tableau de 16 Button qui s’afficheront dans le Panel en fonction du GridLayout
• Instancier les boutons du tableau dans une boucle FOR
• Créer une classe « GestionnaireDeFenetre » héritant de WindowAdapter
• Redéfinir sa méthode windowClosing(WindowEvent e) pour qu’une boîte de
dialogue s’ouvre pour demander la confirmation de la fermeture
• Créer une classe « GestionnaireDeBoutons » implémentant l’interface
ActionListener
• Redéfinir sa méthode actionPerformed(ActionEvent e) pour qu’elle identifie la touche
pressée et déclenche l’action correspondante
• Créer une classe « Arithmetique » effectuant les calculs et renvoyant le résultat
qui sera affiché dans le Label de la fenêtre principale
• Créer enfin une classe « StartCalculatrice » qui contiendra uniquement le main
Graphisme 2D
Fonctionnement
∙ Tout ce qui est nécessaire aux graphismes en 2D est fourni par la
classe Graphics
∙ Chaque composant est toujours doté d’un objet de ce type
• Graphics g
∙ On peut donc invoquer, sur cet objet graphique « g », toutes les
méthodes de graphisme:
• g.drawLine(int, int, int, int)
• g.drawRect(int, int, int, int)
• g.fillOval(int, int, int, int)
• g.setColor(Color)
• Etc.
Graphisme 2D
Classe java.awt.Rectangle
∙ Classe fournie dans le package java.awt
∙ Idéale pour servir de squelette à la plupart des objets graphiques
🡺 On peut inscrire toutes les formes dans un rectangle
∙ Attributs publics:
• int x,y, width, height
∙ Méthodes publiques
• contains(int x, int y): boolean
🢭 Renvoie true si les coordonnées (x,y) sont contenues dans le rectangle
• contains(Rectangle r): boolean
🢭 Renvoie true si le rectangle r est contenu dans le rectangle en cours
• intersects(Rectangle r): boolean
🢭 Renvoie true si le rectangle r touche le rectangle en cours
• …
Exercice EX 7.3
Paint (1/4)
• L’objectif du projet est la réalisation d’un éditeur graphique permettant
de dessiner des segments de droites colorés
(une version BETA de Paint 1.0)
• La réalisation de l’éditeur graphique commencera par la construction
d’une fenêtre (Frame), support de l’application, que nous
personnaliserons grâce à divers éléments : boutons (Button), listes
déroulantes (Choice), zone de dessin (Canvas), etc.
• Ensuite nous gérerons les événements générés par l’utilisateur (clic de
souris, …) pour donner vie à cette application
• Enfin en utilisant le contexte graphique fourni par la JVM, nous
aborderons les mécanismes de construction graphique en 2D
Introduction à Java
∙ Introduction
• Qu’est-ce qu’une Collection?
• Le Java Collections Framework
∙ Interfaces
• Collections 🡺 « Set » et « List »
• Maps 🡺 « Map » et « SortedMap »
• Itérateurs 🡺 « Iterator »
• Comparateurs 🡺 « Comparable » et « Comparator »
∙ Implémentations
• HashSet et TreeSet
• ArrayList et LinkedList
∙ Algorithmes
• Tri
• Autres: Recherche, Mélange, etc.
Introduction
Qu’est-ce qu’un collection?
∙ Collection
• Un objet utilisé afin de représenter un groupe d’objets
∙ Utilisé pour:
• Stocker, retrouver et manipuler des données
• Transmettre des données d’une méthode à une autre
∙ Représente des unités de données formant un groupe
logique ou naturel, par exemple:
• Une main de poker (collection de cartes)
• Un dossier d’emails (collection de messages)
• Un répertoire téléphonique (collection de correspondances NOM – N°)
Introduction
Java Collections Framework
∙ Définit toute la structure des collections en Java
∙ Constitue une architecture unifiée pour
• la représentation des collections
• la manipulation des collections
∙ Contient des:
• Interfaces
🢭 Types de données abstraits représentant des collections
🢭 Permettent de manipuler les collections indépendamment de leur représentation
🢭 Organisées en une hiérarchie unique
• Implémentations
🢭 Implémentations concrètes des interfaces 🡺 Structures de données réutilisables
🢭 Fournies pour accélérer le développement
• Algorithmes
🢭 Méthodes standards fournissant des opérations comme le tri, la recherche, etc.
Interfaces
Structure
Il existe 4 groupes d’interfaces liées aux collections
• Collection
🢭 Racine de la structure des collections
🢭 Représente un groupe d’objets (dits « éléments »)
🢭 Peut autoriser ou non les duplicats
🢭 Peut contenir un ordre intrinsèque ou pas
• Map
🢭 Un objet qui établit des correspondances entre des clés et des valeurs
🢭 Ne peut en aucun cas contenir des duplicats
🡺 Chaque clé ne peut correspondre qu’à une valeur au plus
• Interfaces de comparaison
🢭 Permettent le tri des objets du type implémentant l’interface
🢭 Deux versions: « Comparator » et « Comparable »
• Iterator
🢭 Permet de gérer les éléments d’une collection
Interfaces
Collection (1/2)
∙ La racine de la structure des collections
• Sans ordre spécifique
• Duplicats permis
∙ Définit les comportements standards des collections
• Vérification du nombre d’éléments
🡺 size(), isEmpty()
• Test d’appartenance d’un objet à la collection
🡺 contains(Object)
• Ajout et suppression d’éléments
🡺 add(Object), remove(Object)
• Fournir un itérateur pour la collection
🡺 iterator()
• Bulk Operations
🡺 addAll(Collections), clear(), containsAll(Collections)
Interfaces
Collection (2/2)
Trois variantes principales:
∙ Set
• Duplicats interdits
• Sans ordre spécifique
∙ List
• Duplicats permis
• Contient un ordre spécifique intrinsèque
• Parfois appelé « Séquences »
• Permet 2 méthodes d’accès particulières:
🢭 Positional Access: manipulation basée sur l’index numérique des
éléments
🢭 Search: recherche d’un objet en particulier dans la liste et renvoi
de son numéro d’index (sa position dans la liste)
∙ SortedSet
• Duplicats interdits
• Contient un ordre spécifique intrinsèque
Interfaces
Map
∙ Map = Objet qui contient des correspondances Clé – Valeur
∙ Ne peut contenir de doublons (clés sont primaires)
∙ Fournit des opérations de base standards:
• put(key,value)
• get(key)
• remove(key)
• containsKey(key)
• containsValue(value)
• size()
• isEmpty()
∙ Peut générer une collection qui représente les couples Clé – Valeur
∙ Il existe aussi
• des « Map » permettant de faire correspondre plusieurs valeurs à chaque clé
• des « SortedMap » fournissant des « Map » naturellement triés
Interfaces
Iterator
∙ Permet de gérer les éléments d’une collection
∙ Toute collection peut fournir son « Iterator »
∙ Permet également de supprimer des éléments d’une collection au
cours d’une phase d’itération sur la collection
∙ Contient 3 méthodes essentielles:
• hasNext(): boolean 🡺 Indique s’il reste des éléments après l’élément en cours
• next(): Object 🡺 Fournit l’élément suivant de la collection
• Remove(): void 🡺 Supprime l’élément en cours
∙ Exemple:
static void filter(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); )
if (! cond(i.next()))
i.remove();
}
Interfaces
Comparaison (1/3)
Deux interfaces
∙ Comparable
• Fournit une méthode de comparaison au sein d’une classe
• Impose de redéfinir une seule méthode public int compareTo(Object o)
qui renvoie un entier:
1 si l’objet courant > l’objet « o » fourni dans la méthode
0 si l’objet courant = l’objet « o » fourni dans la méthode
-1 si l’objet courant < l’objet « o » fourni dans la méthode
∙ Comparator
• Permet de définir une classe servant de comparateur à une autre
• Impose de redéfinir une seule méthode
public int compare(Object o1, Object o2) qui renvoie un entier:
1 si o1 > o2
0 si o1 = o2
-1 si o1 < o2
Interfaces
Comparaison (2/3)
Exemple d’implémentation de
Comparable
import java.util.*;
public class Name implements Comparable {
private String firstName, lastName;
∙ LinkedList
• A utiliser pour
🢭 Ajouter régulièrement des éléments au début de la liste
🢭 Supprimer des éléments au milieu de la liste en cours d’itération
• Mais plus lent en termes d’accès positionnel
Implémentations
Lists (2/2)
Opérations spécifiques aux listes:
∙ Obtenir la position d’un objet
• indexOf(Object o): int
• lastIndexOf(Object o): int
∙ Récupérer l’objet en position i
• get(int i) 🡺 Renvoie un objet de type « Object » 🡺 Devra être converti (cast)
∙ Placer un objet à une certaine position
• set(int i, Object o)
∙ Supprimer l’objet en position i
• remove(int i)
• removeRange(int fromIndex, int toIndex)
Algorithmes
Tri
On peut trier un tableau/collection au moyen de méthodes simples:
🢭 Si les éléments de la collection ne sont pas comparables, il faut alors indiquer quelle
classe servira de comparateur
🡺 Collections.sort(List, Comparator)
Algorithmes
Autres
∙ D’autres opérations sont fournies par le Java Collections Framework:
• Recherche binaire
🢭 Collections.binarySearch(liste, clé)
• Mélange
🢭 Collections.shuffle(liste)
• Inversion de l’ordre
🢭 Collections.reverse(liste)
• Réinitialisation des éléments (remplace tous les éléménts par l’objet spécifié)
🢭 Collections.fill(liste, objetParDefaut)
• Copie des éléments d’une liste dans une autre
🢭 Collections.copy(listeSource, listeDestination)
• Recherche d’extrema
🢭 Sur base de la position des éléments min(liste) et max(liste)
🢭 Sur base d’un comparateur min(liste, comparateur) et max(liste, comparateur)
Exercice EX 8.1
Paint (2/4)
• Définissez les classes Droites et Dessin permettant d’assurer la persistance de
votre œuvre malgré les redimensionnements de la fenêtre, réductions,
changements de focus… Utilisez pour ce faire la classe java.util.Vector.
• Redéfinissez la méthode paint(Graphics g) héritée de la classe abstraite
Component.
• Adaptez aussi les méthodes liées au boutons « Défaire » et « Annuler » afin
qu’ils suppriment respectivement la dernière droite tracées et toutes les droites
du dessin.
• Implémentez l’interface Comparable au sein de la classe « Dessin » afin de
permettre le tri des droites sur base de leur longueur et redéfinissez à cette fin
la méthode compareTo(Object o)
• Ajoutez un bouton permettant de trier les droites du dessin dans le vecteur et
vérifiez que la commande « Défaire » supprime désormais les droites par ordre
de longueur et non plus en fonction de l’ordre dans lequel elles ont été tracées.
Introduction à Java
∙ Introduction
∙ Hiérarchie des exceptions
∙ Traitement des exceptions
• Interception d’exceptions: bloc try – catch – finally
• Lancement (génération) par une méthode: throws et throw
Introduction
La gestion des exceptions en Java
∙ S’approche du C++
∙ Des erreurs surviennent dans tout programme
∙ Distinction entre Exception et Error: deux classes apparentées
∙ La classe Exception traite les erreurs prévisibles qui apparaissent
dans l’exécution d’un programme:
• Panne du réseau
• Fichier inexistant
• Problème propre à la logique « business »
∙ La classe Error traite les conditions sérieuses que le programmeur
n’est pas censé traiter
Hiérarchie des exceptions
On ne peut pas traiter
On doit traiter ces exceptions-ci les « Error »
Exception Animal
int age
move():void
eat() throws RuntimeException:void
runAway():void
RuntimeExceptio
n
Cat Dog
BadFoodExceptio
move():void move():void
n eat() throws Exception:void eat() throws BadFoodException:void
Exercice EX 9.1
Paint (3/4)
• Prévoir l’interception d’exceptions de type
ArrayIndexOutOfBoundsException dans les méthodes de la classe
Dessin et provoquer délibérément une sortie des limites du vecteur
pour vérifier son bon fonctionnement
• Créer une nouvelle exception « DroiteTropLongueException », qui
devra être lancée chaque fois que l’utilisateur tente de tracer une
droite dont la longueur dépasse une certaine limite
• Lancer cette exception dans la méthode termineDroite(int, int) de la
classe ZoneGraphique
• Intercepter cette nouvelle exception dans la méthode
mouseReleased(MouseEvent) de la classe GestionSouris et faire en
sorte qu’elle provoque l’affichage d’un message d’erreur dans la barre
d’état
Introduction à Java
X. Multithreading
Survol du chapitre
∙ Introduction
• Définition
• Raison d’être
∙ Création de Thread
• Par implémentation
• Par héritage
∙ Gestion de Thread
• Méthodes de gestion
• Diagrammes d’état
Introduction
Qu’est-ce qu’un Thread?
∙ Un ordinateur qui exécute un programme :
• Possède un CPU
• Stocke le programme à exécuter
• Possède une mémoire manipulée par le programme
🡺 Multitasking géré par l’OS
∙ Sans multithreading
• Les composantes ne pourraient agir que lorsque l’interface est suspendue
Object.notify()
Object.notifyAll() t.sleep()
En
d
attente
é
Object.wait() fin
b
ut Fin du sleep()
t.yield()
t.start()
Activabl Active
e Fin de run()
Schedule
Ensemble de files r Une des files éligibles, pas
éligibles nécessairement celle avec la plus
grande priorité.
Exercice EX 10.1
Paint (4/4)
• Créer une classe « Balle » héritant de « Thread »
• Définir ses variables et ses méthodes d’affichage paint(Graphics g) et
deplaceToi()
• Redéfinir la méthode run() contenant une boucle infinie dans laquelle
le déplacement de la balle est provoqué
• Instancier deux balles dans la zone graphique et lancer leurs Thread
associés
XI. Annexes
Survol du chapitre
∙ Java
• Code Java ⇒ Bytecode ⇒ Multiples OS
∙ .NET
• Tout Code ⇒ MS IL ⇒ Windows
Java et ses concurrents
Java v/s Perl
∙ Aspects communs:
• Langages à usage général
• Interprétés
• Portables
• Larges librairies à disposition
∙ Différences
• Perl: pour administrateurs systèmes, faiblement typé, intégration facile avec le
shell
• Java: pour développeurs d’applications, fortement typé, objets distribués avec
les EJB
• Modèle Client/Serveur:
🢭 Java peut être utilisé sur un client en tant qu’applet et sur un serveur
🢭 Perl peut être utilisé sur un serveur, mais pas en tant qu’applet
Les utilitaires de Java
∙ javac
• Compilateur, traduit fichier source .java en fichier bytecode .class
∙ java
• Interpréteur java, lance des programmes
∙ javadoc
• Générateur de documentation d’API
∙ jar
• Utilitaire d’archivage et de compression
∙ javah
• Générateur de fichiers C/C++ « .h »
Les utilitaires de Java
Javac et Java
∙ Javac
• Compile un fichier source .java ou un package entier
• Exemples:
🢭 javac MyBankAccount.java
compile le fichier mentionné, qui doit se trouver dans le package par défaut
🢭 javac be\newco\*.java –d c:\classes
compile tout le package be.newco et génère du code compilé dans c:\classes, qui
doit exister
∙ Java
• Lance un programme principal
• Exemples:
🢭 java bankStream.MyProgram
Lance le programme spécifié par la méthode public static void main(String[]
args) dans la classe MyProgram qui se trouve dans le package bankStream.
• Possibilité de spécifier un classpath: un chemin de recherche où java est
censé de trouver ses classes
Les utilitaires de Java
Javadoc – Générateur de documents
∙ Nécessité d’une documentation suffisante
• pour aider les membres de l’équipe
• pour s’aider soi-même
• javadoc: une partie de votre documentation
∙ Intégrer code et documentation
• résoudre problème de maintenance de la documentation
• informations dans le code lui-même
∙ Lancer Javadoc
• Se mettre dans le répertoire parent de vos packages
• Pour créer la javadoc, taper javadoc -d c:\mydir\html demo
• Conditions
🢭 javadoc dans le PATH
🢭 répertoire destination (-d) doit exister
🢭 « demo » est le nom d’un package
🢭 Commentaires délimités par /** et */
Les utilitaires de Java
Jar – Utilitaire d’archivage
∙ Permet de grouper et compresser des fichiers utilisés par un
programme Java
∙ Syntaxe d’utilisation similaire à tar
• jar cf myjarfile.jar *.class
archivage de tout fichier .class, trouvé dans le répertoire courant et tout sous-
répertoire, dans le fichier myjarfile.jar
• jar xf myjarfile.jar
Extrait tout fichier contenu dans myjarfile.jar vers une structure de répertoires
∙ l’interpréteur java reconnaît les fichiers .jar et peut les traiter comme
un répertoire.
• java –cp myarchive.jar be.newco.MyMain
Lance le main() contenu dans be.newco.MyMain, tout en ajoutant les fichiers
de myarchive.jar dans le classpath