38
[email protected] Introduction au Langage Java Multimédia et Applications Intégrées Ahcène Bounceur LA PROGRAMMATION ORIENTÉE OBJET

La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

Introduction au Langage Java

Multimédia et Applications Intégrées

Ahcène Bounceur

LA PROGRAMMATION

ORIENTÉE OBJET

Page 2: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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)

Page 3: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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…)

Page 4: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

Technologie Java - 2

interpréteur

Programme

Données

compilateur Fichier

exécutable Programme

Données

(Rappels)

Page 5: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

Technologie Java - 3

compilateur

Fichier

« class »

Programme

« java »

Données

« interpréteur »

Machine Virtuelle Java Hello.java

Hello.class

byte-code

Page 6: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

La machine virtuelle

Réseau

ou

système

de fichiers

Class loader

Byte-code verifier Interpreter

Security manager Classes

locales

JVM

Page 7: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 8: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 9: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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)

Page 10: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 11: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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)

Page 12: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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… );

Page 13: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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… );

Page 14: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 15: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

Premier test ...

Compilation : javac essai1.java

Exécution : java essai1

Page 16: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 17: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 18: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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();

}

}

Page 19: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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 }

… }

Page 20: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 21: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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()); }

Page 22: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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();

}

}

Page 23: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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, …)

Page 24: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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();

}

Page 25: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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) { }

}

Page 26: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 27: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

}

}

Page 28: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

}

}

Page 29: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

}

}

Page 30: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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)

Page 31: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 32: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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 )

Page 33: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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)

Page 34: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 35: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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

Page 36: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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é

}

Page 37: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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();

}

}

Page 38: La programmation orientée objet - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java... · Introduction au Langage Java Multimédia et Applications Intégrées Ahcène

[email protected]

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;

}

}