Linee guida per la scrittura di software flessibile?
-
01-10-2019 - |
Domanda
Ho sviluppato un interprete in C ++ per il mio (esoterica, se si vuole) la programmazione lingua po 'di tempo. Una delle cose principali che ho notato:. Parto da un concetto flessibile, e l'ulteriore codice che (Tokenizer-> Parser-> Interprete) il meno flessibile l'intero sistema viene
Ad esempio: non ho implementare una funzione include
in un primo momento, ma l'interprete era già installato e funzionante - ho avuto estrema difficoltà di attuazione ed era proprio come "patch qualcosa" in seguito. Il mio sistema aveva perso la flessibilità molto rapidamente.
- Come posso imparare a tenere relativamente piccoli progetti C ++ come flessibile ed estensibile possibile durante lo sviluppo?
Soluzione
-
Definire la struttura del progetto prima di iniziare la codifica. Delineare i vostri principali obiettivi e pensare a come si può raggiungere questo obiettivo.
-
Codice le intestazioni.
-
Guardate se è possibile implementare ogni caratteristica di utilizzare questo insieme di interfacce
-
Se no -> tornare a (2)
-
Se sì -> file cpp codice
-
Enjoy.
Naturalmente, questo non si applica ai progetti di grandi dimensioni davvero. Ma se il vostro progetto è modulare, non ci dovrebbero essere problemi a dividere il progetto in parti separate.
Altri suggerimenti
Se è necessario mantenere
progetti C ++ come flessibile ed estensibile possibile durante lo sviluppo
, allora non avete ottenuto un disciplinare di produzione, non si ha vero obiettivo e non c'è modo di definire un prodotto finito.
Per un prodotto commerciale questa è la situazione peggiore di essere in. Parafrasando un noto blogger (non ricordo chi) "non hai un prodotto fino a quando si definisce ciò che non si ha intenzione di fare."
Per i progetti personali questo potrebbe non essere un problema. Gesso fino a esperienza e ricordare per riferimento futuro. Refactor e andare avanti.
Non temere Evolution (refactoring).
Se ci sono molti di classe che si adattano un tema, creare una classe base comune.
Invece di codifica membri duri dati, utilizzare puntatori a una classe base astratta.
Ad esempio, invece di utilizzare uso std::ifstream
std::istream
.
Nel mio progetto, ho le classi astratte per leggere e scrivere. Classi che supportano la lettura e la scrittura di utilizzo queste interfacce. Posso passare i lettori specializzati a queste classi senza modificare il codice. Un lettore banca dati avrebbe ereditato dalla classe Reader di base, e quindi può essere utilizzato ovunque un lettore viene utilizzato.