Rispettare delle linee guida che conferiscano al progetto una omogeneità di stile è molto importante in quanto:
- aumenta la compresibilitÃ
- diminisce la necessità di debugging obbligando a scrivere "bene"
- etc ...
In MIP si dvono rispettare le seguenti linee guida:
- Alcuni elementi vanno documentati obbligatoriamente:
- classi (autore, cosa rappresenta)
- metodi pubblici (cosa fa, cosa ritorna in output e cosa prende in input (con i range di validità ))
- l'intestazione dell'header deve avere nome, autore, data, breve descrizione
- Non si usano trattini "-" e trattini bassi "_" per separare le parole di un elemento, ma le maiuscole, ad esempio "dist_min" non va bene mentre "distMin" si. Stesso dicasi per i nomi di file. La separazione con la maiuscola va sempre fatta.
- I tipi iniziano con la lettera maiuscola (es: class Tipo), le variabili e i metodi con la lettera minuscola le variabili (es: int numRob) e le variabili e i metodi privati col trattino basso lettera minuscola (es: int _numRob):
- I file che contengono principalemnte la classe da cui prendono il nome vanno scritti con la lettera maiuscola (es: Serialization.cpp) gli altri con la minuscola (es: testMobileRob.cpp)
- Al posto di float e double va usato il tipo Decimal
- Cartelle che contengono solo i sorgenti della classe da cui prendono il nome iniziano con lettera maiuscola, cartelle che contengono cartelle o mix di sorgenti iniziano con la minuscola
- Ogni campo di una classe non deve mai essere usato (lettura e scrittura) esternamente in modo diretto, ma sempre attraverso metodi della classe che devono iniziare per get/set
- ogni algoritmo deve essere una classe implementata come una macchina a stati con un metodo di steping (running)
- una classe di parametri (ossia input che tipicamente si mantengono costanti all'interno dell'esecuzione) la quale viene passata al costruttore
- una classe di input che viene passata alla step dell'algoritmo e
- una classe di output che viene ritornata dalla step
- un enum che ne elenca gli stati
- non si usano variabili globali
- non si usano le printf e altre cose simili del C
- ogni classe deve avere almeno
- costruttore di copia,
- operatori di assegnazione = di confronto == e !=
- distruttore oblligatorio se c'è allocazione dinamica
- una "print()" della classe eseguita con gli stream
- non si usano vettori, ma solo vector (definit nella c++ STL)
- buon utilizzo dei vector:
- il metodo size() fa ogni volta una scansione del vector quindi se lo si deve usare in for memorizzare la size prima del for in una variabile temporanea e usare quella nel for
- non utilizzare define di costanti, solo se indispensabile e in modo localizzato, usare gli enum
- impostare la tabulazione a 2 spazi e usarla per alineare il codice
see the Task class
see the
algorithms dir
see the Resource class
- preporre sempre applePatch
- inizializzare gli static const Decimal nel cpp