3 Objet

  • Uploaded by: ossama
  • 0
  • 0
  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 3 Objet as PDF for free.

More details

  • Words: 3,751
  • Pages: 63
Objet? n

Informel • Entité informatique, logicielle ou matérielle, identifiable par un nom, une interface, un comportement, etc. • Exemple: fichier, processus, etc.

Page 1 1

Modèle objet n

Programmation par objets: • Entité dynamique (≠ module) associant de façon indissociable les données, correspondant à l'objet informel, et le code qui manipule et interprète ces données.

n n

Boite noire dont les données ne sont ni visibles, ni modifiables de l'extérieur Le client doit utiliser une interface publique composée par un certain nombre de procédures (méthodes) exportées par le code

Page 2 2

Modèle objet - C/S Client

Serveur

method1 method2

Code

... Données methodx

3

Page 3 3

Modèle objet - C/S n

Objet actif versus Serveur

...

4

Page 4 4

Modèle objet - C/S Utilisateurs Clients

Partie publique "Cliente"

Partie privée "Serveur"

Identifiant

Etat Attributs

Mise en œuvre des méthodes

Interfaces des méthodes

Objet Instance

Classe

Interface 5

Page 5 5

OO Paradigme Forever { readSensors();

Sensor



setHeater(); }

Controller

Heater

{T°}? -> Heater on/off

on/off

Page 6 6

OO Paradigme Définition des Objets n

Etat = Contenu de l'objet • L'état comprend toutes les propriétés d'un objet • Chaque propriété a une valeur. • Tous les objets de la même "espèce" ont les mêmes propriétés. • Les valeurs de ces propriétés peuvent être différentes. • Les propriétés sont réalisées par les variables (attributs) d'objets.

Les objets Sensor ont une propriété température. Les objets Heater ont une propriété indiquant si ils fonctionnent : on/off. Les objets Controller possèdent un historique des températures envoyées par les objets Sensor.

Page 7 7

OO Paradigme Définition des Objets n

Comportement = Réaction de l'objet • Changement d'états • Interaction avec les autres objets • Définit par les méthodes de l'objet

n

Classe = { objets } • Même propriétés, même comportement • Déclaration des variables et des méthodes

Les objets Sensor peuvent indiquer la température qu'ils mesurent aux autres objets. Les objets Heater peuvent être en marche ou à l'arrêt. Les objets Controller interprêtent les données envoyées par les objets Sensor et agissent sur les objets Heater (on/off). 3 classes : Sensor, Heater et Controller.

Page 8 8

OO Paradigme public class Sensor { double temperature;

public class Controller { Vector history;

public void report() { temperature = readHardware(); controller .setTemperature(temperature); }

public void setTemperature(double temp) { updateHistory(temp); heater.setState(policy ()); } }

double readHardware() { … } } public class Heater { boolean operating; public void printState () { … } public void setState(boolean op) { operating = op; if (operating) { … } else { … } } }

Page 9 9

OO Principles Encapsulation n

Dissocie le comportement d'un objet de sa réalisation • Quoi • Comment • Personne ne sait comment un objet Sensor acquiert la temperature, ni comment un objet Heater active le chauffage

Les objets Sensor peuvent indiquer la température qu'ils mesurent aux autres objets. Les objets Heater peuvent être en marche ou à l'arrêt. Les objets Controller interprêtent les données envoyées par les objets Sensor et agissent sur les objets Heater (on/off). 3 classes : Sensor, Heater et Controller.

Page 10 10

OO Principles Héritage/Polymorphisme n

Héritage • Mécanisme permettant à une classe de redéfinir (raffiner, spécialiser) le comportement d'une autre classe. • La sous-classe est une extension de la super-classe

n

Polymorphisme • On peut utiliser des objets sans connaître leur classe exacte. • Il suffit qu'ils possèdent (entre autre) le comportement que l'on attend.

Les objets Sensor peuvent indiquer la température qu'ils mesurent aux autres objets. Les objets Heater peuvent être en marche ou à l'arrêt. Les objets Controller interprêtent les données envoyées par les objets Sensor et agissent sur les objets Heater (on/off). 3 classes : Sensor, Heater et Controller.

Page 11 11

