Меню

SOLID prinsipləri nədir?

Salam, dostlar. Bu məqalədə “SOLID prinsipləri nədir?” və “Niyə biz bu prinsiplərdən istifadə etməliyik?” suallarına cavab verməyə çalışmışam. Ümid edirəm, məqaləm proqramçılar üçün faydalı olar.

Bəzi proqramçıların ən yaralı yerlərindən biri müştərinin və ya layihə menecerinin yazılmış proqramın hər hansı funksiyasını bəyənməməsi, texniki tələbləri dəyişdirməsi, yeni funksiya əlavə etmək və ya mövcud funksiyanı ləğv etmək haqda qərar verməsidir. Axı bunları həyata keçirdikdə proqramda gözlənilməz xətalar ortaya çıxır, bəzən isə proqramı işlək vəziyyətə belə gətirmək mümkün olmur və nəticədə proqram fəaliyyətini dayandırır. Bu acınacaqlı halların əsas səbəbi odur ki, proqramçı proqramı yazarkən gələcək dəyişikliklərin mümkünlüyünü nəzərə almayıb və strukturu səliqəsiz şəkildə qurub.

Buna görə, proqramın yazılması zamanı struktur elə qurulmalıdır ki, proqramın müəyyən bir hissəsinə edilən dəyişiklik onun digər hissələrinə minimal dərəcədə təsir etsin. Yəni, proqram bir-birindən asılı olmayan modullar yığımından ibarət olmalıdır ki, lazım gələrsə, hər hansı modulu asanlıqla ləğv etmək və ya yeni bir modulu əlavə etmək mümkün olsun.

Buna nail olmağımızda SOLID prinsipləri köməyimizə çatır. SOLID abreviaturası 5 prinsipin baş hərflərindən əmələ gəlmişdir. Gəlin bu prinsiplərə ayrı-ayrılıqda nəzər yetirək.

S – Single responsibility principle (SRP) (Yeganə məsuliyyət prinsipi)

Hər bir “class” (sinif), funksiya və ya metodun yeganə vəzifəsi, məsuliyyəti olmalıdır; o, digər siniflərin tapşırıqlarını qətiyyən yerinə yetirməməlidir. Əks halda, bir neçə vəzifəyə malik obyektdə edilən kiçik dəyişiklik zamanı bütün vəzifələrə görə həmin dəyişikliyi tək-tək tətbiq etmək lazım olacaqdır. Bu isə böyük layihələrdə proqramçını çıxılmaz vəziyyətə salacaqdır.

solid_principles_single

 

O – Open/Closed Principle (OSP) (Açıq/Bağlı prinsipi)

Proqram, obyekt və ya “entity” inkişafa, əlavələr üçün açıq, dəyişikliklər üçün isə bağlı olmalıdır. Lazımi əlavələr interfeys və ya “abstract class”-lardan istifadə olunaraq tətbiq edilə bilər.

solid_principles_open_closed

 

L – Liskov ‘s Substitution Principle (LSP) (Liskovun əvəz etmə prinsipi)

Hər hansı bir “class”-ın (“parent class”) ondan törəmiş “class” (“child class”) ilə əvəz edilməsi prosesi problemsız keçməlidir. Əgər bu dəyişikliyə mane olan metod, obyekt, dəyişən və s. varsa, dəyişiklik zamanı xəta baş verərsə, bu xətaya səbəb olan obyekt silinməli, və ya yeri dəyişdirilməlidir.

solid_principles_liskov

 

I – Interface Segregation Principle (ISP) (İnterfeysləri ayırma prinsipi)

Bu prinsipə görə, interfeysə onun işi üçün lazım olmayan özəlliklər əlavə edilməli deyil. Yazılan funksiyaların hamısını bir yerə toplamaq əvəzinə hissələrə ayrılmış layoutlardan istifadə etmək daha əlverişlidir. Bildiyimiz kimi, obyektlər interfeysi “implement” edərkən həmin interfeysin bütün metodlarını “override” etmək məcburiyyətindədir. Əgər bu interfeysi “implement” edən “class” oradakı hər hansı bir metodu istifadə etməyəcəksə, həmin metodu boş yerə “override” etməsi prinsipial olaraq düzgün deyil. Belə hallarda, həmin metodu başqa interfeysə ayırmaq lazımdır. Belə ki, interfeyslər də parçalanaraq yeganə məsuliyyətləri olacaq şəklə gətirilməlidir.

solid_principles_interface

 

D – Dependency Inversion Principle (DIP) (Asılılıqların inversiyası prinsipi)

“Entity”-lər, “class”-lar konkretlərdən deyil, abstraktlardan asılı olmalıdır. Bu prinsipə uyğun yazılmamış proqramda obyektlər, “ana class”-lar, “alt-class”-lar, metodlar və s. arasında bir çox asılılıqlar meydana çıxır. Sonradan proqrama yeni funksiyalar əlavə etmək lazım gələrsə, kodları təkrarlamaq, hər bir “class”-da bir-bir yeni funksiyaları əlavə etmək zərurəti işimizi xeyli çətinləşdirəcək. Qısa olaraq desək, bu prinsipin məğzi sıx əlaqələndirilmiş (“tightly coupled”) modullar arasına interfeyslər, “abstrakt class”-lar əlavə edərək birbaşa əlaqələri zəiflətməkdən ibarətdir (“loose coupling”).

solid_principles_dependency

SOLİD prinsipləri ümumi şəkildə bundan ibarətdir. Əlbəttə ki, bu prinsiplərə əməl etməyə bilərsiniz, lakin bir müddətdən sonra layihə böyüyəcək və hər hansı komponenti dəyişmək, yenisi ilə əvəz etmək çox əziyyətli bir işə çevriləcək. Odur ki, bunun qarşısını almaq üçün öncədən arxitekturanı düzgün qurmalısınız.