JET Academy

Mirasalma nədir?

Mirasalma

Mirasalma Obyekt Yönümlü Proqramlaşdırmanın (OOP) əsas prinsiplərindən biridir və bir sinifin başqa bir sinifdən xüsusiyyətlər və davranışlar əldə etməsi mexanizmidir. Bu prinsip real həyatdakı miras münasibətlərini proqramlaşdırmada modelləşdirir və kodun təkrar istifadəsini, genişləndirilməsini və strukturlaşdırılmasını təmin edir. Mirasalma "is-a" (bir növüdür) münasibətini təmsil edir, yəni bir obyekt başqa bir obyektin növüdür.

Mirasalma mexanizmində iki əsas konsepsiya var: əsas sinif (base class, parent class, superclass) və törəmə sinif (derived class, child class, subclass). Əsas sinif öz xüsusiyyət və metodlarını törəmə sinifə ötürür, törəmə sinif isə bu xüsusiyyətləri miras alaraq öz spesifik xüsusiyyət və metodlarını əlavə edə bilir. Bu yanaşma kod təkrarlanmasının qarşısını alır və proqram strukturunu daha məntiqi və idarə oluna bilən edir.

Mirasalmanın Əsas Konsepsiyaları

Əsas Sinif (Parent Class/Base Class/Superclass): Bu, xüsusiyyətlərini və metodlarını digər siniflərə ötürən sinifdir. Əsas sinif daha ümumi xarakteristikalar və davranışlar təyin edir. Məsələn, "Heyvan" sinfi bütün heyvanlar üçün ümumi olan xüsusiyyətləri (ad, yaş, çəki) və metodları (yemək, hərəkət etmək) ehtiva edə bilər. Əsas sinif adətən daha abstrakt və genişdir, çünki bir çox fərqli növ obyektlər üçün ortaq xüsusiyyətləri təmsil edir.

Törəmə Sinif (Child Class/Derived Class/Subclass): Bu, başqa bir sinifdən miras alan sinifdir. Törəmə sinif əsas sinifdən bütün ictimai və qorunan (public və protected) üzvləri miras alır və öz spesifik xüsusiyyət və metodlarını əlavə edə bilər. Məsələn, "İt" sinifi "Heyvan" sinifindən miras alaraq, onun bütün xüsusiyyətlərinə malik olur, lakin özünəməxsus metodlar əlavə edə bilər, məsələn "hürmək" metodu. Törəmə sinif daha spesifik və xüsusiləşdirilmişdir.

Kod Təkrarlanmasının Azaldılması (Code Reusability): Miras almanın ən böyük üstünlüklərindən biri eyni kodun təkrar yazılmasının qarşısını almaqdır. Ümumi funksionallıq əsas sinifdə bir dəfə yazılır və bütün törəmə siniflər tərəfindən istifadə edilir. Əgər dəyişiklik lazım olarsa, yalnız əsas sinifdə dəyişiklik etmək kifayətdir və bu dəyişiklik avtomatik olaraq bütün törəmə siniflərə tətbiq olunur. Bu, kodun saxlanılmasını və yenilənməsini xeyli asanlaşdırır.

Metod Ləğv Etmə (Method Overriding): Törəmə sinif əsas sinifdən miras aldığı metodu yenidən təyin edə bilər. Bu, törəmə sinifinə eyni metod adı ilə fərqli davranış təyin etməyə imkan verir. Məsələn, "Heyvan" sinifində "səsÇıxart" metodu olarsa, "İt" sinifi bu metodu ləğv edərək "hav-hav", "Pişik" sinifi isə "miyav" səsi çıxara bilər. Bu mexanizm polimorfizmin əsasını təşkil edir və proqramın çevikliyini artırır.

Super Açar Sözü: Əksər OOP dillərində törəmə sinif daxilindən əsas sinifin metodlarına və konstruktorlarına müraciət etmək üçün "super" (və ya bəzi dillərdə "base") açar sözü istifadə olunur. Bu, xüsusilə metod ləğv etmə zamanı əsas sinifdən metodu çağırmaq lazım olduqda faydalıdır. Məsələn, törəmə sinifdə metodu ləğv edərkən, əvvəlcə əsas sinifin metodunu çağırıb, sonra əlavə funksionallıq əlavə edə bilərsiniz.

