Schéma de conception Factory Method Exemple

Slides:



Advertisements
Présentations similaires
Sérialisation des objets
Advertisements

Gestion des événements (suite)
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
Programmation Web Les JSP.
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Programmer en JAVA par Tama
11:37:32 Programmation Web PHP5 objet "avancé" Jérôme CUTRONA
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Langage Oriente Objet Cours 4.
POO-L3 H. Fauconnier1 C) Méthodes: Redéfinition Un classe hérite des méthodes des classes ancêtres Elle peut ajouter de nouvelles méthodes Elle peut surcharger.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Factory Design Patterns Factory Method
Design Pattern: Decorator
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
Cours n°3 rappels. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double a = 5.6d ; double b =
Propriétés. Propriétés ► Les propriétés peuvent être visibles dans les environnements de scripts ► Les propriétés peuvent être accédées par programmation.
Factory Design Patterns. Contents Factory patterns: principesFactory patterns: principes The Factory Method patternThe Factory Method pattern The Abstract.
Cours 7 Classes locales Clonage Divers: tableaux.
Cours Les flux ou streams. Cours 162 Flux : objet possédant des méthodes capables de lire ou écrire des flots d’octets sur tout support (mémoire,
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours du 5 novembre.
PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web
Schéma de concpetion Abstract Factory Exemple Sylvain Giroux.
Bases de données Singleton pour la connexion
Génie XML - Yves Bekkers1 DOM4J. Génie XML - Yves Bekkers2 Diagramme des classes.
Développement à l'Aide de Langages Dynamiques : Smalltalk module IT308: Méthodologies et outils logiciels Nada Ayad, Damien Cassou et Annabelle Souc.
Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 1 JAV – TD 8 Les threads en Java.
By Kate Soglaeva. » FormHandlers do’s » Droplets do’s » Repositories do’s 2 ATG Hints by Kate Soglaeva.
Comment corriger son code sans forcément appeler l’enseignant M2202
Modèle objet : les classes
java : l'héritage (rappel)
Environnement de développement des BD
Environnement du développement de BD ORACLE REPORTS 10g
Les Exceptions Rémi Forax
Pas de variable globale
Les notions de classe et d'objet
TP N°2 : les Adresses IP *IP: Internet Protocol
Chapitre 6 La gestion des Exceptions et les assertions
Master Réseaux et Systèmes Distribués (RSD) Algorithmique des systèmes
Principes de programmation (suite)
E) Constructeurs et héritage
Puzzler.
Package traçable Tatiana Aubonnet.
Programmation Android Debugger ses applications
Programmation Orientée Objet C# El Akel Bouchra ISMONTIC Tanger 2013/2014.
Développement d’applications interactives
Développement d’une Application CORBA
Les classes et les objets
Programmation par Objets et Java
Principes de programmation (suite)
INTERFACE ET POLYMORPHISME
STREAMS (et fichiers).
Lecture/Écriture de fichiers (I/O)
Variables et accès en Java
Chapitre 11 Exceptions.
Jérôme CUTRONA PHP objet Jérôme CUTRONA 08:30:34 Programmation Web
Bases de données Singleton pour la connexion
TP N°1 : GUI en NetBeans Module R & C Université de Jijel
TP N°6: Construction d’un Serveur Multi-Client
TP N°4 Développement d’ une application
TP RC.
TP N°5: Partie I Programme Serveur.
Transcription de la présentation:

Schéma de conception Factory Method Exemple Sylvain Giroux

