Programmation événementielle

publicité
Programmation événementielle
Licence 3 MIAGe
Frédérique Carrère ([email protected]) / Pascal Desbarats ([email protected])
Programmation événementielle – p.1
Présentation de Java
(Basé sur “Java - Éléments de programmation”, Olivier Dedieu, BULL/INRIA)
Caractéristiques de Java :
Orienté objets
Interprété
Portable
Robuste
Sécurisé
Multi-threads
Distribué
Programmation événementielle – p.2
Utilisation
MaClasse.java
−→
MaClasse.class
source
Compilation
byte code
−→
application (ou applet)
Exécution
Compilation : javac MaClasse.java
Exécution : java MaClasse
Programmation événementielle – p.3
Le langage (1)
Les types primitifs :
boolean (true/false),
byte (1 octet), char (2 octets), short (2 octets), int (4 octets), long (8
octets),
float (4 octets), double (8 octets).
. Les variables peuvent être déclarées n’importe où dans un bloc.
Exemples :
int i = 12;
boolean b = true;
float pi = 3.1415;
Programmation événementielle – p.4
Le langage (2)
Les tableaux :
Déclaration :
int[] tableau_d_entiers; // ou: int tableau_d_entiers_2[];
int matrice3d[][][];
Création et initialisation :
tableau_d_entiers = new int[12];
int[] des_entiers = {1, 2, 3};
tableau_d_entiers[0] = 3;
Utilisation :
int l = tableau_d_entiers.length; // l = 12
int k = des_entiers[2]; // k = 3
int j = des_entiers[3]; // exception !
Programmation événementielle – p.5
Le langage (3)
Les unités de compilation :
un fichier .java = une unité de compilation.
il est recommandé (mais pas imposé) de ne mettre qu’une seule
classe par unité.
L’unité doit avoir le même nom que la classe qu’elle contient.
Programmation événementielle – p.6
Le langage (4)
L’incontournable “Hello world” :
class HelloWorldApp {
public static void main(String[] args) {
//Display the string
System.out.println("Hello World!");
}
}
Programmation événementielle – p.7
Le langage (5)
Exemple de programme :
class Circle {
public double x, y; // centre
private double r;
// rayon
public Circle(double r) {
this.r = r;
}
public double area() {
return 3.14159 * r * r;
}
}
class MonPremierProgramme {
public static void main(String[] args) {
Circle c;
c = new Circle(5.0);
c.x = c.y = 10;
System.out.println(’’Aire de c :’’ + c.area());
}
}
Programmation événementielle – p.8
Le langage (6)
Destruction d’un objet :
Prise en charge par le Garbage Collector (GC).
Le GC détruit les objets pour lesquels il n’existe plus de référence.
Le GC est un thread particulier (de basse priorité).
Il n’y a pas de garantie de destruction effective de l’objet.
Si elle existe, le GC appelle la méthode finalize() de l’objet avant
de le détruire.
Programmation événementielle – p.9
Le langage (6bis)
Exemple de programme :
public class Circle {
...
void finalize() { System.out.println(’’Je suis Garbage Collecté’’);}
}
...
Circle c1;
if (condition) {
Circle c2 = new Circle();
c1 = c2;
}
// ici, c2 n’est plus valide, mais c1 existe toujours
c1=null; // l’instance ne possède plus de référence. Elle peut être détruite par le GC.
Programmation événementielle – p.10
Le langage (7)
L’héritage :
public class Ellipse {
public double r1, r2;
public Ellipse(double r1, double r2)
{this.r1 = r1; this.r2 = r2;}
public double area() { ...}
}
final class Circle extends Ellipse {
public Circle(double r) {super(r, r);}
public double getRadius(){return r1;}
}
Attention : Une classe ne peut hériter que d’une seule classe.
Programmation événementielle – p.11
Le langage (8)
Les classes abstraites :
Une classe abstraite est une classe ayant au moins une méthode
abstraite.
Une méthode abstraite est une méthode qui ne possède pas de
définition.
Une classe abstraite ne peut pas être instanciée (new).
Une classe dérivée d’une classe abstraite ne redéfinissant pas toutes
les méthodes abstraites est elle-même abstraite.
Programmation événementielle – p.12
Le langage (8bis)
class abstract Shape {
public abstract double perimeter();
}
class Circle extends Shape {
...
public double perimeter() { return 2 * 3.14159 * r; }
}
class Rectangle extends Shape {
...
public double perimeter() { return 2 * (height + width); }
}
...
Shape[] shapes = {new Circle(2), new Rectangle(2,3), new Circle(5)};
double sumOfPerimeters = 0.0;
for (int i=0; i < shapes.length; i++)
sumOfPerimeters += shapes[i].perimeter();
Programmation événementielle – p.13
Le langage (9)
Les interfaces :
Une interface correspond à une classe dont toutes les méthodes sont
abstraites.
Une classe peut implémenter (implements) une ou plusieurs
interfaces tout en héritant (extends) d’une classe.
Une interface peut hériter (extends) de plusieurs interfaces.
Programmation événementielle – p.14
Le langage (9bis)
class abstract Shape { public abstract double perimeter(); }
interface Drawable { public void draw(); }
class Circle extends Shape implements Drawable {
public double perimeter() { return 2 * 3.14159 * r; }
public void draw() { ... }
}
class Rectangle extends Shape implements Drawable {
public double perimeter() { return 2 * (height + width); }
public void draw() { ... }
}
...
Drawable[] drawables = {new Circle(2), new Rectangle(2,3), new Circle(5)};
for (int i=0; i < drawables.length; i++)
drawables[i].draw();
Programmation événementielle – p.15
Les paquetages(packages)
Un package regroupe un ensemble de classes sous un même espace
de noms.
Les noms des packages suivent le schéma : name.subname ...
Une classe Watch qui appartient au package time.clock doit se
trouver dans le fichier time/clock/Watch.class
L’instruction package indique à quel package appartient la (les)
classe(s) de l’unité de compilation.
Les répertoires contenant les packages doivent être dans la variable
CLASSPATH .
En dehors du package, les noms des classes sont :
packageName.className .
L’instruction import packageName permet d’utiliser les classes sans
les préfixer.
Les API sont utilisées en package (java.lang, java.lang.io, ...).
Programmation événementielle – p.16
Présentation de Swing
Swing est un package de la JFC (Java Foundation Classes).
On parle de l’API Swing (Application Programming Interface).
Tous les packages de l’API Swing sont préfixés par javax.swing .
Les classes Swing sont préfixés par la lettre J : JLabel, JButton,...
Programmation événementielle – p.17
Hello World en Swing
import javax.swing.*;
public class HelloWorldSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("HelloWorldSwing");
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Programmation événementielle – p.18
Propriétés ...
Programmation événementielle – p.19
Événements ... (enfin !)
Ils permettent d’interagir avec l’interface.
Chaque fois que l’utilisateur tape un caractère au clavier ou fait une
action à la souris, un événement est déclenché.
Tout objet peut être notifié de l’événement.
L’objet doit dire qu’il veut recevoir l’événement (en utilisant un
event listener) et implémenter l’interface correspondante.
Programmation événementielle – p.20
Événements ... Exemple
Programmation événementielle – p.21
Hiérarchie
Programmation événementielle – p.22
Téléchargement