la programmation orientée objet -...
TRANSCRIPT
Introduction au Langage Java
Multimédia et Applications Intégrées
Ahcène Bounceur
LA PROGRAMMATION
ORIENTÉE OBJET
Historique • 1990 :
Internet peu connu, Web inexistant, Projet Oak de SUN Microsystems Langage pour la communication des appareils électroniques de poche et domotique
• 1993 :
Le NCSA (National Center for Supercomputing Applications) lance MOSAIC premier navigateur internet (protocole http, langage html)
Oak s’adapte à la technologie internet
• 1995 : Annonce officielle de la naissance de la technologie Java (issue de Oak)
Technologie Java - 1
• Langage de programmation orienté objet
• Machine virtuelle (JVM) Java Virtual Machine
• Bibliothèques de classes standards
(API) Application Programming Interface
(> 2500 classes dans java 1.4)
http://java.sun.com/j2se/1.4.2/docs/api/
• Ensemble d’outils (java, javac, javadoc, jar…)
Technologie Java - 2
interpréteur
Programme
Données
compilateur Fichier
exécutable Programme
Données
(Rappels)
Technologie Java - 3
compilateur
Fichier
« class »
Programme
« java »
Données
« interpréteur »
Machine Virtuelle Java Hello.java
Hello.class
byte-code
La machine virtuelle
Réseau
ou
système
de fichiers
Class loader
Byte-code verifier Interpreter
Security manager Classes
locales
JVM
Approche orientée objet
• Logiciel = Collection d'objets dissociés
définis par des propriétés
Propriétés :
- attributs
description de l'état de l'objet
- méthodes
description du comportement de l'objet
Qu’est-ce qu’un objet ?
• Objet = concept, abstraction, entité, …
sémantique propre au contexte
Exemple :
Deux éléphants ont le même age, la même
taille, le même poids !!!
mais sont 2 objets distincts
Exemple
Appel de méthode Référence à un attribut
Portion invisible de l'extérieur
PRIVATE
Portion visible de tous les autres
PUBLIC
ATTRIBUTS
(les variables)
METHODES
(les fonctions)
Qu’est-ce qu’une classe ?
• Une classe regroupe des définitions
d ’attributs et de méthodes :
c’est une catégorie particulière d'objets
• Un objet est une instance de sa catégorie de
référence
Exemple : la classe PROMOTION a
comme instances B1,B2,... et B5 qui
sont des objets distincts
Qu’est-ce qu’une méthode ?
• Une méthode est une fonction ou une
procédure attachée à une classe d'objets
• Une méthode peut agir sur tous les objets de
la classe sans distinction (STATIC)
ou bien n'agir que sur un objet bien
particulier (non STATIC)
Exécution : Échanges de messages entre objets
• Les objets interagissent en s'envoyant des messages
• Un message est formé : 1 - d'un objet destinataire du message 2 - du nom d'une méthode, point d'entrée sur l'objet destinataire 3 - d'arguments à associer aux paramètres de la méthode appelée Nom_objet . méthode (arguments… );
Création d’objets : Constructeurs
• Constructeur(s) d'objet : méthode(s)
particulière(s) ayant le même nom que la
classe Appel d’un constructeur : on peut voir cela
comme un message envoyé au gestionnaire de
tous les objets existants
• Un objet peut avoir à créer un autre objet :
Nom_classe var_objet; //référence pointeur
var_objet = new constructeur (arguments… );
Premier objet ...
import java.awt.*; // librairie graphique
public class essai1 {
public static void main( String [] args ) {
Frame f1 = new Frame("Premiers objets...(1)");
Frame f2 = new Frame("Premiers objets...(2)");
f1.setSize(300, 300);
f2.setSize(300, 300);
f1.setVisible(true);
f2.setVisible(true);
}
}
Point d’entrée
f1.show();
Méthode dépréciée (depricated)
C’est une méthodes qu’il ne faut pas utiliser
Il existe un autre moyen pour faire la même chose
Héritage de classe • Il est possible (et souhaitable) de réutiliser une
classe existante pour créer une sous-classe plus spécifique
• La sous-classe :
– dispose des mêmes attributs et méthodes que la classe parente dont elle hérite
– peut avoir des attributs et méthodes supplémentaires, spécifiques
– peut aussi redéfinir des éléments hérités, afin d'adapter une fonctionnalité générale à ses spécificités
Visibilité
des attributs et des méthodes
Mot clé classe Sous-classe Paquetage Extérieur
Private OUI
Protected OUI OUI OUI
Public OUI OUI OUI OUI
Package OUI OUI
Premiers objets hérités
import java.awt.*;
public class essai2 {
public static void main( String args[ ] ) {
mesfenetres f1 = new mesfenetres();
mesfenetres f2 = new mesfenetres();
}
}
class mesfenetres extends Frame {
static int nbre=1;
mesfenetres() {
System.out.println("Premiers objets... "+nbre);
nbre++;
setSize(300,300);
setBackground(new Color(0,255,0));
show();
}
}
Les interfaces • C’est un modèle d'implémentation
public interface I_GestionDuSon {
public void ReglerVolume( int valeur ); public int Volume();
… }
(Toutes les interfaces portent implicitement le modificateur abstract)
• implements permet d'indiquer que la classe fournit une implémentation pour une ou plusieurs interfaces
public class Magnetophone implements I_GestionDuSon {
public void ReglerVolume( int valeur ) {
… // description du comportement }
… }
Les interfaces
• Lorsque des objets fonctionnent bien et ont été testés d ’autres programmeurs peuvent les utiliser :
1 - Appels des méthodes de ces objets 2 - Héritage à partir d ’objets existants 3 - Raccordement d’un objet créé par l’utilisateur à un objet existant par des interfaces
Exemple : la gestion d’événements
Gestionnaire d’événements - 1
import java.awt.*;
import java.awt.event.*;
public class essai3 {
public static void main( String args[ ] ) {
controleur co = new controleur();
mesfenetres f1 = new mesfenetres(co);
mesfenetres f2 = new mesfenetres(co);
}
}
class controleur implements WindowListener {
public void windowOpened (WindowEvent e)
{ System.out.println(e.toString()); }
public void windowClosing (WindowEvent e)
{ System.out.println(e.toString()); }
public void windowClosed (WindowEvent e)
{ System.out.println(e.toString()); }
public void windowIconified (WindowEvent e)
{ System.out.println(e.toString()); }
Gestionnaire d ’événements - 2
public void windowDeiconified (WindowEvent e)
{ System.out.println(e.toString()); }
public void windowActivated (WindowEvent e)
{ System.out.println(e.toString()); }
public void windowDeactivated (WindowEvent e)
{ System.out.println(e.toString()); }
}
class mesfenetres extends Frame {
static int nbre=1;
mesfenetres(controleur c) {
System.out.println("Premiers objets... "+nbre);
nbre++;
addWindowListener(c);
setSize(300,300);
setBackground(new Color(0,255,0));
show();
}
}
Auto-référence - 1
• Le désignateur this permet :
- de faire référence à l’objet courant (celui
que l’on est en train de définir...)
- ou de désigner ses attributs ou ses
méthodes
super permet de désigner la super-classe super.NomVariable
super.NomMethode()
super(Arguments, …)
Auto-référence - 2 import java.awt.*;
import java.awt.event.*;
public class essai4 {
public static void main( String args[ ] ) {
mesfenetres f1 = new mesfenetres();
mesfenetres f2 = new mesfenetres();
}
}
class mesfenetres extends Frame implements WindowListener {
static int nbre=1;
mesfenetres() {
super("Premiers objets...("+nbre+")");
nbre++;
addWindowListener(this);
setSize(300,300);
setBackground(new Color(0,255,0));
this.show();
}
…
Auto-référence - 3
…
public void windowOpened (WindowEvent e) { }
public void windowClosing (WindowEvent e)
{ System.exit(0); }
public void windowClosed (WindowEvent e) { }
public void windowIconified (WindowEvent e) { }
public void windowDeiconified (WindowEvent e) { }
public void windowActivated (WindowEvent e) { }
public void windowDeactivated (WindowEvent e) { }
}
Le polymorphisme
• Un même nom de méthode peut être utilisé pour des usages différents
C’est l’objet manipulé qui va en déterminer la fonction Exemple : signification de + ? Addition d ’entiers, de réels, "a"+"bc", bleu+vert
• Les paramètres sont des références à des objets (comme des pointeurs en C)
On peut avoir en argument des objets très différents et leur appliquer une méthode de nom identique
Polymorphisme ad hoc
• Possibilité d'avoir des méthodes de même nom
dans des classes sans aucun rapport entre elles
public class Armoire {
void remplir( ) {
… // traitement spécifique à l’armoire
}
}
public class bouteille {
void remplir( ) {
… // traitement spécifique à la bouteille
}
}
Polymorphisme d’héritage
• Possibilité de redéfinir une méthode dans des
classes héritant d'une classe de base
abstract class Piece {
abstract void deplacer();
}
class Reine extends Piece {
void deplacer( ) {
… // traitement spécifique à la reine
}
}
class Cavalier extends Piece {
void deplacer( ) {
… // traitement spécifique au cavalier
}
}
Polymorphisme paramétrique
• Possibilité de définir plusieurs fonctions de même nom mais possédant des paramètres différents (en nombre et/ou en type)
public class Voiture {
public float faire_le_plein( ) {
… // traitement
return(prix);
}
public void faire_le_plein( int jauge, Carburant c ) {
… // traitement
}
public void faire_le_plein( float kms, Carburant c ) {
… // traitement
}
}
Les « packages »
Package : regroupement de classes ayant un
lien logique entre elles
– pour les utiliser dans d'autres classes
– pour les « spécialiser »
En plus d’un langage de programmation,
l’environnement Java définit une API (Application
Programmer’s Interface) comportant de nombreux
« packages »
(ou paquetage)
API
Principaux packages - 1
java.lang : classes essentielles
objet, types de base, processus
java.util : structures de données (collections)
listes, ensembles, hashtables, arbres, itérateurs …
java.awt: interface graphique (Abstract Window Toolkit)
fenêtres, boutons, événements ...
java.io : entrées / sorties
flot de données provenant : d'un fichier, d'un buffer, d'un "pipe »
java.net : réseau
URL, sockets
API
Principaux packages - 2
java.rmi : objets distribués (Remote Method Invocation)
java.sql : JDBC (Java Data Base Connectivity)
connexion à une base de données relationnelle
envoi de requêtes SQL, récupération des résultats
java.beans : composants logiciels
composants logiciels autonomes pouvant être contrôlés dynamiquement
et assemblées pour former des applications
modèles de composants de SUN
environnement d'exécution des JavaBeans intégré dans la plate-forme
Java
javax.swings : interface graphique
composants d’interface de plus haut niveau que ceux de awt
look and feel indépendant de l ’OS (Operating System)
exploitation du modèle MVC (Model View Controler )
Le JDK
JDK Java Developer’s Kit : environnement
standard (Windows, Solaris ou linux) diffusé
gratuitement par Sun : http://java.sun.com
– outils de développement : compilateur,debugger, …
– "librairies" de classes standards
– documentation
Version actuelle Java 1.4.2 (2003)
Thread = Tâche
Thread monProcess = new Thread();
Modification des propriétés
monProcess.setPriority(MAX_PRIORITY);
Démarrage
monProcess.start();
Appel de la méthode run() de monProcess
Définition de la méthode run() Spécialisation de run() dans une sous-classe de Thread
Implémentation de l’interface Runnable
Les Threads
Synchronisation (verrou)
sur un objet Exemple : public class Bouteille {
private double volume;
public Bouteille() {
volume = 0;
}
public synchronized double niveau() {
return volume;
}
public synchronized void remplir(double quantite) {
volume = volume + quantite;
}
}
niveau et remplir sont exécutés en exclusion mutuelle
Synchronisation
Bloquer une tâche wait();
sur un objet quelconque
Réveiller d’une tâche notify();
sur l’objet cause du blocage
Réveiller toutes les tâches notifyAll();
sur l’objet cause du blocage
Passer en état d'attente sleep(delai); // en millisecondes
Génère une InterruptedException
Redonner le contrôle au scheduler yield();
Attendre
try {
wait(delai); // en millisecondes }
catch (InterruptedException e) {
// Actions à faire si le délai est dépassé
}
Les Threads : exemple
import java.awt.Graphics;
import java.awt.Color;
import java.util.*;
import java.text.DateFormat;
public class Clock extends java.applet.Applet implements Runnable {
private Thread clockThread = null;
public void init() {
setBackground(Color.white);
}
public void start() {
if (clockThread == null) {
clockThread = new Thread(this, "Clock");
clockThread.start();
}
}
Les Threads : exemple public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
}
catch (InterruptedException e) { }
}
}
public void paint(Graphics g) {
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
DateFormat dateFormatter = DateFormat.getTimeInstance();
g.drawString(dateFormatter.format(date), 5, 10);
}
public void stop() {
clockThread = null;
}
}