Mirasalmanın Növləri

Tək Miras Alma (Single Inheritance): Bir törəmə sinif yalnız bir əsas sinifdən miras alır. Bu, ən sadə və ən çox istifadə edilən miras alma növüdür. Məsələn, "İt" sinifi yalnız "Heyvan" sinifindən miras alır. Bu yanaşma proqram strukturunu sadə və başa düşülən saxlayır, əksər OOP dilləri bu növü dəstəkləyir.

Çoxlu Miras Alma (Multiple Inheritance): Bir törəmə sinif birdən çox əsas sinifdən miras ala bilir. Məsələn, "UçanBalıq" sinifi həm "Balıq" sinifindən, həm də "UçanHeyvan" sinifindən miras ala bilər. Lakin bu yanaşma mürəkkəbliklər və problemlər yarada bilər, məşhur "almaz problemi" (diamond problem) buna misaldır. Buna görə də Java kimi bəzi dillər çoxlu miras almaya icazə vermir, lakin interfeyslər vasitəsilə oxşar funksionallıq təmin edir. C++ kimi dillər isə çoxlu miras almaya icazə verir, lakin diqqətlə istifadə edilməlidir.

Çoxsəviyyəli Miras Alma (Multilevel Inheritance): Bir sinif başqa bir sinifdən miras alır və həmin sinif də başqa bir sinifdən miras alır. Məsələn, "Heyvan" → "Məməli" → "İt" şəklində miras alma zənciri. Bu, iерархiya yaratmağa imkan verir və real dünya münasibətlərini daha yaxşı modelləşdirir. Lakin çox dərin iyerarxiyalar kodun başa düşülməsini çətinləşdirə bilər.

İyerarxik Miras Alma (Hierarchical Inheritance): Bir əsas sinifdən bir neçə törəmə sinif miras alır. Məsələn, "Heyvan" sinifindən "İt", "Pişik", "Quş" sinifləri miras ala bilər. Bu, ortaq funksionallığı bir yerdə saxlamağa və müxtəlif variantlar yaratmağa imkan verir.

Hibrid Miras Alma (Hybrid Inheritance): Yuxarıdakı miras alma növlərinin kombinasiyasıdır. Bu, çox mürəkkəb iyerarxiyalar yaratmağa imkan verir, lakin diqqətlə planlaşdırılmalıdır ki, struktur qarışıq və başa düşülməz olmasın.

Mirasalmanın Üstünlükləri

Kod Təkrar İstifadəsi (Code Reusability): Miras almanın ən böyük üstünlüyü budur. Ümumi funksionallıq bir dəfə əsas sinifdə yazılır və bütün törəmə siniflər tərəfindən istifadə edilir. Bu, inkişaf vaxtını azaldır və xətaların ehtimalını minimuma endirir, çünki eyni məntiq bir yerdə cəmləşir.

Genişləndirilə Bilənlik (Extensibility): Mövcud kodu dəyişdirmədən yeni funksionallıq əlavə etmək asandır. Sadəcə yeni törəmə sinif yaradaraq əsas sinifdən miras almaq və əlavə xüsusiyyətlər təyin etmək kifayətdir. Bu, açıq-qapalı prinsipinə (Open-Closed Principle) uyğundur - sinif genişlənməyə açıq, dəyişikliyə qapalıdır.

Polimorfizm (Polymorphism): Miras alma polimorfizmin əsasını təşkil edir. Əsas sinif növündə dəyişən törəmə sinif obyektinə istinad edə bilər və run-time zamanı düzgün metod çağrılır. Bu, çevik və genişləndirilə bilən kod yazmağa imkan verir. Məsələn, "Heyvan" massivində müxtəlif heyvan növləri saxlaya və hamısının "səsÇıxart" metodunu çağıra bilərsiniz, hər biri öz spesifik səsini çıxaracaq.

Saxlanıla Bilənlik (Maintainability): Ümumi funksionallıq bir yerdə cəmləndiyi üçün, dəyişikliklər asanlıqla həyata keçirilir və bütün törəmə siniflərə avtomatik tətbiq olunur. Əgər əsas sinifdə bug olsa, onu bir yerdə düzəltmək bütün törəmə siniflərdə problemi həll edir.

Məntiqi Strukturlaşdırma: Miras alma real dünya münasibətlərini modelləşdirməyə imkan verir və kodu daha intuitiv və başa düşülən edir. İyerarxik struktur proqramın məntiqini aydınlaşdırır və komanda üzvləri üçün sistemin başa düşülməsini asanlaşdırır.

Modulluq: Hər sinif öz məsuliyyət sahəsində qalır, lakin ümumi funksionallığı paylaşır. Bu, sistemin müxtəlif hissələrini müstəqil olaraq inkişaf etdirməyə və test etməyə imkan verir.

Mirasalmanın Mənfi Cəhətləri və Diqqət Edilməli Məqamlar

Sıx Əlaqələnmə (Tight Coupling): Miras alma əsas və törəmə siniflər arasında güclü asılılıq yaradır. Əsas sinifdə edilən dəyişikliklər törəmə sinifləri təsir edə bilər, bu da bəzən problemlərə səbəb ola bilər. Kompozisiya (composition) bəzən miras almaya alternativ olaraq daha yaxşı həll ola bilər.

Mürəkkəblik: Çox dərin miras alma iyerarxiyaları kodun başa düşülməsini çətinləşdirir. Bir metodu tapmaq üçün bir neçə sinif səviyyəsini araşdırmaq lazım ola bilər. Buna görə də iyerarxiyaları mümkün qədər sadə saxlamaq tövsiyə olunur.

Çevikliyin Məhdudiyyəti: Bəzi hallarda miras alma strukturu çox sərt ola bilər və gələcək dəyişikliklərə uyğunlaşmaq çətin ola bilər. Əgər əsas sinif düzgün dizayn edilməyibsə, bütün törəmə siniflər bundan təsirlənər.

Almaz Problemi (Diamond Problem): Çoxlu miras almada, əgər iki əsas sinif eyni metoda malik olan ortaq əcdad sinifindən miras alırsa, törəmə sinif hansı metodun istifadə ediləcəyini müəyyənləşdirə bilməyə bilər. Bu problem bəzi dillərdə xüsusi mexanizmlərlə həll edilir.

Praktik Nümunələr

Nəqliyyat Vasitələri Sistemi: "Nəqliyyat" əsas sinifi yaradıb, ondan "Avtomobil", "Motosiklet", "Velosiped" törəmə sinifləri yaratmaq olar. Hər biri ortaq xüsusiyyətlərə (marka, model, il) malik olacaq, lakin özünəməxsus metodlara sahib ola bilər (avtomobilin qapı sayı, motosikletin tipi və s.).

İşçi İdarəetmə Sistemi: "İşçi" əsas sinifindən "Menecer", "Proqramçı", "Dizayner" törəmə sinifləri yaratmaq olar. Hamısı ortaq xüsusiyyətlərə (ad, maaş, id) malik olacaq, lakin fərqli funksionallıqları ola bilər.

Geometrik Fiqurlar: "Fiqur" əsas sinifindən "Dairə", "Düzbucaqlı", "Üçbucaq" törəmə sinifləri yaradıb, hər biri öz sahə və perimetr hesablama metodlarını tətbiq edə bilər.

Miras alma OOP-da güclü bir vasitədir, lakin düzgün istifadə edilməlidir. "Composition over inheritance" (kompozisiya miras almaya üstünlük verilməlidir) prinsipi bəzən daha yaxşı dizayn həllinə gətirib çıxarır. Hər bir vəziyyətdə hansı yanaşmanın daha uyğun olduğunu qiymətləndirmək vacibdir. Düzgün tətbiq ediləndə, miras alma kodun keyfiyyətini, oxunaqlığını və saxlanıla bilənliyini əhəmiyyətli dərəcədə artırır.

