Python Programming Paradigms

Hacimurad Azizov
Pragmatech
4 min readSep 21, 2020

--

Python dörd əsas proqramlaşdırma paradiqmasını dəstəkləyir: vacib, funksional, prosedur və obyekt yönümlü(imperative, functional, procedural, and object-oriented). İstər etibarlı, istərsə də faydalı olduğuna razı olsanız da, Python dördünün hamısını hazır və işlək vəziyyətə gətirməyə çalışır. Xüsusi istifadə halları üçün hansı proqramlaşdırma paradiqmasının ən uyğun olduğunu görmək üçün dalmazdan əvvəl, bunları tez bir şəkildə nəzərdən keçirmək üçün yaxşı vaxtdır.

Imperative programming paradigm(Zəruri proqramlaşdırma paradiqması)

Imperative programming paradigm istiqamətləri ifadə etmək üçün təbii dilin məcburi əhval-ruhiyyəsindən istifadə edir. Bir sıra şifahi əmrlər kimi əmrləri addım-addım yerinə yetirir. “Necə həll ediləcək” yanaşmasından sonra proqramın vəziyyətinə birbaşa dəyişikliklər edir; dolayısı ilə əyalətli proqramlaşdırma modeli adlanır. Zəruri proqramlaşdırma paradiqmasını istifadə edərək, çox sadə, lakin zərif bir kodu tez bir zamanda yaza bilərsiniz və məlumat manipulyasiyasını əhatə edən tapşırıqlar üçün çox əlverişlidir. Nisbətən yavaş və ardıcıl icra strategiyası sayəsində kompleks və ya paralel hesablamalar üçün istifadə edilə bilməz.
Məqsəd bir simvol siyahısını götürmək və bir simli yaratmaq üçün birləşdirmək olduğu bu nümunə tapşırığı nəzərdən keçirin. Bunu vacib bir proqramlaşdırma tərzində etmək üçün bir yol aşağıdakı kimi ola bilər:

>>> sample_characters = ['p','y','t','h','o','n']
>>> sample_string = ''
>>> sample_string
''
>>> sample_string = sample_string + sample_characters[0]
>>> sample_string
'p'
>>> sample_string = sample_string + sample_characters[1]
>>> sample_string
'py'
>>> sample_string = sample_string + sample_characters[2]
>>> sample_string
'pyt'
>>> sample_string = sample_string + sample_characters[3]
>>> sample_string
'pyth'
>>> sample_string = sample_string + sample_characters[4]
>>> sample_string
'pytho'
>>> sample_string = sample_string + sample_characters[5]
>>> sample_string
'python'
>>>

Functional programming paradigm(Funksional proqramlaşdırma paradiqması)

Funksional proqramlaşdırma paradiqması, proqram hesablamasını lambda hesablamasına əsaslanan riyazi funksiyaların qiymətləndirilməsi kimi qəbul edir. Lambda hesablama, dəyişən bağlama və əvəzetmə istifadə edərək funksiyanın mücərrədləşdirilməsinə və tətbiqinə əsaslanan hesablamaları ifadə etmək üçün riyazi məntiqdə formal bir sistemdir. “Nəyi həll etməli” yanaşmasını izləyir — yəni idarəetmə axınını təsvir etmədən məntiqi ifadə edir — bu səbəbdən də deklarativ proqramlaşdırma modeli kimi təsnif edilir.
Funksional proqramlaşdırma paradiqması vətəndaşlığı olmayan funksiyaları təbliğ edir, lakin qeyd etmək vacibdir ki, Python-un funksional proqramlaşdırmanı həyata keçirməsi standart tətbiqdən kənara çıxır. Pythonun natəmiz funksional bir dil olduğu deyilir, çünki ehtiyatlı deyilsinizsə vəziyyəti qorumaq və yan təsirlər yaratmaq mümkündür. Dediyimiz kimi, funksional proqramlaşdırma paralel işləmə üçün əlverişlidir və rekursiya və paralel icra tələb edən tapşırıqlar üçün olduqca səmərəlidir.

>>> sample_characters = ['p','y','t','h','o','n']
>>> import functools
>>> sample_string = functools.reduce(lambda s,c: s + c, sample_characters)
>>> sample_string
'python'
>>>

Procedural programming paradigm(Prosessual proqramlaşdırma paradiqması)

