Binary Tree / Knowledge Base design C ++

1

Attualmente ho una configurazione del modello di albero binario in cui il mio principale lo utilizza con le stringhe per creare un gioco di domande / risposte. Sto usando una knowledge base che funge da interfaccia per l'albero binario che utilizza principalmente (main non ha accesso al nodo o classi di alberi binari). Il mio codice sembra funzionare bene inserendo / riorganizzando i nodi come necessario, ma penso che il mio design sia piuttosto cattivo.

Solitamente è meglio mettere semplicemente le classi Node e BinaryTree nello stesso file dato che nessuno dei due è utile in modo indipendente? O è addirittura standard quando si usano alberi binari per rendere il nodo una classe nidificata all'interno della classe dell'albero?

Non sei sicuro di come non usare l'amica di classe (supponendo che si tratti di una cattiva progettazione) a meno che non elimini semplicemente la base di conoscenza. Senza la knowledge base che è in grado di vedere i membri del nodo privato, non sarebbe in grado di spostare il puntatore del nodo "corrente" attorno all'albero attraverso domande / ipotesi a meno che non abbia passato il puntatore corrente facendo riferimento a una funzione ad albero binaria che lo spostava ogni volta.

Anche con questo setup l'albero binario in realtà non fa nulla se non fornire un nodo radice dato che k base sta gestendo l'inserimento / riorganizzazione / differenziazione tra domande e ipotesi, quindi non sono sicuro di come spostare qualche traversata, ecc. funzionalità da kbase a btree senza solo creare una serie di funzioni di kbase che chiamano le loro controparti btree.

Esiste un modo per usare std :: swap in ogni file (nodo / albero / base) anche senza inquinare con l'intestazione dell'utilità? Questo design sembra cattivo OO-saggio, ogni aiuto è apprezzato.

    
posta Instinct 02.03.2014 - 01:34
fonte

1 risposta

1

Domande:

Is it usually best to just put the Node and BinaryTree classes in the same file since neither is independently useful? Or is it even standard when using binary trees to just make node a nested class inside the tree class?

Risposta:

Penso al nodo come a un dettaglio di implementazione di BinaryTree. Consiglierei di fare di Node una classe nidificata di BinaryTre. Se è possibile che BinraryTree sia una classe normale e non un modello di classe, ti consigliamo di utilizzare l' idioma pimpl per Nodo. Dopo tutto, è un dettaglio di implementazione di BinaryTree.

Hai detto:

Not sure how to not use class friending (assuming this is bad design) unless I just do away with the knowledge base. Without knowledge base being able to see private node members it wouldn't be able to move it's "current" node pointer around the tree through questions/guesses unless it passed its current pointer by reference to a binary tree function that moved it each time.

La mia risposta:

Sembra che tu non stia fornendo un'interfaccia pubblica adeguata a BinaryTree. La knowledge base dovrebbe essere in grado di passare tutte le sue query a BinaryTree attraverso l'interfaccia pubblica.

Hai detto:

Also with this setup binary tree doesn't really do anything except provide a root node as k base is handling the inserting/rearranging/differentiating between questions and guesses, so I'm not sure how to move some traversal, etc. functionality from kbase to btree without just making a bunch of kbase functions that call their btree counterparts.

La mia risposta:

Ciò rafforza il mio modo di pensare che non stai fornendo un'interfaccia pubblica adeguata a BinaryTree. Lavorerei sul miglioramento dell'interfaccia pubblica di BinaryTree, invece di fare in modo che la knowledge base implementasse la funzionalità che appartiene a BinaryTree.

    
risposta data 27.08.2014 - 23:30
fonte

Leggi altre domande sui tag