Python proqramlaşdırma dili çoxlu mənimsətməyə imkan verir. Bu iki şəkildə mümkündür:
Eyni zamanda bir neçə dəyişənə eyni qiymətlərin mənimsədilməsi;
Eyni zamanda bir neçə dəyişənə müxtəlif qiymətlərin mənimsədilməsi.
Gəlin aşağıdakı misalı nəzərdən keçirək:
>>> a = b = c = 1
>>> print(a, b, c)
1 1 1
>>>
Burada üç dəyişəndən (a, b, c) istifadə etdik. Bu üç dəyişənə eyni zamanda eyni bir qiymət (1) mənimsədilir və print əmri ilə ekrana çapa verilir. Nəticədə ekrana hər üç dəyişənin almış olduğu eyni qiymətlər (1 1 1) çıxır.
Aşağıdakı misal isə bir neçə dəyişənə müxtəlif qiymətlərin mənimsədilməsini nümayiş etdirir:
>>> a, b, c = 1, 2, 3
>>> print(a, b, c)
1 2 3
>>>
Burada isə üç dəyişənə eyni zamanda fərqli qiymətlər (1, 2, 3) mənimsədilir və print əmri ilə ekrana çapa verilir. Nəticədə ekrana hər üç dəyişənin almış olduğu fərqli qiymətlər (1 2 3) çıxır.
Python proqramlaşdırma dilində heç bir “iş görməyən” pass adlı bir operator var. Bu operator o zaman istifadə olunur ki, sintaksis olaraq operatorun olması tələb olunur, lakin proqram kodundan heç bir əməl tələb olunmur. Məsələn deyək ki, biz fakt() adlı bir funksiya hazırlamağı düşünürük, lakin bu funksiyanın gövdəsini yazmağı sonraya saxlamaq istəyirik. Python funksiya gövdəsinin boş saxlanmasına icazə vermədiyinə görə biz burada pass operatorundan istifadə edə bilərik:
def fakt(n):
pass
Gəlin başqa bir nümunəni nəzərdən keçirək.
Aşağıda iki dəyişən bir-biri ilə müqayisə olunur, nəticədən asılı olaraq fərqli əməliyyatlar icra olunur. Dəyişənlərin bərabərliyi halında gələcəkdə icrası nəzərdə tutulan lakin proqramçının hələ hazırlamadığı bir əməliyyat var. Bu hissə pass operatorunu yazmaqla boş buraxala bilər:
a = int(input())
b = int(input())
if a > b:
c = a * a + b
elif a < b:
c = b * b - a
else:
pass
print(c)
Gördüyünüz kimi pass operatorunun tətbiqi hər hansı bir əməli yerinə yetirmir, lakin eyni zamanda müəyyən proqram blokunu boş saxlamamaq üçün işimizə yarayır.
Kompüter Elmləri və İnformasiya Texnologiyaları ixtisasları günbəgün daha da populyarlaşır. Bu ixtisaslara yiyələnmək üçün isə güclü nəzəri biliklərə və sağlam praktiki vərdişlərə sahib olmaq lazımdır. Bəs dünyada öz tələbələrinə bilik və təcrübəni ən uğurlu şəkildə verən ali təhsil müəssisələri hansılardır? Bu günkü məqaləmizdə bu haqda danışacağıq.
Massachusetts Institute of Technology (MIT)
Masaçusets Texnologiya İnstitutu (MIT) bu gün dünyada elm və texnologiyanın tədrisində lider mövqedə durur. Bu iddianı təsdiq edən ən əsaslı fakt indiyə qədər 63 MIT yetirməsinin Nobel Mükafatı qazanmasıdır.
Kompüter Elmlərinin tədrisi sahəsində isə bu ali məktəbin göstəriciləri həqiqətən də göz qamaşdırır. MIT-in Elektrik Mühəndisliyi və Kompüter Elmləri Departamenti bakalavriat səviyyəsində dünya üzrə ən nümunəvi tədris verir. Bundan başqa institutun nəzdində kompüter elmləri ilə məşğul olan bir çox elmi-araşdırma mərkəzləri və müasir laboratoriyalar fəaliyyət göstərir. Bunlardan Kompüter Elmləri və Süni İntellekt Laboratoriyası (CSAIL) xüsusilə seçilir. Dünyaca məşhur olan CSAIL süni intellekt, hesablamalı biologiya, robototexnika və s. problemlərlə məşğul olur.
MIT-in Kompüter Elmlərindən məzun olanlar dünyanın aparıcı İT şirkətlərindən yüksək maaşlı təkliflər alır. Bu məzunlar içərisində öz biznesini quranlar da az deyil. Onlardan IRobot korporasiyasının qurucusu Colin Angeli və Hewlett Packard şirkətinin həmtəsisçisi William Reddington Hewletti xüsusilə qeyd etmək olar.
Stanford University
Stanford Universiteti artıq uzun müddətdir ki, dünyada yüksək təhsil göstəricilərinə malik təhsil ocaqlarından biri kimi tanınır. İndiyə qədər universitetin yetirmələrindən 49-u Nobel Mükafatına, 27-si xüsusi MacArthur təqaüdünə və 20 nəfəri də ABŞ-ın Milli Elm Medalına layiq görülüb.
50 illik tarixi olan Kompüter Elmləri Departamenti Silikon Vadisinin qurulmasında yaxından iştirak etmişdir. Məhz bu departamentin məzunları dünyanın rəqəmsal nəhəngləri olan Google, Yahoo, Taiwan Semiconductor və Electronic Arts kimi şirkətləri təsis etmişlər.
Stanford Universitetinin Kompüter Elmləri Departamenti keçmiş ənənələrin qorunub inkişaf etdirilməsi və movcud nailiyyətlərin davamlı olması üçün strateji plan işləyib hazırlamışdır. Bu plana əsasən bir çox proqramların online tədrisi nəzərdə tutulmuşdur.
Carnegie Mellon University
Şotland əsilli amerikalı sənayeçi və xeyriyyəçi Endrü Karneginin təsis etdiyi Carnegie Mellon Universiteti (CMU) artıq bir əsrdən çoxdur ki, fəaliyyət göstərir. Universitetin fəlsəfəsini Karneginin biznesdə rəhbər tutduğu və ona inanılmaz uğurlar qazandıran praqmatik prinsipləri təşkil edir.
Carnegie Mellon Universiteti quruluşundan bəri innovativ və kreativ həllər ortaya qoymaqla elmi-tədqiqat institutları arasında öncül mövqedə yerləşmişdir. Bu mənada ən böyük uğur kimi universitetin Kompüter Elmləri Məktəbinin Mars roverlərində istifadə olunan robot qurğuları və onların proqram təminatının hazırlanmasındakı əməyini qeyd etmək olar. Bundan başqa CMU avtomobil qəzalarını önləyən ağıllı sistemlər və yaşlı insanlara ev şəraitində yardımçı olan innovativ qurğular işləyib hazırlamışdır.
Carnegie Mellon Universiteti Kompüter Elmlərinin ümumi istiqamətlərindən başqa öz tələbələrinə Hesablamalı Biologiya, İnsan və Kompüter İnteraksiyası, Dil Texnologiyaları, Maşın Öyrənməsi, Robototexnika kimi sahələrin tədrisini də təklif edir.
University of California – Berkeley
University of California – Berkeley dünyada ƏN YAXŞI dövlət universiteti sayılır. Kaliforniya Universiteti müxtəlif sahələrdə bir sıra elmi ixtiralara (2500 patent) imza atmışdır. Bunlardan atom bombasının hazırlanması və 5 kimyəvi elementin kəşfini misal göstərmək olar. Dünyanın aparıcı elmi-tədqiqat mərkəzi hesab olunan bu universitetin ciddi elmi bazası, yüksək səviyyəli texniki təchizatı və elmi məsələlərə çox orijinal yanaşması vardır.
Kaliforniya Universitetinin İnformasiya-Kommunikasiya Texnologiyaları (İKT) sahəsindəki nailiyyətləri də göz qamaşdırır. Məhz bu universitetin divarları arasında elektron lampalı kompüter, kompüter mausu, PowerPoint, elektron poçt, Unix əməliyyat sistemi ərsəyə gətirilmişdir. Universitetin 9 yetirməsi Türinq mükafatına layiq görülmüşdür.
Bu gün University of California – Berkeley Kompüter Elmlərinin müxtəlif istiqamətləri üzrə yüksək səviyyəli tədris proqramları təklif edir.
Harvard University
1636-cı ildə təsis edilmiş Harvard Universiteti bu gün dünyanın ən prestijli ali təhsil ocaqlarından biri sayılır. Təhsilin keyfiyəti və universitetdə aparılan elmi tədqiqatların miqyasına görə Harvard Universiteti dünya reytinqlərində hər zaman ön sıralarda durur. Təsadüfi deyil ki, Harvard Universitetinin kitabxanası dünyada ən böyük universitet kitabxanası (20 milyon tom) sayılır. Universitetin hesabına qazanılan Nobel mükafatlarının sayı isə çoxdan 160-ı ötüb. Harvard Universiteti həm də onunla fəxr edə bilər ki, məzunları arasında yüzlərlə dövlət xadimi (onlardan sadəcə 23-ü prezident) və biznes dünyasında böyük uğurlar qazanmış çox sayda milyarder və milyonçular var.
Universitetin Kompüter Elmləri Departamenti John A. Paulson adına Mühəndislik və Tətbiqi Elmlər Məktəbinin nəzdində fəaliyyət göstərir. Burada Süni İntellekt, Proqramlaşdırma Dilləri və Hesablamalı Linqvistika kimi sahələrdə yüksək səviyyəli təhsil verilir. Tələbələrin elmi araşdırma aparmaları üçün bir sıra tədqiqat institutları fəaliyyət göstərir.
Son olaraq Harvard Universiteti ilə bağlı maraqlı bir statistikanı da qeyd etmək yerinə düşər. Belə ki, burda təhsil alan tələbələrin 60%-i daha universiteti bitirmədən öz ixtisasları üzrə iş tapa bilirlər.
University of Cambridge
Dünyanın ən qədim (1209) universitetlərindən biri olan Cambridge Universiteti öz reputasiyası ilə akademik institutlar arasında xüsusi bir yer tutur. Universitetin məzunları arasında dünyaca məşhur alim, dövlət xadimi, yazıçı və müxtəlif sahələrdə öz sözünü demiş peşəkarlar var. University of Cambridge özündə müxtəlif institutları birləşdirən 31 yarı-avtonom kollec və 150-dən çox departament, fakültə və digər institutlardan təşkil olunmuş 6 məktəbdən ibarətdir.
Cambridge Universitetinin Kompüter Elmləri və Texnologiya Departamenti 1937-ci ildə təsis edilmişdir. Burada tələbələrin yüksək təhsil alması və tədqiqat aparmaları üçün hər cür şərait vardır. Departament həmçinin hər həftə İnformasiya Texnologiyalarının ən aktual mövzuları ətrafında müxtəlif seminarlar da təşkil edir.
Bu gün University of Cambridge Kompüter Elmlərinin müxtəlif istiqamətləri üzrə bakalavriat, magistratura və doktorantura səviyəsində yüksək keyfiyətli təhsil təklif edir.
PrincetonUniversity
Özəl universitetlər arasında ən qədimlərdən sayılan Princeton Universiteti 1746-cı ildə təsis edilmişdir. Elmi-tədqiqat işlərinə çox önəm verməsilə tanınan bu universitet abituriyent seçimində də xüsusi həssaslıq göstərir. Universitetin ərazisində 75 elmi-tədqiqat institutu, 2 böyük milli laboratoriya və 10 kitabxana fəaliyyət göstərir. Bir çox dünya şöhrətli alim, biznesmen və dövlət xadimlərinin məzun olduğu Princeton Universiteti məzunların işlə təmin olunması üzrə dünya reytinqində ilk sıralarda yer alır.
Princeton Universitetinin Kompüter Elmləri Departamentinin bu sahədə öncüllərdən olmağa başlaması Alan Turing, Alonzo Church və John von Neumann kimi dahilərin öz fəaliyyət və tədqiqatlarını burada həyata keçirmələri ilə bağlıdır.
Öz ənənələrinə sadiq qalan departament bu gün də tələbələrə yüksək səviyyəli təhsil və təcübə imkanları təqdim edir. Burada tələbələr Kompüter Arxitekturası, Sistem və Şəbəkə Texnologiyaları, Proqramlaşdırma Dilləri, Hesablamalı Biologiya, Maşın Öyrənməsi və s. istiqamətlər üzrə keyfiyyətli təhsil ala bilərlər.
University of Oxford
1096-cı ildə təsis edilən Oxford Universiteti dünyanın ən qədim universitetlərindən biri sayılır. Köklü ənənələri, yüksək təhsil standartları bu gün də Oxford Universitetini dünyanın ən prestijli universitetləri arasında ön sıralarda qərarlaşdırır. Universitetin məzunları arasında bir çox dünya şöhrətli alim, siyasətçi və həyatda uğur qazanmış müxtəlif peşə sahibləri var.
Oxford Universitetinin Kompüter Elmləri Departamenti 1957-ci ildə təsis edilmişdir. Departamentdə yüksək dünya standartlarında təhsil almaq və tədqiqat işləri ilə məşğul olmaq mümkündür. Burada tələbələr Hesablamalı Biologiya, Kuantum Hesablaması, Hesablamalı Linqvistika, İnformasiya Sistemləri, Proqram Mühəndisliyi və s. kimi istiqamətlərdə dərin biliklərə və təcrübi bacarıqlara yiyələnə bilərlər.
Bu gün University of Oxford həm bakalavriat və magistratura, həm də doktorantura səviyəsində yüksək keyfiyətli təhsil təklif edir.
University of Toronto
Əsası 1827-ci ildə qoyulan Toronto Universiteti bu gün dünyanın ən nüfuzlu universitetlərindən biri sayılır. Tədrisdə innovativ həllərə üstünlük verən bu tədris ocağı ümumilikdə 12 müxtəlif profilli kollecdən ibarətdir. Universitetin 44 kitabxanası və 10 tədris hospitalı vardır. Toronto Universiteti elmi araşdırmalara xüsusi əhəmiyyət verməsi ilə də məşhurdur. Məhz burada insulin və elektron miskroskop ixtira edilmiş və həmçinin dərin öyrənmə, neyron şəbəkələr, multi-touch (çoxlu toxunma) texnologiyasının əsası qoyulmuşdur.
Toronto Universitetinin Kompüter Elmləri Departamenti 1947-ci ildə təsis edilmişdir. Burada tələbələrin İKT-nin müxtəlif istiqamətləri üzrə yüksək təhsil alması və tədqiqat aparmaları üçün hər cür şərait vardır. Departament həmçinin tələbə və məzunlarına geniş iş imkanları da təqdim edir.
University of Toronto’nun qapıları İKT ixtisaslarına yiyələnmək istəyənlərə hər zaman açıqdır. Bakalavriat və magistratura ilə yanaşı universitetin doktorantura proqramları da mövcuddur.
ETH Zürich
ETH Zürich dünyanın aparıcı texniki ali məktəblərindən biri sayılır. 1855-ci ildə təsis edilən təhsil ocağının ilk gündən qarşısına qoyduğu məqsədlər dəyişməz olaraq qalır: ən yaxşı təhsil, təcrübə və tədqiqatlar, məzunların yüksək peşəkarlığı. İndiyə qədər 21 yetirməsinin Nobel Mükafatı qazanması da bu ali məktəbin yüksək akademik ənənələrindən xəbər verir.
Ali məktəbin Kompüter Elmləri Departamenti 1981-ci ildə riyaziyyat, mühəndislik və təbiət elmlərinin kəsişməsində ərsəyə gətirilir. Lakin bundan xeyli əvvəl hələ 1950-ci ildə Prof. Eduard Stiefel’in rəhbərliyi altında Tətbiqi Riyaziyyat İnstitutu təsis edilir. Məhz burada Avropa universitetləri arasında ilk dəfə olaraq proqramlaşdırılabilən Z4 kompüteri quraşdırılır. Bu həmən kompüter idi ki, onu İkinci Dünya Müharibəsi illərində alman mühəndis Konrad Zuse ixtira etmişdi. Bundan başqa ALGOL və Pascal proqramlaşdırma dilləri də ETH Zürich’in divarları arasında meydana gəlmişdi.
Bu gün ETH Zürich İKT-nin müxtəlif istiqamətləri üzrə həm bakalavriat və magistratura, həm də doktorantura səviyəsində yüksək keyfiyətli təhsil təklif edir.
Daha öncə qeyd etdik ki, sahələr, yəni dəyişənlər həm siniflərə, həm də nümayəndələrə aid ola bilər. Sinif daxilində, lakin metod xaricində elan olunan dəyişənlər sinif dəyişənləri, metod daxilində elan olunanlar isə nümayəndə dəyişənləridir.
Gəlin konkret misal üzərində sinif və nümayəndə dəyişənlərini nəzərdən keçirək:
Gördüyünüz kimi burada count sinif dəyişənidir və ona sinif adını (indiki halda Personal) qeyd etməklə müraciət olunur. Bu dəyişən elan olunarkən qiyməti sıfır olaraq təyin edilir, konstruktor işə düşəndə isə bir vahid artırılır. Bundan başqa biz __init__() metodu daxilində iki dənə nümayəndə dəyişənini (self.name və self.pos) elan edirik. Bu dəyişənlərin önündə self parametrinin olması onların nümayəndəyə aid olduqlarını bildirir. Konstruktorun başlığında eyni adlı name və pos parametrləri olsa da Python onları qarışdırmır, Siz də qarışdırmayın 🙂 Nümayəndə dəyişənlərinə müraciət önlərinə obyektin adı (indiki halda p1 və p2) yazılmaqla həyata keçirilir.
ascii() funksiyası verilmiş obyekti (sətir, siyahı, kortej və s.) çap ediləbilən sətir şəklində qaytarır. Bu zaman qeyri-ASCII simvollar \x, \u və ya \U çıxışları vasitəsilə ekranlaşdırılır.
Funksiyanın sintaksisi aşağıdakı kimidir:
ascii(object)
Burada object sətir, siyahı, kortej və s. tipdə ola bilər.
Aşağıda ascii() funksiyasının istifadəsi ilə bağlı nümunələr verilmişdir:
Siniflər üçün təyin edilən metodlar içərisində xüsusi əhəmiyətə malik __init__() adlı bir metod var. Bu metod sinfin nümayəndəsi (obyekt) meydana gətirildikdən sonra işə düşür. Müxtəlif növ inisiallaşdırmalar (başlanğıc qiymətlərin verilməsi və ilkin əməliyyatlar) üçün __init__() metodunun istifadəsi çox faydalıdır. Ədəbiyyatda __init__() metoduna konstruktor da deyilir.
Aşağıdakı nümunəni nəzərdən keçirin:
class Kvadrat:
adef="Kvadrat - bütün tərəfləri bərabər olan
dördbucaqlıdır."
def __init__(self):
print(Kvadrat.adef)
def k_perim(self, a):
return 4*a
def k_area(self, a):
return a*a
kv = Kvadrat()
Biz burada Kvadrat sinfini elan etdikdən sonra bu sinfin kv nümayəndəsini meydana gətiririk. Sözü gedən obyektin meydana gəlməsindən sonra da __init__() metodu işə düşür. Nəticədə bu metodda nəzərdə tutulmuş əməliyat icra olunur:
>>>
Kvadrat - bütün tərəfləri bərabər olan dördbucaqlıdır.
>>>
Gördüyünüz kimi burada __init__() metoduna self parametrini saymasaq heç bir arqument ötürülmür. Lakin zərurət olduqda konstruktor əlavə parametrlərlə də təyin edilə bilər:
class Kvadrat:
adef="Kvadrat - bütün tərəfləri bərabər olan
dördbucaqlıdır."
def __init__(self, name):
print(Kvadrat.adef)
print("{0} kvadratı".format(name))
def k_perim(self, a):
return 4*a
def k_area(self, a):
return a*a
kv1 = Kvadrat("ABCD")
kv2 = Kvadrat("EFGH")
Yuxarıdakı proqram kodunda Kvadrat sinfinin __init__() metodunu elan edərkən self ilə yanaşı name parametrini də təyin edirik. Sonra bu sinfin kv1 və kv2 adlı iki ayrı obyektlərini meydana gətiririk. Daha öncə obyektləri meydana gətirərkən biz arqumentlərdən istifadə etmirdik. İndi isə diqqət etdinizsə, kv1 və kv2 nümayəndələri üçün sinif adından sonra mötərizə daxilində arqument kimi müvafiq olaraq “ABCD” və “EFGH” qiymətlərini verdik. Bu qiymətlər hər bir nümayəndə üçün __init__() metodunun name parametrinə ötürülür. Beləliklə hər bir obyektin inisiallaşdırılması zamanı konstruktora göndərilən arqumentlərdə öz qiymətləri yer alır. Onu da qeyd edək ki, __init__() metodunda istənilən sayda parametr təyin edilə bilər. Obyekt meydana gətirilərkən arqumentlərin qiymətləri ardıcıl şəkildə bu parametrlərə ötürülür. Gördüyünüz kimi __init__() metodunun tətbiqi siniflər üçün çox böyük əhəmiyət kəsb edir.
Bu dərsimizdə siniflər, obyektlər və atributlardan bəhs edəcəyik.
Siniflər
Siniflərin elan olunması
Yeni bir sinif aşağıdakı kimi elan edilir:
class Sinif:
atributlar
Burada class açar sözü sinfi təyin etmək üçün istifadə olunur, Sinif isə bu sinfə verilən addır. Sinfin gövdəsində də atributlar, yəni sinifin sahə və metodları elan edilir.
Gəlin ən sadə formada Kvadrat adlı yeni bir sinif meydana gətirək:
class Kvadrat:
pass
Biz burada sinfin gövdəsində hələ heç bir atribut elan etmirik, lakin bu bölməni boş da buraxmaq olmaz. Odur ki, burada pass operatorundan istifadə etdik. Az sonra biz Kvadrat sinfini işə yarar hala gətirəcəyik.
Obyektlər
Nümayəndənin (obyektin) meydana gətirilməsi
İndi isə Kvadrat sinfinin kv adlı bir nümayəndəsini meydana gətirək:
kv = Kvadrat()
Gördüyünüz kimi biz Kvadrat sinfinə mənsub kv obyektini düzəltmiş olduq. Buraya qədər izah olunanları IDLE mühitində və ya skriptdə yazaraq nəzərdən keçirin:
>>> class Kvadrat:
pass
>>> kv = Kvadrat()
>>> type(kv)
<class '__main__.Kvadrat'>
>>> print(kv)
<__main__.Kvadrat object at 0x105600c88>
>>>
Yuxarıdakı proqram kodunda Kvadrat sinfi elan edildikdən sonra bu sinifdən olan kv obyekti meydana gətirilir. Bundan sonra yoxlamaq üçün həmin obyektin tipi müəyyən edilir. Ekrana onun __main__ modulunda hazırlanmış Kvadrat sinfinin bir nümayəndəsi olduğu haqda məlumat çıxır. Bundan başqa kv obyektini print() funksiyası ilə çapa verdikdə onun yaddaşdakı ünvanını da görmək mümkündür.
Atributlar
Sahə və metodlar
Qeyd edildiyi kimi obyekt yönümlü proqramlaşdırma verilənlər və funksionallığı obyekt daxilində birləşdirməyə imkan verir. Sinif elan olunarkən biz onun atributlarını, yəni sahələr (dəyişənlər) və metodlarını (funksiyalar) da təyin edirik. Bu atributlar daha sonra həmin sinfin obyektləri (nümayəndələri) tərəfindən istifadə olunur.
Sinif dəyişəni
Sinfin bütün nümayəndələri (obyektlər) tərəfindən paylaşılan dəyişən (sahə) sinif dəyişəni adlanır. Sinif dəyişənləri sinif daxilində, lakin sinfin metodları xaricində elan olunurlar.
Nümayəndə dəyişəni
Metod daxilində elan olunan və yalnız cari nümayəndəyə aid olan dəyişən nümayəndə dəyişəni adlanır.
Sahələr dəyişənlər kimi onlara qiymət mənsub edilərək elan edilirlər. Metodlar isə funksiyalar kimi təyin olunurlar. Lakin onların adi funksiyalardan fərqi ilk parametrlərinin self adlı parametr olmasıdır. Obyektlər mənsub olduqları sinfin metodlarını çağırarkən self parametrinə hər hansı bir qiymət verilmir. Bunu Python özü edir və self parametri ona müraciət edən konkret nümayəndənin (obyektin) özünü bildirir. Əslində bu parametrə başqa ad da vermək olar, lakin self hər kəs tərəfindən qəbul olunmuş bir addır və ənənəyə sadiq qalmaq məsləhət görülür.
İndi isə gəlin Kvadrat sinfinə sahə və metodlar əlavə edərək bir az genişləndirək:
class Kvadrat:
adef = "Kvadrat - bütün tərəfləri
bərabər olan dördbucaqlıdır."
def k_perim(self, a):
return 4*a
def k_area(self, a):
return a*a
kv = Kvadrat()
print(Kvadrat.adef)
a = int(input("Kvadratın tərəfini daxil edin: "))
print("Kvadratın perimetri:",kv.k_perim(a))
print("Kvadratın sahəsi:",kv.k_area(a))
Gördüyünüz kimi biz əvvəlcə Kvadrat sinfini sahə və metodları ilə bərabər təyin etdik. Bundan sonra bu sinifdən olan kv nümayəndəsini meydana gətirib bu obyekt ilə sinifdəki metodları çağırdıq. Bir məqama diqqət yetirin ki, adef sahəsi burada sinif dəyişənidir. Yuxarıdakı proqram kodunu skriptdə yazıb icra edin və nəticəni nəzərdən keçirin.
Sinifdə təyin olunan metodlara müraciəti aşağıdakı formada da həyata keçirmək olardı:
Balaca Sabir dərslərini oxuduqdan sonra bağda babasına kömək etməyi çox sevirdi. Sabir anadan olanda babası ona öz adını qoymuşdu. Sabir baba hər zaman deyərdi ki, “Bağa baxarsan bağ olar, baxmazsan dağ olar…“.
Baba nəvəsini kiçik olduğuna görə çox da yormazdı. Balaca Sabir dünyaya gələndə babası onun adına bir ağac əkmişdi. Nəvə böyüdükcə ağac da böyüyürdü. Odur ki, balaca Sabirin işi bağdaki həmin ağaca baxmaqdan ibarət idi.
Balaca Sabir bilirdi ki, ağaclar nə qədər ki, kiçikdirlər, onları çox yaxşı suvarmaq lazımdır. Amma nə qədər suvarmaq lazım olduğunu bilmirdi. Ona görə də babasından soruşmaq qərarına gəldi. Babası ona izah etdi ki, suvarma suyunun miqdarı ağacdakı yarpaqların cəmi miqdarı ilə düz mütənasibdir. Ağacların yaxşı böyüməsi üçün hər ağaca onun hər yarpağına bir litr olmaqla su vermək kifayətdir.
Xoşbəxtlikdən Sabirin ağacındakı yarpaqlar yaruslarla böyüyür, başqa sözlə, ən yuxarıdakı birinci yarusda iki yarpaq, ikincidə dörd yarpaq, sonrakında altı yarpaq və s., hər sonrakı yarusda əvvəlkindən iki yarpaq çox olmaqla yerləşir. Ən yuxarıda isə əlavə bir yarpaq böyüyür. Sizdən tələb olunan Sabirin ağacı üçün onu suvarmağa lazım olan suyun miqdarını hesablayan proqram yazmaqdır.
Giriş verilənləri
Tək sətirdə ağacda yarusların miqdarı olan n (0 ≤ n ≤ 1000) ədədi verilir.
Çıxış verilənləri
Tək sətirdə ağacı suvarmaq üçün neçə litr suyun tələb olunduğunu vermək lazımdır.
Nümunə
Giriş verilənləri
Çıxış verilənləri
3
13
Proqramı özünüz tərtib etməyə çalışın. Əgər alınmasa, aşağıdakı həll ilə tanış olun.
Bizim bura qədər yazdığımız proqramlar funksiyalardan, yəni verilənlər üzərində manipulyasiya edən ifadələr bloklarından ibarət idi. Bu yanaşmaya prosedur yönümlü proqramlaşdırma deyilir. Lakin proqramlaşdırmada daha müasir bir paradiqma da var: obyekt yönümlü proqramlaşdırma (OYP).
Bu paradiqma verilənlər və funksionallığı obyekt daxilində birləşdirməyə imkan verir. OYP-da verilənlər və onları emal edən funksiyaların bir araya gətirilərək obyekt daxilində saxlanması, eləcə də kənar müdaxilə və yanlış istifadədən qorunmasına inkapsulyasiya (encapsulation) deyilir.
Obyekt yönümlü proqramlaşdırmanın iki əsas aspekti var – sinif (class) və obyekt (object). Sinifmahiyyət etibarilə meydana gətirilən yeni bir tipdir, obyekt isə bu tipdən olan konkret bir nümayəndədir (instance). Bunu sadə misalla izah edək. Məsələn İNSAN sinfi bir tipdir, Hz. Adəm obyekti isə bu tipin bir nümayəndəsidir.
Obyektlər verilənləri özlərinə aid adi dəyişənlərdə saxlayır. Obyekt və ya siniflərə aid olan dəyişənlər sahələr (fields) adlanır. Bundan başqa obyektlərin funksionallığı da ola bilər, yəni onlar funksiyalara sahib ola bilərlər. Bu cür funksiyalara metodlar deyilir. Sahə və metodlar isə bütövlükdə atributlar adlanır. Obyektə onu digər obyektlərdən fərqləndirən xüsusiyyətlərin verilməsi abstraksiya (abstraction) adlanır.
Obyekt yönümlü proqramlaşdırmanın üstün cəhətlərindən biri də kodun çoxdəfəlik istifadəsidir. Yəni bir dəfə yazılan proqram kodu daha sonra istənilən qədər istifadə oluna bilər. Lazım gələrsə onun baza əsasında əlavələrlə təkmilləşdirilmiş yeni bir kod da hazırlamaq mümkündür. Obyekt yönümlü proqramlaşdırmada bu məqsədlə varislik (inheritance) mexanizmindən istifadə olunur.
Varisliyi tətbiq etməklə bir sinifdən onun varislərini (xələflərini) əldə etmək mümkündür. Bu zaman yeni xələf sinfin obyektləri öz atributlarından başqa sələf sinfin atributlarına da malik olurlar. Sələf sinfin atributları xələf sinif daxilində yenidən təyin oluna bilər. Ədəbiyyatda sələf sinfə baza sinfi (base class), xələf sinfə də törəmə sinif (derived class) deyilir.
Yuxarıda qeyd etdik ki, törəmə siniflər baza sinfinin atributlarını əxz edirlər. Adi qaydada bu mənimsəmə eynilə baş verir. Lakin ehtiyac olarsa, irsən keçən atribut varis sinif daxilində xüsusiləşdirilə bilər. Bu zaman eyni adlı bir metod baza sinfinin obyektləri üçün bir cür, törəmə siniflərin obyektləri üçün isə başqa cür realizasiya olunur. Eyni metodun ayrı-ayrı siniflərdə özünü fərqli göstərməsinə polimorfizm (polymorphism) deyilir.
İndiyə qədər yazdığımız proqramlarda biz giriş verilənlərini ya proqram daxilində dəyişənlərə mənimsədərək verirdik, ya da klaviaturdan daxil edirdik. Proqramlar da öz növbəsində bu verilənləri emal edib nəticəni bizim üçün ekrana çıxarırdı. Lakin bir çox hallarda giriş və çıxış məlumatlarının fayllarda saxlanılması daha məqsədəuyğun olur. Digər proqramlaşdırma dilləri kimi Python dili də fayllarla işləməyə imkan verir.
Fayl ilə işləməyə başlamadan öncə onu open() funksiyası ilə açmaq lazımdır:
open(fayl, rejim)
Burada fayl açılan faylın ünvanı ilə bərabər adı və genişləməsidir. İkinci parametr olan rejim isə faylın hansı məqsədlə açıldığını bildirmək üçündür:
Rejim
Təyinatı
r
Fayl məlumatların oxunması məqsədilə açılır.
w
Fayl məlumatların yazılması məqsədilə açılır. Əgər qeyd edilən adda fayl mövcuddursa, yeni məlumatlar yazılmadan öncə ordakı məlumatlar silinir. Fayl mövcud deyilsə, qeyd edilən adda yeni bir fayl meydana gətirilir.
a
Fayl məlumatların əlavə edilməsi məqsədilə açılır. Daxil edilən məlumatlar faylın sonuna əlavə edilir.
r+
Fayl məlumatların həm oxunması, həm də yazılması məqsədilə açılır.
rb
Fayl məlumatların oxunması üçün ikilik rejimdə (binary mode) açılır.
wb
Fayl məlumatların yazılması üçün ikilik rejimdə (binary mode) açılır. Əgər qeyd edilən adda fayl mövcuddursa, yeni məlumatlar yazılmadan öncə ordakı məlumatlar silinir. Fayl mövcud deyilsə, qeyd edilən adda yeni bir fayl meydana gətirilir.
ab
Fayl məlumatların əlavə edilməsi üçün ikilik rejimdə (binary mode) açılır. Daxil edilən məlumatlar faylın sonuna əlavə edilir.
r+b
Fayl məlumatların həm oxunması, həm də yazılması üçün ikilik rejimdə (binary mode) açılır.
Default olaraq fayllar mətn rejimində (text mode) açılır. Bu rejimdə sətrlərin fayldan oxunması və fayla yazılması müəyyən kodlaşdırma (susmaya görə UTF-8) əsasında həyata keçirilir. Əgər fayllar mətn faylları deyilsə, onları ikilik rejimdə (binary mode) açmaq (rb, wb, ab və ya r+b) lazım gəlir.
Bu zaman oxunan və yazılan məlumatlar ikilik obyektlər olur. Faylın açılması zamanı rejim göstərilməyə də bilər. Belə olan halda rejim default olaraq r qəbul edilir.
Mətn fayllarındakı sətirlərin sonunu bildirən simvollar müxtəlif platformalarda (əməliyyat sistemlərində) fərqli olur, məsələn, Unix-də \n, Windows-da \r\n. Mətn rejimində fayllardan məlumatlar oxunarkən bütün sətir sonları simvolları default olaraq \n simvoluna çevrilir. Fayllara məlumatların yazılması zamanı isə sətir sonunu bildirən \n simvolu yenidən hər platformaya xas sətir sonluğu simvolları ilə əvəz olunur. Sətir sonları ilə bağlı bu çevrilmələr mətn faylları üçün keçərlidir. Digər fayl tipləri ilə işləyərkən (JPEG və ya EXE kimi) ikilik rejimdən (binary mode) istifadə etməlisiniz.
İndi isə gəlin aşağıdakı nümunəni nəzərdən keçirək:
f = open('adlar.txt', 'w')
Əvvəlcə onu qeyd edək ki, open() funksiyasının hər iki parametri (fayl və rejim) dırnaqda (tək və ya qoşa) yazılmalıdır. Bu funksiya bizə fayl obyektini qaytarır. Bundan sonra bu obyektlə daha rahat işləmək üçün biz onu bir dəyişənə (f) mənimsədirik. İndiki halda biz adlar.txt adlı faylı w (yazma) rejimində açırıq. Bu adda fayl kompüterimizin yaddaşında olmadığına görə funksiya əvvəlcə onu meydana gətirəcək və sonra da məlumatların yazılması məqsədilə açacaq.