C#-da Mücərrədləşdirmə(Abstraction)

Məhəmməd Sadıqzadə
Pragmatech
Published in
3 min readJul 25, 2021

Bundan əvvəlki məqaləmizdə OOP-nin önəmli bir hissəsi olan kapsullamaqdan bəhs etmişdik.İndi isə sırada Mücərrədləşdirmədir(ing:Abstraction).

Mücərrədləşdirmə nədir?

Mücərrədləşdirmə iç detalları gizlədib sadəcə əməliyyatları istifadəçiyə verməkdir.Məsələn,belə bir ssenari quraq :

Bir gün ürəyiniz dostlarınızla Playstation oynamaq istədi və bir oyun zalına getdiniz.Aldınız pultları əlinizə və 2050-ci il olmasına rəğmən yenə də PES 2013 açdırdınız.L1+△ ilə uzun ara pas atdınız Agüero`a,sonra da qol vurdunuz.

Bu ssenaridə mücərrədləşdirmə nümunəsini görürük.Oyunu yazanlar bizə sadəcə əməliyyatları vermiş və tuşlara basaraq onları həyata keçiririk.O tuşlara basdıqdan sonra topu,onun koordinatlarının hansı dəyərlər aldığını,oyunçuların arxa planda necə hərəkət etdirildiyini bilmirik.

Mücərrədliyə dair çox nümunə verə bilərik : Bunlardan biri də toxluğa gedən prosesdir.Biz acanda nə edirik?Bədənimizə yetərli qidanı veririk və sonunda “Doydum” siqnalını alırıq.O alınan qidaların hansı hormonları hərəkət etdirdiyini,yaşam funksiyalarımız üçün hara nə qədər bölüşdürüldüyünü,sonunda “doydum” siqnalına səbəb olan hormonun hərəkətini bilmirik,müasir elm ilə bunu müəyyən qədər bilsək belə,bizim nəzarətimizdə olan bir şey deyil.

Mücərrəd siniflər

Mücərrəd siniflər proyektlərin sinif iyerarxiyasına baxsaq,ən yuxarıda olan,özündən siniflər törədən bir sinif olduğunu görərik.Onsuz da təkbaşına yaradılan bir abstrakt sinfin nə anlamı olar ki?Çünki obyektini yarada bilmirik.Abstrakt siniflər abstract açarsözü ilə təyin olunur və içərisində ən az 1 abstrakt metod təyin edilməlidir.Obyekti yaradıla bilməməsinə rəğmən konstruktoru ola bilər(miras alan siniflərin çağırması üçün).

public abstract MyClass{}

Mücərrəd siniflərdə həm mücərrəd,həm də mücərrəd olmayan metodlar təyin edə bilərik(Mücərrəd metodları təkcə mücərrəd siniflərdə təyin etmək mümkündür).Mücərrəd metodları o sinfi miras alan bütün siniflər doldurmalıdır,əsas sinifdə ümumi çərçivəni bəlirləyirik(return tipinin nə olacağını,neçə parametr olacağını və s.),geri qalanı-metodun içini doldurmağı isə miras alan sinfə buraxırıq.

Mücərrəd siniflər və metodlar nə zaman işlədilməlidir?

Türkiyədən bir atalar sözü demək istərdim burda :

Her yiğidin yoğurt yiyişi farklıdır

Bu misaldan getsək,belə deyə bilərik ki : Ediləcək şey eyni,lakin edilmə üsulları fərqli olanda mücərrədliyə ehtiyac duyuruq.Və də hər kəs özünə görə ayrı adda metod yazmasın deyə ortaq metodları abstrakt edirik ki, “Miras almısansa,paşa-paşa bu metodu(ları) doldurmalısan” deyə bir mesaj verək.

Məsələn,bir restoran üçün hesab sistemi yazmaq istəyirsiniz deyək.Müştərilərin sifarişləri sonunda çıxan hesabda sıravi vətəndaşlar üçün hesabda endirim olmur,tələbələrə 20%,65+ yaşlılara isə 30% endirim edildiyini düşünək.Burda ortaq metod nədir?Hesablayıb nəticəni vermək.Deməli,bütün siniflərdə mütləq olmalı bir metoddur bu,sadəcə şamil olunan endirim fərqli olacaq :

Yuxarıdakı proqramda siniflər iyerarxiyasının ən başında bizim bir BaseBill` deyə mücərrəd sinfimiz var.Onda da bütün siniflərin özünə görə yazmalı olduğu bir getResultAmount mücərrəd metodu var.Həm də bütün miras alan siniflərdə konstruktorların içində this.totalAmount = totalAmount` əməliyyatı baş verəcəyi üçün onu əsas sinifdə yazıb :base(totalAmount)əmri ilə digər siniflərdəki konstruktorlara da eyni əməliyyatı mənimsətdik.Və siniflərin obyekti yaradılanda sinfin tipinə görə aldığı dəyər dəyişilən bir salepercent dəyişəni təyin etdik.Və sonda da getResultAmount metodu ilə bizə lazım olan cavabları əldə etdik.

Xülasə

Bu məqaləmdə də OOP-in digər bir onurğa hissəciyini — Mücərrədləşdirməni izah etməyə çalışdım.Gəlin,yazdıqlarımızın xülasəsini çıxardaq :

  • Mücərrədlik ehtiyac olmayan məlumatları gizlətmək üçündür.
  • Mücərrəd siniflər təkbaşına bir anlam ifadə etmir,miras verəcəyi siniflər olmalıdır.
  • Mücərrəd siniflərin obyekti yaradıla bilməz,amma daxilində konstruktor yazmaq mümkündür.
  • Mücərrəd metodların içi boş olur,miras alan sinifdə mütləq doldurulmalıdır.

--

--