The procedural programming paradigm ifadələrin prosedurlara (alt proqramlar və ya funksiyalar olaraq da bilinir) qurulduğu məcburi bir proqramlaşdırmanın alt növüdür. Proqram tərkibi, proqramların kainatın hər hansı bir yerində yerləşə biləcəyi və icrasının ardıcıl olduğu, beləliklə resurs istifadəsi üçün dar bir nöqtəyə çevrildiyi bir prosedur çağırışıdır. Məcburi proqramlaşdırma paradiqması kimi, prosedur proqramlaşdırma da dövlət modelini izləyir. Prosessual proqramlaşdırma paradiqması yaxşı proqram dizaynı praktikasını asanlaşdırır və modulların kod kitabxanaları şəklində yenidən istifadəsinə imkan verir.

Bu modullaşdırılmış inkişaf forması çox köhnə bir inkişaf üslubudur. Bir proqramdakı fərqli modulların bir-biri ilə əlaqəsi ola bilməz və fərqli yerlərdə yerləşə bilər, lakin çox sayda modula sahib olmaq bir çox inkişaf etdiricilər üçün çətinliklər yaradır, çünki bu, məntiqin təkrarlanmasına deyil, həm də baxımından çox yüklənməyə səbəb olur düzgün zənglərin tapılması və edilməsi. Nəzərə alın ki, aşağıdakı tətbiqetmədə stringify metodu kainatın hər hansı bir yerində müəyyən edilə bilər və hiylə qurmaq üçün yalnız istədiyiniz arqumentlərlə uyğun çağırış tələb olunur.

>>> def stringify(characters):
... string = ''
... for c in characters:
... string = string + c
... return stringify
...
>>> sample_characters = ['p','y','t','h','o','n']
>>> stringify(sample_characters)
'python'
>>>

Object-oriented programming paradigm(Obyekt yönümlü proqramlaşdırma paradiqması)

Obyekt yönümlü proqramlaşdırma paradiqmasında obyektlər paradiqmaların əsas elementidir. Obyektlər sadəcə həm məlumat üzvlərini, həm də metod funksiyalarını özündə cəmləşdirən bir sinifin nümunəsi kimi tərif edilə bilər. Üstəlik, obyekt yönümlü üslub, encapsulation dəstəkləyən məlumat üzvləri və metod funksiyaları ilə əlaqədardır və bir inheritance anlayışının köməyi ilə kod asanlıqla təkrar istifadə edilə bilər, ancaq obyekt yönümlü proqramlaşdırma paradiqmasının əsas çatışmazlığı kodun olmadığıdır Düzgün yazıldıqdan sonra proqram bir canavar halına gəlir.

>>> class StringOps:
... def __init__(self, characters):
... self.characters = characters
... def stringify(self):
... self.string = ''.join(self.characters)
...
>>> sample_characters = ['p','y','t','h','o','n']
>>> sample_string = StringOps(sample_characters)
>>> sample_string.stringify()
>>> sample_string.string
'python'
>>>

Hansı proqramlaşdırma paradiqmasını seçməliyəm?

Fərqli proqramlaşdırma paradiqmaları arasında heç bir müqayisə olmadığını qeyd etmək vacibdir. Proqram bilik təqdimatından başqa bir şey olmadığı üçün suala cavab: “Problemimi təmsil etməyin ən yaxşı yolu nədir?” müəyyən bir proqramlaşdırma paradiqması seçməkdir.

Səmimi dillə desək, probleminiz bir sıra sadə ardıcıl manipulyasiyalarla əlaqədardırsa, köhnə məktəb məcburi proqramlaşdırma paradiqmasına əməl etmək zaman və səy baxımından ən ucuz başa gələcək və sizə ən yaxşı nəticəni verəcəkdir. Dəyərlərin riyazi çevrilmələrini, məlumatların süzülməsini, xəritələnməsini və azalmalarını tələb edən problemlər olduqda, riyazi funksiyalar kimi proqram hesablama ilə funksional proqramlaşdırma əlverişli ola bilər. Əgər problem müəyyən şərtlərdən asılı olaraq zaman keçdikcə dəyişə bilən müəyyən atributları olan bir-biri ilə əlaqəli obyektlər dəsti kimi qurulubsa, obyekt yönümlü proqramlaşdırma çox faydalı olacaqdır. Əlbətdə, qayda əsaslı bir yanaşma burada işləməyəcəkdir, çünki proqramlaşdırma paradiqması seçimi də işlənəcək məlumatların növündən, sistemin dinamik ehtiyaclarından və miqyaslandırma kimi digər şeylərdən çox asılıdır.

Qaynaqlar:

--

--