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/MariiaPosvystak/OOP/blob/master/OOP.py