mercoledì 13 marzo 2013

C++ Appunti: Uso del namespace e convenzioni


Supponiamo che stiamo sviluppando un software che riguarda l'elettronica o l'elettrotecnica, e di usare per una funzione l'identificatore "socket" per indicare, in inglese, un dispositivo fisico a cui fa riferimento l'applicazione.
Ad un certo punto vogliamo aggiungere all'applicazione una funzionalità di comunicazione di rete, e utilizziamo una libreria che usa il medesimo nome "socket" per indicare un canale di comunicazione. Abbiamo una collisione di nomi, dalla quale si può uscire effettuando una ricerca e sostituzione globale nella libreria o nella nostra applicazione. Supponendo di non avere i sorgenti della libreria, l'unica possibilità è modificare l'applicazione.
La situazione è peggiore se abbiamo adottato due librerie non modificabili che utilizzano lo stesso nome per concetti diversi. In tal caso il conflitto di nomi è insanabile.
È per rimediare a tale situazione che in C++ sono stati introdotti i "namespace".
Ogni libreria ben progettata dovrebbe inserire tutti i nomi che dichiara all'interno di un namespace. Per esempio, la famosa libreria Boost, inserisce tutte le proprie dichiarazioni nel namespace "boost".
La stessa libreria standard del C++ inserisce gran parte delle proprie dichiarazioni nel namespace "std" (che significa "standard").
Da Wikibooks
CONVENZIONE HEADER
Esiste un solo main(), per ogni classe solitamente c'è un file header che racchiude la dichiarazione della classe e un file cpp che raccoglie i metodi.
1) main.cpp 
  • #include librerie + <nome_classe>.h
  • using namespace <nome_space>
  • main() + funzioni

2) <nome_classe>.h
  • #ifndef <nome_classe>.h
  • #define <nome_classe>.h ... #endif
  • elenco delle classi (solo dichiarazioni e getter, setter)

3) <nome_classe>.cpp
  • #include librerie + <nome_classe>.h
  • elenco dei metodi delle classi: void <name_space>::<name_class>::<nome_metodo>() const {}

Nessun commento:

Posta un commento