1. OYP prinsipləri ilə tanışlıq
Bu gün siz özünüz üçün yeni və maraqlı bir dünyanı kəşf edəcəksiniz. Bu dünya adlanır OYP — obyekt-yönümlü proqramlaşdırma. Əvvəllər siz artıq class-lar və object-lərlə tanış olmuşdunuz. Bu gün onlar haqqında daha çox, çox daha çox şey öyrənəcəksiniz.
OYP proqramların mürəkkəbliyi artdıqca ortaya çıxıb. İlk proqramlarda dəyişənlərin və funksiyaların sayı on minlərlə çatanda başa düşüldü ki, bununla bağlı nəsə edilməlidir. Bu məsələyə bir həll kimi, məlumatları və onlarla işləyən funksiyaları ayrıca obyektlərdə birləşdirmək təklif olundu.
İndi proqramçılara obyektlərin qarşılıqlı təsirlərini və obyekt daxilində baş verən prosesləri ayrıca təsvir etməli olurdular. Bu, proqramların başa düşülməsini və yazılmasını xeyli asanlaşdırdı. Ancaq sual açıq qaldı: hansı funksiyalar obyektin içində olmalıdır, hansılar isə obyektlər arasında?
Çoxlu yanaşmalar yoxlanıldı və ən yaxşı təcrübələr əsasında OYP-nin 4 prinsipi formalaşdırıldı. Bunlar: abstraksiya, enkapsulyasiya, irsiyyət və polimorfizm. Əvvəllər onların sayı yalnız üç idi, amma sonra abstraksiyanı da əlavə etmək qərara alındı.
2. Abstraksiya
Runetdə hələ də OOP-də abstraksiya anlayışı haqqında mübahisələr var. Problem ondadır ki, hamı səhv deyil, əksinə, hamı haqlıdır. Proqram nə qədər kiçikdirsə, abstraksiya bir o qədər Java dilinə bağlıdır, nə qədər böyüksə, bir o qədər real dünya obyektlərinin modelləşdirilməsinə/sadələşdirilməsinə bağlıdır.
Ancaq görünən odur ki, ən yaxşı zehinlər razılaşıblar ki:
Abstraksiya — obyektin yalnız proqramda onu kifayət qədər dəqiq təmsil etmək üçün lazım olan xüsusiyyətlərindən istifadə edilməsidir. Əsas fikir, obyekti ən minimal sahə və metod dəsti ilə və eyni zamanda həll ediləcək iş üçün kifayət qədər dəqiqliklə təqdim etməkdir.
Java proqramlaşdırma dilində abstraksiya abstrakt siniflər və interfeyslərdən istifadə etməklə həyata keçirilir.
Real həyatda abstraksiya
Real həyatda abstraksiyanın yaxşı nümunəsi şirkət və ya təşkilatda vəzifələrin təsviridir. Vəzifənin adı bir şeydir, hər bir konkret vəzifənin məsuliyyətləri isə tamamilə başqa bir şeydir.
Təsəvvür edin ki, siz gələcək şirkətinizin strukturunu planlaşdırırsınız. Məsələn, katibin vəzifələrini götürüb bir neçə digər vəzifələr arasında "bölüşdürə" bilərsiniz. İcraçı direktorun vəzifəsini bir neçə müstəqil vəzifələrə ayıra bilərsiniz: maliyyə direktoru, texniki direktor, marketinq direktoru, insan resursları direktoru. Yaxud da, ofis-menecer və rekruiter vəzifələrini birləşdirib bir vəzifə edə bilərsiniz.
Siz şirkətinizdə vəzifələrin adlarını uydurursunuz və sonra bu vəzifələr üzrə məsuliyyətləri "paylaşırsınız". Abstraksiya – obyektin bütövlüyündən uzaqlaşıb bizə lazım olan onun əsas xüsusiyyətlərini və komponentlərini seçməkdir.
Proqramlaşdırma baxımından isə, abstraksiya deyək ki, proqramı düzgün obyektlərə bölməkdir. Böyük bir proqramı adətən qarşılıqlı əlaqə quran obyektlər kimi onlarla şəkildə təqdim etmək olar. Abstraksiya əsas xüsusiyyətləri seçib ikinci dərəcəli olanları görməməyə imkan verir.
3. İnkapusulyasiya
İnkapusulyasiyanın məqsədi şeylərin keyfiyyətli qarşılıq əlaqəsini yaxşılaşdırmaq üçün onları sadələşdirməkdir.
Nəyisə sadələşdirməyin ən yaxşı yolu mürəkkəb olan hər şeyi kənar gözlərdən gizlətməkdir. Məsələn, əgər sizi Boeing kabinəsinə oturtsalar, ilk anda onu necə idarə edəcəyinizi başa düşməyəcəksiniz:
Digər tərəfdən, təyyarə sərnişinləri üçün hər şey daha sadə görünür: bilet al, təyyarəyə min, uçun və enin. Siz yalnız «bilet almaq» və «təyyarəyə minmək» bacarıqları ilə asanlıqla bir qitədən digərinə uça bilərsiniz. Uçuşa hazırlıq, uçuş, eniş və müxtəlif fövqəladə vəziyyətlərin həlli kimi mürəkkəbliklər sizdən gizlədilir. Peyk naviqasiyası, autopilot və hava limanlarındakı uçuş mərkəzlərindən danışmağa belə ehtiyac yoxdur. Bu da bizim həyatımızı asanlaşdırır.
Proqramlaşdırma baxımından inkapusulyasiya — bu «reallaşdırmanın gizlədilməsi»dir. Mən bu cür tərifi bəyənirəm. Bizim class çoxsaylı methodlar və müxtəlif vəziyyətlərdə çox mürəkkəb davranışları özündə birləşdirə bilər. Amma biz onun bütün methodlarını (private modifikatoru ilə qeyd etməklə) kənar gözlərdən gizlədə bilərik və digər class-larla qarşılıqlı əlaqə üçün yalnız bir neçə method (public modifikatoru ilə qeyd etməklə) açıq saxlaya bilərik. Beləliklə, proqramımızdakı qalan bütün class-lar bu class-da yalnız üç method görəcək və məhz onları çağıracaqlar. Bütün mürəkkəbliklər isə, xoşbəxt sərnişinlərdən pilot kabinasının gizlədilməsi kimi, class-ın daxilində gizlədilir.
4. İrsiçilik
İrsiçiliyin iki tərəfi var. Proqramlaşdırma tərəfi və real həyat tərəfi. Proqramlaşdırma nöqteyi-nəzərindən irsiçilik — bu, iki sinif arasında xüsusi əlaqədir. Amma, daha maraqlısı, real həyatda irsiçilik nədir?
Əgər bizə real həyatda nəsə yaratmaq lazımdırsa, qarşımızda iki seçim var:
- Lazım olan şeyi sıfırdan yaratmaq, bu zaman çox vaxt və enerji sərf olunur.
- Lazım olan şeyi artıq mövcud olanın əsasında yaratmaq.
Ən optimal strategiya belə görünür: mövcud olan yaxşı həlli götürürük, bir az inkişaf etdiririk, öz ehtiyaclarımıza uyğunlaşdırırıq və istifadə edirik.
Əgər insan yaranma tarixini izləsək, məlum olur ki, planetdə həyatın yaranmasından bəri milyardlarla il keçib. Əgər təsəvvür etsək ki, insan meymundan (meymun əsasında) yaranıbsa, onda cəmi bir neçə milyon il keçmişdir. Sıfırdan yaratmaq — daha uzun sürür. Çox daha uzun.
Proqramlaşdırmada da bir sinifi digərinin əsasında yaratmaq imkanı var. Yeni sinif artıq mövcud olanın nəsli (irsi) olur. Bu, çox sərfəlidir, əgər bizdə 80%-90% lazım olan məlumatları və metodları saxlayan sinif varsa. Biz sadəcə olaraq uyğun sinifi yeni sinifimizin valideyni elan edirik və yeni sinifdə avtomatik olaraq valideyn sinifinin bütün məlumatları və metodları meydana çıxır. Rahatdır, elə deyilmi?
5. Polimorfizm
Polimorfizm — proqramlaşdırma sahəsindən bir anlayışdır. Bu, bir interfeysin arxasında müxtəlif realizasiyaların gizləndiyi vəziyyəti təsvir edir. Real həyatda onun oxşarını tapmağa çalışsaq, onlardan biri maşını idarəetmə prosesi olacaq.
Əgər insan yük maşınını idarə edə bilirsə, onu təcili yardım maşınının sükanı arxasına da, idman avtomobilinə də əyləşdirmək olar. İnsan maşını idarə edə bilir, fərqi yoxdur bu nə maşındır, çünki onların hamısı eyni idarəetmə interfeysinə malikdir: sükan, pedallar və sürətlər qutusu dəstəyi. Maşınların daxili quruluşu fərqlidir, amma hamısında eyni idarəetmə interfeysi var.
Proqramlaşdırmaya qayıtsaq, polimorfizm müxtəlif siniflərin obyektlərinə eyni şəkildə yanaşmağa imkan verir (adətən ümumi bir əcdadı olan siniflər) — bu, qiymətləndirmək çətin olan bir şeydir. Proqram nə qədər böyükdürsə, polimorfizmin dəyəri bir o qədər yüksəkdir.
ООP — prinsiplərdir. Daxili qaydalar. Onlardan hər biri bizi bir şeydə məhdudlaşdırır, amma böyük ölçüdə proqram yazdığımızda böyük üstünlüklər verir. ООP-nin dörd prinsipini bir stulun dörd ayağına bənzədə bilərik. Ən azı birini çıxarsan, bütün sistem dayanıqsız olacaq.
GO TO FULL VERSION