Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    chiarimento assegnazioni java

    scusate l'ignoranza...

    dato il seguente codice, non riesco a capire il valore dell'assegnazione l1=l2(fine codice); perchè se lo metto prima di "l1.cambiaTitolo...." stampa [Guerra e pace, principe, principe, principe], se lo metto dopo stampa [Guerra e pace, principe, principe, Madame Bovary] ?



    come sarebbe un eventuale diagramma degli oggetti ?



    Grazie anticipatamente





    codice:
       
     public class Libro {
        private String titolo;
        
        public Libro(String titolo){
            this.titolo = titolo;
        }
        
        public String getTitolo(){
            return this.titolo;
        }
        
        public String cambiaTitolo(String titolo){
            String vecchioTitolo;
            vecchioTitolo = this.titolo;
            this.titolo = titolo;
            return vecchioTitolo;
        }
        
        public static void main(String[] args) {
            Libro l1 = new Libro("Anna Karenina");
            Libro l2 = new Libro("Guerra e pace");
            
            l1.cambiaTitolo(l2.cambiaTitolo("Il principe"));
            System.out.println(l1.getTitolo());
            System.out.println(l2.getTitolo());
            
            l1 = l2;
            l1.cambiaTitolo(l2.cambiaTitolo("Madame Bovary"));
            System.out.println(l1.getTitolo());
            System.out.println(l2.getTitolo());
        }
    }

  2. #2
    Cosa intendi per diagramma delle classi? Che utilità potrebbe avere in questo caso?


    Comunque ti stai incartando su un giochetto: le chiamate a cambia titolo sono 4.
    codice:
        l1.cambiaTitolo(l2.cambiaTitolo("Il principe"));
    questo codice assegna a l1 il precedente titolo di l2 e a l2 il titolo "Il principe".
    Dopo questa chiamata l1 = guerra e pace e l2 = il principe


    Stesso discorso vale per il successivo cambio titolo, con la differenza che l1 = l2 fa puntare entrambe le variabili all'oggetto (il cui riferimento è contenuto ad l2) l2.


    Andando avanti nel codice ti trovi a portare i riferimenti, contenuti dalle due variabili, sullo stesso oggetto (ovvero quello puntato da l2).
    codice:
    l1 = l2;
    l1.cambiaTitolo(l2.cambiaTitolo("Madame Bovary"));
    cambia prima il titolo da "Il principe" a "Madame Bovary" (e restituisce il principe) e da "Madame Bovary" a "Il principe"
    Se invece fosse stato così
    codice:
    l1.cambiaTitolo(l2.cambiaTitolo("Madame Bovary"));
    l1 = l2;
    La prima linea avrebbe cambiato l2 in "Madame Bovary" ed l1 ne "Il Principe".
    Andando però a stampare (ovviamente) solo "Madame Bovary"

    PS: se inserisci l1 = l2 a fine file, la seconda stampa viene (ovviamente) come hai detto tu.
    Ultima modifica di Xaratroom; 07-03-2015 a 11:14
    Experience is what you get when you don’t get what you want

  3. #3
    Grazie mille per la risposta, sei stato chiarissimo.... per diagramma degli oggetti intendo proprio a quali variabili puntano gli oggetti, per essere più specifico :

    "Per avere un’idea della evoluzione di un programma è utile rappresentare lo stato delle istanze: a tal fine usiamo una rappresentazione grafica, chiamata diagramma degli oggetti.

    Il diagramma degli oggetti mostra gli oggetti istanziati in memoria durante l’esecuzione dell’applicazione."

    Testo estratto dalle slide di Programmazione Orientata agli oggetti.

    Schermata del 2015-03-07 11:29:47.jpg

  4. #4
    Quote Originariamente inviata da aleRomatre Visualizza il messaggio
    Il diagramma degli oggetti mostra gli oggetti istanziati in memoria durante l’esecuzione dell’applicazione.
    Mi ero proprio dimenticato di questo diagramma... saranno almeno 7 anni che non ne faccio uso .
    Experience is what you get when you don’t get what you want

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Java ha una sezione dedicata.

    Sposto.


    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

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