Tl; Dr
Dato un linguaggio senza polimorfismo come modificare elegantemente il comportamento di una foglia in una struttura dati dell'albero.
Contesto
Sto programmando un'applicazione in C per un microcontrollore e mi chiedo quale sarebbe il modo migliore per progettare menu flessibili senza GUI.
In pratica gli input possono provenire da 2 fonti diverse: i pulsanti incorporati sulla scheda utilizzata dall'utente e una porta Uart utilizzata dal team di produzione per calibrare il dispositivo prima della spedizione.
Ho già un meccanismo che utilizza una discussione per ascoltare gli input (sia dei pulsanti che della porta seriale) che li pubblicano su un parser grezzo. Il parser agisce quindi in base alla richiamata attualmente registrata per l'input ricevuto. Sa anche se il menu deve essere stampato sullo schermo LCD o attraverso la porta seriale.
Sto anche usando un albero k-ary per rappresentare la gerarchia tra sottomenu e diverse opzioni. Dato che i menu non sono ancora definiti, mi consentirà semplicemente di aggiungere / rimuovere i nodi quando il mio supervisore prende in considerazione le funzionalità supportate.
Ora, quando il menu attualmente visualizzato non è una foglia, il comportamento è abbastanza semplice. Sinistra e Destra si sposta tra fratelli, Indietro seleziona il genitore e Invio seleziona il primo figlio.
Se è una foglia, Invio attiva / disattiva le modifiche, Sinistra e Destra incrementa / decrementa il valore e Indietro cancella la mozione.
Altre preoccupazioni
- Sono roba da sovraccarico che potrebbe essere fatta con un sacco di switch-casi?
- Ci sono risorse che forniscono esempi di menu senza GUI puliti quando non lo fai sapere da dove provengono gli input, le azioni che dovrai intraprendere, i menu che devi offrire e dove visualizzare quei menu?
- Dato che ci sono fondamentalmente 2 opzioni (foglia o meno) dovrei semplicemente farlo tutto con if / elses e vai avanti?