Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Parametri poliformi?
Forum - Java - Parametri poliformi?

Avatar
crashoverride (Normal User)
Pro


Messaggi: 152
Iscritto: 09/07/2010

Segnala al moderatore
Postato alle 17:04
Giovedì, 28/10/2010
Ciao ragazzi, spero in un vostro aiuto... Sto studiando Java, c'era un paragrafo su i parametri poliformi ma non li ho capiti chi me li puoi spiegare semplicemente??
Grazie milleeee!

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
2
Down
V
Segnala al moderatore
Postato alle 19:11
Giovedì, 28/10/2010
In pratica dice che il parametro che passi a un metodo puo puntare alla classe specificata nella dichiarazione del metodo oppure a una sottoclasse della classe specificata.
Sai che tutte le classi derivano dalla classe Object quindi (citando l'esempio del tuo manuale) al metodo printl() che prende in input un oggetto della classe Object puoi passare qualunque oggetto di qualsiasi classe dal momento che derivano appunto dalla classe Object.

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 18:24
Giovedì, 28/10/2010
Io non conosco java nel dettaglio, ma cercando su google non c'è alcun riferimento a parametri poliformi. Forse ti riferisci a membri polimorfici?

PM
Avatar
crashoverride (Normal User)
Pro


Messaggi: 152
Iscritto: 09/07/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:37
Giovedì, 28/10/2010
No, sul libro c'è scritto propio Parametri Poliformi, ho cercato anche io su google ma non c'è niente :(

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 18:49
Giovedì, 28/10/2010
E cosa dice il libro di questi?

PM
Avatar
crashoverride (Normal User)
Pro


Messaggi: 152
Iscritto: 09/07/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 19:04
Giovedì, 28/10/2010
Sappiamo che i parametri in Java sono sempre passati per valore. Ciò implica che passare un parametro di tipo reference ad un metodo significa passare il valore numerico del reference, in altre parole il suo indirizzo. A quest’indirizzo potrebbe risiedere un oggetto istanziato da una sottoclasse, grazie al polimorfismo per dati. In un metodo, un parametro di tipo reference si dice parametro polimorfo quando, anche essendo di fatto un reference relativo ad una determinata classe, può puntare ad un oggetto istanziato da una sottoclasse. In pratica, sfruttando il polimorfismo per dati, un parametro di un metodo potrebbe in realtà puntare ad oggetti diversi.
È il caso del metodo println() che prende un parametro di tipo Object.
Il lettore ha già appreso precedentemente che tutte le classi (compresa la classe Punto) sono sottoclassi di Object. Quindi potremmo chiamare il metodo println() passandogli come parametro, anziché un’istanza di Object, un’istanza di Punto come p1. Ma a questo tipo di metodo possiamo passare un’istanza di qualsiasi classe, dal momento che vale il polimorfismo per dati ed ogni classe è sottoclasse di Object.

Ecco! :D
Non ho capito molto... :(

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 23:32
Giovedì, 28/10/2010
Questa caratteristica dei linguaggi ad oggetti si chiama covarianza. Il suo opposto è la controvarianza, ossia passare tipi meno derivati al posto di parametri più derivati.

P.S.: era polimorfici, non poliformi :_doubt:

PM
Avatar
marcouio (Ex-Member)
Newbie


Messaggi: 15
Iscritto: 29/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 20:58
Venerdì, 29/10/2010
Ti faccio un esempio: ipotizziamo tu stia creando un metodo che assegna una targa ad un'automobile. Ovviamente un parametro potrebbe essere proprio la macchina a cui assegnare la stringa "targa". Se tu impostassi nel metodo la richiesta di un parametro di tipo "AutoSportiva" probabilmente nel caso in cui dovresti assegnare la targa ad un oggetto "AutoUtilitaria" il metodo non l'accetterebbe. Invece se nella firma del metodo inserissi un parametro del tipo "Auto" usata per estendere tutte e due le classi precedentemente nominate allora potresti passare o l'uno o l'altro tipo indifferentemente nell'implementazione del metodo.


PM