CodeGym /Kurslar /Python SELF AZ /Hər şey obyektlərdir

Hər şey obyektlərdir

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

1.1 Obyektlər və siniflər

Bu gün sənə Python-da tipik bir proqramın necə qurulduğunu öyrədəcəm. Və əsas xəbər: hər bir Python proqramı siniflər və obyektlərdən ibarətdir. Python – obyekt yönümlü dildir və hər şey obyektlərdir: rəqəmlər, sətir cərgələri, funksiyalar və hətta siniflər obyektlərdir.

Bəs siniflər nədir?

Bir analoji misaldan başlayaq. Təsəvvür et ki, kiçik bir gəmi düzəltmək istəyirsən. Əvvəlcə bir çertyoj hazırlamaq lazımdır, sonra isə bunu zavoda verirsən ki, o çertyoja görə gəmi yığsınlar. Ya da bir neçəsini. Və ümumiyyətlə istənilən qədər gəmi hazırlansın. Bir çertyoja görə onlarla oxşar gəmi hazırlanır, budur əsas məqam.

Proqramlaşdırmada Python-da tam olaraq belədir.

Çertyojlar

Proqramçı – layihəçi kimidir. Ancaq layihəçi çertyoj çəkir, Python-proqramçı isə siniflər yazır. Daha sonra çertyoja əsasən detallar, siniflərə əsasən isə obyektlər yaradılır.

Əvvəlcə biz sinifləri yazırıq (çertyoj düzəldirik), sonra isə proqramın icrası zamanı həmin siniflərə görə Python obyektlər yaradır. Tam olaraq çertyojdan gəmi hazırlanması kimi.

Çertyoj bir dənədir, amma gəmilər çox ola bilər. Gəmilər fərqli ola bilər, onların fərqli adları, daşıyacaqları fərqli yüklər var. Amma onlar çox oxşardırlar: hamısı eyni konstruksiyaya malik gəmilərdir və oxşar vəzifələri yerinə yetirə bilərlər.

Yaxşı, bir başqa analogiya...

Qarışqa yuvası

Qarışqa yuvası obyektlərin qarşılıqlı əlaqəsi üçün yaxşı bir nümunədir. Ən sadə qarışqa yuvada üç qarışqa sinifi var: kraliça, döyüşçü və işləyən qarışqalar.

Hər sinifin qarışqalarının sayı müxtəlifdir. Kraliça qarışqa yuvasında təkdir, döyüşçülər – onlarla, işləyən qarışqalar – yüzlərlədir. Üç sinif və yüzlərlə obyekt. Qarışqalar bir-biri ilə, eləcə də fərqli siniflərdən olan qarışqalarla, dəqiq qaydalara əsasən əlaqə qururlar.

Bu ideal bir nümunədir. Tipik bir proqramda hər şey tam olaraq belədir. Əsas obyekt var ki, digər bütün siniflərin obyektlərini yaradır. Obyektlər bir-biri ilə və proqramın "xarici dünyası" ilə qarşılıqlı əlaqəyə girirlər. Bu obyektlərin davranışı bərk kodlaşdırılmışdır.

Bu iki izah – bir medalın iki tərəfindədir. Həqiqət ortadadır. Birinci misal (çertyoj və gəmilər haqqında) sinif və onun obyektləri arasındakı əlaqəni göstərir. Analogiya çox güclüdür. İkinci misal (qarışqa yuvası haqqında) obyektlərin, proqramın işlədiyi zamanı var olan obyektlər və yazılmış siniflər arasındakı əlaqəni göstərir.

Əvvəlcə sən proqramdakı bütün mövcud obyektlər üçün siniflər yazmalısan, sonra isə onların qarşılıqlı əlaqəsini təsvir etməlisən. Bu qarışıq səslənir, amma göründüyündən asandır.

Python-da hər bir varlıq proqramın işlədiyi zaman obyekt kimi mövcuddur və proqram yazmaq əsasən obyektlərin qarşılıqlı əlaqəsi müxtəlif yollarla təsvir etmə prosesidir. Obyektlər sadəcə bir-birinin metodlarını çağırır və onlara lazım olan məlumatları ötürür.

Dokumentasiya

Metodlara hansı məlumatları ötürmək lazımdır? Burada hər şey sizin üçün əvvəlcədən düşünülmüşdür.

Adətən hər bir sinifin təsviri var ki, orada onun nə üçün yaradıldığı göstərilir. Həmçinin adətən hər bir public metod üçün də təsvir var: nə edir və hansı məlumatları ona ötürmək lazımdır.

Sinifdən istifadə etmək üçün ümumi cizgilərdə onun nə etdiyini bilmək lazımdır. Həmçinin, onun hər bir metodunun nə etdiyini dəqiq bilmək lazımdır. Amma onun bunu necə etdiyini bilmək mütləq deyil. Bu, bir növ sehrli çubuq kimidir.

