Teema “OOP”
Objekt
- Objekt kirjeldab ära konkreetse loogilise kogumi
- näiteks õues olev punane auto on üks objekt
- selle taga olev roheline auto on teine objekt jne
- Tavaliselt mõtleme me arvust ühest väärtusest
- Objekt koosneb tavaliselt mitmest väärtusest
- värv, mark, mudel, pikkus, registrimaas jne
Klass
- Klass kirjeldab ära struktuuri
- näiteks autol on värv, pikkus jne
- Klass (üldiselt) ei sisalda andmeid
- Klass on andmetüüp
- Samatüüpi andmed pärinevad kõik ühest klassist
- punane auto on auto, roheline auto on auto jne
- Kuigi meil on maailmas mitu autot (objekti), siis meil on auto
OOP
- Objekt-orienteeritud programmeerimine (OOP) on programmeerimise paradigma, mis kasutab objekte
- Python on objekti-orienteeritud programmeerimiskeel (OOP)
- Pythonis kõik asjad on objektid
OOP tehnikad
- Kapseldamine
- funktsionaalsus pidetakse
- Modulaarsus
- programm jagatakse iseseisvateks tükkideks
- Polümorfism
- alamklass saab meetodeid üle kirjutada
- Pärimine
- alamklass pärib omadused ja meetodid
Klassi muutujad:
- Klassi muutuja kirjeldatakse klassi sees väljaspool meetodeid
- Klassi muutujal on üks väärtus läbi terve programmi
- Sõltumata sellest, mitu objekti klassist luuakse, klassi muutujal on üks ühine väärtus
- Üldiselt ei ole vaja kasutada
Näide:
class Doorbell:
click_count = 0
def __init__ (self):
self.click_count = 0
def ring(self):
print("Ringing..")
self.click_count += 1
Doorbell.click_count += 1
d1 = Doorbell()
d2 = Doorbell()
for _ in range (10): d1.ring()
for _ in range (4): d2.ring()
print(d1. click_count) # 10
print(d2.click_count) # 4
print(Doorbell.click_count) # 14
Konstruktor
- Objekti loomisel pannakse käima eriline meetod ehk konstruktor
- Meetod kirjeldatakse: __init__(self)
- See meetod pannakse käima üks kord objekti loomisel
- Eelnevas näites s = Student() kustub välja konstruktori
- Konstruktori kirjeldamine ei ole kohstuslik
- Konstruktor peab tagastama None (eraldi return lauselt ei kirjutata)
- Kirjeldatakse nagu tavaline meetod
- Eraldi pole vaja välja kustuda
class Student:
def __init__ (self):
print("Initializing student ...")
s = Student ()
- Student () kustub Student klassi konstruktori välja
Konstruktor, objekti muutujad
- self viitab loodavale/loodud objektile
- Konstruktorisse saab kaasa anda argumente (nagu tavaline funktsioon)
- Esimene parameeter on alati self
- Objekti muutujad on seotud ühe konkreetse objektiga (isendiga)
- Objekti muutujad väärtustatakse: self.name = …
- Tavaliselt luuakse konstruktoris vajalikud väljad ära
class Student:
def __init__ (self, name, title):
self.products = []
self.name = name
self.established = 2020 - age
if products_file is not None:
pass
def inventory(self):
print(f"Inventory for {self.name} (est. {self.established}:")
for p in self.products:
print ("product: ...")
Näitevideo OOP ülesande lahendamisest:
https://github.com/OleksandraRyshniak/OOP/blob/master/OOP.py#L44

