Originariamente inviato da edriv
Sto passando da C++ a Java ma non ho ancora chiaro quale sia il migliore modo per rappresentare un albero che abbia le foglie diverse dai nodi non-terminali, usando ereditarietà e puntatori (anche se sono impliciti).
Penso che una struttura molto semplice possa essere la seguente:
codice:
class Nodo {
private Nodo[] figli;
public Nodo() { figli = null; }
public Nodo(Nodo[] figli) { this.figli = figli; }
public Nodo getFiglio(int indice) { return figli[indice]; }
public void setFiglio(int indice, Nodo n) { figli[indice] = n; }
}
class NodoTerminale extends Nodo {
private String valore;
public NodoTerminale(String valore) { this.valore = valore; }
public String getValore() { return valore; }
public void setValore(String valore) { this.valore = valore; }
}
Originariamente inviato da edriv
Devo usare una classe astratta o interfaccia?
Come vedi sopra io ho usato solamente classi (non astratte... non ne vedo il motivo, a meno che la cosa non richieda qualche dettaglio in più).
Originariamente inviato da edriv
Esiste l'RTTI, cioè sapere da un puntatore alla classe base a che oggetto derivato punta veramente?
Quali classi devo creare?
Per sapere se un oggetto è di una determinata classe c'è l'operatore instanceof. Ti faccio un esempio basato sulle classi che ti ho postato sopra:
codice:
Nodo n = ...; // Ho un oggetto di tipo Nodo
// L'oggetto potrebbe essere un'istanza di Nodo oppure di NodoTerminale (ereditarietà)
// Controllo:
if (n instanceof NodoTerminale) {
// L'oggetto 'n' è un NodoTerminale
} else {
// L'oggetto 'n' è un nodo interno
}
Originariamente inviato da edriv
Esempio:
Un oggetto nono può puntare a diversi altri nodi oppure ad una stringa.
NODO = altri NODI o STRINGA (terminale)
Penso che l'esempio che ti ho fatto sopra possa esserti d'aiuto.
Ciao.