02/12/12 20:05
Il Totem
Hai bisogno di una abstract factory.
aaa
04/12/12 17:21
ale.gatti96
Ho letto un po' su internet, ma non mi è chiara una cosa:
Per la Factory non ho problemi:
public class Factory{
public A make(String s){
if(CONDIZIONE-per-A1)
//return A1
else if(CONDIZIONE-per-A2)
//return A2
[...]
else
//return A5
}
[...]//Altri metodi
}
Altre classi:
public class A1 extends A{
public void metodoCambiaA2(){[...]}
public void metodoCambiaA4(){[...]}
[...]//Altri metodi
}
public class A2 extends A{
public void metodoCambiaA1(){[...]}
[...]//Altri metodi
}
Poi in un altro metodo: (ad esempio in un metodo della classe B, o anche in un metodo di una classe A):
public class B{
public void metodo(){
A x,y;
x=Factory.make("a1"); //x ora è A1
y=Factory.make("a2"); //y ora è A2
[...]
x.metodoCambiaA2(); //x(A1) diventa A2
x.metodoCambiaA4(); //x(A2) diventa A4
y.metodoCambiaA1(); //y(A2) diventa A1
[...]
}
[...]//Altri metodi
}
Non ho capito che cosa devo mettere in metodoCambiaA1[2,3,4,5...]() per far si che x cambi la classe.
Me lo potresti spiegare? Grazie.
Ultima modifica effettuata da ale.gatti96 04/12/12 17:32
aaa
08/01/13 8:49
Remos
Uhmmmm....ncs (non ci siamo), mi sa' che c'hai un po' di confusione in testa, oppure, me l'hai fatta venire a me...heheheh
Messo così, senza l'uso della Factory pare che tu non abbia ben compreso polimorfismo ed ereditarietà.
Con la factory, invece, mi sembra che tu ne stia facendo un uso improprio e, per altro, solo parzialmente corretto.
Alla fine, infatti, quando i nodi vengono al pettine ti sei giustamente chiesto: "cosa ci dovrei mettere nel metodoCambiaX?".
La risposta è che non ci puoi mettere nulla perchè, ad esempio, metodoCambiaA1 dell'oggetto A2 (pur essendo una sottoclasse di A) non sa' (e NON DEVE sapere!) dell'esistenza delle classi A1 e A2. Quindi: Come fai ad istanziarle?
Se vuoi cambiare il "comportamento" dell'oggetto non ha molto senso creare un oggetto con un tipo per poi cambiarlo subito dopo. Avrebbe più senso affidarsi al polimorfismo ed utilizzare uno strategy pattern che penso sia ciò che serve a te. Cioè un oggetto strategy che "ritorni" al client una variabile polimorfica. Una variabile che, in base a certe scelte, possa comportarsi come un oggetto di una una qualunque delle classi A1, A2, ecc. sottoclassi della classe A.
Non sarebbe male cmq se postassi il motivo concreto che ti ha spinto a trovare una soluzione di questo tipo, cioè cosa devi ottenere in realtà.
aaa
12/01/13 17:12
ale.gatti96
Avevo deciso di fare questo programma in java perché così dopo aver fatto la versione desktop, avrei potuto facilmente portarla su android (dove non ho mai lavorato) così da avere il cuore dell'app già funzionante e potermi dedicare all'interfaccia grafica.
Grazie dei consigli, studierò i generics.
aaa