Problème Tout programme doit pouvoir rapporter les erreurs ou encore afficher des messages servant pour le déverminage. public interface Trace {       // turn on and off debugging       public void setDebug( boolean debug );       // write out a debug message       public void debug( String message );       // write out an error message       public void error( String message ); }

Première version Écrire une classe SystemTrace qui implémente Trace. Les instances de cette classe affiche le résultat dans la fenêtre de commande en ligne.

La classe SystemTrace public class SystemTrace implements Trace {   private boolean debug;   public void setDebug( boolean debug ) {             this.debug = debug;   }   public void debug( String message ) {      if( debug ) {   // only print if debug is true        System.out.println( "DEBUG: " + message );      }   }      public void error( String message ) {      // always print out errors      System.out.println( "ERROR: " + message );   } }

Utilisation de SystemTrace Ajouter les instructions de déverminage nécessaires pour tracer sur la console chacun des appels de méthodes d’une classe.   class SomeClass { //... some code ... SystemTrace log = new SystemTrace(); //... code ... log.setDebug(true); log.debug( "entering log" ); // ... etc ... void getValue(){ log.debug( "entering getValue" );

Écrire une classe FileTrace qui implémente Trace Écrire une classe FileTrace qui implémente Trace. Les instances de cette classe affiche le résultat dans un fichier. public class FileTrace implements Trace {             private java.io.PrintWriter pw;  private boolean debug;  public FileTrace() throws java.io.IOException {        String fileName = "c:\trace.log" ;       pw = new java.io.PrintWriter( new java.io.FileWriter(fileName ));  }  public void setDebug( boolean debug ) {this.debug = debug;  }  public void debug( String message ) {     if( debug ) {  // only print if debug is true        pw.println( "DEBUG: " + message );        pw.flush();     }  }  public void error( String message ) {     // always print out errors     pw.println( "ERROR: " + message );     pw.flush();  } }

Paramétrer le programme Le nom de ce fichier sera spécifié dans les propriétés du programme et chargé dans une instance de ProgramProperties.  Cette instance sera un Singleton créé à sa première utilisation. Cette classe sera sous-classe de java.util.Properties.

/* public class ProgramProperties extends Properties { final static public String DEFAULT_FILE_NAME = "defaultProperties"; final static public String PROPS_FILE_NAME = "ex4.properties"; static private ProgramProperties instance__; static synchronized public ProgramProperties getInstance() { if (instance__ == null) { // create and load default properties ProgramProperties defaultProps = new ProgramProperties(); FileInputStream in; try { in = new FileInputStream(DEFAULT_FILE_NAME); defaultProps.load(in); in.close(); } catch (FileNotFoundException e2) {e2.printStackTrace(); catch (IOException e3) {e3.printStackTrace();

// create program properties with default ProgramProperties applicationProps; applicationProps = new ProgramProperties(defaultProps); try { // now load properties from last invocation in = new FileInputStream(PROPS_FILE_NAME); applicationProps.load(in); in.close(); } catch (FileNotFoundException e) {e.printStackTrace(); catch (IOException e1) { e1.printStackTrace(); instance__ = applicationProps; } // end if (instance__ == null) return instance__; private ProgramProperties(ProgramProperties defaultProps){ super(defaultProps);

public FileTrace() throws java.io.IOException { ProgramProperties props = ProgramProperties.getInstance(); props.getProperty(FILE_NAME_PROPERTY, FILE_NAME_PROPERTY_DEFAULT ); _pw = new PrintWriter( new FileWriter( getFileName() ) ); }

Pour utiliser FileTrace au lieu de SystemTrace il faut modifier le programme en plusieurs endroits dans plusieurs classes Afin de rassembler la création du système de trace en un seul endroit, écrire une classe TraceFactory possédant une méthode « factory » abstraite getTrace()

public abstract class TraceFactory { static private TraceFactory instance__; static synchronized public TraceFactory getInstance() { if (instance__ == null) instance__ = createFactory(); return instance__; } private static TraceFactory createFactory() { ProgramProperties props = ProgramProperties.getInstance(); if (getProperty("trace.file") != null) return new FileTraceFactory(); return new SystemTraceFactory(); public abstract Trace getTrace();

Le if n’est pas très élégant, ni flexible private static TraceFactory createFactory () { ProgramProperties props; String FactoryClassName; TraceFactory factory; props = ProgramProperties.getInstance(); FactoryClassName = props.getProperty("trace.factory", "SystemTraceFactory"); factory = new SystemTraceFactory(); // valeur par défaut try { factory = (TraceFactory) Class.forName(FactoryClassName).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return factory;

public class SystemTraceFactory extends TraceFactory { public Trace getTrace() { return new SystemTrace(); } public class FileTraceFactory extends TraceFactory { try { return new FileTrace(); } catch (IOException e) { e.printStackTrace(); // pour au moins rendre de quoi faire la trace