Esercizio Esame Classe Astratte

di il
18 risposte

18 Risposte - Pagina 2

  • Re: Esercizio Esame Classe Astratte

    Ciccio92 ha scritto:


    CarDeFusco ha scritto:


    Ciccio92 ha scritto:




    Il fatto è che nel compito non c'è scritto che devono essere abstract i metodi x() e y() , di solito il professore scrive tutto.
    Se non fossero abstract , come potrei implementarli?
    Non avendo variabili d'istanza non so come fare.. =S
    Se non vuoi implementarli nella classe astratta non puoi non dichiararli abstract. Se invece vuoi implementarli e poi fare @Override nella classe che eredita puoi anche farlo. La regola però è sempre quella, se non li implementi ci metti abstract, se li implementi non ci metti abstract e li reimplementi nella classe che eredita da AbstractCoordinata ovvero CoordinataXY.

    sisi questo l'ho capito , ma come faccio a implementarli non avendo nessuna variabile d'istanza
    Spiegati bene. Tu cosa intendi per variabili di istanza? Il fatto che AbstractCoordinata non ha due variabili double x e y? Comunque nessuno vieta di definirli all'interno. Inoltre ti ripeto per l'ennesima volta che a prescindere dal tuo Prof che non l'ha scritto, se vuoi fare una cosa coerente e pulita a livello di codice ti basta dichiarare quei due metodi come abstract, anche se come suggerisce andbin non c'è nemmeno bisogno che li dichiari di nuovo anche in AbstractCoordinata, perché dato che stai ereditando l'interfaccia erediti anche la definizione dei metodi, i quali essendo parte di un'interfaccia sono per definizione sia public che abstract. Penso che ti abbiamo dato tutti gli elementi necessari ed ora non dovrebbe essere tanto difficile completare il problema sottoposto.
  • Re: Esercizio Esame Classe Astratte

    Ciccio92 ha scritto:


    Sisi l'ho letta , solo che sul file del compito non c'è scritto che x e y devono essere abstract quindi non so come implementarli
    Ascolta: quando tu hai definito la interfaccia
    public interface ICoordinata {
        public double x();
        public double y();
    }
    questi due metodi sono astratti. Nelle interfacce i metodi sono sempre implicitamente public E abstract. Se vuoi puoi esplicitare queste due parole chiave in qualunque combinazione/ordine ma comunque i metodi sono astratti e pubblici.

    Quando hai definito AbstractCoordinata astratta, ti ho detto prima che NON devi implementare x()/y(), non li dovresti proprio scrivere, neanche solo per ribadire il fatto che sono astratti. Lo sono già! Tra l'altro è anche abbastanza chiaro dal testo che hai postato: al punto 2.2 non ti dice di scriverli in AbstractCoordinata e oltretutto dice pure che non ci possono essere variabili di istanza. Non avendo uno "storage" per tenere dei valori, non sapresti appunto nemmeno cosa far restituire.

    Ora, il fatto che in AbstractCoordinata x() e y() siano ancora astratti NON ti deve far pensare che sia sbagliato o che non puoi "chiamarli". I metodi ci saranno in un oggetto istanziato poiché dovrai per forza fare poi una sottoclasse concreta che li implementa in modo valido. E infatti in CoordinataXY il testo ti dice che devi mettere le variabili di istanza. Lì dovrai implementare anche x() e y() (chiaramente per accedere ai campi).

    Come dicevo prima, in "distanza" e "somma" puoi tranquillamente ragionare sul concetto da implementare senza sapere DOVE saranno implementati i metodi. distanza/somma ricevono un ICoordinata. A runtime riceverai un oggetto che sicuramente ha x()/y() concreti. Idem per il "this", su cui puoi chiamare x()/y(), in quanto l'oggetto avrà sicuramente questi implementati.

    E ripeto cosa dicevo prima: quando istanzierai oggetti di tipo CoordinataXY, se su questi invocherai distanza/somma (di AbstractCoordinata), questi metodi useranno i x() e y() che sono implementati appunto nell'oggetto istanziato cioè in CoordinataXY.
  • Re: Esercizio Esame Classe Astratte

    andbin ha scritto:


    Ciccio92 ha scritto:


    Sisi l'ho letta , solo che sul file del compito non c'è scritto che x e y devono essere abstract quindi non so come implementarli
    Ascolta: quando tu hai definito la interfaccia
    public interface ICoordinata {
        public double x();
        public double y();
    }
    questi due metodi sono astratti. Nelle interfacce i metodi sono sempre implicitamente public E abstract. Se vuoi puoi esplicitare queste due parole chiave in qualunque combinazione/ordine ma comunque i metodi sono astratti e pubblici.

    Quando hai definito AbstractCoordinata astratta, ti ho detto prima che NON devi implementare x()/y(), non li dovresti proprio scrivere, neanche solo per ribadire il fatto che sono astratti. Lo sono già! Tra l'altro è anche abbastanza chiaro dal testo che hai postato: al punto 2.2 non ti dice di scriverli in AbstractCoordinata e oltretutto dice pure che non ci possono essere variabili di istanza. Non avendo uno "storage" per tenere dei valori, non sapresti appunto nemmeno cosa far restituire.

    Ora, il fatto che in AbstractCoordinata x() e y() siano ancora astratti NON ti deve far pensare che sia sbagliato o che non puoi "chiamarli". I metodi ci saranno in un oggetto istanziato poiché dovrai per forza fare poi una sottoclasse concreta che li implementa in modo valido. E infatti in CoordinataXY il testo ti dice che devi mettere le variabili di istanza. Lì dovrai implementare anche x() e y() (chiaramente per accedere ai campi).

    Come dicevo prima, in "distanza" e "somma" puoi tranquillamente ragionare sul concetto da implementare senza sapere DOVE saranno implementati i metodi. distanza/somma ricevono un ICoordinata. A runtime riceverai un oggetto che sicuramente ha x()/y() concreti. Idem per il "this", su cui puoi chiamare x()/y(), in quanto l'oggetto avrà sicuramente questi implementati.

    E ripeto cosa dicevo prima: quando istanzierai oggetti di tipo CoordinataXY, se su questi invocherai distanza/somma (di AbstractCoordinata), questi metodi useranno i x() e y() che sono implementati appunto nell'oggetto istanziato cioè in CoordinataXY.

    CarDeFusco ha scritto:


    Ciccio92 ha scritto:


    CarDeFusco ha scritto:



    Se non vuoi implementarli nella classe astratta non puoi non dichiararli abstract. Se invece vuoi implementarli e poi fare @Override nella classe che eredita puoi anche farlo. La regola però è sempre quella, se non li implementi ci metti abstract, se li implementi non ci metti abstract e li reimplementi nella classe che eredita da AbstractCoordinata ovvero CoordinataXY.

    sisi questo l'ho capito , ma come faccio a implementarli non avendo nessuna variabile d'istanza
    Spiegati bene. Tu cosa intendi per variabili di istanza? Il fatto che AbstractCoordinata non ha due variabili double x e y? Comunque nessuno vieta di definirli all'interno. Inoltre ti ripeto per l'ennesima volta che a prescindere dal tuo Prof che non l'ha scritto, se vuoi fare una cosa coerente e pulita a livello di codice ti basta dichiarare quei due metodi come abstract, anche se come suggerisce andbin non c'è nemmeno bisogno che li dichiari di nuovo anche in AbstractCoordinata, perché dato che stai ereditando l'interfaccia erediti anche la definizione dei metodi, i quali essendo parte di un'interfaccia sono per definizione sia public che abstract. Penso che ti abbiamo dato tutti gli elementi necessari ed ora non dovrebbe essere tanto difficile completare il problema sottoposto.


    Grazie mille a tutti e due , ora il programma gira che una meraviglia !!
  • Re: Esercizio Esame Classe Astratte

    Ciccio92 ha scritto:





    Grazie mille a tutti e due , ora il programma gira che una meraviglia !!

    Perfetto aggiungi [Risolto] nel nome del thread.
Devi accedere o registrarti per scrivere nel forum
18 risposte