Composite & décorateur



Documents pareils
Interfaces graphiques avec l API Swing

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Design patterns. Design patterns - définition. Design patterns - avantages

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Développement Logiciel

Java Licence professionnelle CISII,

Plan. Patrons de conception. Motivations. Design Pattern : principe. Philippe Collet

Auto-évaluation Programmation en Java

Patrons de Conception (Design Patterns)

Corrigé des exercices sur les références

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

INITIATION AU LANGAGE JAVA

Utiliser Java sans BlueJ

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Introduction au langage Java

Cours 1: Java et les objets

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

ACTIVITÉ DE PROGRAMMATION

Tutoriel BlueJ. Michael Kölling Mærsk Institute University of Southern Denmark. Version 1.4 fr-2 par le groupe Sigma 1 pour BlueJ Version 1.2.

TP1 : Initiation à Java et Eclipse

Remote Method Invocation (RMI)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Héritage presque multiple en Java (1/2)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Java - la plateforme

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

RMI le langage Java XII-1 JMF

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Chapitre VI- La validation de la composition.

L'essentiel de Java et de l'objet

Programmer en JAVA. par Tama

Objets et Programmation. origine des langages orientés-objet

PROGRAMMATION PAR OBJETS

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Projet de programmation (IK3) : TP n 1 Correction

Introduction : les processus. Introduction : les threads. Plan

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Une introduction à Java

Environnements de développement (intégrés)

Synchro et Threads Java TM

TD/TP PAC - Programmation n 3

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

OpenPaaS Le réseau social d'entreprise

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Java Licence Professionnelle CISII,

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Applet pour visualiser les variables «automate» notifiées

Analyse,, Conception Objet

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Bases Java - Eclipse / Netbeans

Package Java.util Classe générique

Threads. Threads. USTL routier 1

Solutions du chapitre 4

Généralités sur le Langage Java et éléments syntaxiques.

Initiation à JAVA et à la programmation objet.

Chapitre I Notions de base et outils de travail

Unity. Moteur de jeu 3D et 2D. Cross platform: Windows, Mac, Linux, ios, Android, Blackberry, Xbox, Playstation, Wii

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

LOG4430 : Architecture logicielle et conception avancée

TD/TP PAC - Programmation n 3

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Langage Java. Classe de première SI

Desktop Intégration. Rémi Forax

La carte à puce. Jean-Philippe Babau

Fichiers d'archives java - *.jar

Chapitre 10. Les interfaces Comparable et Comparator 1

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

La technologie Java Card TM

Cours 2 : programmation des interfaces graphiques

Cours en ligne Développement Java pour le web

Programmation par les Objets en Java

4. Groupement d objets

Java Licence Professionnelle CISII,

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Premiers Pas en Programmation Objet : les Classes et les Objets

Java 1.5 : principales nouveautés

Support de cours et TD Programmation Orientée Objet

Construire des plug-ins pour SAS Management Console SAS 9.1

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Remote Method Invocation Les classes implémentant Serializable

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Programmation Internet en Java

Corrigés des premiers exercices sur les classes

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Initiation à la programmation orientée-objet avec le langage Java

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Classe Interne, Anonyme & Enumération

Programme Compte bancaire (code)

Web Tier : déploiement de servlets

Transcription:

Composite & décorateur Cnam Paris jean-michel Douin Version du 1er Octobre 2005 Notes de cours java : les patterns Les notes et les Travaux Pratiques sont disponibles en http://jfod.cnam.fr/tp_cdi/{douin/ 1

Sommaire Structures de données récursives Le pattern Composite API Graphique en Java(AWT), paquetage java.awt Comportement dynamique d un objet Le pattern Décorateur Entrées/Sorties, paquetage java.io 2

Principale bibliographie GoF95 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Design Patterns, Elements of Reusable Object-oriented software Addison Wesley 1995 + http://www.eli.sdsu.edu/courses/spring98/cs635/notes/composite/composite.html http://www.patterndepot.com/put/8/javapatterns.htm + http://www.javaworld.com/javaworld/jw-12-2001/jw-1214-designpatterns.html www.oreilly.com/catalog/hfdesignpat/chapter/ch03.pdf 3

