diadhuit
04-12-2006, 15:41
Ciao!
In un esame passato il docente aveva fatto questa domanda:
Si considerino le classi sotto riportate, tra le quali Controllo causa un errore in compilazione.
Apportare al codice indicato la minor quantità di modifiche in grado di permettere al metodo main()
di produrre in uscita i valori: 1 e -1 .
Vincolo: l’interfaccia Costante non deve essere modificata.
interface Costante { static int VAL = 0; }
class ClsA implements Costante {
private int k = VAL;
public void modifica() {
k++;
System.out.println (k);
}
}
class Controllo {
private Costante handle;
Controllo (Costante cls) { handle = cls; }
void go() { handle.modifica(); }
}
class ClsB implements Costante {
private int k = VAL;
public void modifica() {
k--;
System.out.println (k);
}
}
public class Callback {
public static void main (String[] args) {
ClsA clsA = new ClsA();
ClsB clsB = new ClsB();
Controllo ctr1 = new Controllo (clsA);
ctr1.go();
Controllo ctr2 = new Controllo (clsB);
ctr2.go();
}
}
Ora, io sto provando a dare una risposta, ma l'unica che riesco a trovare è modificare la classe controllo nel modo seguente:
class Controllo {
private ClsA handleA;
private ClsB handleB;
Controllo (ClsA cls) {
handleA=cls;
}
Controllo (ClsB cls) {
handleB=cls;
}
void go() {
if (handleA!=null){
handleA.modifica();
}else if (handleB!=null){
handleB.modifica();
}
}
}
Ma mi sembra un po' macchinosa. Sto forse tralasciando qualcosa?
Se non ci fosse il vincolo imposto, potrei inserire un semplice metodo astratto modifica() senza modificare nient'altro?
Grazie mille!
In un esame passato il docente aveva fatto questa domanda:
Si considerino le classi sotto riportate, tra le quali Controllo causa un errore in compilazione.
Apportare al codice indicato la minor quantità di modifiche in grado di permettere al metodo main()
di produrre in uscita i valori: 1 e -1 .
Vincolo: l’interfaccia Costante non deve essere modificata.
interface Costante { static int VAL = 0; }
class ClsA implements Costante {
private int k = VAL;
public void modifica() {
k++;
System.out.println (k);
}
}
class Controllo {
private Costante handle;
Controllo (Costante cls) { handle = cls; }
void go() { handle.modifica(); }
}
class ClsB implements Costante {
private int k = VAL;
public void modifica() {
k--;
System.out.println (k);
}
}
public class Callback {
public static void main (String[] args) {
ClsA clsA = new ClsA();
ClsB clsB = new ClsB();
Controllo ctr1 = new Controllo (clsA);
ctr1.go();
Controllo ctr2 = new Controllo (clsB);
ctr2.go();
}
}
Ora, io sto provando a dare una risposta, ma l'unica che riesco a trovare è modificare la classe controllo nel modo seguente:
class Controllo {
private ClsA handleA;
private ClsB handleB;
Controllo (ClsA cls) {
handleA=cls;
}
Controllo (ClsB cls) {
handleB=cls;
}
void go() {
if (handleA!=null){
handleA.modifica();
}else if (handleB!=null){
handleB.modifica();
}
}
}
Ma mi sembra un po' macchinosa. Sto forse tralasciando qualcosa?
Se non ci fosse il vincolo imposto, potrei inserire un semplice metodo astratto modifica() senza modificare nient'altro?
Grazie mille!