PDA

View Full Version : Help per Java! una mano pls! :)


Jim81
10-09-2003, 14:44
Mi sapreste descrivere cosa sono il side effect e il polimorfismo in Java magari con un esempio in codice ? Ve ne sarei davvero grato!;)

recoil
10-09-2003, 14:59
il polimorfismo è un concetto legato alla programmazione a oggetti e in particolare all'ereditarietà delle classi.

cmq esistono due tipi di polimorfismo che io definirei statico e dinamico.
il polimorfismo statico è l'overloading delle funzioni (c'è anche in altri linguaggi) ovvero la possibilità di avere più funzioni con lo stesso nome ma con parametri differenti. il compilatore, in base ai parametri, sceglie quale funzione viene eseguita.
il polimorfismo dinamico riguarda invece le classi (penso sia quello che intendi tu) e si verifica quando una sottoclasse contiene un metodo del tutto identico (come nome e parametri) a quello della superclasse.
in questo caso è in fase di esecuzione che viene scelto il metodo da invocare in base all'oggetto a cui appartiene.

se ad esempio hai una classe veicoli e una sottoclasse automobile e in automobili hai il metodo viaggia() così come in veicoli è in fase di esecuzione che l'ambiente dovrà scegliere quale dei due metodi eseguire su un determinato oggetto. la scelta avviene a seconda della classe istanziata dall'oggetto. se ad esempio a trabicolo assegni un oggetto di tipo automobili allora eseguirai il metodo di quella classe, se successivamente a trabicolo assegnerai un oggetto veicoli allora l'invocazione di viaggia() riguarderà il metodo definito in veicoli.

spero di essere stato chiaro ma ho paura di no...

cn73
10-09-2003, 15:19
se ad esempio hai una classe veicoli e una sottoclasse automobile e in automobili hai il metodo viaggia() così come in veicoli è in fase di esecuzione che l'ambiente dovrà scegliere quale dei due metodi eseguire su un determinato oggetto. la scelta avviene a seconda della classe istanziata dall'oggetto. se ad esempio a trabicolo assegni un oggetto di tipo automobili allora eseguirai il metodo di quella classe, se successivamente a trabicolo assegnerai un oggetto veicoli allora l'invocazione di viaggia() riguarderà il metodo definito in veicoli.

class Veicolo {

public Veicolo(){}

void viaggia(){
System.out.println("Il Veicolo viaggia!");
}

public static void main(String[] args){
Veicolo trabiccolo = new Veicolo();
Automobile trabiccolo2 = new Automobile();
Veicolo trabiccolo3 = new Automobile();

System.out.println("----------------");
trabiccolo.viaggia();
//((Automobile)trabiccolo).viaggia(); questa NON è possibile! Si ha un ClassCastException a runtime

System.out.println("----------------");
trabiccolo2.viaggia();
((Veicolo)trabiccolo2).viaggia();

System.out.println("----------------");
trabiccolo3.viaggia();
((Veicolo)trabiccolo3).viaggia();
((Automobile)trabiccolo3).viaggia();


}

class Automobile extends Veicolo{

public Automobile(){}

void viaggia(){
System.out.println("L'Automobile viaggia!");
}

}



L'output del programma è:
----------------
Il Veicolo viaggia!
----------------
L'Automobile viaggia!
L'Automobile viaggia!
----------------
L'Automobile viaggia!
L'Automobile viaggia!
L'Automobile viaggia!

Jim81
10-09-2003, 15:24
Ragazzi..penso di aver capito...comunque se non erro la differenza tra Polimorfismo e overloading riesiede proprio nel late e early binding...giusto ?