Le kit

Sébastien MERIC

Construire son application, construire l'architecture de base applicative est l'un des premiers rôles de votre programme : un point d'entrée (fonction mail en C, méthode static main en C++ et en java, etc.) qui va construire l'application, pourtant l'architecture peut être différente d'un appel à l'autre. Un bon exemple pour les adeptes de Java et pour ceux qui font du SWING (interface graphique fenêtrée), c'est de choisir la couche de peinture à utiliser (Windows like, motif like ou metal le spécial Java). Il nous faut, dans ce cadre, être capable de construire la quasi même arborescence, mais avec des implémentations différentes. C'est ce que se propose de résoudre le kit.

Notre problématique est donc de permettre à un client de choisir un style (pas nécessairement graphique et l'exemple sera non graphique) puis de commencer à fabriquer son architecture objet à l'aide d'une interface unique. La solution consiste donc à utiliser des interfaces, et ce à tous les niveaux. D'une part, au niveau des objets faisant réellement l'objet de manipulation (ici les objets graphiques comme une fenêtre, un arbre, un tableau) et aussi au niveau d'une usine à fournir les objets en question.

Remerciements : Stefan Bertholon.

- Titre : Le kit

- Auteur : Sébastien MERIC

- Parution : 13 avril 2003

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Sébastien MERIC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Synonymes

- II. Structure

- III. Implémentation

I - Synonymes

Fabrique abstraite, usine abstraite.

II - Structure

Le besoin, cette fois, est de bien définir les interfaces, fabrication et utilisation, pour permettre d'utiliser diverses implémentations du même composant puis d'implémenter ce composant dans au moins l'une de ses versions (attendu que les autres viendront bien entendu).

III - Implémentation

Pour l'exemple implémenté, je ne fournirai qu'une seule implémentation d'un composant, le reste allant de soi. Un exemple très connu de kit pour les utilisateurs de Java est le processus de création d'instance de classes du JDBC. Nous allons faire pour l'exemple un tout petit driver de persistance. Il ne disposera que d'une seule classe d'utilisation pour que le code ne soit pas trop important et ne sera capable que de lire un enregistrement ou d'en insérer un nouveau. Enfin, j'implémenterai partiellement une instance du composant pour fichier CSV et une autre (toujours partielle) pour fichier XML.

com.developpez.kit.KitSerialisation

/*
* KitSerialisation.java
*
* Created on 14 mars 2003, 16:35
*/

package com.developpez.kit;

/**
*
* @author  smeric
*/
public interface KitSerialisation {
public Serialisation getSerialisationInstance();
// ici il faudrait ajouter des get pour tous les objets que l'on pourrait
// avoir besoin de construire

// ex :
/*public Enregistrement getEnregistrmentInstance(); */
/*public Champ getChampInstance(); */

// et du coup définir les interfaces Enregistrement et Champs ainsi que
// leurs différentes implémentations

com.developpez.kit.Serialisation

/*
* KitSerialisation.java
*
* Created on 14 mars 2003, 16:22
*/

package com.developpez.kit;

/**
*
* @author  smeric
*/
public interface Serialisation {
/** Récupère la valeur du champ numéro <i>index</i>.<p>
* La valeur est récupérée sous forme de chaîne de caractères.
* @param index le numéro d'ordre du champ à récupérer
* @throws SerialisationException si l'index est trop grand ou si une
* erreur d'entrée sortie se produit.
* @return  la valeur si elle est trouvée sous forme de chaîne de
* caractères.
*/
public String get(int index) throws SerialisationException;
/** Insère un nouvel enregistrement dans le fichier.
* @param values un tableau des valeurs à insérer.
* @throws SerialisationException  si une erreur d'entrée sortie se produit.
*/
public void insert(String[] values) throws SerialisationException;
}

com.developpez.kit.SerialisationException

/*
* SerialisationException.java
*
* Created on 14 mars 2003, 16:32
*/

package com.developpez.kit;

/**
*
* @author  smeric
*/
public class SerialisationException extends java.lang.RuntimeException {

/**
* Creates a new instance of <code>SerialisationException</code> without detail message.
*/
public SerialisationException() {
}

/**
* Constructs an instance of <code>SerialisationException</code> with the specified detail message.
* @param msg the detail message.
*/
public SerialisationException(String msg) {
super(msg);
}
}

com.developpez.kit.KitSerialisationCsv

/*
* KitSerialisationCsv.java
*
* Created on 14 mars 2003, 16:41
*/

package com.developpez.kit;

/**
*
* @author  smeric
*/
public class KitSerialisationCsv implements KitSerialisation {

/** Creates a new instance of KitSerialisationCsv */
public KitSerialisationCsv() {
}

public Serialisation getSerialisationInstance() {
return new SerialisatoinCsv();
}

}

com.developpez.kit.KitSerialisationXml

/*
* KitSerialisationXml.java
*
* Created on 14 mars 2003, 17:10
*/

package com.developpez.kit;

/**
*
* @author  smeric
*/
public class KitSerialisationXml implements KitSerialisation {

/** Creates a new instance of KitSerialisationXml */
public KitSerialisationXml() {
}

public Serialisation getSerialisationInstance() {
return new SerialisationXml();
}

}

com.developpez.kit.SerialisationCsv

/*
* SerialisationCsv.java
*
* Created on 14 mars 2003, 17:07
*/

package com.developpez.kit;

/**
*
* @author  smeric
*/
public class SerialisationCsv implements Serialisation {

/** Creates a new instance of SerialisationCsv */
public SerialisationCsv() {
}

/** Récupère la valeur du champ numéro <i>index</i>.<p>
* La valeur est récupérée sous forme de chaîne de caractères.
* @param index le numéro d'ordre du champ à récupérer
* @throws SerialisationException si l'index est trop grand ou si une
* erreur d'entrée sortie se produit.
* @return  la valeur si elle est trouvée sous forme de chaîne de
* caractères.
*/
public String get(int index) throws SerialisationException {
throw new SerialisationException("A implémenter");
}

/** Insère un nouvel enregistrement dans le fichier.
* @param values un tableau des valeurs à insérer.
* @throws SerialisationException  si une erreur d'entrée sortie se produit.
*/
public void insert(String[] values) throws SerialisationException {
throw new SerialisationException("A implémenter");
}

}

com.developpez.kit.SerialisationXml

/*
* SerialisationXml.java
*
* Created on 14 mars 2003, 17:07
*/

package com.developpez.kit;

/**
*
* @author  smeric
*/
public class SerialisationXml implements Serialisation {

/** Creates a new instance of SerialisationXml */
public SerialisationXml() {
}

/** Récupère la valeur du champ numéro <i>index</i>.<p>
* La valeur est récupérée sous forme de chaîne de caractères.
* @param index le numéro d'ordre du champ à récupérer
* @throws SerialisationException si l'index est trop grand ou si une
* erreur d'entrée sortie se produit.
* @return  la valeur si elle est trouvée sous forme de chaîne de
* caractères.
*/
public String get(int index) throws SerialisationException {
throw new SerialisationException("A implémenter");
}

/** Insère un nouvel enregistrement dans le fichier.
* @param values un tableau des valeurs à insérer.
* @throws SerialisationException  si une erreur d'entrée sortie se produit.
*/
public void insert(String[] values) throws SerialisationException {
throw new SerialisationException("A implémenter");
}

}