OCL (Object Constraint Language) este folosit cu succes alaturi de UML pentru modelarea independenta de platforma a aplicatiilor orientate obiect (faza de design).
Problema vine atunci cand trecem de la diagrama de clase care contine si restrictii/invarianti OCL la implementarea codului.
De cele mai multe ori programatorii isi aleg propriul stil de a implementa aceste restrictii: de exemplu daca este vorba de domeniul de valori al unei variabile atunci, de regula, verificarea restrictiilor se face pe setter-ul acelei variabile sau pe constructor-ul clasei. O preconditie asupra unui parametru intr-o metoda se face prin unul sau mai multe teste la inceputul codului acelei metode etc.
O preconditie, postconditie sau un invariant este un „contract” (o obligatie) pe care operatia/clasa/proprietatea trebuie sa o indeplineasca.
Fara o relativ standardizare a implementarii acestor contracte codul rezultat ar putea deveni destul de greu de mentinut (developerii vin si pleaca…)
O solutie interesanta o reprezinta COFOJA un proiect dezvoltat de 3 persoane.
In esenta poti sa-ti adnotezi codul folosind un set de adnotari prestabilite care iti permit sa exprimi preconditii, postconditii si invarianti. Exista chiar si o pagina de principii de utilizare si design.
Design by contract nu este o chestiune noua dar este importanta.
Unul dintre pionieri este Bertrand Meyer (parintele limbajului Eiffel ) cu al sau „Design by Contract”( Technical Report TR-EI-12/CO, Interactive Software Engineering Inc., 1986). Un articol mai recent poate fi citit aici.
Leave a Reply