Vərəslik və Konteynerlik
Vərəslik və Konteynerlik OOP-da tapılan iki vacib anlayışdır (Obyekt yönümlü proqramlaşdırma nümunəsi: C++). Sadə dillə desək, həm Konteynerlik, həm də Varislik bir sinfə əlavə xüsusiyyətlər və ya davranışlar təqdim etməklə məşğul olur. İrsiyyət, bir sinfin bir ana sinifdən xassələri və davranışı genişləndirərək miras alması qabiliyyətidir. Digər tərəfdən, Konteynerçilik sinfin müxtəlif siniflərin obyektlərini üzv datası kimi ehtiva etmək qabiliyyətidir.
Vərəslik nədir?
Yuxarıda qeyd edildiyi kimi, İrsiyyət sinfin onu genişləndirərək ana sinifdən xassələri və davranışı miras alma qabiliyyətidir. Vərəsəlik, yeni müəyyən edilmiş sinif tərəfindən mövcud sinfin xüsusiyyətlərini və davranışını genişləndirməyə imkan verməklə kodun təkrar istifadəsini təmin edir. A sinfi B-ni genişləndirirsə, B sinfi ana sinif (və ya super sinif) və A sinfi uşaq sinif (və ya törəmə sinif/ alt sinif) adlanır. Bu nümunə ssenaridə A sinfi super sinifin (B) bütün ictimai və qorunan atribut və metodlarını miras alacaq. Alt sinif isteğe bağlı olaraq ana sinifdən miras qalmış davranışı ləğv edə bilər (metodlara yeni və ya genişləndirilmiş funksionallıq təmin edir). Vərəsəlik OOP-da “is-a” əlaqəsini təmsil edir. Bu, mahiyyətcə A-nın həm də B olması deməkdir. Başqa sözlə, B müəyyən bir real dünya varlığının ümumi təsviri olan sinif ola bilər, lakin A müəyyən bir ixtisası təyin edir. Real dünya proqramlaşdırma problemində Person sinfi İşçi sinfini yaratmaq üçün genişləndirilə bilər. Buna ixtisaslaşma deyilir. Lakin siz əvvəlcə İşçi sinfini yarada və sonra onu Person sinfi üçün ümumiləşdirə bilərsiniz (i.e. ümumiləşdirmə). Bu nümunədə, İşçi Şəxsin bütün xüsusiyyətlərinə və davranışına malik olacaq (yəni, İşçi həm də Şəxsdir) və bəzi əlavə funksiyaları da ehtiva edə bilər (deməli, Şəxs İşçi deyil).
Konteynerçilik nədir?
Konteynerlik sinfin müxtəlif siniflərin obyektlərini üzv datası kimi ehtiva etmək qabiliyyətidir. Məsələn, A sinfi B sinfinin obyektini üzv kimi ehtiva edə bilər. Burada B-də müəyyən edilmiş bütün ictimai metodlar (və ya funksiyalar) A sinfi daxilində icra oluna bilər. A sinfi konteynerə, B sinfi isə ehtiva edilən sinifə çevrilir. Konteynerə Tərkibi də deyilir. Bu misalda A sinfinin B sinfindən ibarət olduğunu söyləmək olar. OOP-da Konteynerlik “has-a” əlaqəsini təmsil edir. Qeyd etmək vacibdir ki, konteynerin daxil edilmiş sinfin bütün ictimai metodlarını icra etmək imkanı olsa da, o, dəyişdirə və ya əlavə funksionallıq təmin edə bilmir. Real dünya proqramlaşdırma probleminə gəldikdə, TextBox sinifinin obyekti Form sinfində ola bilər və beləliklə, Formada TextBox (və ya alternativ olaraq, Form TextBox-dan ibarətdir) olduğunu söyləmək olar.
Vərəslik və Konteynerlik arasındakı fərq
Vərəslik və Konteynerlik iki OOP anlayışı olsa da, onlar proqramçıya nail olmaq imkanı verdikləri baxımından tamamilə fərqlidirlər. Varislik bir sinfin ana sinifdən xassələri və davranışı genişləndirməklə onu miras alma qabiliyyətidir, Konteynerlik isə bir sinfin üzv məlumatları kimi müxtəlif siniflərin obyektlərini ehtiva etmək qabiliyyətidir. Bir sinif genişləndirilirsə, o, bütün ictimai və qorunan xüsusiyyətləri/davranışları miras alır və bu davranışlar alt sinif tərəfindən ləğv edilə bilər. Ancaq bir sinif başqa bir sinifdə olarsa, konteyner ehtiva edilənə davranışı dəyişdirmək və ya əlavə etmək imkanı əldə etmir. Vərəsəlik OOP-da “is-a” münasibətini, Konteynerlik isə “var-a” əlaqəsini təmsil edir.