2.1 OOP-nin əsas konseptləri
Obyekt-yönümlü proqramlaşdırma yanaşmasının əsasında OOP-nin paradiqması durur. Bu o deməkdir ki, proqramın bütün varlıqları obyektlər kimi nəzərdən keçirilir. Obyektlər — bu məlumatlar + həmin məlumatlarla işləyən metodlar/funksiyalardır.
Həmçinin belə demək olar ki, hər bir obyektin vəziyyəti və davranışı var. Obyektin vəziyyəti onun daxili dəyişənlərində saxlanılan məlumatlarla təmin edilir. Obyektin davranışı — onun metodlarının yerinə yetirdiyi hərəkətlərin cəmidir.
Orta ölçülü proqramda minlərlə, böyük proqramda isə milyonlarla obyekt var. Xaosu bir az azaltmaq üçün obyektləri siniflərə, sinifləri isə müəyyən bir iyerarxiyaya təşkil etmək qərarına gəlinmişdir.
Hər bir obyektin onu yaradan bir sinifi var. Bir tərəfdən sinif — obyektin bir növ şablonudur, digər tərəfdən isə müəyyən xüsusiyyətləri olan müstəqil bir obyekt kimi qəbul edilir (aşağıda daha ətraflı).
Siniflərin konseptini daha yaxşı başa düşmək üçün aşağıdakı təriflərlə tanış olun:
Sinif — obyektlərin yaradılması üçün şablon və ya sxemdir, bu şablon həmin növün bütün obyektlərinə xas olan atributlar və metodları müəyyən edir. Siniflər məlumatları və onlarla işləyən funksiyaları bir araya toplamağa kömək edir.
Obyekt — sinifin nümunəsidir. Hər bir obyekt vəziyyətə (atributlarla təyin edilir) və davranışa (metodlarla təyin edilir) malikdir.
Enkapsulyasiya — sinifin daxili realizasiyasını gizlətmək və həmin sinifin obyektləri ilə qarşılıqlı əlaqə üçün interfeys təmin etməkdir. Bu, məlumatları qorumağa və onlara girişi idarə etməyə kömək edir.
İrsi — bir sinifin (uşaq sinif) başqa bir sinifin (valideyn sinif) atributlarını və metodlarını özündə cəmləyə bilməsidir. Bu kodun yenidən istifadəsinə və onun dəstəklənməsinin sadələşdirilməsinə kömək edir.
Polimorfizm — müxtəlif siniflərin obyektləri ilə işləmək üçün vahid interfeysdən istifadə etməyə imkan verir. Bu, valideyn siniflərindən miras alınan metodların uşaq siniflərdə yenidən təyin olunması ilə həyata keçirilir.
Abstraksiya — obyektlərin ümumi xüsusiyyətlərinin seçilməsindən və həmin ümumi xüsusiyyətləri təqdim edən siniflərin yaradılmasından ibarətdir. Bu, mürəkkəb sistemləri sadələşdirməyə və onların aydınlığını artırmağa kömək edir.
Əgər yuxarıdakıların ən azı yarısını başa düşdünüzsə — əla. Daha sonra bu məqamları daha ətraflı müzakirə edəcəyik.
2.2 Abstraksiya
Abstraksiyanın real həyatda yaxşı bir nümunəsi şirkətdə və ya təşkilatda vəzifələrin təsviridir. Vəzifənin adı bir şeydir, amma hər bir konkret vəzifənin öhdəlikləri isə tamam başqa bir şeydir.
Təsəvvür elə ki, gələcək şirkətinin strukturunu layihələndirirsən. Sən katibin vəzifələrini digər vəzifələr arasında "bölüşdürə" bilərsən. İcraçı direktorun vəzifəsini bir neçə müstəqil vəzifəyə bölə bilərsən: maliyyə direktoru, texniki direktor, marketinq direktoru, HR direktoru. Və ya, məsələn, ofis-menecer və işə götürən rollarını bir rolda birləşdirə bilərsən.
Proqramlaşdırma baxımından, abstraksiya – proqramı obyektlərə düzgün şəkildə bölməkdir, desək, yalan olmaz. Adətən hər hansı böyük proqramı onlarla müxtəlif şəkildə real obyektlərlə təsəvvür etmək olar. Abstraksiya əsas xüsusiyyətləri seçməyə və ikinci dərəcəli olanlardan qaçmağa imkan verir.

Abstraksiya hərbi işlərdəki strategiya kimidir. Pis strategiya – və heç bir dahiyanə taktika vəziyyəti düzəldə bilməz.
2.3 İnkapulyasiya
İnkapulyasiyanın məqsədi — şeylərin qarşılıqlı əlaqəsini sadələşdirməklə onların keyfiyyətini yaxşılaşdırmaqdır.

Bəs bir şeyi sadələşdirmək üçün ən yaxşı üsul nədir? — Bütün çətinlikləri yad (lazımsız) gözlərdən gizlətmək. Məsələn, əgər sizi Boing təyyarəsinin kokpitinə oturtsalar, dərhal anlamaq çətin olardı ki, onu necə idarə etmək lazımdır:

