Fabrique objet avec nbr parametre variable

Résolu
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014 - 4 avril 2014 à 21:38
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014 - 5 avril 2014 à 22:22
Bonjour à tous,

Je souhaite un petit coup de main si vous avez 5 min...je vous en re-merci !

je vous explique, j'ai une fabrique d'objet qui contient

un objet abstract avec les attribut :
atrib1, attrib2, attrib3

puis des objet concret qui on pour attribut :

objet concret1 :
super(atrib1, attrib2, attrib3)
attrib4
attrib5

objet concret2 :
super(atrib1, attrib2, attrib3)
attrib7
attrib6

puis dans un main()

je fait un objet = monterObjet(Enum.objetConcret1, attrib1, attrib2, attrib3)

mais comment je fait pour passer les attribut 4&5 ou 6&7
je vais pas créer autant de méthode que de possibilité... c'est pas très dynamique non ?


voila donc soit j'y suis pas du tout soit je ne vois pas la solution qui est devant moi.

Merci pour votre aide je retourne a mon casse tête
Bonne soirée a tous

5 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
4 avril 2014 à 23:24
Bonsoir,

Lorsque tu parles de "fabrique" tu parles du design pattern Factory ou ça n'a rien à voir ?

"un objet abstract"
Ceci n'a pas de sens, une classe ou une méthode peuvent être abstraites, mais jamais un objet !

"je vais pas créer autant de méthode que de possibilité..."
Parfois on n'a pas le choix, même si dans ton cas tu pourrais avoir une seule méthode comme ceci :

Object monterObjet(Enum type, Object[] param)
2
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
Modifié par KX le 5/04/2014 à 14:04
Ce code n'est pas valide, on ne mets jamais de boucle for à l'intérieur des parenthèses d'une méthode...

Object x = objectConcret1( 
   for(Object o : param) 
       (?)Object x = o; 
);

Le plus simple est sûrement d'avoir une Factory très souple et déléguer aux constructeurs la charge de se débrouiller avec les paramètres.

public final class Fabrique
{
    public static Abstraite monterObjet(Enum type, Object...param)
    {
        switch (type)
        {
            case objetConcret1 : return new Concret1(param);
            case objetConcret2 : return new Concret2(param);
            default : return null;
        } 
    }
}

public abstract class Abstraite
{
    public Abstraite(Object attrib1, Object attrib2, Object attrib3)
    {
        this.attrib1 = (String) attrib1;
        this.attrib2 = (Integer) attrib2;
        this.attrib3 = (Double) attrib3;
    }
}

public class Concret1 extends Abstraite
{
    public Concret1(Object attrib1, Object attrib2, Object attrib3, Object attrib4, Object attrib5)
    {
        super(attrib1, attrib2, attrib3);
        this.attrib4 = (Long) attrib4;
        this.attrib5 = (String) attrib5;
    }

    public Concret1(Object[] param)
    {
        this(param[0], param[1], param[2], param[3], param[4]);
    }
}

public class Concret2 extends Abstraite
{
    public Concret2(Object attrib1, Object attrib2, Object attrib3, Object attrib6, Object attrib7)
    {
        super(attrib1, attrib2, attrib3);
        this.attrib6 = (Byte) attrib6;
        this.attrib7 = (Short) attrib7;
    }

    public Concret1(Object[] param)
    {
        this(param[0], param[1], param[2], param[3], param[4]);
    }
}
1
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014
Modifié par seichan94 le 4/04/2014 à 23:39
Bonsoir KX

oui je parle bien de pattern factory, pardon je me suis tres mal exprime
Et donc je parle bien d une classe abtract d un type d objet general qui prend en compte une partie des attributs

Alors tu me dit qur je peut faire passer un tableu de param ou encore Object... o d apres ce que j ai trouvé, mais est-il possible de faire cela et si non que faire ? :

Je récupère donc le tableau de parametre et je fait :
Object x = new objectConcret1(
for(Object o : param)
(?)Object x = o;
);

En gros derouler le tableau de param dans mon instance
Peut etre avec un 2eme tableau qui contient le type pour chaque param pour faire un cast

Merci beaucoup pour ton intervention
0
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014
5 avril 2014 à 00:07
Ah ok !
Je comprend mieux avec ton exemple c est top !
Je test cela demain il ce fait tard je te dit si j ai réussi demain et je clôture le poste en conséquence...

Merci beaucoup je vais mieux dormir >_<#

Bonne nuit
Sei
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014
5 avril 2014 à 22:22
Bonsoir KX

Merci pour ton aide c est parfait, comme d'habitude !
Je cloture
0
Rejoignez-nous