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

    Rendere classe Nodo Albero Binario Immutabile

    Salve a tutti, ho questa classe che rappresenta un nodo di un albero binario
    codice:
    class BTNode<E>{
    	private  BTNode<E> parent,left,right;
    	private  E element;
    
    	public BTNode(E element){
    		this.element=element;
    		parent=left=right=null;
    	}
    	public BTNode(){
    		element=null;
    		parent=left=right=null;
    	}
    	public void setParent(BTNode<E> p){parent=p;}
    	public void setLeft(BTNode<E> l){left=l;}
    	public void setRight(BTNode<E> r){right=r;}
    	public void setElement(E el){element=el;}
    	public BTNode<E> getParent(){return parent;}
    	public BTNode<E> getLeft(){return left;}
    	public BTNode<E> getRight(){return right;}
    	public E element(){return element;}
    	public void visit(){
    		System.out.println(" "+element);
    	}
    }
    Come da oggetto del mio post, come potrei fare a rendere la classe Nodo immutabile?

    Vincenzo Grasso

  2. #2
    Se per immutabile intendi che una volta costruito il nodo esso non possa cambiare il suo stato interno, allora devi dichiare le proprietà (campi) come final

  3. #3
    Il problema è che poi all'interno della classe Albero che creo, devo modificare i riferimenti al parent,left,right e all'elemento stesso.
    Come posso fare? Perchè se rendo final le proprietà dei campi, non posso modificarle più in un'altra classe

  4. #4
    Infatti, per stato interno io intendevo solo la proprietà element, che secondo me è quello che da lo stato al nodo non i riferimenti a esso.

  5. #5
    Quindi per rendere l'oggetto nodo immutabile, dici di rendere solamente E element come final e non dare il metodo set all'elemento? Grazie

  6. #6
    Se l'obiettivo è renderlo immutabile "dall'esterno" il final non ti serve, è sufficiente che dichiari il solo costruttore non vuoto ed elimini il setter dell' Element, in questo modo il dato può essere impostato soltanto in fase di costruzione dell'oggetto e non può essere modificato in seguito (non dall'esterno dell'oggetto).
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Ma se in un metodo dell'albero chiamato remove dovessi fare una cosa del genere:

    z.setElement(y.getElement());
    non può funzionare giusto, perchè dalla classe Nodo immutabile ho levato il mio metodo setter... Come fare? Grazie

  8. #8
    Originariamente inviato da vincenzo1986
    Ma se in un metodo dell'albero chiamato remove dovessi fare una cosa del genere:

    z.setElement(y.getElement());
    non può funzionare giusto, perchè dalla classe Nodo immutabile ho levato il mio metodo setter... Come fare? Grazie
    Se hai levato il setter ottieni sicuramente un errore già in compilazione scrivendo il codice sopra...quindi non può funzionare. E' un problema? Non hai detto che lo vuoi immutabile? Il codice sopra contraddice questa affermazione.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  9. #9
    Allora in un compito che svolgevo era richiesta l'immutabilità dell'oggetto Nodo (dell'albero), e poi l'implementazione di una classe Albero con dei metodi:
    insert,delete..
    Ora nel metodo delete devo settare l'etichetta di un nodo con l'istruzione che ho scritto precedentemente.. Come posso fare? Grazie

  10. #10
    Originariamente inviato da vincenzo1986
    Allora in un compito che svolgevo era richiesta l'immutabilità dell'oggetto Nodo (dell'albero), e poi l'implementazione di una classe Albero con dei metodi:
    insert,delete..
    Ora nel metodo delete devo settare l'etichetta di un nodo con l'istruzione che ho scritto precedentemente.. Come posso fare? Grazie
    Ma il fatto che l'implementazione della cancellazione di un nodo dall'albero utilizzi questo
    codice:
    z.setElement(y.getElement());
    immagino sia una tua scelta, direi di lavorare solo con i puntatori e la sola lettura degli elements per implementarla, non vedo perché dovresti sovrascrivere l'element di un nodo esistente. Semplicemente distacca il nodo da cancellare dall'albero aggiustando i puntatori.
    Ripeto quell'istruzione fa a pugni con l'immutabilità dei nodi
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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.