Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Çox vaxt mən SOLID prinsipləri haqqında eşitməmiş tərtibatçılarla görüşürəm (biz burada onlar haqqında ətraflı danışdı.. - Transl.) və ya obyekt yönümlü proqramlaşdırma (OOP) və ya eşitdim, lakin praktikada istifadə etməyin. Bu məqalə tərtibatçıya gündəlik işində kömək edən OOP prinsiplərinin faydalarını təsvir edir. Onlardan bəziləri yaxşı tanınır, digərləri o qədər də çox deyil, buna görə məqalə həm yeni başlayanlar, həm də artıq təcrübəli proqramçılar üçün faydalı olacaqdır.

Xatırladırıq: "Habr" ın bütün oxucuları üçün - "Habr" promosyon kodundan istifadə edərək hər hansı bir Skillbox kursuna yazılarkən 10 000 rubl endirim.

Skillbox tövsiyə edir: Onlayn təhsil kursu "Java Developer".

QURU (Özünüzü təkrarlamayın)

Kifayət qədər sadə bir prinsip, mahiyyəti adından aydındır: "Özünüzü təkrarlamayın". Bir proqramçı üçün bu, dublikat kodun qarşısını almaq ehtiyacı, həmçinin işdə abstraksiyadan istifadə etmək bacarığı deməkdir.

Kodda təkrarlanan iki bölmə varsa, onlar bir metodda birləşdirilməlidir. Sərt kodlanmış dəyər bir dəfədən çox istifadə edilərsə, onu ictimai sabitə çevirməyə dəyər.

Bu, OOP-un əsas vəzifəsi olan kodu sadələşdirmək və saxlanmasını asanlaşdırmaq üçün lazımdır. Siz həm də ittifaqdan sui-istifadə etməməlisiniz, çünki eyni kod həm OrderId, həm də SSN ilə yoxlamadan keçməyəcək.

Encapsulation dəyişdirin

Əksər şirkətlərin proqram məhsulları daim inkişaf edir. Bu o deməkdir ki, kodu dəyişmək lazımdır, onu saxlamaq lazımdır. İnkapsulyasiya ilə həyatınızı asanlaşdıra bilərsiniz. Bu, mövcud kod bazanızı daha effektiv şəkildə sınamağa və saxlamağa imkan verəcək. Budur bir nümunə.

Əgər Java-da yazırsansa standart olaraq metodlara və dəyişənlərə özəl təyin edin.

Açıqlıq / yaxınlıq prinsipi

Bu prinsipi aşağıdakı ifadəni oxumaqla asanlıqla yadda saxlamaq olar: “Proqram təminatı obyektləri (siniflər, modullar, funksiyalar və s.) genişləndirilmək üçün açıq, lakin modifikasiya üçün qapalı olmalıdır”. Praktikada bu o deməkdir ki, onlar mənbə kodunu dəyişmədən davranışlarının dəyişdirilməsinə icazə verə bilərlər.

Prinsip mənbə koduna edilən dəyişikliklər reviziya, vahid testi və digər prosedurları tələb etdikdə vacibdir. Açıq/qapalı prinsipə tabe olan kod genişləndirildikdə dəyişmir, ona görə də onunla bağlı problemlər daha az olur.

Bu prinsipi pozan kodun bir nümunəsidir.

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Əgər orada nəyisə dəyişdirmək lazımdırsa, bu, çox vaxt aparacaq, çünki kodun istədiyiniz fraqmentlə əlaqəsi olan bütün hissələrini dəyişməli olacaqsınız.

Yeri gəlmişkən, açıqlıq-qapalılıq SOLID-in prinsiplərindən biridir.

Vahid Məsuliyyət Prinsipi (SRP)

SOLID dəstindən başqa bir prinsip. Orada deyilir ki, "sinf dəyişikliyinə səbəb olan yalnız bir səbəb var". Sinfin yalnız bir tapşırığı var. Onun bir neçə üsulu ola bilər, lakin onların hər biri yalnız ümumi problemi həll etmək üçün istifadə olunur. Bütün üsullar və xüsusiyyətlər yalnız buna xidmət etməlidir.

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Bu prinsipin dəyəri ondan ibarətdir ki, o, tək proqram təminatı ilə kod arasındakı əlaqəni zəiflədir. Bir sinifə birdən çox funksionallıq əlavə etmək iki funksiya arasında əlaqə yaradır. Beləliklə, onlardan birini dəyişdirsəniz, birincisi ilə əlaqəli ikincini korlamaq üçün böyük bir şans var. Və bu, bütün problemləri əvvəlcədən müəyyən etmək üçün sınaq dövrlərinin artırılması deməkdir.

Asılılığın inversiya prinsipi (DIP)

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Yuxarıdakılar, AppManager-in EventLogWriter-dən asılı olduğu kod nümunəsidir ki, bu da öz növbəsində AppManager ilə sıx bağlıdır. Bildirişi göstərmək üçün başqa üsula ehtiyacınız varsa, təkan, SMS və ya e-poçt olsun, AppManager sinfini dəyişdirməlisiniz.

Problem DIP ilə həll edilə bilər. Beləliklə, AppManager əvəzinə biz çərçivədən istifadə edilərək daxil ediləcək EventLogWriter tələb edirik.

