2.1 OOP-in əsas konsepsiyaları
Obyekt yönümlü proqramlaşdırma yanaşmasının əsasını OOP paradigması təşkil edir. Bu o deməkdir ki, proqramın bütün varlıqları obyektlər kimi nəzərdən keçirilir. Obyektlər — məlumatlar + həmin məlumatlar üzərində işləyən metodlar/funksiyalardır.
Həmçinin demək olar ki, obyektin vəziyyəti və davranışı var. Obyektin vəziyyəti onun daxili dəyişənlərində saxlanılan məlumatlarla təmin olunur. Obyektin davranışı — onun metodlarının yerinə yetirdiyi bütün hərəkətlərin cəmidir.
Orta proqramda minlərlə, böyük proqramda milyonlarla obyekt var. Xaosu bir az azaltmaq üçün obyektləri siniflərdə, sinifləri isə müəyyən bir iyerarxiyada təşkil etmək qərarına gəlinmişdir.
Maraqlıdır! Siniflər iyerarxiyası konsepsiyası heyvanlar aləmindən götürülüb, burada insanlar primatlar olur, primatlar məməlilər olur və s.
Hər bir obyektin bir sinfi var, onun vasitəsilə yaradılır. Bir tərəfdən, sinif — bu, obyektin müəyyən bir şablonudur, digər tərəfdən isə onun öz xüsusiyyətləri olan müstəqil bir obyektdir (buna daha sonra baxacağıq).
Sinif konsepsiyasını daha yaxşı anlamaq üçün aşağıdakı təriflərlə tanış olun:
Sinif:
Sinif — obyektlərin yaradılması üçün şablon və ya sxemdir, bu, həmin tip obyektlərə xas olan atributları və metodları müəyyən edir. Siniflər məlumatları və həmin məlumatlarla işləyən funksiyaları bir bütöv halında təşkil etməyə imkan verir.
Obyekt:
Obyekt — sinif nümunəsidir. Hər obyektin vəliyyəti (atributlarla müəyyən edilir) və davranışı (metodlarla müəyyən edilir) var.
İnkapsulyasiya:
İnkapsulyasiya sinifin daxili həyata keçirilməsinin gizlədilməsindən və həmin sinifin obyektləri ilə qarşılıqlı əlaqə üçün interfeys təqdim etməkdən ibarətdir. Bu, məlumatları qorumağa və onlara girişə nəzarət etməyə kömək edir.
İrsi əlaqə:
İrsi əlaqə bir sinfin (uşaq sinifi) digər sinfin (valideyn sinifi) atributlarını və metodlarını miras almasına imkan verir. Bu, kodun təkrar istifadəsinə və saxlanmasını sadələşdirməyə imkan verir.
Polimorfizm:
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ərdən irs alınmış metodların uşaq siniflərdə yenidən təyin edilməsi ilə əldə edilir.
Abstraksiya:
Abstraksiya obyektlərin ümumi xüsusiyyətlərinin seçilib ayrılmasından və bu ümumi xüsusiyyətləri təmsil edən siniflərin yaradılmasından ibarətdir. Bu, mürəkkəb sistemləri sadələşdirməyə və onların anlaşıqlığını artırmağa kömək edir.
Əgər bu mövzunun heç olmasa yarısını anladınızsa – əla. Sonra bu məqamları daha ətraflı şəkildə nəzərdən keçirəcəyik.
2.2 Abstraksiya
Gerçək həyatda abstraksiyanın yaxşı nümunəsi şirkət və ya təşkilatdakı vəzifələrin təsviridir. Vəzifənin adı – bir şeydir, amma həmin vəzifənin müəyyən öhdəlikləri tam başqa bir şeydir.
Təsəvvür elə ki, gələcəkdəki şirkətinin strukturunu dizayn edirsən. Sekretarın öhdəliklərini başqa bir neçə vəzifəyə “paylaya” bilərsən. İcraçı direktor vəzifəsini bir neçə müstəqil vəzifəyə bölə bilərsən: maliyyə direktoru, texniki direktor, marketinq direktoru, kadrlar üzrə direktor. Və ya, məsələn, ofis-menecer və rekruiter vəzifələrini birləşdirib bir vəzifəyə çevirə bilərsən.
Proqramlaşdırma baxımından abstraksiya – bir növ proqramın obyektlərə düzgün bölünməsidir. Adətən, istənilən böyük proqramı qarşılıqlı təsir göstərən obyektlər şəklində onlarla şəkildə təqdim etmək mümkündür. Abstraksiya əsas xüsusiyyətləri seçməyə və ikinci dərəcəli olanları nəzərdən qaçırmağa imkan verir.

Abstraksiya – bu, hərbi işdəki kimi bir strategiyadır. Pis strategiya – və artıq heç bir dahiyanə taktika vəziyyəti düzəldə bilməz.
2.3 İnkapulyasiya
İnkapulyasiyanın məqsədi — elementlərin qarşılıqlı əlaqəsini sadələşdirmək hesabına onların keyfiyyətini yaxşılaşdırmaqdır.

Nəyisə sadələşdirməyin ən yaxşı yolu — çətin olan hər şeyi yad gözlərdən gizlətməkdir. Məsələn, səni "Boeing" təyyarəsinin kabinəsinə əyləşdirsələr, sən dərhal onun idarə edilməsini başa düşməyəcəksən:

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ə otur, qalx və en. Yalnız «bilet almaq» və «təyyarəyə oturmaq» bacarıqlarına malik olaraq, kontinentdən kontinenta keçə bilərsən. Təyyarəni uçuşa hazırlamaq, qalxış, enmə və müxtəlif fövqəladə vəziyyətlərlə bağlı bütün çətinliklər bizdən gizlədilib. Peyk naviqasiyası, autopilot və hava limanlarındakı dispetçer mərkəzlərindən danışmaq belə olmaz. Bu isə bizim işimizi xeyli asanlaşdırır.
Proqramlaşdırma baxımından, inkapulyasiya — «reallaşdırmanın gizlədilməsi»
. Mənə bu cür tərif xoşuma gəlir. Bizim class-ımız yüzlərlə method ehtiva edə bilər və müxtəlif vəziyyətlərdə çox kompleks davranışları reallaşdıra bilər. Amma biz class-ın bütün method-larını yad gözlərdən gizlədə bilərik (onların adlarını «__» ilə hər iki tərəfdən əhatə etməklə), başqa class-larla qarşılıqlı əlaqə üçün sadəcə bir neçə method saxlaya bilərik. O zaman proqramımızın digər class-ları həmin class-da cəmi üç method görəcək və məhz onları çağıracaq
. Amma bütün çətinliklər class daxilində gizlədiləcək, elə təyyarə sərnişinlərindən pilotların kabinəsi gizlədildiyi kimi.
2.4 İrsiyyət
İrsiyyətin iki tərəfi var. Proqramlaşdırma tərəfi və real həyat tərəfi. Proqramlaşdırma baxımından irsiyyət — iki sinif arasında xüsusi bir əlaqədir
. Amma real həyat baxımından irsiyyət nədir, bu daha maraqlıdır.
Əgər bizə real həyatda nəsə yaratmaq lazım olsaydı, iki yolumuz var idi:
- lazım olan şeyi sıfırdan yaratmaq, çox vaxt və güc sərf etmək;
- mövcud olan bir şeyin üzərində lazım olan şeyi qurmaq.
Ən optimal strategiya belə görünür: mövcud olan yaxşı həlli götürürük, bir az işləyirik, ehtiyaclarımıza uyğunlaşdırırıq və istifadə edirik
.
Əgər insanın yaranma tarixinə baxsaq, planetdə həyatın başlanmasından milyardlarla il keçdiyi ortaya çıxar. Amma insanın meymundan yarandığını təsəvvür etsək (meymun əsasında), cəmi bir neçə milyon il keçdi. Sıfırdan yaratmaq daha uzun — çox daha uzun
.
Proqramlaşdırmada da bir sinfi digərinə əsasən yaratmaq imkanı var. Yeni sinif mövcud sinfin varisi (pərəstişkarı) olur
. Bu çox sərfəlidir, əgər bir sinifdə bizə lazım olan məlumatların və metodların 80%-90%-i varsa. Sadəcə yeni sinifimiz üçün uyğun olan sinifi valdeyn elan edirik, onda yeni sinifdə avtomatik olaraq valideyn sinfinin bütün məlumatları və metodları yaranır
. Elə deyilmi, rahatdır?
2.5 Polimorfizm
Polimorfizm — bu, proqramlaşdırma sahəsinə aid olan anlayışdır. O, bir interfeysin arxasında fərqli realizasiyaların gizləndiyi vəziyyəti təsvir edir. Əgər onu real həyatda axtarmağa çalışsaq, belə analoqlardan biri avtomobil idarəetmə prosesi olacaq.
Əgər bir insan yük maşını idarə edə bilirsə, onu həm təcili yardım maşınının sükanı arxasına, həm də idman avtomobilinin sükanı arxasına əyləşdirmək olar. İnsan avtomobili idarə edə bilir, fərqi yoxdur, bu hansı avtomobildir, çünki onların hamısı eyni idarəetmə interfeysə malikdir: sükan, pedallar və sürət qutusu qolu
. Maşınların daxili quruluşu fərqli olur, amma onların idarəetmə interfeysi eynidir.
Proqramlaşdırmaya qayıtsaq, polimorfizm müxtəlif siniflərin obyektləri ilə (adətən ümumi bir ata sinifinə malik olan) vahid şəkildə işləməyə imkan verir — bu, qiymətləndirilməsi çətin bir şeydir
. Proqram nə qədər böyükdürsə, onun dəyəri bir o qədər çoxdur.
OOP — bu, prinsiplərdir. Daxili qanunlardır. Hər biri bizi bir şeydə məhdudlaşdırır, buna əvəz olaraq böyük üstünlüklər verir, nə vaxt ki proqram böyük ölçüyə çatır
. OOP-nin dörd prinsipi bir stulun dörd ayağı kimidir. Ən azı birini çıxarın, və bütün sistem sabitliyini itirər.
GO TO FULL VERSION