35
Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed http://www.lirmm.fr/~huchard/Enseignement/FLIN504/

Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Embed Size (px)

Citation preview

Page 1: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Programmation par Objets 1Module IN504

Animé par :Marianne Huchard

Marie-Laure MugnierKhalil Ben Mohamed

http://www.lirmm.fr/~huchard/Enseignement/FLIN504/

Page 2: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Programmation par Objets 1Contenu

Approfondissement

Classes/instances, attributs, opérationsHéritage, polymorphismeExceptionsInterfaces-langage

IntroductionEtude de certaines parties de l’API standardGénéricité paramétriqueEvénementsInterfaces graphiquesSérialisation

Page 3: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Introduction - Les principes

Une vision centrée sur une représentation des concepts

• du domaine métier (entreprise, client)

• du problème (livraison, facture)

• de la solution informatique (liste, pile, menu, bouton)

Le concept encapsule données et fonctions

Page 4: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Introduction - Bref historique

1965-1980

Programme = animation d’un modèle réduit, reproduction des entités du monde réel

Simula, Smalltalk, Flavors

1980-1990

Montée de l’engouement dans les services R&D et chez les gros industriels, développement des méthodes

C++, CLOS, Eiffel, Ada9X, Object-Cobol, Smalltalk, OMT

1990-2010

Diffusion généralisée

Java, Python, C#, UML

Page 5: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Introduction - Les domaines

Domaines pénétrés

Systèmes d’information

Bases de données (objet-relationnel)

Intelligence Artificielle

Programmation

• standard, distribuée, concurrente, interface graphiques, scientifique, etc.

Page 6: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Introduction - Les principes

L’équation de la programmation par objets

Objets

Messages

Héritage

Programme = objets + envoi de messages

Page 7: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Introduction - Les bénéfices

• Réutilisabilité• briques bien délimitées, généralisation encouragée

• Extensibilité• par spécialisation

• Stabilité• les concepts d’un domaine sont plus stables que les fonctions

• Passage à l’échelle• structuration modulaire

Page 8: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Introduction - A propos de JavaSun, fin 1995

Une allure C++ …

• syntaxe, constructeurs, classes paramétrée (Java 1.5)

Mais un langage simplifié

• pas d’héritage multiple, de surcharge d’opérateurs, de classes paramétrées (avant Java 1.5)

Et s’inspirant des stratégies Smalltalk

• semi-compilé/semi-interprété, machine virtuelle• API riche

• Allocation/récupération dynamique, ramasse-miettes

Page 9: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Langages compilés

Autres fichierscompilés(bibliothèques …)

Fichiercode machine

Fichiersource

compilation

Fichierexécutable

Édition de liens

exécution

code machine lié à l’architecturede la machine

Pascal, ADA, C, C++, ...

Page 10: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Autres fichiers sources chargés à la demande

Fichiersource

Exécutionpar un interpréteur

Langages interprétés

Interprétation : traduction du code source en code machine « à la volée »

Lisp, Prolog, shell Unix,Javascript, php, ...

Page 11: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Et Java?

pseudo-codeByte-code

Pseudo-code : code pour une machine abstraitepossède des fonctionnalités communes à toutes les architectures

exécutionInterprétation

du pseudo-code

compilation

Fichiersource

.javaFichiercode machine

.class

par une "machine

virtuelle"

Page 12: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

• Pré-compilation en un code universel (pseudo-code ou byte-code)donc indépendant de toute architecture

• Puis interprétation par une machine virtuelle (propre à chaque architecture de machine)

(toutefois il existe des compilateurs en code natif)

Vieille idée : voir le 1er Pascal

+ portabilité du code compilé

- exécution moins rapide

Page 13: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

A propos de java

Sun, fin 1995

C++ nettoyé

semi-interprété

pour des applications distribuées

(sur Internet notamment)

Page 14: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Client

Serveur

Navigateur Serveur web

Visualisationdu document

Intro.html?

Intro.html

1

2

3

Le succès de Java a d'abord été lié au web

Page 15: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Applet

programme invoqué dans un document HTML et exécuté par un navigateur

<OBJECTclassid="http://www.ici.fr/monApp.class"></OBJECT>

(depuis HTML 4, <OBJECT> remplace <APPLET>)

Page 16: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Trois sortes de programmes Java

• Applet : programme invoqué dans un document HTML et exécuté par un navigateur

• Application : programme "classique"• Servlet

programme invoqué par un serveur web et exécuté sur la machine du serveur

Page 17: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Java en tant que langage de programmation par objets

Exemple d'application : Shogun

Page 18: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Une application = un ensemble d'objets qui ont chacun leur rôle à jouer et qui interagissent

Composants graphiques

fenêtre barre de menu

bouton

zones de texte

panneau (sur lequel est affiché le jeu)

Objets « métier »…

Page 19: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Objets « métier » :