Mirasalma Obyekt Yönümlü Proqramlaşdırmanın (OOP) əsas prinsiplərindən biridir və bir sinifin başqa bir sinifdən xüsusiyyətlər və davranışlar əldə etməsi mexanizmidir. Bu prinsip real həyatdakı miras münasibətlərini proqramlaşdırmada modelləşdirir və kodun təkrar istifadəsini, genişləndirilməsini və strukturlaşdırılmasını təmin edir. Mirasalma "is-a" (bir növüdür) münasibətini təmsil edir, yəni bir obyekt başqa bir obyektin növüdür.

Mirasalma mexanizmində iki əsas konsepsiya var: əsas sinif (base class, parent class, superclass) və törəmə sinif (derived class, child class, subclass). Əsas sinif öz xüsusiyyət və metodlarını törəmə sinifə ötürür, törəmə sinif isə bu xüsusiyyətləri miras alaraq öz spesifik xüsusiyyət və metodlarını əlavə edə bilir. Bu yanaşma kod təkrarlanmasının qarşısını alır və proqram strukturunu daha məntiqi və idarə oluna bilən edir.

Mirasalmanın Əsas Konsepsiyaları

Əsas Sinif (Parent Class/Base Class/Superclass): Bu, xüsusiyyətlərini və metodlarını digər siniflərə ötürən sinifdir. Əsas sinif daha ümumi xarakteristikalar və davranışlar təyin edir. Məsələn, "Heyvan" sinfi bütün heyvanlar üçün ümumi olan xüsusiyyətləri (ad, yaş, çəki) və metodları (yemək, hərəkət etmək) ehtiva edə bilər. Əsas sinif adətən daha abstrakt və genişdir, çünki bir çox fərqli növ obyektlər üçün ortaq xüsusiyyətləri təmsil edir.

Törəmə Sinif (Child Class/Derived Class/Subclass): Bu, başqa bir sinifdən miras alan sinifdir. Törəmə sinif əsas sinifdən bütün ictimai və qorunan (public və protected) üzvləri miras alır və öz spesifik xüsusiyyət və metodlarını əlavə edə bilər. Məsələn, "İt" sinifi "Heyvan" sinifindən miras alaraq, onun bütün xüsusiyyətlərinə malik olur, lakin özünəməxsus metodlar əlavə edə bilər, məsələn "hürmək" metodu. Törəmə sinif daha spesifik və xüsusiləşdirilmişdir.

Kod Təkrarlanmasının Azaldılması (Code Reusability): Miras almanın ən böyük üstünlüklərindən biri eyni kodun təkrar yazılmasının qarşısını almaqdır. Ümumi funksionallıq əsas sinifdə bir dəfə yazılır və bütün törəmə siniflər tərəfindən istifadə edilir. Əgər dəyişiklik lazım olarsa, yalnız əsas sinifdə dəyişiklik etmək kifayətdir və bu dəyişiklik avtomatik olaraq bütün törəmə siniflərə tətbiq olunur. Bu, kodun saxlanılmasını və yenilənməsini xeyli asanlaşdırır.

Metod Ləğv Etmə (Method Overriding): Törəmə sinif əsas sinifdən miras aldığı metodu yenidən təyin edə bilər. Bu, törəmə sinifinə eyni metod adı ilə fərqli davranış təyin etməyə imkan verir. Məsələn, "Heyvan" sinifində "səsÇıxart" metodu olarsa, "İt" sinifi bu metodu ləğv edərək "hav-hav", "Pişik" sinifi isə "miyav" səsi çıxara bilər. Bu mexanizm polimorfizmin əsasını təşkil edir və proqramın çevikliyini artırır.

Super Açar Sözü: Əksər OOP dillərində törəmə sinif daxilindən əsas sinifin metodlarına və konstruktorlarına müraciət etmək üçün "super" (və ya bəzi dillərdə "base") açar sözü istifadə olunur. Bu, xüsusilə metod ləğv etmə zamanı əsas sinifdən metodu çağırmaq lazım olduqda faydalıdır. Məsələn, törəmə sinifdə metodu ləğv edərkən, əvvəlcə əsas sinifin metodunu çağırıb, sonra əlavə funksionallıq əlavə edə bilərsiniz.