Programmation objet Type, Classe, Objet, etc. n

Type de base: • Domaine de valeur + opérations • Exemple: entier, booléens, etc.

n

Type abstraits: • idem → "user defined"

type personne is nom : string; insee : string; age : integer; end; type etudiant subtype of personne is université : string; numero : integer; end;

Page 12 12

Programmation objet Type, Classe, Objet, etc. n

Classe : • Modèle d'objets (factory) • Ensemble de variables d'état (attributs) • description de la réalisation concrète des objets construits à partir de ce modèle.

• Ensemble d'opérations appelées méthodes • procédures permettant la consultation et la modification des variables d'état.

• Les objets sont engendrés à partir d'une classe par le mécanisme d'instanciation. • Un exemplaire des variables d'état est créé à chaque fois qu'une instance de la classe est créé, il représente l'état de cet objet. • L'état d'un objet ne peut être manipulé que par le code de la classe qui lui a servi de modèle.

Page 13 13

Programmation objet Type, Classe, Objet n

Type : • Un type définit une interface fonctionnelle commune à un groupe d'objets. • Une classe spécifie une réalisation particulière d'un type donné. • Plusieurs classes peuvent offrir des réalisations différentes d'un même type. • L'ensemble des objets d'un même type peut être manipulé de manière uniforme quelque soit leurs classes.

Page 14 14

Programmation objet n

Type Pile • Opération Push, Pop.

n

Classe Pile1 • Implémente le type Pile • Réalisation à partir d'un tableau

n

Classe Pile2 • Implémente le type Pile • Réalisation à partir d'une liste

Page 15 15

Programmation objet n

Spécialisation : Héritage • Lorsqu'une classe C1 contient toutes les déclarations et instructions d'une autre classe C, il est possible de la spécifier comme une extension de celle-ci ; on dit alors que C1 est sous-classe de C, ou que C est super-classe de C1. • Ce mécanisme permet à une classe de partager les données et les méthodes de la super-classe dont elle hérite. • Une sous-classe réalise une spécialisation de la superclasse par ajout de ses propres données et méthodes ; elle peut également redéfinir les méthodes de la superclasse. • Définition d'une hiérarchie de classe par le mécanisme d'héritage.

Page 16 16

Programmation objet Exemple n

Application bancaire: • Classe compte: • attribut solde • méthodes consulter, créditer et débiter • débiter vérifie que le solde reste positif.

• Sous-classe compte_avec_découvert: • idem + attribut découvert_autorisé + méthodes consulter_découvert_autorisé et modifier_découvert_autorisé + modification (surcharge) de la méthode débiter qui maintenant vérifie que le solde reste supérieur à la valeur du découvert autorisé

Page 17 17

Programmation objet Propriétés n

Modularité et encapsulation: • L'objet est une notion naturellement modulaire. • Elle permet d'isoler des comportements, et de dissocier la spécification de l'interface et sa réalisation. • Le passage obligé par une interface d'accès permet • L'évolution transparente de la réalisation • La protection des données. è Facilite le développement séparé, et la réutilisation.

Page 18 18

Programmation objet Propriétés n

Compatibilité de types, Conformité: • L'encapsulation permet l'introduction de la notion de compatibilité de types, vérifiable par la relation de conformité. • La relation de conformité d'un type Tb avec un type Ta, certifie la compatibilité des interfaces des 2 types, et indique qu'une instance du type Tb peut-être utilisée partout ou une instance du type Ta est permise. • Généralement Tb conforme à Ta ssi Tb hérite de Ta.

Page 19 19

Programmation objet Propriétés n

Polymorphisme: • Les variables sont typées, elles peuvent donc désignées des objets de classes différentes (réalisant le même type, ou des types conformes). • Le code exécuté dépend de la classe de l'objet sur lequel la méthode s'applique, ce choix est fait à l'exécution. • Exemple: • Soit une variable de type compte (désignant un objet de ce type), le code exécuté lors de l'appel de la méthode débiter dépendra de la classe réelle de l'objet désigné par la variable à cet instant.

Page 20 20

Programmation objet Appel de méthode n n

Activation, invocation Appel de la méthode M sur l'objet O avec les paramètres p: • Java : O.M(p) • C++ : O->M(p)

Page 21 21

Exceptions n

Traitement des situations exceptionnelles • erreurs: div/0, débordement (aithmétique, tableau, etc.) • situations inatendues

n

2 cas : • Traitement local • Echappement non local à un bloc de traitement

n

Exemple C++, Java: • mécanisme de transfert dynamique du contrôle vers un traitant d'exception • Le traitant définit une portée (try) et attrape (catch) toute exception levée (throw) dans sa portée.

Page 22 22

public interface Stack { public void push(Object obj) throws Full; public Object pop() throws Empty ; }

public class ListStack implements Stack { List list; ListStack() { list = new List(); }

public class ArrayStack implements Stack { int free; Object[] array ;

public void push(Object obj) throws Full { list.append( obj); }

ArrayStack(int size) { free = 0; array = new Object [size]; } public void push(Object obj) throws Full { if (free < array.length) array[free++] = obj; else throw new Full(); }

public Object pop() throws Empty { if (! list.empty()) return list.last(); else throw new Empty(); } }

public Object pop() throws Empty { if (free > 0) return array[Free--]; else throw new Empty(); } }

Page 23 23

public class SuperStack implements Stack { Stack level1; Stack level2; SuperStack() { level1 = new ListStack(); level2 = new ArrayStack(100); level1.push(level2); } public void push(Object obj) throws Full { try { level2.push(obj); } catch (Full exc) { level2 = new ArrayStack(100); level1.push(level2); level2.push(obj); } } public Object pop() throws Empty { try { return level2.pop(); } throw (Empty exc ) { level2= (Stack) level1.pop(); return level2.pop(); } } }

Page 24 24

Exemple2: L'éditeur Graphique n

Objets graphiques de base: • point, droite, cercle, image, etc. • fonctions de manipulation: dessin, déplacement, etc. ⇒ Objets Point, Line, Circle, etc. ⇒ Fonctions drawPoint, movePoint, drawLine, etc.

n

Objets graphiques composés: • triangle, rectangle, polygone, etc. • groupe d'objets

n

Objets graphiques génériques • Manipulation "transparente" des différents types d'objets.

Page 25 25

Exemple2: L'éditeur Graphique Approche traditionnelle typedef enum {

typedef struct {

POINT, LINE, CIRCLE, etc.

int x, y;

} Gtype;

int r; int couleur;

typedef struct {

} Circle;

int x, y; int color;



} Point; typedef struct { int x1, y1, x2, y2; int color; } Line;

Page 26 26

Exemple2: L'éditeur Graphique Approche traditionnelle typedef struct { Gtype type; union { Point p;

typedef struct { int nb ; Graphic group []; } Group ;

Line l; Circle c; … }; } Graphic;

Page 27 27

Exemple2: L'éditeur Graphique Approche traditionnelle typedef struct { int nb ;