Digər tərəfdən, təyyarənin sərnişinləri üçün hər şey daha sadə görünür: bilet al, təyyarəyə otur, havaya qalxın və eniş edin. Kontinentdən kontinentə asanlıqla keçmək olar, yalnız “bilet almaq” və “təyyarəyə oturmaq” bacarıqlarına malik olmaqla. Təyyarənin uçuşa hazırlanması, qalxma, enmə və müxtəlif fövqəladə vəziyyətlərin hamsı bizdən gizlədilmişdir. Peyk naviqasiyası, avtopilot və hava limanlarındakı idarəetmə mərkəzləri haqqında artıq danışmırıq. Bu bizim həyatımızı sadələşdirir.
Proqramlaşdırma baxımından, inkapulyasiya «reallaşdırmanın gizlədilməsi»dir. Mən bu tərifi bəyənirəm. Bizim class-ımız yüzlərlə metoddan ibarət ola bilər və müxtəlif vəziyyətlərdə çox mürəkkəb davranışı həyata keçirə bilər. Amma biz bütün metodlarını yad gözlərdən gizlədə bilərik (adlarını iki tərəfdən "__" ilə mühasirəyə salmaqla), digər class-larla qarşılıqlı əlaqə üçün isə sadəcə bir neçə metod buraxa bilərik. Onda bizim proqramımızdakı digər bütün class-lar bu class-da yalnız bu bir neçə metodu görəcək və məhz onları çağıracaq. Və bütün çətinliklər class-ın daxilində gizlədilmiş olacaq, necə ki, sərnişinlərdən pilotların kabinəsi gizlədilir.
2.4 İrsi (Inheritance)
İrsi (inheritance)-nin iki tərəfi var: proqramlaşdırma tərəfi və real həyat tərəfi. Proqramlaşdırma baxımından, irsi — iki sinif (class) arasında xüsusi bir əlaqədir. Amma daha maraqlıdır ki, irsi real həyat baxımından nədir.
Əgər bizə real həyatda nəsə yaratmaq lazım olsaydı, bizim iki həllimiz olardı:
- lazım olan şeyi sıfırdan yaratmaq, bir çox vaxt və enerji sərf edərək;
- lazım olan şeyi mövcud olanın əsasında yaratmaq.
Ən optimal strategiya belə görünür: mövcud olan yaxşı bir həlli götürürük, bir az düzəliş edirik, öz ehtiyaclarımıza uyğunlaşdırırıq və istifadə edirik.
Əgər insanın yaranma tarixini izləsək, məlum olur ki, planetdə həyatın yaranmasından milyardlarla il keçib. İnsan meymundan (meymun əsasında) yaranıb desək, yalnız bir neçə milyon il keçib. Sıfırdan yaratmaq — daha uzun çəkir. Çox daha uzun.
Proqramlaşdırmada da bir sinifi digərinin əsasında yaratmaq imkanı var. Yeni sinif mövcud bir sinifin oğul (varis) sinifi olur. Bu, bir sinifin 80%-90% ehtiyac duyulan məlumatları və metodları var olan zaman çox sərfəlidir. Biz sadəcə uyğun sinifi yeni sinifimizin ata sinifi elan edirik, və nəticədə yeni sinifdə avtomatik olaraq ata sinifin bütün məlumat və metodları görünür. Rahatdır, elə deyilmi?
2.5 Polimorfizm
Polimorfizm — proqramlaşdırma sahəsindən bir anlayışdır. Bu anlayış, eyni interfeysin arxasında bir neçə fərqli reallaşmanın gizlənməsi vəziyyətini təsvir edir. Əgər real həyatda buna bir bənzətmə axtarsaq, məsələn maşının idarə olunması prosesinə baxa bilərik.
Əgər bir insan yük maşınını idarə edə bilirsə, onu təcili yardım maşınının və ya idman maşınının sükanı arxasına oturtmaq olar. İnsan, maşın nə olursa olsun, onu idarə edə bilir, çünki onların hamısında eyni idarəetmə interfeysi var: sükan, pedallar və sürət qutusunun dəstəyi. Maşınların daxili quruluşu fərqlidir, amma onların idarəetmə interfeysi eynidir.
Proqramlaşdırmaya qayıtsaq, polimorfizm müxtəlif siniflərin obyektləri ilə (adətən bir ortaq predkale sahib olanlarla) vahid şəkildə işləməyə imkan verir — bu elə bir şeydir ki, onun dəyərini qiymətləndirmək çətindir. Proqramın ölçüsü nə qədər böyükdürsə, onun faydası bir o qədər artır.
OOP — qanunlar deməkdir. Daxili qaydalar. Hər biri bizi nəsə ilə məhdudlaşdırır, amma buna qarşı olaraq proqramın ölçüsü böyüyəndə böyük üstünlüklər verir. OOP-in dörd prinsipi — bunlar dördayaqlı bir stul kimidir. Ən azı birini götürsən, bütün sistem qeyri-stabil olar.
GO TO FULL VERSION