Python-da Encapsulation

Sahil Appayev
Pragmatech

--

Python çox paradiqmalı proqramlaşdırma dilidir. Yəni fərqli proqramlaşdırma yanaşmalarını dəstəkləyir. Proqramlaşdırmada problem həll etmək üçün populyar yanaşmalardan biri də obyekt yönümlü proqramlaşdırma yanaşmasıdır. Python da bir çox yuxarı səviyyəli dillər kimi OOP paradiqmasına malikdir. Bildiyimiz kimi OOP-nin 4 əsas prinsipi mövcuddur:
1. Inheritance

2. Encapsulation

3. Abstraction

4. Polymorphism

Bu gün biz yuxarıdakı prinsiplərdən encapsulation konsepsiyasının python-dakı iplementasiyasına (tətbiqinə) baxacağıq.

Encapsulation bizə obyektin atributlarına birbaşa əlçatanlığı (access) əngəlləmək və bizim icazə verdiyimiz şərtlər daxilində access-ə şərait yaratmağa imkan verir. Bu xüsusiyyət təhlükəsizlik və proqramın dayanıqlığı baxımından çox əhəmiyyətli xüsusiyyətdir.

Gəlin encapsulation konsepsiyasını məlumat gizlətməyi həyata keçirmək üçün necə istifadə edə biləcəyimizi və obyekt atributlarının dəyərlərini dəyişdirməzdən əvvəl əlavə təsdiqləmə tətbiq edə biləcəyimizi göstərən bir nümunəyə nəzər salaq.

Fərz edək ki, bizim User sinifindən yaratmış olduğumuz bir obyektimiz var və istifadəçi bu obyektə ad, soyad və yaş xüsusiyyətləri verməlidir. Aşağıdakı kod nümunəsindən göründüyü kimi istifadəçi təyin etdiyimiz atributlara birbaşa access yaratmaqla istədiyi dəyəri mənimsədə bilər.

Bu nümunədə yaş (age) xüsusiyyəti 0-dan kiçik olmamalı olduğu halda mənfi qiymət alıb. Bu isə yolverilməzdir.

Bu kimi problemlərin qarşısını almaq üçün encapsulation bizim köməyimizə çatır və obyektin atributlarını bir növ xarici aləmdən izolyasiya etməyimizə imkan yaradır. Obyektin atributlarını xarici müdaxilələrdən izolyasiya etmək üçün atributları private təyin etməliyik, yəni xaricdən əlçatmanı məhtudlaşdırmalıyıq. Pythonda digər dillərdə olan private açar sözü olmadığı üçün dəyişən və atributları private etmək üçün “__” (qoşa alt xətt) istifadə olunur (protected etmək üçün isə “_” (tək alt xətt) istifadə olunur — daha ətrflı acces modifiers).

Prosesin həyata keçirilməsini daha aydın şəkildə anlamaq üçün kod nümunəsi ilə nəzərdən keçirdək.

Nümunədən də göründüyü kimi obyektin atributlarına biz dəyər mənimsətməyə çalışsaq da nəticə bütün atributlar üçün “None” olaraq qalır. Yəni biz private təyin olunmuş atributlara class xaricindən access edə bilmrik və bu yolla izolyasiya istəyimizə çatmış oluruq.

Bəs bu halda biz private etdiyimiz atributlara necə access edib dəyər mənimsədə biləcəyik?

Bunun üçün biz setget metodlarından istifadə edirik. Adlarından da göründüyü kimi get metodu atributu alır, set metodu isə onu dəyişdirir. Tətbiq etdiyiniz metodlara görə bir atributun oxuna və dəyişdirilə biləcəyinə, ya yalnız oxunmasına və ya ümumiyyətlə görünməməiyinə qərar verə bilərsiniz. Obyektimizin həmişə etibarlı bir vəziyyətə malik olmasını təmin etmək üçün əlavə təsdiqləmə şərtlərini set metodları vasitəsilə tətbiq edirik.

Bu kodda biz obyektin atributlarına dəyər mənimsətmə prosesini set metodları, dəyərinin alınmasını isə get metodları vasitəsilə həyata keçirdirik. Kodun nəticəsindən göründüyü kimi biz set metodlarında əlavə təsdiqləmə şətləri tətbiq etməklə yaş (age) atributuna 1-ci kod nümunəsindən fərqli olaraq mənfi dəyərlərin mənimsədilməsinin qarşısını aldıq və eyni zamanda str tipli ad (fname) və soyad (lname) atributlarına yalnız string formatlı və uzunluğu 3-dən çox olan, int tipli yaş atributuna isə 0-dan böyük-bərabər olmaqla yalnız integer tipli dəyər mənimsətməyə icazə verdik.

Vaxt ayırıb oxuduğunuz üçün təşəkkürlər.

--

--