Sunteți pe pagina 1din 2

Principiul Deschis Inchis (PDI)

Entitatile software (clase, module, functii) trebuie sa fie deschise la extinderi, dar inchise la
modificari.
Atunci cand o singura schimbare determina in program o cascada de schimbari in module
dependente, se spune despre acel program ca nu e bine proiectat, devenind astfel fragil, rigid,
nepredictibil, de nereutilizat. Principiul deschis-inchis se ocupa de aceasta problema. PDI
impune proiectarea de module care sa nu fie modificate. Atunci cand se impun schimbari, se
schimba comportamentul modulelor prin adaugarea unui cod nou, nu prin schimbarea
vechiului cod care deja e functional.

Modulele ce respecta PDI au doua principale proprietati:
-Sunt deschise extinderii
Comportamentul modulelor poate fi extins. Putem face ca un modul sa se
comporte in diferite moduri, in functie de schimabrile cerintelor aplicatiei, sau sa
respecte cerintele unei noi aplicatii
-Sunt inchise modificarii
Codul sursa al unui astfel de modul nu are voie sa fie modificat

Desi aceste proprietati par a fi contradictorii, deoarece metoda prin care se poate extinde un
modul e modificarea acestuia. Felul in care aceste proprietati lucreaza e abstractizarea.









Client Server
Figura 1
(Client Inchis)
Client

AbstractServer
Server
Figura 2
(Client Deschis)
In figura 1 este un exemplu de design in care PDI nu este respectat. Atat clasa Client ca si
clasa Server sunt clase concrete. Clasa Client foloseste clasa Server. Daca se doreste ca un
obiect de tip client sa foloseasca un alt obiect de tip Server, atunci clasa Client trebuie
schimbata pentru a denumi noua clasa Server.

In figura 2 este exemplificat un design ce respecta PDI. In acest caz clasa AbstractServer este
o clasa abstracta cu functii membre vrituale. Obiectele din clasa Client vor folosi obiecte din
clasa derivata Server. Daca dorim ca obiectele Client sa foloseasca o alta clasa server, atunci o
noua derivata a clasei AbstractServer va fi creata. Clasa Client va ramane neschimbata.
Inchidere strategica:
-Nici un program semnificativ nu poate fi 100% inchis
-Inchiderea se obtine prin utilizarea abstractizarii
Construiti metode ce pot fi invocate dinamic
Pentru a determina deciziile strategiei generale (ex: desenare de patrate inainte
de cercuri)
-Utilizati o abordare condusa de date pentru a obtine inchiderea
Plasati deciziile strategiei particulare intr-o locatie separata (ex: fisier sau obiect
separat)
Minimizeaza localizarile schimbarilor viitoare
Euristici PDI:
Toate datele membru sunt private. Nu exista variabile globale.
Modificarile datelor publice aduc un risc de deschidere a modulului.
~Pot provoca un efect de modificari in casacada, in mai multe locatii neasteptate
~Erorile pot fi dificil de corectat/de gasit in totalitate (corecturile pot introduce erori in
alte parti)
Membrii non-privati sunt modificabili
~Pot schimba starea clasei.

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