échiquier

ensemble de pièces 1

ensemble de pièces 2

jeu gère une partie

gère la "grille" elle même

pièces

pièces

une pièce gère sa position sur l'échiquierelle sait se déplacer et s'afficher

Page 20: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Objets « métier » --> Représentés par des classes

Echiquier

Jeu

Pièce

EnsemblePieces- couleur

1

2

8

-joueur:int-lig:int-col:int-depl:int

+Piece(int j, int l, int c)-tirage():int+quelDeplacement():int+deplacer(nouvL:int,nouvC:int)+afficher(…)+toString():String

Page 21: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Les objets collaborent entre eux, chacun étant responsable des actions qu'il effectue

Ex : afficher le jeupanneau jeu : "jeu, affiche-toi"

jeu : "echiquier, affiche-toi" "ens. pièces 1, affiche-toi"

"ens. pièces 2, affiche-toi"

ens. pièces 1 : à chaque pièce : "pièce, affiche-toi"

ens. pièces 2 : à chaque pièce : "pièce, affiche-toi"

Page 22: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Ex: gérer le début de mouvement du joueur 1

Clic! sur panneau de jeu en (i,j)

jeu est averti

(i,j) c'est quelle case?

c'est (l,c)

as-tu une pièce en (l,c)? :Pièce

:Jeu : Echiquier

pièce, es-tu en (l,c)?

e1:EnsemblePièces

Page 23: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Les objets sont des instances de classes

Une classe est un "modèle" qui définit

- la structure d’un objet (ses attributs)

- et son comportement (ses méthodes)

La structure des objets est (+ ou -) encapsulée,ainsi que certaines de leurs méthodes

Page 24: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Partie privée "encapsulée" attributs

private : accessible seulement dans le corps des méthodes de la classe

public : accessible par toute méthode de toute classe

+ des méthodes de « cuisine interne »

Partie publique

méthodes de « services offerts »

Une classe ordinaire

Page 25: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

La classe Piece (simplifiée)

// fichier Piece.java

public class Piece {

// attributsprivate int joueur;private int lig;private int col;private int depl; // méthodes

}

0 1

2

3

4

1

6

2

Deux instancesde Piece

Page 26: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

// méthodes private int tirage()

{…}

public Piece(int j, int l, int c){…}

public int quelDeplacement(){…}

public void deplacer(int nouvL,int nouvC){…}

public void afficher(…){…}

public String toString(){…}

}// fin classePas besoin de connaître le corpsdes méthodes pour communiqueravec une instance de Piece

Page 27: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

D'ailleurs, jeu n'a pas le droit de modifier directement p :

p.lig = 4; p.col = 3;

car col et lig sont encapsulés

Ex: l'objet jeu demande à la pièce p de se déplacer en case (4,3)

p.deplacer(4,3)

C'est p qui modifie son propre état

jeu n'a pas besoin de savoir comment p procède

Page 28: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

On dit que les objets communiquent par envoi de message :

jeu envoie à p le message "deplacer(4,3)"

p.deplacer(4,3)

jeu est l’expéditeur du message

p est le receveur du message

Page 29: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Constructeur : méthode qui sert à initialiser automatiquement un objet lors de sa création

Mais comment crée-t-on un objet?

Intérêt : éviter les oublis d'initialisation

public Piece(int j, int l, int c){joueur = j;

lig = l; col = c;

depl = tirage();}

Page 30: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Commençons par savoir nommer les objets

Il existe des variables appelées références, qui servent à désigner des objetsPiece p1;

// déclaration d'une référence

Piece p1 = null;

// déclaration + initialisation

Page 31: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

@

new Piece(0,2,3)

3. Retourne l'adresse @ de l'objet … … reste à récupérer cette adresse

1. Crée une instance de la classe Piece réservation d'une place en mémoire

2. Appelle un constructeur sur cet objet Initialisation de l'objet

0

2

3

4

Création d'un objet

Page 32: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

p @

0

2

3

2

@

Piece p;

p = new Piece (0,2,3);

Page 33: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Objets et références ne sont pas liés "à vie"

Un objet peut avoir plusieurs noms, aucun nom, ou changer de nom Piece p1 = new Piece (0,2,3);

Piece p2 = p1;

p1 = new Piece(0,1,1);

p2 = null;

Page 34: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

Structure d'une application Java

• un ensemble de classes, dont l’une comporte une méthode main

public class Hello{ public static void main (String args[])

{ System.out.println("Bonjour, monde!");

}}

Page 35: Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed huchard/Enseignement/FLIN504

public class MonAppliTest{ public static void main (String args[]) {

Piece p = new Piece(0,1,1);String etat = p.toString();System.out.println("état de p :" + etat);int d = p.quelDeplacement();p.deplace(1+d,1);etat = p.toString();System.out.println("état de p :"+ etat);

}}