none
Programmation(Construction) fonctionnelle? RRS feed

  • Question

  • Voilà je voulais créer des constructeurs comparables à XElement, c'est à dire avoir des constructeurs fonctionnels mais avec certaines contraintes :

    Voilà le schéma conceptuel de mes classes :

    public abstract class AbsElement : INotifyPropertyChanged,ICloneable { //code }

    public abstract class AbsComplexe : AbsElement { //code }

    public abstract class AbsContainer : AbsComplexe { //code }

    public abstract class AbsEntity : AbsComplexe { //code }

    public class Element : AbsElement { //code }

    public class Segment: AbsEntity { //code }

    public class Composite : AbsEntity { //code }

    public class Groupe : AbsContainer{ //code }

    public class Flux : AbsContainer { //code }

    Voilà le schéma qui représente mes classes et leurs compositions :

    Segment (Composite, Element) // L'objet Segment ne peut contenir que des objets Element et des objets Composite

    Composite (Element) //L'objet Composite ne peut contenir que des objets Elment

    Groupe(Groupe,Segment) //L'objet Groupe ne peut contenir que des objets Groupe ou objets Segment

    Flux(Groupe,Segment) //L'objet Flux ne peut contenir que des objets Groupe et Segment

    Je cherche à créer un constructeur qui va me permettre d'avoir de la construction fonctionnelle :

    EXEMPLE :

    Composite (string name, params Element[] content) { ... } //ça marche très bien, dès la compilation les content  sont vérifiés .

    Mais pour Flux, Segment ou Groupe :

    Exemple Flux :

    Flux(string name ,params NEWOBJECT [] content) { ... } //NEWOBJECT doit respecter les contraintes de composition de l'objet conteneur.

     

    Ma solution jusque là est d'avoir deux interfaces formelles (juste pour les besoins de référence)

    public interface I1{ // pas de code} // Faire en sorte que Composite et Element implémentent I1

    public interface I2{ // pas de code} // Faire en sorte que Groupe et Segment implémentent I2

    Et donc le résultat :

    Flux (string name, params I2 [] content){} // Ça marche très bien

    Groupe (string name, params I2 [] content){} // Ça marche très bien

    Segment (string name, params I1 [] content){} // Ça marche très bien

     

    Quelqu'un peut me suggérer une autre solution ou critiquer la mienne (Inconvénients et avantages) ?

     

    Merci, Très cordialement

     

     

     

     

    jeudi 1 juillet 2010 13:06

Réponses