Haydı, bir koda baxaq — faylın kopyalanması:


src = open('menbe.txt', 'r')
dst = open('teyinat.txt', 'w')
            
for line in src:
    dst.write(line)
            
src.close()
dst.close()
        

Əgər bu kodu xətt-xətt oxusan, ümumi olaraq nə etdiyini təxmin edə biləcəksən. Amma burada təcrübə və praktika lazımdır. Beləliklə, bir müddət sonra bu kod sənə tanış və asan görünəcək.

1.2. Proqramın dizayn edilməsi

Proqramın dizayn edilməsi — bu, bir sənətdir. Həm asandır, həm də çətindir eyni vaxtda. Asandır, çünki heç bir sərt qanun yoxdur: qadağan edilməyən hər şey icazəlidir. Amma çətindir də məhz buna görə: bir şeyi etmək üçün çoxlu yollar var və ən yaxşısını tapmaq elə də asan deyil.

Proqram dizayn etmək — kitab yazmaq kimidir. Bir tərəfdən sadəcə hərflər, sözlər, cümlələr yazırsan. Digər tərəfdən isə süjet, qəhrəmanların xarakterləri, daxili ziddiyyətlər, konfliktlər, hekayə tərzi, intriqa və s. önəm daşıyır.

Əsas məsələ — sizin kodu kim üçün yazdığınızı anlamanızdır. Həmişə yadınızda saxlayın ki, kodunuz başqaları — başqa proqramçılar üçün nəzərdə tutulub.

Hər hansı bir məhsulun hazırlanması dəyişikliklər deməkdir: burada bir şey əlavə etdiniz, orada sildiniz, başqa yerdə dəyişdirdiniz. Belə-belə, kiçik iterasiyalarla böyük, nəhəng və çox mürəkkəb layihələr yaranır.

Koda əsas tələblərdən biri — o, başqaları tərəfindən anlaşıla bilən olmalıdır. Yanlış, amma anlaşıla bilən kod düzəldilə bilər. Düzgün, amma anlaşılmaz kodu isə yaxşılaşdırmaq demək olar mümkün deyil. Onu yalnız atmaq olar.

Yaxşı və anlaşılan kodu necə yazmaq olar?

Bunun üçün üç əsas şey etmək lazımdır:

  • Metodlar daxilində yaxşı və anlaşılan kod yazmaq — ən asan məsələ budur.
  • Proqramda hansı obyektlərin olacağını müəyyənləşdirin.
  • Proqramı düzgün şəkildə loqik hissələrə bölün.

Bəs bu anlayışların arxasında nə dayanır?

Metodlar daxilində yaxşı kod yazmaq

Əgər ən azından başlanğıc səviyyədə ingilis diliniz varsa, bəlkə də fərqinə varmısınız ki, bəzi hallarda kodun oxunması çox asandır: sanki ingilis dilində cümlələrdir:

  • class Cat(Pet) – Cat (Pişik) sinfi Pet (Heyvan) sinfini genişləndirir.
  • while stream: – stream boş olmayana qədər...
  • a if a < b else b – əgər a b–dən azdırsa, a-ni qaytar, yoxsa b-ni qaytar.

Bu məqsədli şəkildə belə edilib. Python — özünü sənədləşdirən kod yazmağı asanlaşdıran bir neçə dildən biridir: heç bir şərh olmadan başadüşülən kod yazmaq imkanı verir. Python-da yaxşı kod çox vaxt elə birbaşa ingilis cümləsi kimi oxunur.

Kod yazarkən əsas məqsədiniz də kodu maksimum sadə və qısa etməkdir. Sadəcə düşünün ki, kodunuz oxunması nə qədər asan olacaq və siz doğru istiqamətə doğru addımlamağa başlayırsınız.

Python'da oxunaqlı kod yazmaq adətdir. Arzuolunandır ki, hər bir metod tam olaraq ekranda yerləşsin (metodun uzunluğu — 20-30 sətir). Bu bütün Python icması üçün norma sayılır. Əgər kodu yaxşılaşdırmaq mümkündürsə, onu yaxşılaşdırmaq lazımdır.

Yaxşı kod yazmağı öyrənməyin ən yaxşı yolu — daima praktika etməkdir. Çoxlu kod yazın, başqalarının kodunu öyrənin, daha təcrübəli həmkarlarınızdan kodunuza baxış etmələrini xahiş edin. Və unutmayın ki, «belə də olar» dediyiniz anda inkişafınız dayanacaq.

Proqramda hansı obyektlərin olacağını müəyyənləşdirin

Siz elə kod yazmalısınız ki, o, digər proqramçılara da anlaşılan olsun. Əgər 10 proqramçıdan 9-u proqram dizayn edərkən A, B və C siniflərini yaradacaqsa, siz də A, B və C siniflərini öz proqramınızda yaratmalısınız. Yəni başqaları üçün anlaşılan kod yazmalısınız.

