Obyekt yönümlü proqramlaşdırma nədir?

Heç bilməyən birinə obyekt(əşya) yönümlü proqramlaşdırmanı “Ağlına gələn hər əşyanın proqramlaşdırma mühitinə köçürülməsi” kimi tərif verə bilərəm. Məsələn, İşıqforların işıqlarına nəzarət etmək və ya lampanın açıq-qapalı olma vəziyyəti, bir radionun rəngi, kütləsi, həcmi, markası, istehsal ili kimi bir çox atributlarının komputer mühitində göstərilməsi obyekt yönümlü proqramlaşdırmanı izah edir.
Proqramlaşdırmada Obyekt(əşya) nədir və nə dərəcədə önəmlidir ?
Proqramlaşdırmada obyekt, bir sinfin nümayəndəsidir. “Əşya”- ya məna vermək üçün real həyata baxmaq kifayətdir. Necə ki günlük olaraq həyatda istifadə etdiyimiz hər alətin, hər əşyanın bir istifadə edilmə məqsədi varsa və bunların bizim üçün nə qədər əhəmiyyəti varsa, virtual mühitdəki əşya məfhumu üçün də bu cür düşünə bilərik.
Sinif nədir?
Sinif yaradılmış müəyyən bir obyektin planıdır. Daha rahat anlaşılması üçün gəlin bir nümunəyə baxaq. Fərz edin İnsan adında bir sinfimiz var.

Indi gəlin bu sinfin 2 obyektini yaradaq. Birinin adı Fərid, digərinin adı Zamin olsun.

Gördüyünüz kimi Zaminlə Fərid bir birindən fərqlənirlər ancaq hər ikisidə İnsan obyektidir, yəni İnsan sinifinin atributlarını və davranışlarını(method) istifadə edir, hər ikisində İnsanda olması lazım olan xüsusiyyətlər var, bunlara insanın adını, yaşını və s. bir çox xüsusiyyəti misal çəkmək olar. Deməli İnsan bir sinifdir, yəni bir plandır/sxemdir. Zamin və Fərid isə bu planın, sxemin bir nümayəndəsidirlər.

Burada da gördüyünüz kimi Sinif bir obyektin sxemini, planını ifadə edir. Obyekt isə o plan üzrə inşa edilmiş bir nəsnədir. Buna göstərdiyim ev analogiyası kimi yüzlərlə misal göstərmək olar.
Yaxşı, bəs nədir bu obyekt yönümlü proqramlaşdırmanın faydaları?
Detallara girsək çox faydasının olduğunu görərik, ancaq bu artiklda obyekt yönümlü proqramlaşdırmanın 6 əsas faydası haqqında qısa məlumatlar verəcəyəm. Bunlar aşağıdakılardır:
- Oxunarlılıq
- Təhlükəsizlik
- Yenidən istifadə edilə bilən
- Genişləndirilə bilən
- Dizayn faydaları
- Zamandan qənaət
Oxunarlılıq: Obyekt yönümlü proqramlaşdırma bizə daha oxunaqlı proqram yazmağımıza imkan yaradır. Beləliklə bu sonradan ehtiyyac olarsa həm bizim həm də digər proqramçıların proqramı oxuyub daha rahat anlamasını təmin edir.


Təhlükəsizlik:
Obyekt yönümlü proqramlaşdırma bizə Prosedural proqramlaşdırmadan fərqli olaraq Məlumat gizləməsi funksiyalarını bəxş edir.
Məlumat gizləmə obyektin daxili detallarını (məlumat üzvləri və metodlar) gizlətmək üçün xüsusi olaraq obyekt yönümlü proqramlaşdırmada (OOP) istifadə olunan bir proqram texnikasıdır. Məlumatların gizlənməsi istənməyən və ya nəzərdə tutulan dəyişikliklərin qarşısını alaraq obyektin bütövlüyünü qoruyur. Bunu real həyatdan telefonun daxili detallarına bənzətmək olar. Bizlər telefonun sadəcə ekranına bir sıra toxunuşlar etməklə müəyyən işlər görürük, amma telefonun daxilində olan detalları görmürük. Biz istifadəçilərə bu detalların sadəcə funksionallığı göstərilir.

Yenidən istifadə edilə bilən:
Bir rəssam hər dəfə rəsm çəkərkən yeni bir kağız kəşfi edirmi? yaxud inşaatçı bir ev inşa edərkən yenidən kərpic kəşf edirmi? Niyə proqramçılar bir problemin həllini tapdıqdan sonra o həlli təkrar təkrar istifadə etməsin?! :). Bəli, Obyekt yönümlü proqramlaşdırma bizə hazırlanmış sinifləri yenidən istifadə edə bilməyimizi mümkün hala gətirir.
Genişləndirilə bilən: Yazdığınız proqramın istifadəçiləri bir zamandan sonra proqramınızda yeni bir funksionallığın olmağını istəyə bilərlər. Obyekt yönümlü proqramlaşdırma obyektlərin kitabxanasını yaratmaqdan əlavə obyektlərin funksionallığını da idarə edir. Proqramlaşdırma sahəsi durğun deyildir, daim inkişaf edir və bizlər bu inkişafı nəzərə alıb proqramlarımızı buna görə yazmalıyıq. Xoşbəxtlikdən, Obyekt yönümlü proqramlaşdırmanın bəzi xüsusiyyətləri biz proqramçılara proqramlarımızın funksionallığını artırmağımıza imkan yaradır. İnheritance, polymorphism, overriding, design patterns bu xüsusiyyətlərdəndir.
Dizayn faydaları: Böyük proqramları kodlamaq olduqca çətindir. Obyekt yönümlü proqramlaşdırma proqramçıları kodlarını geniş bir plan üzrə dizayn etməyə məcbur edir, bu da proqramların daha yaxşı dizayn və az bir xəta ilə bitməsinə şərait yaradır.
Zamandan qənaət: Obyekt yönümlü proqramlaşdırma sayəsində siz bir problemlə qarşılaşsanız birdən çox kod parçası üzərində ayrı ayrı işləyə bilər və hətta birdən çox proqramçı ilə eyni vaxtda müstəqil olaraq bu problemi həll edə bilərsiniz. Bu da öz nəvbəsində sizin vaxtınıza qənaət edəcək və yüzlərlə sətr kodun içərisində boğulmağınızın qarşısını alacaqdır.
Obyekt yönümlü proqramlaşdırmanın 4 təməl xüsusiyyəti var. Bunlar:
- Varislik(inheritance)
- Abstraksiya(abstraction)
- Kapsülləmə(encapsulation)
- Çoxlu formlar(polymorphism)
Bu 4 xüsusiyyətdən heç birini təmin etməyən bir proqramlaşdırma dili obyekt yönümlü proqramlaşdırma dili sayılmaz.

Ən məşhur obyekt yönümlü proqramlaşdırma dilləri Python, Java, Go, C#, Ruby, C++ kimi dillərdir.