Namespaces and Exceptions Modularization and Interfaces Un program real consistă dintr-un număr de părţi separate. De exemplu, chiar şi simplul program “Hello, world!” implică cel puţin două părţi: solicitările codului utilizator de a printa Hello, world! şi sistemul I/O care face printarea. Un program de calculator (ex. §6.1) poate fi compus din 5 părţi:
1. analizorul (parser), care face analiza sintactică 2. vocabularul (lexer), care compune simboluri (tokens) din caractere 3. tabla de simboluri (simbol table), care reţine (string, value) perechi (pairs) 4. 5.
driver-ul main manipulatorul de erori (error handling)
Aceasta poate fi reprezentată grafic:
driver
parser
lexer
symbol table
error handler Săgeţile reprezintă “folosind”. Pentru a simplifica figura nu au fost reprezentate legăturile cu partea de error handling. De fapt, calculatorul a fost conceput din trei părţi, driver-ul şi error handling-ul fiind adăugate pentru completitudine. Când un modul îl foloseşte pe altul, nu are nevoie să ştie totul despre modulul folosit. În circumstanţe ideale, cele mai multe detalii ale unui modul sunt necunoscute modulelor care îl folosesc. În concluzie, facem o distincţie între un modul şi o interfaţă. De exemplu, parser-ul se sprijină direct (doar) pe interfaţa lexer-ului, mai degrabă decât pe tot lexer-ul. Lexer-ul doar implementează serviciile anunţate în interfaţa sa. Aceasta poate fi prezentată grafic astfel:
driver parser interface
parser implementation
lexer interface
lexer implementation
symbol table interface
symbol table implementation
error handler
Liniile punctate înseamnă “implementează”. Considerăm aceasta ca fiind adevărata structură a programului iar sarcina noastră ca programatori este de a reprezenta aceasta cu fidelitate în cod. Făcând aceasta, codul va fi simplu, eficient, comprehensibil, uşor de menţinut etc., deoarece el va reflecta în mod fidel design-ul nostru fundamental. Vezi continuarea în “The C++ Programming Language” by Bjarne Stroustrup. Namespaces Un namespace este un mecanism pentru a exprima gruparea logică. Aceasta înseamnă că dacă câteva declarţii pot fi adunate împreună în acord cu un anumit criteriu, ele pot fi puse într-un namespace comun pentru a exprima acest fapt. Vezi continuarea în “The C++ Programming Language” by Bjarne Stroustrup.