Structures récursives : le pattern Composite Composante ::= Composite Feuille Composite ::= CompositeConcret CompositeConcret ::= {Composante Feuille ::= symbole terminal Tout est Composante 4

Un exemple : Expression Expression ::= Binaire Nombre Binaire ::= Addition Addition ::= Expression + Expression Nombre ::= une valeur de type int Tout est Expression 5

Composite et Expression en Java public abstract class Expression{ public abstract class Binaire extends Expression{ protected Expression op1; protected Expression op2; public Binaire(Expression op1, Expression op2){ this.op1 = op1; this.op2 = op2; 6

Composite et Expression en Java public class Addition extends Binaire{ public Addition(Expression op1,expression op2){ super(op1,op2); public class Nombre extends Expression{ private int valeur; public Nombre(int valeur){ this.valeur = valeur; 7

Le diagramme au complet 8

Avec BlueJ 9

Quelques instances d Expression en Java public class ExpressionTest extends junit.framework.testcase { public static void test1(){ Expression exp1 = new Nombre(321); Expression exp2 = new Addition( new Nombre(33), new Nombre(33) ); Expression exp3 = new Addition( new Nombre(33), new Addition( new Nombre(33), new Nombre(11) ) ); Expression exp4 = new Addition(exp1,exp3); 10

L AWT utilise le Pattern Composite? Compent, Container, Label, Jlabel. 11

Objets graphiques en Java Comment se repérer dans une API de 180 classes (java.awt et javax.swing)? La documentation : une énumération (indigeste) de classes. exemple java.awt.component Direct Known Subclasses: Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, TextComponent +--java.awt.component +--java.awt.container Direct Known Subclasses: BasicSplitPaneDivider, CellRendererPane, DefaultTreeCellEditor.EditorContainer, JComponent, Panel, ScrollPane, Window 12

Pattern Composite et API Java API Abstract Window Toolkit Une interface graphique est constituée d objets De composants Bouton, menu, texte, De composites (composés des composants ou de composites) Fenêtre, applette, Le Pattern Composite est utilisé Une interface graphique est une expression respectant le Composite (la grammaire) En Java au sein des paquetages java.awt et de javax.swing. 13

l AWT utilise un Composite class Container extends Component { Component add (Component comp); 14

Discussion Une Expression de type composite (Expression) Expression e = new Addition(new Nombre(1),new Nombre(3)); Une Expression de type composite (API AWT) Container p = new Panel(); p.add(new Button("b1")); p.add(new Button("b2")); 15

UnExemple import java.awt.*; public class UnExemple{ public static void main(string[] args){ Frame f = new Frame("UnExemple"); Container p = new Panel(); p.add(new Button("b1")); p.add(new Button("b2")); p.add(new Button("b3")); Container p2 = new Panel(); p2.add(p);p.add(new TextField(" du texte")); f.add(p2); f.pack();f.setvisible(true); 16

AppletteFahrenheit public class AppletteFahrenheit extends Applet { private TextField entree = new TextField(6); private Button bouton = new Button("convertir"); private TextField sortie = new TextField(6); public void init() { add(entree); // ajout de feuilles au composite add(boutondeconversion); // Applet add(sortie); 17

Le Pattern Expression : un premier bilan Composite : Représentation de structures de données récursives Techniques de classes abstraites Manipulation uniforme ( tout est Composant) Une évaluation de cette structure : le Pattern Interpréteur // 3+2 Expression e = new Addtition(new Nombre(3),new Nombre(2)); // appel de la méthode interpreter int resultat = e.interpreter(); assert( resultat == 5); // enfin 18

Patterns associés Pattern Interpréteur public abstract class Expression{ public abstract int interpréter(); Pattern Visiteur public abstract class Expression{ public abstract Object accepter(visiteur v); 19

le Pattern Décorateur Ajout dynamique de responsabilités à un objet Une alternative à l héritage 20

Le Pattern : mis en oeuvre AComponent interface ou classe abstraite ConcreteComponent implémente* AComponent Decorator implémente AComponent et contient une instance de Acomponent ConcreteDecoratorA, ConcreteDecoratorB héritent de Decorator * implémente ou hérite de 21

Une mise en œuvre(1) public interface AComponent{ public abstract String dostuff(); public class ConcreteComponent implements AComponent{ public String dostuff(){ //instructions concrètes; return "concrete..." public abstract class Decorator implements AComponent{ private AComponent acomponent; public Decorator(AComponent acomponent){ this.acomponent = acomponent; public String dostuff(){ return acomponent.dostuff(); 22

Mise en œuvre(2) public class ConcreteDecoratorA extends Decorator{ public ConcreteDecoratorA(AComponent acomponent){ super(acomponent); public String dostuff(){ //instructions decoratora; return "decoratora... " + super.dostuff(); Déclarations Acomponent concret = new ConcreteComponent(); Acomponent décoré = new ConcreteDecoratorA( concret); décoré.dostuff(); 23

Mise en oeuvre, bluej 24

Quelques assertions (decoratorb (decoratora (concrete))) 25

un autre exemple inspiré de www.oreilly.com/catalog/hfdesignpat/chapter/ch03.pdf Confection d une Pizza à la carte 3 types de pâte 12 ingrédients différents, (dont on peut doubler ou plus la quantité) en moyenne 5 ingrédients, soit 792* combinaisons!? Confection comme décoration? Une description de la pizza commandée et son prix * n parmi k, n! / k!(n-k)! 26

3 types de pâte Pâte solo, (très fine ) Pâte Classic Pâte GenerousCrust 27

12 ingrédients différents Mozarella, parmesan, Ham, Tomato, Mushrooms, diced onion, etc... 28

Le décorateur, rappel AComponent --> une interface Pizza ConcreteComponent --> les différentes pâtes Decorator l ingrédient, la décoration ConcreteDecorator Parmesan, Mozarella,... 29

3 types de pâte public interface Pizza{ abstract public String getdescription(); abstract public double cost(); 30

Les ingrédients! 31

PizzaDecorator public abstract class PizzaDecorator implements Pizza{ protected Pizza pizza; public PizzaDecorator(Pizza pizza){ this.pizza = pizza; public abstract String getdescription(); public abstract double cost(); public class Ham extends PizzaDecorator{ public Ham(Pizza p){super(p); public String getdescription(){ return pizza.getdescription() + ", ham"; public double cost(){return pizza.cost() + 1.50; 32

Ham & Parmesan public class Ham extends PizzaDecorator{ public Ham(Pizza p){super(p); public String getdescription(){ return pizza.getdescription() + ", ham"; public double cost(){return pizza.cost() + 1.50; public class Parmesan extends PizzaDecorator{ public Ham(Pizza p){super(p); public String getdescription(){ return pizza.getdescription() + ", parmesan"; public double cost(){return pizza.cost() + 0.75; 33

Pizza Solo + Mozarella public void testcheese(){ assertequals(5.8, new Parmesan( new FreshMozarella( new PizzaSolo())).cost()); un amateur de fromage pourrait commander celle-ci Pizza p=new Mozarella(new Mozarella(new Parmesan(new PizzaSolo())))); 34

L IHM Pizza p; // donnée d instance de l IHM choix de la pâte, ici solo boutonsolo.addactionlistener( new ActionListener(){ public void actionperformed(actionevent ae){ pizza = new PizzaSolo(); validerlesdécorations(); ); 35

L IHM : les ingrédients ici Ham*2 ham.additemlistener(new ItemListener(){ public void itemstatechanged(itemevent ie){ if(ie.getstatechange()==itemevent.selected) pizza = new Ham(pizza); afficherlapizzaetsoncoût(); ); 36

Discussion 37

java.io Le Décorateur est bien là 38

Utilisation InputStream is = new LineNumberInputStream( new FileInputStream( new File("LectureDeFichierTest.java"))); 39

Reader, récidive LineNumberReader r = new LineNumberReader( new FileReader(new File("README.TXT"))); System.out.println(r.readLine()); System.out.println(r.readLine()); 40

Conclusion 41