DIP asılılıq modulunu dəyişdirərək fərdi modulları başqaları ilə asanlıqla əvəz etməyə imkan verir. Bu, bir modulu digərlərinə təsir etmədən dəyişdirməyə imkan verir.

Vərəsəlik əvəzinə kompozisiya

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipiKodu təkrar istifadə etməyin iki əsas yolu miras və kompozisiyadır, hər birinin öz üstünlükləri və mənfi cəhətləri var. İkincisi daha çevik olduğu üçün adətən üstünlük verilir.

Kompozisiya, xassələrini təyin etməklə, işləmə zamanı sinifin davranışını dəyişdirmək imkanı verir. İnterfeysləri həyata keçirərkən daha çevik həyata keçirmə imkanı verən polimorfizmdən istifadə olunur.

Hətta "Effektiv Java" Joshua Bloch miras üzərində kompozisiyaya üstünlük verməyi məsləhət görür.

Barbara Liskov əvəzetmə prinsipi (LSP)

SOLID alət dəstindən başqa bir prinsip. Bu alt tiplərin supertip üçün dəyişdirilə biləcəyini bildirir. Yəni supersiniflə işləyən metod və funksiyalar onun alt sinifləri ilə problemsiz işləyə bilməlidir.

LSP həm Vahid Məsuliyyət Prinsipinə, həm də Məsuliyyətin Ayrılması Prinsipinə aiddir. Bir sinif alt sinifdən daha çox funksionallıq təmin edərsə, sonuncu bu prinsipi pozaraq bəzi funksionallığı dəstəkləməyəcəkdir.

Budur LSP ilə ziddiyyət təşkil edən kod parçası.

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Sahə(Düzbucaqlı r) metodu Düzbucaqlının sahəsini hesablayır. Kvadrat burada düzbucaqlı olmadığı üçün proqram Meydanı icra etdikdən sonra çökəcək. LSP prinsipinə əsasən, əsas siniflərə istinadlardan istifadə edən funksiyalar əlavə təlimatlar olmadan törəmə siniflərin obyektlərindən istifadə edə bilməlidir.

Alt növün spesifik tərifi olan bu prinsip Barbara Liskov tərəfindən 1987-ci ildə "Məlumatların Abstraksiya və İerarxiya" adlı konfransın əsas çıxışında təklif edilmişdir - bu səbəbdən onun adı.

İnterfeys Ayrılma Prinsipi (ISP)

Başqa bir SOLID prinsipi. Onun sözlərinə görə, istifadə olunmayan interfeys tətbiq edilməməlidir. Bu prinsipə riayət etmək, işin məntiqində dəyişikliklər edərkən sistemin çevik və refaktor edilə bilən qalmasına kömək edir.

Çox vaxt bu vəziyyət, interfeys eyni anda bir neçə funksiyaya malik olduqda baş verir və müştəri onlardan yalnız birinə ehtiyac duyur.

İnterfeys yazmaq mürəkkəb iş olduğundan, iş başa çatdıqdan sonra heç nəyi pozmadan dəyişdirmək problem yaradacaq.

Java-da ISP prinsipinin üstünlüyü ondan ibarətdir ki, bütün metodlar əvvəlcə həyata keçirilməlidir və yalnız bundan sonra siniflər tərəfindən istifadə oluna bilər. Buna görə də, prinsip üsulların sayını azaltmağa imkan verir.

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Tətbiq üçün deyil, interfeys üçün proqramlaşdırma

Burada hər şey adından aydın görünür. Bu prinsipin tətbiqi istənilən yeni interfeys tətbiqi ilə işləyə bilən çevik koda gətirib çıxarır.

Dəyişənlər, qaytarma növləri və ya metod arqumentinin növü üçün interfeys növündən istifadə etməlisiniz. Məsələn, SubClass əvəzinə SuperClass istifadə olunur.

İ.E:

Siyahı nömrələri= getNumbers();

Amma yox:

ArrayList nömrələri = getNumbers();

Burada yuxarıda deyilənlərin praktiki həyata keçirilməsidir.

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Nümayəndəlik prinsipi

Ümumi nümunə Java-da equals() və hashCode() metodlarıdır. İki obyekti müqayisə etmək lazım olduqda, bu hərəkət müştərinin əvəzinə müvafiq sinifə verilir.

Prinsipin üstünlüyü ondan ibarətdir ki, kodun təkrarlanması yoxdur və davranışı dəyişdirmək nisbətən asandır. Bu, tədbir nümayəndə heyətinə də aiddir.

Hər bir tərtibatçının bilməli olduğu 10 obyekt yönümlü proqramlaşdırma prinsipi

Bütün bu prinsiplər yüksək birləşmə və aşağı birləşmə ilə daha çevik, gözəl və etibarlı kod yazmağa imkan verir. Əlbəttə ki, nəzəriyyə yaxşıdır, lakin bir tərtibatçının həqiqətən əldə etdiyi biliklərdən istifadə etməyə başlaması üçün təcrübə lazımdır. OOP prinsiplərini mənimsədikdən sonra növbəti addım ümumi proqram təminatının inkişafı problemlərinin həlli üçün dizayn nümunələrinin öyrənilməsi ola bilər.

Skillbox tövsiyə edir:

Mənbə: www.habr.com

Добавить комментарий