Visualizzazione dei risultati da 1 a 4 su 4

Discussione: oggetti Java

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    oggetti Java

    ciao a tutti, ho questa idea sulla programmazione ad oggetti in java, che non sonoriuscito a realizzare. Ve la illustro: prendiamo 2 o più oggetti creati dalla stessa classe...posso pensare con un metodo di classe di scambiare i valori delle variabili interne?

    esempio..dal main richiamo qualcosa del tipo:

    oggetto1.scambiaColore(oggetto5);

    Ditemi cosa ne pensate..
    Saluti
    Luca

  2. #2
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Beh io creerei dei metodi di tipo public per fare una cosa del genere:
    codice:
     
    oggetto1.scambiaColore(oggetto2.getColore);
    Certo si può fare anche come dici tu.
    Non vedo dove sia il problema, basta definire metodi appositi, ad esempio, facendo come vuoi tu nella classe devi definire un metodo:
    codice:
    //All'interno della classe Oggetto
    //....
    private String colore
    //.....
    
    public String getColore(){return colore;}
    
    public void scambiaColore(oggetto ogg){
     colore = ogg.getColore();
    
    //.....
    }
    Beh, non so se sono stato chiaro.
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Forse non sono riuscito a capire a fondo la tua idea, se invece l'ho capita credo che sia una cosa piuttosto inutile.

    Tu vorresti, tramite un metodo di classe (anche se, a prima vista, dall'esempio che hai riportato si tratterebbe di un metodo d'istanza), far sì che un oggetto 'a' della classe A prenda i valori delle variabili interne di un oggetto 'b' della classe A e viceversa. Cioè creare uno swap di oggetti, tramite lo swap delle loro proprietà.

    Si potrebbe fare, ma sarebbe la stessa operazione che si farebbe con una successione di passi alternativi, non avendo a disposizione il metodo. Perchè? Per il semplice fatto che un oggetto (nel modo classico di vedere gli oggetti) non ti dà accesso alle proprietà interne se non attraverso i suoi metodi. Questo significa che all'interno del metodo richiamato avrai un oggetto della stessa classe al quale, però, non puoi "rubare i segreti" nascosti al suo interno, se non attraverso i metodi da esso messi a disposizione. Questa frase è molto contorta, ma vedrò di spiegartela attraverso un esempio. Prendiamo questa classe:
    codice:
    class Oggetto {
       private int mioValore1;
       private int mioValore2;
    
       public Oggetto() {
          mioValore1 = mioValore2 = 0;
       }
    
       public void setPrimoValore(int primoValore) {
          mioValore2 = primoValore;
       }
    
       public void setSecondoValore(int secondoValore) {
          mioValore1 = secondoValore;
       }
    
       public int getPrimoValore() { return mioValore2; }
       public int getSecondoValore() { return mioValore1; }
    }
    Se a questo codice vogliamo aggiungere un metodo per scambiare i valori interni di due oggetti nel modo in cui hai chiesto tu nell'esempio dovremo aggiungere un metodo scambiaValori():
    codice:
       public void scambiaValori(Oggetto o) {...}
    Ora come ci comportiamo dentro al metodo? Come l'interfaccia dell'oggetto ci impone: settiamo i valori dell'oggetto chiamante con i valori dell'oggetto passato come parametro, salvandoli prima in variabili temporanee e poi settiamo i valori dell'oggetto passato come parametro con i valori che c'erano prima nell'oggetto chiamante:
    codice:
       public void scambiaValori(Oggetto o) {
          int temp1 = o.getSecondoValore();
          int temp2 = o.getPrimoValore();
          o.setPrimoValore(mioValore2);
          o.setSecondoValore(mioValore1);
          mioValore1 = temp1;
          mioValore2 = temp2;
       }
    Ma, come ben si vede, questa sequenza di passi la si poteva fare benissimo anche senza il metodo (il quale risulta un po' inutile).
    Da notare che non possiamo accedere direttamente alle proprietà dell'oggetto passato come parametro, a causa (e per fortuna) del fatto che gli oggetti si possono manipolare solo attraverso i propri metodi. Qualcuno potrebbe obiettare: "basta rendere pubbliche le proprietà" e io obietterei subito "E a che ti servono gli oggetti allora? Sono stati inventati apposta per evitare queste cose, per proteggere i dati". E poi sarebbe una modifica di poco valore, perchè non guadagna nulla il metodo appena proposto in termini di utilità.

    Se la tua idea fosse diversa, allora non l'ho capita. Se era questa, spero di aver risposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Per Xadoom...hai capito l'idea. Ti ringrazio della spiegazione.

    Per chi non avesse capito:
    L'idea è di scambiare il valore di una variabile interna di un oggetto con quella di un altro oggetto. E non dello stesso oggetto.

    Per far questo, bisogna dichiarare un metodo con argomento (oggetto nomeOgg), e ovviamente sviluppare il metodo scambia correttamente.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.