Mirasalmanın Növləri

Tək Miras Alma (Single Inheritance): Bir törəmə sinif yalnız bir əsas sinifdən miras alır. Bu, ən sadə və ən çox istifadə edilən miras alma növüdür. Məsələn, "İt" sinifi yalnız "Heyvan" sinifindən miras alır. Bu yanaşma proqram strukturunu sadə və başa düşülən saxlayır, əksər OOP dilləri bu növü dəstəkləyir.

Çoxlu Miras Alma (Multiple Inheritance): Bir törəmə sinif birdən çox əsas sinifdən miras ala bilir. Məsələn, "UçanBalıq" sinifi həm "Balıq" sinifindən, həm də "UçanHeyvan" sinifindən miras ala bilər. Lakin bu yanaşma mürəkkəbliklər və problemlər yarada bilər, məşhur "almaz problemi" (diamond problem) buna misaldır. Buna görə də Java kimi bəzi dillər çoxlu miras almaya icazə vermir, lakin interfeyslər vasitəsilə oxşar funksionallıq təmin edir. C++ kimi dillər isə çoxlu miras almaya icazə verir, lakin diqqətlə istifadə edilməlidir.

Çoxsəviyyəli Miras Alma (Multilevel Inheritance): Bir sinif başqa bir sinifdən miras alır və həmin sinif də başqa bir sinifdən miras alır. Məsələn, "Heyvan" → "Məməli" → "İt" şəklində miras alma zənciri. Bu, iерархiya yaratmağa imkan verir və real dünya münasibətlərini daha yaxşı modelləşdirir. Lakin çox dərin iyerarxiyalar kodun başa düşülməsini çətinləşdirə bilər.

İyerarxik Miras Alma (Hierarchical Inheritance): Bir əsas sinifdən bir neçə törəmə sinif miras alır. Məsələn, "Heyvan" sinifindən "İt", "Pişik", "Quş" sinifləri miras ala bilər. Bu, ortaq funksionallığı bir yerdə saxlamağa və müxtəlif variantlar yaratmağa imkan verir.

Hibrid Miras Alma (Hybrid Inheritance): Yuxarıdakı miras alma növlərinin kombinasiyasıdır. Bu, çox mürəkkəb iyerarxiyalar yaratmağa imkan verir, lakin diqqətlə planlaşdırılmalıdır ki, struktur qarışıq və başa düşülməz olmasın.

Mirasalmanın Üstünlükləri

Kod Təkrar İstifadəsi (Code Reusability): Miras almanın ən böyük üstünlüyü budur. Ümumi funksionallıq bir dəfə əsas sinifdə yazılır və bütün törəmə siniflər tərəfindən istifadə edilir. Bu, inkişaf vaxtını azaldır və xətaların ehtimalını minimuma endirir, çünki eyni məntiq bir yerdə cəmləşir.

Genişləndirilə Bilənlik (Extensibility): Mövcud kodu dəyişdirmədən yeni funksionallıq əlavə etmək asandır. Sadəcə yeni törəmə sinif yaradaraq əsas sinifdən miras almaq və əlavə xüsusiyyətlər təyin etmək kifayətdir. Bu, açıq-qapalı prinsipinə (Open-Closed Principle) uyğundur - sinif genişlənməyə açıq, dəyişikliyə qapalıdır.

Polimorfizm (Polymorphism): Miras alma polimorfizmin əsasını təşkil edir. Əsas sinif növündə dəyişən törəmə sinif obyektinə istinad edə bilər və run-time zamanı düzgün metod çağrılır. Bu, çevik və genişləndirilə bilən kod yazmağa imkan verir. Məsələn, "Heyvan" massivində müxtəlif heyvan növləri saxlaya və hamısının "səsÇıxart" metodunu çağıra bilərsiniz, hər biri öz spesifik səsini çıxaracaq.