Əla, işlək, sürətli, orijinal kod — bu, pis kod sayılır.

Başqalarının layihələrini öyrənməlisiniz: bu, İT sahəsində illərlə toplanmış bilik və hikməti mənimsəmək üçün ən yaxşı, ən sürətli və ən asan yoldur.

Bu arada, artıq əlinizin altında əla, populyar və yaxşı sənədləşdirilmiş bir layihə var — Python SDK. Oradan başlayın.

Sinifləri və sinif strukturlarını analiz edin. Düşünün, niyə bəzi metodlar statikdir, digərləri isə yox. Niyə metodlarda məhz bu parametrlər var, başqaları deyil. Niyə məhz bu metodlar, niyə siniflər belə adlanır və məhz bu paketlərdə yerləşir.

Bu sualların hamısına cavab tapmağa başladığınız zaman, başqaları tərəfindən anlaşılan kodlar yazmağa başlayacaqsınız.

Ancaq sizi Python SDK metodlarının kodlarını öyrənməkdən çəkinmək istəyirəm. Çox metodların kodları iş sürətini maksimumlaşdırmaq üçün dəyişdirilib — onların oxunurluğu sual altındadır.

Proqramı düzgün şəkildə loqik hissələrə bölmək

Hər bir proqram adətən hissə və ya modullara bölünür. Hər bir hissə proqramın müəyyən aspekti üçün məsuldur.

Məsələn, kompüterdə sistem bloku, monitor, klaviatura var və bu, hamısı fərqli, az asılı olan hissələrdir. Üstəlik, onların qarşılıqlı əlaqəsi standartlaşdırılıb: USB, HDMI və s. Yəni klaviaturaya qəhvə töksəniz, onu sadəcə suyun altında təmizləyib, qurudub yenidən istifadə edə bilərsiniz.

Noutbuk isə — monolit arxitektura nümunəsidir: loqik hissələr mövcuddur, amma daha sıx inteqrasiya olunub. Məsələn, Macbook Pro-da klaviaturanı təmizləmək üçün noutbukun yarısını sökməlisiniz. Noutbukun üzərinə qəhvə tökülsə — bu, artıq yenisini sifariş etmək səbəbi olur. Yalnız qəhvə yox.

1.3 Öz siniflərini yaratmaq

Proqramlaşdırmaya yeni başlayan zaman kiçikdən başlamaq vacibdir — öz siniflərini yaratmağı öyrənmək.

Onları, əlbəttə ki, artıq yaratmısınız, amma hansı siniflərin proqramda olmalı olduğunu, onların necə adlandırılacağını, hansı metodlara malik olmalı olduğunu və bir-biri ilə necə qarşılıqlı təsir göstərməli olduğunu öyrənməlisiniz.

Varlıqlar siyahısı

Əgər haradan başlayacağınızı bilmirsinizsə, əvvəldən başlayın.

Proqramın dizaynına başlayan zaman sadəcə bir vərəqə proqramda olması lazım olan varlıqların (obyektlərin) siyahısını yaza bilərsiniz. Sonra onları belə bir prinsipə əsasən proqramlaşdıra bilərsiniz: hər bir varlıq — ayrı bir sinif.

Nümunə

Tutaq ki, şahmat oyunu yazmaq istəyirsiniz. Sizə belə varlıqlar lazım olacaq: şahmat taxtası və 6 növ fiqur. Fiqurlar müxtəlif yollarla hərəkət edir, müxtəlif dəyərlərə malikdir — məntiqlidir ki, bunlar ayrı siniflərdir. Ümumiyyətlə, ən əvvəl, nə qədər çox sinif varsa, bir o qədər yaxşıdır.

Yeni başlayan bir proqramçının iki sinif əvəzinə on sinif yazması nadir bir haldır. Amma on sinif əvəzinə iki və ya hətta bir yazmaq — bunu yeni başlayanlar sevirlər. Ona görə də daha çox siniflər, hörmətli proqramçılar. Kodunuz hər kəsə aydın olacaq, bəlkə də sizdən başqa 😛

Şahmat

Tutaq ki, şahmat üçün siniflər yazmağa qərar verdik: bu siniflər necə görünərdi?

Şahmat taxtası — sadəcə 8-ə 8 bir massivdir? Daha yaxşı olar ki, onun üçün içində massivə istinad saxlayan ayrıca bir sinif yaradın. O zaman "şahmat taxtası" sinfinə bir çox faydalı metodlar əlavə edə bilərsiniz, məsələn, hücrənin boş və ya dolu olduğunu yoxlayan.

Ümumiyyətlə, əvvəldən həmişə belə bir prinsipə rəhbərlik etmək olar: Proqram müxtəlif Varlıqlardan ibarət olur, Varlığın isə tipi var. Bax bu tip — sinifdir.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION