Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: nairi on 07-04-2010, 19:01:10



Title: segnalazione errore
Post by: nairi on 07-04-2010, 19:01:10
durante la mia esercitazione alla prima prova d'esame mi sono inbattuta in questa affermazione:
L'overriding in Java è una tecnica che permette il polimorfismo                                                 

L'overloading in Java è una tecnica che permette il polimorfismo

vorrei sapere se c'è un errore nelle domande in quanto entrambe risultano vere nella valutazione!
merciiiii...


Title: Re:segnalazione errore
Post by: Simone Faro on 07-04-2010, 20:22:17
Cara nairi,
in Java il polimorfismo è permesso sia dall'overloading che dall'overriding.
In particolare l'overloading permette di definire funzioni aventi lo stesso nome ma firme diverse (il metodo è lo stesso ma ha diverse forme).
L'overriding permette di sovrascrivere un metodo quando si definisce una classe attraversol'ereditarietà. Esistono quindi due metodi con il medesimo nome ma hanno corpi diversi (il prima appartiene alla classe madre, il secondo alla sottoclasse).
Per ulteriori dettagli la invito a consultare il paragrafo 2.2.2 del libro di testo.


Title: Re:segnalazione errore
Post by: nairi on 07-04-2010, 22:42:31
=D   grazie mille per la risposta! consulterò il libro per fissare meglio  i concetti ...!


Title: Re:segnalazione errore
Post by: gaernik on 08-04-2010, 09:12:28
a proposito di errore:

Quote
Un metodo definito come abstract non contiene alcun blocco di istruzioni
il simulatore la da come vera, ma in realtà un metodo abstract può contenere\contiene un blocco di istruzioni VUOTO...
credo sia differente, no?
Grazie per le delucidazioni  :pray


Title: Re:segnalazione errore
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 08-04-2010, 12:55:15
a proposito di errore:

Quote
Un metodo definito come abstract non contiene alcun blocco di istruzioni
il simulatore la da come vera, ma in realtà un metodo abstract può contenere\contiene un blocco di istruzioni VUOTO...
credo sia differente, no?
Grazie per le delucidazioni  :pray
Un metodo "abstract" non può contenere alcun blocco di istruzioni. Un blocco è racchiuso sempre in una coppia di parentesi graffe .sisi.

Prova a compilare questo file astrattA.java (http://galileo.dmi.unict.it/utenti/reversengineer/pub/forum/attachments/2010-04-10/astrattA.java):
Code:
public abstract class astrattA
{
    public abstract void metodoAstratto ()
    {
    }
}
Riceverai questo errore:

astrattA.java:3: abstract methods cannot have a body
    public abstract void metodoAstratto ()
                         ^
1 error


Title: Re:segnalazione errore
Post by: gaernik on 09-04-2010, 12:05:26
ok, my bad  .arrossisco


Title: Re:segnalazione errore
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 09-04-2010, 12:26:23
ok, my bad  .arrossisco
Potresti aver visto qualcosa di arcano .penso, perché tu abbia sollevato la precedente osservazione.
Provando a immaginare, posso capire che ci sono dei costrutti non banali che potrebbero lasciarti nel dubbio.

Praticamente si considerino questi due codici simili:
Code:
public abstract class astrattA
{
    public abstract void metodoAstratto ();
}

Code:
public abstract class astrattA
{
    public abstract void metodoAstratto ();
    {
    }
}
Entrambi vengono compilati correttamente, ma il secondo ha una coppia di parentesi graffe (codice) senza codice dentro.

In questo caso, le due classi sono diverse (e anche il byte code è diverso, provare a compilare per credere :-OK), e si ha che nella seconda versione, c'è semplicemente il blocco codice inizializzatore anonimo.

Sostanzialmente in una classe (anche astratta) è possibile inserire un blocco di codice "anonimo" (cioè che non fa parte di alcuna funzione esplicitamente nominata), che se vogliamo vederlo in modo più chiaro possiamo esprimere così:
Code:
public abstract class astrattA
{
    {
        //blocco codice anonimo
    }
}
Questo codice verrà eseguito quando verrà istanziato un oggetto di classe (figlia o discendente della classe) astrattA, prima di tutti gli altri eventuali costruttori.

Se però questo codice venisse posto appena dopo il prototipo di un metodo astratto, potremmo non accorgerci subito del punto e virgola che termina il prototipo e tutta la descrizione astratta del metodo e male intendere tale codice come parte del metodo astratto .sisi.
 |-O


Title: Re:segnalazione errore
Post by: peppe89ct on 14-04-2010, 12:47:43
sei un grande reverseenginer  hai aiutato gaernik(spiegandogli) lo stesso anche quando già lui penso aveva capito!!!!
sinceramente ti dico che se sul forum saremmo tutti come te ci prenderemo la laurea prima !!!!
grazie a nome di quelli meno bravi!!!!


Title: Re:segnalazione errore
Post by: Aigor on 14-04-2010, 12:54:36
sinceramente ti dico che se sul forum saremmo tutti come te ci prenderemo la laurea prima !!!!

 .huh .huh .huh .huh .huh .huh .huh
Sicuramente con questa frase non prendi nemmeno il diploma in italiano !!