Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371

    metodo che invoca un altro metodo

    Sto imparando a programmare ad oggetti ma ho un piccolo dubbio

    Un esercizio mi chiede di creare un classe Porta ed un classe Attore, una implementazione semplificate della classe Porta potrebbe essere la seguente:

    public class Porta{
    private boolean open=false;

    public void apri()
    {
    open=true;
    }
    }


    ora dato che un Attore può aprire una porta è consigliabile inserire un metodo apri() anche nella classe Attore implementandolo cosi:

    public void apri(Porta p)
    {
    p.apri();
    }


    o è sbagliato questo modo di procedere?

    spero in una vostra risposta in quanto non trovo nessuno che possa sciogliermi questi dubbi...

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Non vedo perchè dovrebbe essere scorretto...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    ho letto non ricordo dove che un metodo in teoria dovrebbe modificare lo stato interno del richiamante, mentre in questo caso il metodo apri() se applicato all'attore richiama un altro metodo che modifica lo stato interno della porta senza modificare nulla nell'attore

    non so se è corretta però questa cosa che ho appena scritto, sinceramente sono ancora un principiante

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    L'attore aprirà la porta pr utilizzarla in un qualche modo, quindi sarebbe corretto che contenesse un oggetto porta al suo interno e richiammasse i metodi su questa istanza di porta, ciò non toglie che il tuo codice fosse formalmente corretto...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da davidinho
    ho letto non ricordo dove che un metodo in teoria dovrebbe modificare lo stato interno del richiamante, mentre in questo caso il metodo apri() se applicato all'attore richiama un altro metodo che modifica lo stato interno della porta senza modificare nulla nell'attore

    non so se è corretta però questa cosa che ho appena scritto, sinceramente sono ancora un principiante
    La frase in grassetto non ha alcun senso, inoltre non sarebbe nemmeno sempre realizzabile nella pratica.
    Se invochi Math.random(), come fa il metodo random a modificarti? E soprattutto, perché dovrebbe farlo?

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Math.random() è un caso diverso, si tratta di un metodo di classe e non di istanza, inoltre molto probabilmente modifica uno stato che gli permette di generare numeri pseudocasuali...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    solitamente in casi come questo come si procede? si va ad inserire il metodo anche nella classe Attore?
    chiedo perché a questo punto se entrambe le vie sono corrette tento di seguire il modo "più classico" di procedere

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Scara95
    Math.random() è un caso diverso, si tratta di un metodo di classe e non di istanza, inoltre molto probabilmente modifica uno stato che gli permette di generare numeri pseudocasuali...
    Che il metodo sia di classe o d'istanza in questo caso non cambia assolutamente nulla, sarebbe la stessa cose prendere in esempio il metodo d'istanza nextInt() della classe Random.
    E' ovvio che il metodo Math.random(), come tutti gli altri metodi che devono generare numeri pseudo-casuali (basati su funzioni che elaborano i dati generati precedentemente, e non del tipo "guardo l'ora e prendo i millisecondi") modifichi lo stato interno, ma ciò che viene modificato è lo stato dell'oggetto chiamato, non di quello chiamante come ha detto l'utente poco sopra, ovvero dell'oggetto che possiede quel metodo.

    Fra l'altro, i metodi di classe potrebbero essere benissimo considerati (e implementati) come metodi d'istanza chiamati sempre sullo stesso oggetto.

  9. #9
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Resta comunque concettualmente differente il concetto di chiamata a metodo di classe e d'istanza e in ogni caso il codice proposto dall'utente sarebbe perfettamente logico se l'oggetto attore usasse la porta per esempio copiandone la referenza in un membro della classe e sfruttandola nei suoi metodi...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Scara95
    Resta comunque concettualmente differente il concetto di chiamata a metodo di classe e d'istanza e in ogni caso il codice proposto dall'utente sarebbe perfettamente logico se l'oggetto attore usasse la porta per esempio copiandone la referenza in un membro della classe e sfruttandola nei suoi metodi...
    Non ho mai detto che sono la stessa cosa, e non mi sono espresso sullo specifico programma perché non l'ho seguito.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.