Saxlanıla Bilənlik (Maintainability): Ümumi funksionallıq bir yerdə cəmləndiyi üçün, dəyişikliklər asanlıqla həyata keçirilir və bütün törəmə siniflərə avtomatik tətbiq olunur. Əgər əsas sinifdə bug olsa, onu bir yerdə düzəltmək bütün törəmə siniflərdə problemi həll edir.

Məntiqi Strukturlaşdırma: Miras alma real dünya münasibətlərini modelləşdirməyə imkan verir və kodu daha intuitiv və başa düşülən edir. İyerarxik struktur proqramın məntiqini aydınlaşdırır və komanda üzvləri üçün sistemin başa düşülməsini asanlaşdırır.

Modulluq: Hər sinif öz məsuliyyət sahəsində qalır, lakin ümumi funksionallığı paylaşır. Bu, sistemin müxtəlif hissələrini müstəqil olaraq inkişaf etdirməyə və test etməyə imkan verir.

Mirasalmanın Mənfi Cəhətləri və Diqqət Edilməli Məqamlar

Sıx Əlaqələnmə (Tight Coupling): Miras alma əsas və törəmə siniflər arasında güclü asılılıq yaradır. Əsas sinifdə edilən dəyişikliklər törəmə sinifləri təsir edə bilər, bu da bəzən problemlərə səbəb ola bilər. Kompozisiya (composition) bəzən miras almaya alternativ olaraq daha yaxşı həll ola bilər.

Mürəkkəblik: Çox dərin miras alma iyerarxiyaları kodun başa düşülməsini çətinləşdirir. Bir metodu tapmaq üçün bir neçə sinif səviyyəsini araşdırmaq lazım ola bilər. Buna görə də iyerarxiyaları mümkün qədər sadə saxlamaq tövsiyə olunur.

Çevikliyin Məhdudiyyəti: Bəzi hallarda miras alma strukturu çox sərt ola bilər və gələcək dəyişikliklərə uyğunlaşmaq çətin ola bilər. Əgər əsas sinif düzgün dizayn edilməyibsə, bütün törəmə siniflər bundan təsirlənər.

Almaz Problemi (Diamond Problem): Çoxlu miras almada, əgər iki əsas sinif eyni metoda malik olan ortaq əcdad sinifindən miras alırsa, törəmə sinif hansı metodun istifadə ediləcəyini müəyyənləşdirə bilməyə bilər. Bu problem bəzi dillərdə xüsusi mexanizmlərlə həll edilir.

Praktik Nümunələr

Nəqliyyat Vasitələri Sistemi: "Nəqliyyat" əsas sinifi yaradıb, ondan "Avtomobil", "Motosiklet", "Velosiped" törəmə sinifləri yaratmaq olar. Hər biri ortaq xüsusiyyətlərə (marka, model, il) malik olacaq, lakin özünəməxsus metodlara sahib ola bilər (avtomobilin qapı sayı, motosikletin tipi və s.).

İşçi İdarəetmə Sistemi: "İşçi" əsas sinifindən "Menecer", "Proqramçı", "Dizayner" törəmə sinifləri yaratmaq olar. Hamısı ortaq xüsusiyyətlərə (ad, maaş, id) malik olacaq, lakin fərqli funksionallıqları ola bilər.

Geometrik Fiqurlar: "Fiqur" əsas sinifindən "Dairə", "Düzbucaqlı", "Üçbucaq" törəmə sinifləri yaradıb, hər biri öz sahə və perimetr hesablama metodlarını tətbiq edə bilər.

Miras alma OOP-da güclü bir vasitədir, lakin düzgün istifadə edilməlidir. "Composition over inheritance" (kompozisiya miras almaya üstünlük verilməlidir) prinsipi bəzən daha yaxşı dizayn həllinə gətirib çıxarır. Hər bir vəziyyətdə hansı yanaşmanın daha uyğun olduğunu qiymətləndirmək vacibdir. Düzgün tətbiq ediləndə, miras alma kodun keyfiyyətini, oxunaqlığını və saxlanıla bilənliyini əhəmiyyətli dərəcədə artırır.

Tədris sahələrimiz barədə məlumat almaq üçün qeydiyyatdan keçin

IT sahəsini öyrənməyə başla