S O L I D

S: Single Responsibility Principle
O: Open-Closed Principle 
L: Liskov Substitution Principle
I: Interface Segregation Principle
D: Dependency Inversion Principle

S : Her bir class yalniz bir ishi gormelidir
DBConnector classimiz var. Bu class yalniz DB ya connect ishini gormelidir, her hansi CRUD emeliyyati burda olmasi duzgun deyil.
Bashqa numune, Tutaq ki, Student ve Teacher classlarimiz var. Melumdur ki, Student ve Teacher ayri ayriliqda datalara sahibdir, bunlari eyni class daxilinde tutmaq duzgun deyil.
Bu metodlara da aiddir.

O : Class extends olunmaga aciq, modifier olunmaga bagli olmalidir.
Tutaq ki, Car ve ondan extends eden BMW classi var. Sonradan eger BMW classinda her hansi deyishiklik olsa, bu zaman NewBMW classini yaradib ve BMW den extends etmeliyik. BMW classinin ichinde deyishiklik etmek duzgun sayilmir.

L : Extends edilen classin obyekti evezine extends olunan classin obyektini gondermek hemishe mumkun olmalidir.
Meselen Car classini BMW class i extends edib. Bu zaman istenilen vaxt Car obyektine BMW obyektini menimsetmek olar.
Yeni, maksimum derecede xususiyyetler ust-uste dushmelidir.
Ust-uste dushmelidir dedikde, meselen Car class-da start metodu hansisa bir sebebden start olmadiqda false netice qaytarirsa, bu metodu override eden BMW class-da bu methodda bu cur ishlemelidir. (start olmadiqda false yox her hansisa bir exception atirsa, artiq bu qayda pozulmus olur)

I : Istifadecini ona lazim olmayacaq metodlari implement etmeye mecbur elememeliyik.
Meselen bir Generateable interface var. Bu interface de generateExcel, genereatePdf methodlari var. Bu interfeysi istifade etmek isteyen, gerek her iki methodu implement etsin ve ya lazim olmayani bosh saxlasin. Bu da uygun variant deyil. Buna gore her bir metodu ayri bir interface de saxlamaq daha uygundur.

D : Abstract olmalidir, konkret yox.
Yeni class istifadecisi, hal hazirda hansi obyektden istifade etdiyini bilmemelidir. Sisteme muraciet etdikde hansi obyektin lazim olacagini sistem teyin etmelidir. (Factory Pattern) 
 
Ətraflı : 
1. https://javarush.ru/groups/posts/osnovnye-principy-dizajna-klassov-solid-v-java

Comments

Popular posts from this blog

Validation for AZ phone numbers with RegEx in Java

Java necə işləyir, kod nədir ?

@Transactional annotation haqqinda. Cascade istifade olunmasi