Conceptul de interfata exista in unele limbaje de programare obiect, mai recente,
de exemplu in Java, unde interfata este o constructie de limbaj diferita de clasa. Astfel, in Java, definitia unei clase poate fi separata in doua parti: Interfata sa, care este constituita din metodele publice ale clasei, exceptand constructorul si distructorul; Implementarea sa, care include implementarile metodelor din interfata, constructorul, distructorul si campurile clasei. Prin aceasta separare implementarea clasei este ascunsa si clientii clasei sunt fortati sa foloseasca numai interfata clasei. Daca interfetele pot fi definite astfel incat sa fie complet independente de limbajul de programare si de spatiul necesar obiectelor clasei care le implementeaa, atunci codul care utilieaa interfetele nu va trebui recompilat cand se modifica implementarea interfetei. In Java, se poate defini o interfata si clasa sau clasele care implementeaa interfata. De asemenea, o clasa poate sa implementee mai multe interfete. De exemplu, pot fi definite interfetele !Angajat" si !Parinte", ambele fiind implementate de o aceeasi clasa, !Persoana". In anumite contexte clasa !Persoana" este utiliata prin interfata sa !Parinte" in altele prin interfata !Angajat". In Java: interface Angajat # float $alariu%&; int ore'ucrate%&; $tring (ame%&; ) class Persoana implements Angajat # .........) 1 sau interface Parinte # void metoda*%&; void metoda+%&; ) class Persoana implements Angajat, Parinte #......................................) In ,-' exista + repreentari pentru interfete: un cerc si un nume o forma extinsa, in care interfata este repreentata ca o clasa cu stereotipul ..interface//; compartimentul atributelor trebuie sa fie vid. 0elatia dintre clasa care implementeaa o interfata si interfata este numita !realiare" si se repreinta ca in figura urmatoare: 2
'imbajul C11 nu include o constructie numita interfata, dar o interfata poate fi definita printr2o clasa abstracta pura. De exemplu, interfata !Angajat" poate fi definita in C11 prin clasa abstracta !Angajat". In C++: class Angajat 33 clasa abstracta pura 3 # public: virtual float $alariu%&45; virtual int ore'ucrate%&45; virtual $tring (ame%&45; ); class Persoana: public Angajat 33 clasa care implementeaa interfata Angajat # public: Person%...&; 33 constructorul virtual Persoana%&; 33 distructorul virtual float $alariu%&; virtual int ore'ucrate%&; virtual $tring (ame%&; ..................................................... ); sau class Parinte 33 clasa abstracta pura # public: virtual void metoda*%&45; virtual void metoda+%&45; ); class Persoana: public Angajat, Parinte # public: Person%...&; 33 constructorul virtual Persoana%&; 33 distructorul virtual float $alariu%&; virtual int ore'ucrate%&; virtual $tring (ame%&; virtual void metoda*%&; virtual void metoda+%&; ) In concluzie: 6 interfata este un set de metode corelate care definesc o anumita comportare. 7oate metodele sunt publice si nu se specifica nici un fel de implementare pentru ele. De asemenea, o interfata nu are stare %nu contine variabile&. 6 interfata poate fi implementata de o clasa sau de o componenta. 4 6 componenta si interfetele sale Componenta C+ implementeaa %realieaa& interfata Image, iar C* o utilieaa. Intre interfete pot fi stabilite relatii de asociere si generaliare. De asemenea, intre interfete, clase si componente pot fi stabilite relatii de realiare si dependenta. Astfel, clasa InputStream, din figura urmatoare, este abstracta. Clasa DataInputStream implementeaa atat clasa abstracta InputStream cat si interfata DataInput. Clasa Reader utilieaa functiile oferite de interfata DataInput. 5 Componenta C+ implementeaa %realieaa& interfata Image, iar C* o utilieaa. 6 clasa care implementeaa mai multe interfete poate preenta, intr2un anumit context, numai una dintre interfetele pe care le implementeaa. 8iecare interfata repreinta un rol pe care il poate avea un obiect instanta din clasa respectiva. De exemplu, in asocierea cu clasa 8irma, clasa Persoana preinta interfata Angajat. Intr2o alta asociere ea poate preenta interfata Parinte. Interfetele definesc roluri in asocierea dintre doua abstractii. Intelegerea unei interfete 6 interfata trebuie sa asigure o separare clara intre vederea externa si cea interna a unei abstractii, facand posibila utiliarea abstractiei fara a se cunoaste implementarea sa. Pentru ca o interfata sa poata fi mai bine inteleasa, se pot furnia informatii suplimentare cum ar fi: 6 semnaturile operatiilor %domeniul de definitie si domeniul reultatului& pre si post conditii pntru fiecare operatie invariant la nivelul unei clase sau al unei componente specificarea formala a semanticii, folosind 6C' %6bject Constraint 'anguage&, care este inclus in ,-' se poate atasa un automat %diagrama de stari& pentru a specifica ordonarea partiala a operatiilor interfetei se pot atasa diagrame de colaborare pentru a specifica comportarea prevauta pentru interfata 7