Programare Orientata spre Obiecte
(Object-Oriented Programming)
a.k.a. Programare Obiect-Orientata
2011 - 2012
UPB - Facultatea ETTI - Curs POO - an II - seria E
UPB - ETTI - Curs POO - an II - seria E 12.10.2011 1
Titular curs: Eduard-Cristian Popovici
Suport curs: http://discipline.elcom.pub.ro/POO-Java/
UPB - ETTI - Curs POO - an II - seria E 2
Orientarea spre Obiecte (OO)
Orientarea spre
modelarea (abstractizarea) informatica a realitatii
entitati bazate pe responsabilitati (roluri)
incapsulare duala (a structurilor de date si de comportament)
mentinerea si ascunderea unei stari interne
colaborare intre entitati (comunicare prin mesaje, interactiune
sociala)
definirea unor interfete contractuale, componente black-box, etc.
1.3. Caracteristicile si principiile abordarii OO U
rmeaza
1. Introducere in abordarea orientata spre obiecte (OO)
1.3. Caracteristicile si principiile abordarii OO
Structura cursului
UPB - ETTI - Curs POO - an II - seria E 3
UPB - ETTI - Curs POO - an II - seria E 4
Programul (sistemul software) orientat spre obiecte
– reprezinta un model informatic
– al unei parti din lumea reala
– elementele care compun modelul
– sunt construite prin analogie cu entitati care apar in lumea reala
(obiecte reale, concepte)
– sunt numite obiecte software
– trebuie reprezentate in limbajul de programare
Care sunt constructiile software care permit reprezentarea obiectelor software
(similare) in limbaje de programare?
Modelarea si abstractizarea OO
1.3. Caracteristicile si principiile abordarii OO
studentX
studentA
studentY
studentB studentZ
UPB - ETTI - Curs POO - an II - seria E 5
Ca si in cazul obiectelor si conceptelor din lumea reala
– obiectele software pot fi categorisite (clasificate)
– categoriile (numite clase de obiecte) corespunzand
– diferitelor responsabilitati pe care le au
– sau diferitelor roluri pe care le joaca entitatile din lumea reala
– din care sunt construite prin analogie obiectele software
Clasele
– sunt constructiile software care
– reprezinta obiectele software care au responsabilitati / roluri similare
Clasificarea OO – entitati bazate pe responsabilitati (roluri)
1.3. Caracteristicile si principiile abordarii OO
UPB - ETTI - Curs POO - an II - seria E 6
Clasa (obiectelor software)
– este o constructie software complexa
– asemanatoare structurilor de date din C (struct)
– evoluata din ADT (concretizare a ADT)
– si astfel tip de date cu incapsulare duala
– care descrie intr-o forma abstracta
– toate obiectele software de un tip particular
(care au responsabilitati / roluri similare)
Clasificarea OO – abstractizarea multimilor (AM) de obiecte
1.3. Caracteristicile si principiile abordarii OO
studentX
studentA
studentY
studentB
Student
Clasa (categorie, tip)
AM (AOO)
obiecte software
UPB - ETTI - Curs POO - an II - seria E 7
Clasa fiind o constructie software evoluata din ADT
– realizeaza o incapsulare cu ascundere a detaliilor duala
– a informatiilor (datelor)
– regrupand elementele de date
– numite atribute sau variabile membru
– implicit CU ascunderea detaliilor (datelor, informatiilor)
– a comportamentului
– regruparea elementelor de comportament
– numite operatii sau functii membru
– implicit CU ascunderea detaliilor (implementarii)
– «transmite» obiectelor aceasta incapsulare cu ascundere a detaliilor duala
1.3. Caracteristicile si principiile abordarii OO
Clasificarea OO – incapsularea duala cu ascunderea detaliilor
!
UPB - ETTI - Curs POO - an II - seria E 8
Incapsularea oferita de clase (si obiecte) este o forma de incapsulare duala
semnaturi
operatii
Interfata (setul de semnaturi
ale operatiilor) – ideal este
publica, vizibila, accesibila
Reprezentarea datelor si implementarea (setul
de atribute si setul de implementari ale operatiilor)
– ideal sunt private, ascunse, inaccesibile
atribute
(variabile interne
ascunse)
comportament
(implementare operatii)
asociat atributelor
Clasa (obiect)
Incapsularea duala cu ascunderea detaliilor
1.3. Caracteristicile si principiile abordarii OO
INCAPSULARE DUALA
(INFORMATII SI
COMPORTAMENT)
UPB - ETTI - Curs POO - an II - seria E 9
Incapsularea duala cu ascunderea detaliilor
1.3. Caracteristicile si principiile abordarii OO
Incapsularea OO – oferita de clase si obiecte
– inseamna ascunderea detaliilor interne
– reprezentarea datelor (set de atribute)
– si implementarea (set de coduri ale operatiilor)
in spatele unei interfete publice (set de semnaturi ale operatiilor)
Exemplu
in Java
UPB - ETTI - Curs POO - an II - seria E 10
Incapsularea duala cu ascunderea detaliilor
1.3. Caracteristicile si principiile abordarii OO
Exemplu
in Java
UPB - ETTI - Curs POO - an II - seria E 11
Obiectele si conceptele sunt categorisite / clasificate
– atat in lumea reala cat si in cea informatica (software)
– pe baza caracteristicilor esentiale pe care le au (rezultate in urma
abstractizarilor)
– atribute – elemente de date, variabile interne care caracterizeaza
obiectele
– operatii – elemente de comportament, proceduri care pot fi efectuate
asupra atributelor
Clasele
– reprezinta obiecte software care au caracteristici esentiale (atribute si
operatii) similare
studentX
nume=“Xulescu”
1.3. Caracteristicile si principiile abordarii OO
Clasificarea OO – incapsularea duala cu ascunderea detaliilor
Atribut
Obiect
UPB - ETTI - Curs POO - an II - seria E 12
Ansamblul valorilor atributelor unui obiect la un moment dat
– reprezinta starea interna obiectului
Atributele
– sunt astfel “variabilele de stare” ale obiectului
– sunt prin natura lor private, ascunse, inaccesibile
– si dau astfel starii obiectelor
– calitatea de a fi privata, ascunsa, inaccesibila direct
– ea putand fi obtinuta din exterior doar indirect (controlat)
– prin intermediul apelurilor la operatii
Mentinerea si ascunderea unei stari interne
studentX
note = {7,9,8,9}
1.3. Caracteristicile si principiile abordarii OO
Starea interna
la un moment dat
Obiect
UPB - ETTI - Curs POO - an II - seria E 13
Starea unui obiect poate varia in timp
– ca urmare a comportamentului
– care este rezultatul executiei operatiilor
– prin apeluri venite de la alte obiecte
Mentinerea si ascunderea unei stari interne
studentX
note = {7,9,8,9}
1.3. Caracteristicile si principiile abordarii OO
Starea interna
la un moment dat
(initial)
timp
UPB - ETTI - Curs POO - an II - seria E 14
Starea unui obiect poate varia in timp
– ca urmare a comportamentului
– care este rezultatul executiei operatiilor
– prin apeluri venite de la alte obiecte
Mentinerea si ascunderea unei stari interne
studentX
note = {7,9,8,9}
1.3. Caracteristicile si principiile abordarii OO
Starea interna
la un moment dat
(initial)
timp
Executia
operatiei
studentX
addNota(8)
addNota()
Apel venit
de la alt obiect
UPB - ETTI - Curs POO - an II - seria E 15
Starea unui obiect poate varia in timp
– ca urmare a comportamentului
– care este rezultatul executiei operatiilor
– prin apeluri venite de la alte obiecte
Mentinerea si ascunderea unei stari interne sunt calitati noi ale programelor
– introduse de orientarea spre obiecte
Mentinerea si ascunderea unei stari interne
studentX
note = {7,9,8,9,8}
studentX
note = {7,9,8,9}
1.3. Caracteristicile si principiile abordarii OO
Starea interna
la un moment dat
(initial)
Starea interna
dupa executia
operatiei
Executia
operatiei
studentX
addNota(8)
addNota()
Apel venit
de la alt obiect
UPB - ETTI - Curs POO - an II - seria E 16
In lumea reala
– sarcinile sunt realizate in colaborare intre entitati diverse
Abordarile actuale
– OOP – programarea orientata spre obiecte (derivata din conceptul ADT)
– CBD – dezvoltarea bazata pe componente (black box)
– SOA – orientarea spre servicii a arhitecturilor
imita modelele sociale, colaborative
Colaborarea intre entitati – comunicarea prin mesaje
1.3. Caracteristicile si principiile abordarii OO
UPB - ETTI - Curs POO - an II - seria E 17
Obiect utilizator
Mesaj
Legătură
Interacţiune a obiectelor
Comunicaţie între obiecte
Colaborare între obiecte
Decuplare intre obiecte
Declanşare
(executie)
Referinţă
Obiect tinta comportament global
al sistemului
(scenarii =
secvenţe de mesaje =
colaborări între obiecte) Operaţie
Comportamentul si operatiile (functiile, procedurile) in abordarea OO
– se reprezinta prin forme de colaborare (comunicare, interactiune)
– intre obiectele ce compun programul (sistemul software)
Colaborarea intre entitati – comunicarea prin mesaje
1.3. Caracteristicile si principiile abordarii OO
UPB - ETTI - Curs POO - an II - seria E 18
Obiect utilizator
Mesaj
Legătură
Interacţiune a obiectelor
Comunicaţie între obiecte
Colaborare între obiecte
Decuplare intre obiecte
Declanşare
(executie)
Referinţă
Obiect tinta
comportament global
al sistemului
(scenarii =
secvenţe de mesaje =
colaborări între obiecte) Operaţie
Operatiile (functiile, procedurile) in abordarea OO
– sunt unitati de comunicare (interactiune)
– numite mesaje
Colaborarea intre entitati – comunicarea prin mesaje
1.3. Caracteristicile si principiile abordarii OO
UPB - ETTI - Curs POO - an II - seria E 19
Constructia unui program de calcul (sistem software)
– este o secventa de iteratii de tip divizare-reunire, fiind necesare:
– descompunerea (analiza) pentru
– a intelege problema si
– a putea formula o conceptie a solutiei
– compunerea (sinteza) pentru
– a construi solutia (a materializa, a realiza efectiv conceptia)
Abordarea orientata spre obiecte a dezvoltarii programelor
Descompunere
(funcţională / OO)
Analiză
(funcţională / OO) Construcţie a
componentelor
Produs
Compunere
(integrare)
Specificatii
1.3. Caracteristicile si principiile abordarii OO
UPB - ETTI - Curs POO - an II - seria E 20
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
Abordarea orientata spre obiecte (OO)
– propune descompunerea bazată pe
– responsabilitati si delegare de responsabilitati (nu doar functionala)
– integrarea a ceea ce este (structural) şi ceea ce face (comportamental)
sistemul (nu doar a ceea ce face)
Cuplajul intre obiecte
– este obtinut prin trimiterea de mesaje (apelurile de operatii)
– si astfel dinamic si slab
Buton
Cabină Uşă
Bec
Aprindere
Deschidere
Deplasare
Actionare
Lift
UPB - ETTI - Curs POO - an II - seria E 21
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
f1
f2
f3
v1
v2
u1
u2
u3
w1
w2
w3
g1
g2
h1
h2 o1 : Clasa1
o2 : Clasa2
o3 : Clasa3
Modelul colaborativ OO in general
– operatiile sunt mesaje
schimbate intre obiecte
(suportul colaborarii)
UPB - ETTI - Curs POO - an II - seria E 22
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
f1
f2
f3
v1
v2
u1
u2
u3
w1
w2
w3
g1
g2
h1
h2 Clasa1
Clasa2
Clasa3
Modelul colaborativ OO in Java
– obiectele fiind create
dinamic sunt accesate
prin referinte
o1
Referinta
catre obiect
Obiectul propriu-zis
(de tip Clasa1)
Obiectul
propriu-zis
(de tip Clasa2)
Obiectul
propriu-zis
(de tip Clasa3) o2
o3
UPB - ETTI - Curs POO - an II - seria E 23
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
Exemple de cod Java
System.out.println(..);
System = clasa Java din pachetul java.lang (importat implicit)
out = atribut public static al clasei System
(variabila partajata de toate obiectele clasei System)
= referinta catre obiect din clasa PrintStream
println(..) = metoda a obiectelor clasei PrintStream
d.p.d.v.
structural
d.p.d.v. al clasificarii
UPB - ETTI - Curs POO - an II - seria E 24
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
Exemple de cod Java
System.out.println(..);
// clasa Java din pachetul java.lang
public class System {
// atribut public static al clasei System
// obiect din clasa PrintStream
public static PrintStream out;
// .. restul codului clasei System
}
exit()
gc()
out
System
in
Clasa utilitara care
incapsuleaza facilitatile
portabile ale sistemelor de
operare (apeluri “sistem”
cum e exit(), console I/O)
UPB - ETTI - Curs POO - an II - seria E 25
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
Exemple de cod Java
System.out.println(..);
// clasa Java din pachetul java.io
public class PrintStream {
// metoda a obiectelor clasei PrintStream
public void println(..) {
// .. codului metodei println()
}
// .. restul codului clasei PrintStream
}
out
print(..)
println(..)
PrintStream
Obiect al unei clase
flux de iesire care
incapsuleaza fluxul de
date catre consola
standard de iesire)
UPB - ETTI - Curs POO - an II - seria E 26
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
exit()
gc()
out
print(..)
println(..)
read()
System
PrintStream
InputStream
in
Exemple de cod Java
System.out.println(i);
System = clasa Java
out = atribut public static al clasei System
= obiect din clasa PrintStream
println() = metoda a obiectelor clasei PrintStream
UPB - ETTI - Curs POO - an II - seria E 27
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
Exemple de cod Java
int i = System.in.read();
System = clasa Java din pachetul java.lang (importat implicit)
in = atribut public static al clasei System
(variabila partajata de toate obiectele clasei System)
= referinta catre obiect din clasa InputStream
read() = metoda a obiectelor clasei InputStream
d.p.d.v.
structural
d.p.d.v. al clasificarii
UPB - ETTI - Curs POO - an II - seria E 28
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
Exemple de cod Java
int i = System.in.read();
// clasa Java din pachetul java.lang
public class System {
// atribut public static (partajat de obiecte) al clasei System
// obiect din clasa InputStream
public static InputStream in;
// .. restul codului clasei System
}
exit()
gc()
out
System
in
UPB - ETTI - Curs POO - an II - seria E 29
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
Exemple de cod Java
int i = System.in.read();
// clasa Java din pachetul java.io
public class InputStream {
// metoda a obiectelor clasei InputStream
public int read() {
// .. codului metodei read()
}
// .. restul codului clasei InputStream
}
read()
InputStream
in
Obiect al unei clase
flux de intrare care
incapsuleaza fluxul de
date dinspre consola
standard de intrare)
UPB - ETTI - Curs POO - an II - seria E 30
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte a dezvoltarii programelor
exit()
gc()
out
print(..)
println(..)
read()
System
PrintStream
InputStream
in
Exemple de cod Java
int i = System.in.read();
System = clasa Java
in = atribut public static al clasei System
= obiect din clasa InputStream
read() = metoda a obiectelor clasei InputStream
UPB - ETTI - Curs POO - an II - seria E 31
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte vs abordarea procedurala
Abordarea
procedurala
Abordarea OO
Partajarea datelor si responsabilitatilor
creeaza probleme
UPB - ETTI - Curs POO - an II - seria E 32
1.3. Caracteristicile si principiile abordarii OO
Abordarea orientata spre obiecte vs abordarea procedurala
Abordarea
procedurala
Abordarea OO
Partajarea datelor si responsabilitatilor
creeaza probleme
Separarea rolurilor
/ responsabilitatilor
si protectia datelor
UPB - ETTI - Curs POO - an II - seria E 33
Programarea ca rezolvare de probleme
Abordarea orientata spre obiecte a dezvoltarii programelor
1.3. Caracteristicile si principiile abordarii OO
Proiectarea
solutiei Analiza
problemei Implementarea
(concretizarea) solutiei
Domeniu al
realitatii
Entitate reala
Incapsulare duala cu ascunderea
datelor si a comportamentului
(clasa de obiecte)
Constructii ale unui
limbaj de programare OO
Modelare /
Abstractizare
Transformare constructii
teoretice in constructii ale
unui limbaj
UPB - ETTI - Curs POO - an II - seria E 34
Orientarea spre obiecte (OO) este astfel o orientare spre
– modelarea / abstractizarea (A) informatica a realitatii (in obiecte si clase)
– entitati bazate pe responsabilitati / roluri (clasele si obiectele)
– incapsularea (E) duala – a reprezentarii datelor si a comportamentului (in
obiecte si clase) cu limitarea accesului
– mentinerea si ascunderea unei stari interne (in obiecte)
– colaborare “sociala” intre entitati / comunicare prin mesaje (intre obiecte)
– definirea unor interfete contractuale (ale claselor) / componente black-box
In plus, OO utilizeaza si concepte mai avansate
– generalizarea claselor in superclase si specializarea claselor in subclase
prin mostenire (I)
– polimorfismul (P) – selectia dinamica a comportamentului operatiei
– bazata pe pozitia in ierarhia de clase a obiectului
1.3. Caracteristicile si principiile abordarii OO
“A P I E”
UPB - ETTI - Curs POO - an II - seria E 35
Orientarea spre obiecte (OO) inseamna
– modelarea / abstractizarea (A) realitatii
– entitati cu responsabilitati / roluri
– incapsularea (E) duala (date+comportament) cu limitarea accesului
– mentinerea si ascunderea unei stari interne
– colaborare intre obiecte / comunicare prin mesaje
– interfete contractuale / componente black-box
Concepte avansate
– generalizarea si specializarea claselor in ierarhii prin mostenire (I)
– polimorfismul (P)
– selectia dinamica a comportamentului operatiei
– bazata pe pozitia in ierarhia de clase a obiectului
1.3. Caracteristicile si principiile abordarii OO
“A P I E”
UPB - ETTI - Curs POO - an II - seria E 36
Principii ale proiectarii orientate spre obiecte (OOD)
Single Responsibility Principle (SRP)
A class should have only one reason to change (a single responsibility).
Open Close Principle (OCP)
Software entities like classes, modules and functions should be open for
extension but closed for modifications.
Liskov’s Substitution Principle (LSP)
Derived types must be completely substitutable for their base types.
Interface Segregation Principle (ISP)
Clients should not be forced to depend upon interfaces that they don’t use.
Dependency Inversion Principle (DIP)
High-level modules should not depend on low-level modules. Both should
depend on abstractions.
Abstractions should not depend on details.
Details should depend on abstractions.
1.3. Caracteristicile si principiile abordarii OO
http://www.ictian.com/2011/07/object-oriented-principles/
UPB - ETTI - Curs POO - an II - seria E 37
Single Responsibility Principle (SRP)
1.3. Caracteristicile si principiile abordarii OO
A class should have only one reason to change.
Fiecare clasa trebuie sa indeplineasca exact o responsabilitate.
O clasa continand “N” responsabilitati trebuie separata in “N” clase
One or more work orders is associated with a specific customer
The purchase order is associated with a vendor
Each line item on the purchase order reflects a part purchased for that vendor
A part in the inventory system may be available from several vendors
Each vendor has its own cost for the part
The inventory system manages its own "cost" of the part
The inventory cost is adjusted using a moving average: (4*oldCost + newCost)/5
Parts are designated as taxable or not
Each PO line item is purchased either for inventory or as a part needed for a work order
When the vendor invoice comes in, additional charges, such as shipping, hazmat, etc., are added to the purchase order
The purchase order is closed when the purchased items are reconciled with the invoice
When the PO is closed, any parts that were purchased against a work order are automatically billed to the customer
Additional charges on the PO are added to the charge slip
Since line items on a purchase order may be associated with different work orders from different customers, the additional charges have to be fairly
distributed
The only rule that anyone can come up with regarding this distribution is to divvy up the charges based on the part cost in relation to the total
purchase order cost
Parts are billed on charge slips, which emulates the manual process being used
One or more charge slips are associated with one work order
Parts are assigned added to the PO by selecting the part out of inventory.
Only parts for the vendor from which the parts will be purchased should be available for addition to the PO
Customers get different discount rates and may or may not be taxable
Set de cerinte pentru un sistem
de automatic customer billing
http://www.codeproject.com/KB/cs/autp1.aspx
UPB - ETTI - Curs POO - an II - seria E 38
Single Responsibility Principle (SRP)
1.3. Caracteristicile si principiile abordarii OO
A class should have
only one reason to
change (single
responsibility).
Solutia: utilizand carduri
CRC (Class,
Responsibility,
Collaboration) putem
crea un model al
sistemului bazat pe
principiul SRP
Card
CRC
UPB - ETTI - Curs POO - an II - seria E 39
Open Close Principle (OCP)
Software entities like classes, modules and functions should be open for extension
but closed for modifications.
Clasele trebuie sa poata fi usor extinse
fara a fi modificat codul existent
1.3. Caracteristicile si principiile abordarii OO
Clasa Account are cate o
operatie pentru fiecare
subtip al clasei AccountType
Adaugarea sau eliminarea
unei subclase a clasei
AccountType impune
adaugarea sau eliminarea
unei metode in clasa Account
Trebuie permisa
adaugarea/eliminarea noi
functionalitati sub forma de
operatii sau clase, cu minimum sau
fara modificari in codul existent
(pastrand cat mai mult posibil codul
existent nemodificat)
Code NOT
closed for
modification
UPB - ETTI - Curs POO - an II - seria E 40
Open Close Principle (OCP)
Software entities like classes, modules and functions should be open for extension
but closed for modifications.
Solutia: clasa Account trebuie sa aiba operatii generice, care nu depind de
subtipurile clasei AccountType
1.3. Caracteristicile si principiile abordarii OO
OK!
OK!
Code NOT
closed for
modification
UPB - ETTI - Curs POO - an II - seria E 41
Liskov’s Substitution Principle (LSP)
1.3. Caracteristicile si principiile abordarii OO
Derived types must be completely substitutable for their base types.
Daca un cod client (context) utilizeaza o clasa de baza atunci o
referinta catre acea clasa de baza poate fi folosita catre obiecte dintr-
o clasa derivata fara a afecta functionalitatea codului client (context).
Codul client (context) care utilizeaza pointeri sau referinte catre o
clasa de baza trebuie sa fie capabil sa foloseasca obiecte din clase
derivate fara a conta (fara a sti) acest lucru.
clasa de baza
clasa
derivata
obiecte
din clasa
de baza
obiecte
din clasa
derivata
UPB - ETTI - Curs POO - an II - seria E 42
Interface Segregation Principle (ISP)
1.3. Caracteristicile si principiile abordarii OO
Clients should not be forced to depend upon interfaces that they don’t use.
Clientii (codurile context) nu trebuie fortati sa implementeze interfete pe
care nu le utilizeze
In loc de a proiecta
o interfata cu multe
operatii (fat), trebuie
proiectate mai multe
interfete mai mici
bazate pe grupuri
de operatii
Fiecare interfata mica
urmand sa serveasca
un sub-modul A typical “fat”
interface
UPB - ETTI - Curs POO - an II - seria E 43
Interface Segregation Principle (ISP)
1.3. Caracteristicile si principiile abordarii OO
Clients should not be forced to depend upon interfaces that they don’t use.
Solutia: mai multe interfete mai mici bazate pe grupuri de operatii
OK!
UPB - ETTI - Curs POO - an II - seria E 44
Dependency Inversion Principle (DIP)
1.3. Caracteristicile si principiile abordarii OO
High-level modules should not depend on low-level modules. Both should
depend on abstractions.
Abstractions should not depend on details. Details should depend on
abstractions.
Componentele de nivel inalt trebuie decuplate de componentele de
nivel redus
Trebuie permisa reutilizarea diferitelor componente de nivel redus
Inlocuirea componentelor de nivel redus trebuie obtinuta fara
schimbari in componentele de nivel inalt
Majoritatea systemelor software actuale sunt organizate ierarhic (in niveluri).
In implementarea naiva a unui sistem ierarhic nivelurile inalte (UI /
Business) depind de cele reduse (Business / Database)
Problema este ca schimbari in
componentele inferioare le
afecteaza pe cele de nivel inalt
UPB - ETTI - Curs POO - an II - seria E 45
Dependency Inversion Principle (DIP)
1.3. Caracteristicile si principiile abordarii OO
High-level modules should not depend on low-level modules. Both should
depend on abstractions.
Abstractions should not depend on details. Details should depend on
abstractions.
Solutia: inversarea dependentelor
– componentele de nivel inalt
depinzand doar de interfete
abstracte (nemodificabile),
implementate de componentele
de nivel redus
OK!