void drawGroup (Graphic g, window w) { for (int i=0; i
Graphique groupe[];

switch (g→group [i].type) {

} Groupe;

case POINT: drawPoint(g→ group [i].obj, w); break; case LINE: drawLine(g→ group [i].obj, w); break; case CIRCLE: drawCircle(g→group [i].obj, w); break; …

Page 28 28

Exemple2: L'éditeur Graphique Approche traditionnelle n

Problèmes liés à l'évolution: • Ajout de types de base: • Spline, béziers, image (gif, jpeg, etc). ⇒ Modification de Gtype ⇒ Definition des structures et fonctions de manipulation ⇒ Modification du code pour prendre en compte les nouveaux types

Page 29 29

Exemple2: L'éditeur Graphique Approche objet n n n

Définition d'une interface d'objet graphique générique. Chaque classe d'objets graphique implémente l'interface générique Le programmeur ne se soucie plus de la classe réelle des objets qu'il manipule

Page 30 30

Exemple2: L'éditeur Graphique Approche objet interface Graphic {

class group implements Graphic {

void draw(window w);

int nb ;

void move(window w, int dx, int dy);

Graphic group[];

} class Point implements Graphic {

void draw(window w) {



for (int i=0; i
}

group [i].draw(w);

class Line implements Graphic {

}

… }

… }

Polymorphisme ⇒ Choix de la méthode à l'exécution en fonction de la classe réelle de l'objet

Page 31 31

Java RMI Remote Method Invocation n

Un RPC objet intégré à Java • Interaction d'objets situés dans des espaces d'adressage différents sur des machines distinctes • Simple à mettre en œuvre : un objet distribué se manipule comme tout autre objet Java

è Développement è è è è è

de programmes distribués

Comportement des objets Exceptions : quand ? comment ? Gestion de la mémoire Passage des paramètres, retour des résultats etc.

Page 32 32

Objet Local Définition d'objet Implémentation Création

Objet Distant

Un objet local est définit par Le comportement d'un objet une classe Java distant est définit par une interface "Remote" Un objet local est réalisé par Le comportement d'un objet une classe Java distant est réalisé par une classe réalisant l'interface Une instance est créée par Création par le serveur, pas l'opérateur "new" de création par le client

Accès

Direct au travers d'une référence d'objet

Via une référence sur une instance proxy Stub

Référence

Pointeur sur l'état de l'objet Pointeur sur l'objet proxy dans la mémoire Stub contenant les informations permettant la connexion à l'objet distant

Garbage

Lorsque l'objet n'est plus référencé

Exceptions

Système et Application. Le Prise en compte de toutes les compilateur force la prise de RemoteException's pouvant toutes les exceptions pouvant être éventuellement générées être générées.

Plus ni références locales, ni références distantes

Page 33 33

Java RMI Architecture n

Séparation des concepts • Définition du comportement Ô Utilisation du service par le client Ô Codé par une interface Java • Implémentation de ce comportement Ô Fourniture du service par le serveur Ô codé par une classe Java

Page 34 34

Java RMI Architecture Programme Client

Interface

!

Programme Serveur

RMI

Implémentation

Les interfaces ne contiennent pas de code exécutable

Page 35 35

Java RMI Architecture Interface

Programme Client

Proxy

Programme Serveur

RMI

Skeleton Implémentation

RMI définit deux classes réalisant la même interface: • La première classe réalise le service, et elle s'exécute sur le serveur, • La seconde agit comme un proxy pour le service client, s'exécute sur le serveur.

Page 36 36

Java RMI Architecture Objet Client

Objet Serveur

Stubs

Skeletons

Remote Reference Layer

Transport

Après avoir compris l'architecture globale de RMI, découvrons en les principaux mécanismes ; La réalisation de RMI est construite autour de trois couches d'abstractions : • La première est composée des stubs et skeletons, intercepte les appels effectués par le client et les redirige vers le service RMI distant. • La seconde, Remote Reference Layer, interprête les références vers les services RMI distants. Cette couche connecte l'objet "stub" client à l'objet "skeleton" exécuté et exporté par le service distant. Il s'agit d'une connexion Point-à-Point (PTP, ou Unicast). • La couche de communication est basée sur des connexions TCP/IP. L'utilisation d'une architecture en couche permet d'améliorer ou de remplacer chacune d'elles sans affecter le reste du système. Par exemple, la couche de communication peut-être remplacée par une réalisation basée sur UDP/IP sans affecter les couches supérieures.

Page 37 37

Java RMI - Architecture "Stubs" et "Skeletons" n

Proxy Design Pattern • "Design Pattern", Gamma, Helm, Johnson et Vlissides. Client

Interface

Proxy

Objet réel

• Un objet dans un contexte est représenté par un autre, le proxy, dans un autre contexte. • Le proxy transmet (forward) les appels de méthodes entre les objets participant.

Page 38 38

Java RMI - Architecture "Stubs" et "Skeletons" n

RMI : • Stub Ô proxy • Objet serveur Ô objet réel • Skeleton • "helper class" générée pour les besoins de RMI. • Traduction de la communication avec le stub Ô Stub serveur • Seulement avec JDK 1.1, JDK 1.2 utilise la reflexivité.

Page 39 39

Java RMI - Architecture Remote Reference Layer n

n

Définit la sémantique de l'invocation de méthode sur la couche de transport. Fournit l'objet RemoteRef • méthode invoke( … )

n

JDK 1.1 • Unicast, PTP connexion • Pré-requis : objet serveur instancié et exporté, éventuellement nommé et enregistré auprès du "registry" RMI.

Page 40 40

Java RMI - Architecture Remote Reference Layer n

Java 2 • Support d'objets distants activables • Objet activable "dormant" Ô Instanciation de l'objet Ô Restauration de son état depuis un fihier Ô Activation

• Autres sémantiques de connexion • Multicast : Un proxy pourrait émettre une requête à de multiples objets serveurs et accepter la première réponse.

Page 41 41

Java RMI - Architecture Transport Layer n

Gestion de la connexion entre les JVM's • Basée sur TCP/IP même sur la même machine • Java Remote Method Protocol (JRMP) • JDK 1.1 : Utilisation d'objets skeleton • JDK 1.2 : Optimisée • JDK 1.3 : Basée sur IIOP de l'OMG • Internet Inter-ORB Protocol

Page 42 42

Java RMI Désignation des objets n

Comment un client trouve un objet serveur ? • Utilisation d'un Naming ou Directory Service • Cercle vicieux ? • "well-known host", "well-known port"

• JNDI, RMI Registry n

RMI Registry • S'exécute sur chaque machine supportant des objets serveurs • Port par défaut : 1099 • Noms public Ô URL • rmi://[:<port>]/<service name>

Page 43 43

Java RMI Fonctionnement rmiregistry





Ž

Naming

Naming



Ž



Œ



server

Client

“ ’

“ Proxy





JVM



Skeleton



JVM

Page 44 44

Java RMI Fonctionnement n n

n

n

1 - L'objet serveur s'enregistre auprès du Naming de sa JVM (méthode bind) 2 - Le skeleton (objet proxy serveur) est créé, il crèe le port de communication et maintient une référence vers l'objet serveur 3 - Le Naming enregistre l'objet serveur, et le port de communication auprès du serveur de noms L'objet serveur est prêt à répondre à des requêtes

Page 45 45

Java RMI Fonctionnement n n n n n

4 - L'objet client fait appel au Naming pour localiser l'objet serveur (methode lookup) 5 - Le Naming récupère les "références" vers l'objet serveur, ... 6 - crèe le Proxy et ... 7 - rend sa référence au client 8 - Le client effectue l'appel au travers du Proxy

Page 46 46

Java RMI Manuel d'utilisation n

Définition de l'interface de l'objet réparti • interface : "extends java.rmi.Remote" • methodes : "throws java.rmi.RemoteException"

n

Ecrire une implémentation de l'objet • classe : "extends java.rmi.server.UnicastRemoteObject" • paramètres sérializable : "implements Serializable"

n

Mode d'emploi • • • •

compilation des sources (javac) génération des stubs et skeletons (rmic) lancement du serveur de noms (rmiregistry) lancement du serveur

Page 47 47

Java RMI Exemple : Interface et Client package hello;

Hello.java

public interface Hello extends java.rmi.Remote { String sayHello() throws java.rmi .RemoteException; } package hello;

HelloClnt .java

import java.rmi.*; public class HelloClnt { public static void main( String args[]) { try { // Récupération d'un proxy sur l'objet. Hello obj = ( Hello) Naming.lookup("// suldrun /HelloServer "); // Appel d'une méthode sur l'objet distant. String msg = obj.sayHello (); System.out.println(msg ); } catch (Exception exc ) { … } } }

Page 48 48

Java RMI Exemple : Serveur package hello;

HelloServer .java

import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class HelloImpl extends UnicastRemoteObject implements Hello { private String msg; public HelloImpl (String msg) throws java.rmi.RemoteException { super(); this.msg = msg ; } // Implémentation de la méthode distante. public String sayHello() throws java.rmi .RemoteException { return "Hello world : " + msg ; } …

Page 49 49

Java RMI Exemple : Serveur HelloServer .java … public static void main(String args []) { // Crée et installe le gestionnaire de sécurité. System.setSecurityManager(new RMISecurityManager()); try { // Crée une instance. HelloImpl obj = new HelloImpl("HelloServer"); // Enregistre l'objet créer auprès du serveur de noms. Naming.rebind("//suldrun/HelloServer", obj); System.out. println("HelloServer " + " bound in registry"); } catch (Exception exc) {… } } }

Page 50 50

Java RMI Exemple # Compilation cd hello javac Hello .java HelloImpl .java HelloClnt.java # Generation des stubs (dans le repertoire ./hello ) cd .. rmic -d . hello.HelloImpl # Lancement du serveur de noms start rmiregistry # Lancement du serveur d'objets java hello.HelloImpl >> HelloServer bound in registry # Dans une autre fenetre, lancement du client java hello.HelloClnt >> Hello world : HelloServer

Page 51 51

Java RMI Chargement de classe n

RMI permet le passage d'objet par valeur ⇒ Mécanisme de chargement de classe (code) • Chargement, manipulation de l'objet transmis • Utilisation d'un serveur web RMI Registry

Client

Web server

Serveur

Web server

Page 52 52

Java RMI Chargement de classe n

Maintien du lien Objet Ô Classe • Type et comportement réel de l'objet dans la JVM distante

n

n

Extension dynamique du comportement d'une application Exemple : • Un moteur d'exécution de taches.

Page 53 53

Exemple

Définition de l'interface distante n

Spécification des méthodes pouvant être invoquées par le client • Détermination des objets utilisés comme paramètre d'appel ou de retour compute/Compute.java

package compute; import java.rmi.Remote; import java.rmi.RemoteException; public interface Compute extends Remote { Object doTask(Task t) throws RemoteException; }

Page 54 54

Exemple

Définition de l'interface distante n

Définition des interfaces ou des classes • Type Task utilisé en paramètre de la méthode doTask de l'interface Compute • L'interface Task définit l'interface entre le moteur d'exécution et la tâche à faire, en fournissant le moyen de démarrer la tâche compute/Task.java

package compute; import java.io.Serializable; public interface Task extends Serializable { Object execute(); }

Page 55 55

Exemple engine/ComputeEngine.java package engine; import java.rmi.*; import java.rmi.server.*; import compute.*; public class ComputeEngine extends UnicastRemoteObject implements Compute { public ComputeEngine() throws RemoteException { super(); } public Object doTask(Task t) { return t.execute(); } …

Page 56 56

Exemple engine/ComputeEngine.java … public static void main(String args[]) { try { Compute engine = new ComputeEngine(); Naming.rebind(name, engine); System.out.println("ComputeEngine bound"); } catch (Exception exc) { exc.printStackTrace(); } } }

Page 57 57

Exemple client/ReadDir.java package client; import java.rmi.*; import compute.*; public class ReadDir { public static void main(String args[]) { try { String name = "//" + args[0] + "/Compute"; Compute engine = (Compute) Naming.lookup(name); Dir task = new Dir(args[1]); String dir = (String) engine.doTask(task); System.out.println("//" + args[0] + "/" + args[1]); System.out.println(dir); } catch (Exception exc) { exc.printStackTrace(); } } }

Page 58 58

Exemple client/Dir.java package client; import compute.*; public class Dir implements Task { String path; public Dir(String path) { this.path = path; } public Object execute() { return readDir(path); } …

Page 59 59

Exemple client/Dir.java … String readDir(String path) { try { File dir = new File(path); } catch (Exception exc) { exc.printStackTrace(); } } }

Page 60 60

Exemple RMI Registry

Client ReadDir

Serveur ComputeEngine

Dir

Dir

Web server

Web server

Page 61 61

Java RMI Passage d'objets par copie

Obj2

Obj2

Obj1 .method( Obj2 )

Obj1

method( Obj2 )

Obj1<stub>

Obj1<skeleton>

Java VM

Java VM

Page 62 62

Java RMI Passage d'objets par référence Obj2

Stub: Obj2 Obj1 .method( Obj2 )

Stub_Obj2 Obj1

method( Obj2 )

Obj1<stub>

Obj1< Skeleton>

Java VM

Java VM

Page 63 63

Related Documents

3 Objet
December 2019 20
Badiou-objet
May 2020 18
Vb+objet
June 2020 7
Cpp-objet
May 2020 21
Concepts Objet
April 2020 10

More Documents from ""

Crypt
December 2019 56
Coursunix
December 2019 56
Javaobj
December 2019 57
December 2019 85
Securite96
December 2019 60
December 2019 43