OOP tehnikad:

Mis on 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 kui ühest väärtusest (nt 7)

Objekt koosneb tavaliselt mitmest väärtusest
värv, mark, mudel, pikkus, registrimass jne

Mis on 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 üks klass 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 (encapsulation)
funktsionaalsus peidetakse
Modulaarsus (modularity)
programm jagatakse iseseisvateks tükkideks
Polümorfism (polymorphism)
alamklass saab meetodeid üle kirjutada
Pärimine (inheritance)
alamklass pärib omadused ja meetodid

Sõne

Sõne on objekt
Kui loote uue sõne, siis tegelikult luuakse uus objekt, mille tüüp on str.
Sõne “funktsioone” kutsutakse meetoditeks
ehk siis klassis kirjeldatud funktsioonid on meetodid

s = "Hello"
print(type(s))  # <class 'str'>
print(id(s))  # 30773472
print(id(s.replace("H", "h")))  # 61507648

Loome sõne s ja küsime selle tüübi. Tüüp on str klass
id tagastab objekti kohta unikaalse arvu. Kui id on erinev, siis on ka objekt erinev (st mälus erinevas kohas)
replace teeb uue sõne, seda näeme ka id-ga
replace on sõne meetod ehk funktsioon, mida saab välja kutsuda objektil

List

a = [1, 2, 3]
b = [1, 2, 3]
c = b
print(id(a))   # 44058024
a.append(4)
print(id(a))   # 44058024 still the same
print(id(b))   # 44059184
print(id(c))   # 44059184 - same as b
b.pop()
print(id(b))   # 44059184 - still the same
print(id(c))   # 44059184 - and same
a=[1,2,3]            append()
b=[1,2,3]            a[123]----->[1],[2],[3],[4]
c=b                             list []
append(4)            b[253]----->[1],[2],[3]
b.pop(0)             c[233]----->

c=[1,2]              c[43]------>[1],[2]
c= b[:]
c= list(b)

Veel objekte

print(type(1))     # <class 'int'>
print(type(True))  # <class 'bool'>
print(type(1.2))   # <class 'float'>
print(type(None))  # <class 'NoneType'>
print(type(len))   # <class 'builtin_function_or_method'>
print(type(type))  # <class 'type'>

Klass kui andmetüüp

Iga klass on andmetüüp

Näiteks on Pythonis klass str

Iga konkreetne sõne, näiteks "tere", on selle klassi objekt (ehk isend)

Ühest klassist saab luua lõpmata palju objekte

Objekti kohta öeldakse ka isend ja instants
Üldiselt mõeldakse “objekt”, “isend”, “instants” terminitega samu asju
Erinevates allikates võivad neil erinevused olla

Teeme oma klassi

class Student:
    pass

s = Student()
print(type(s))  # <class '__main__.Student'>
print(id(s))    # 12448112

t = Student()
print(type(t))  # <class '__main__.Student'>
print(id(t))    # 12423408