Sunteți pe pagina 1din 2

Determinarea granularitatii obiectelor

Obiectele ce compun un sistem pot varia "ingrozitor" ca marime si numar. Ele pot
reprezenta practic orice: de la componente hardware pana la aplicatii intregi. Este
dificil de stabilit unde trebuie sa se "opreasca" un obiect.
Exista sabloane care acopera si acest aspect. Astfel, sablonul Facade descrie modul in
care subsisteme complete pot fi reprezentate ca obiecte, iar sablonul Flyweight arata
cum se poate gestiona un numar urias de obiecte la nivelele cele mai fine de
granularitate. Alte sabloane descriu caile prin care un obiect poate fi descompus in
obiecte mai mici. Abstract Factory si Builder reprezinta obiecte a caror unica
responsabilitate este crearea de alte obiecte. Visitor si Command reprezinta obiecte a
caror unica responsabilitate este implementarea unui mesaj catre alt obiect sau grup de
obiecte.

Specificarea interfetelor obiectelor


Pentru fiecare operatie declarata intr-un obiect se precizeaza numele, obiectele pe
care le ia ca parametri si valoarea returnata; aceste elemente
formeaza semnatura operatiei. Multimea tuturor semnaturilor corespunzatoare
operatiilor dintr-un obiect reprezinta interfata obiectului. Interfata unui obiect descrie
complet setul mesajelor care pot fi trimise spre obiectul respectiv.

Un tip este un nume utilizat pentru a referi o anumita interfata. Astfel, vom spune
despre un obiect ca este de tipul Window daca el accepta toate mesajele
corespunzatoare operatiilor definite in interfata numita Window. Ca urmare, un obiect
poate avea mai multe tipuri, adica o parte a interfetei sale poate fi de un tip, iar alta
parte - de alt tip. De asemenea, mai multe obiecte pot partaja un anumit tip comun,
daca interfetele lor includ tipul respectiv.
Interfetele pot sa contina, la randul lor, alte interfete ca submultimi. Avand doua
tipuri, T1 si T2, vom spune ca T1 este subtip al lui T2 daca interfata T1 include
interfata T2. In acest caz T2 este supertip al lui T1. Mai spunem
ca T1 mosteneste interfata T2.
Interfetele sunt lucruri fundamentale in sistemele OO. Obiectele sunt cunoscute doar
prin intermediul interfetelor lor. O interfata nu da nici un detaliu relativ la
implementarea unui obiect, iar obiecte distincte pot implementa in mod diferit o
aceeasi cerere. Sau, altfel spus, doua obiecte avand implementari complet diferite pot
avea interfete identice.

Cand o cerere este trimisa unui obiect, operatia care se va executa depinde de

 cerere
 obiectul care receptioneaza cererea.

Obiecte diferite care pot receptiona cereri identice pot avea implementari diferite ale
operatiilor care vor satisface cererile respective. Asocierea unei cereri cu un obiect si
cu o operatie a obiectului la momentul executiei se numeste asociere (legare)
dinamica (dynamic binding). Asocierea dinamica permite scrierea de programe in
care:
 la emiterea unei cereri sa nu ne preocupe ce obiect o va receptiona, stiindu-se
ca orice obiect a carui interfata include o semnatura potrivita va fi bun;
 obiecte avand interfete identice pot fi substituite unul altuia, la executie;
aceasta posibilitate de substituire se mai numeste polimorfism.

Polimorfismul este un concept esential in cadrul tehnologiei orientate pe obiecte.


El permite:

 ca un obiect client sa nu aiba nevoie sa cunoasca altceva despre alte obiecte


decat ca poseda o anumita interfata;
 simplificarea definitiei clientilor;
 decuplarea obiectelor unele de altele;
 ca la executie obiectele sa-si modifice relatiile dintre ele.

In acest context, sabloanele de proiectare ne ajuta la:

 definirea interfetelor;
 identificarea elementelor care NU trebuie sa apara intr-o interfata.

S-ar putea să vă placă și