Kilpkonn kui objekt¶
Seni pöördusime kilpkonna liigutamiseks otse turtle mooduli poole. Tegelikkuses võib kilpkonna vaadelda kui eraldiseisvat objekti. Võime teha näiteks mitu kilpkonna ning anda neile käske eraldi. Igal kilpkonnal on oma seis ehk kogum kindlate väärtustega muutujaid, näiteks suund, asukoht või joone värv. Selleks, et saaksime kilpkonni eraldi liigutada, peame neid seostama sobivalt nimetatud muutujatega.
import turtle
# create Turtle objects as defined in turtle module
kilbi = turtle.Turtle()
kilpron = turtle.Turtle()
Loomise hetkel on kaks kilpkonna peaaegu identsed. Vaatame, mis juhtub, kui liigutame ühte neist veidi edasi. Kahe kilpkonna eristamiseks teeme ainult ühe neist kilpkonnakujuliseks.
kilbi.shape("turtle")
kilbi.forward(25)
turtle.done() # done() is still a function of the turtle module
Koodi käivitamisel näeme, et üks kilpkonn liikus ja muutis oma kuju, teine aga jäi paigale. Ükskõik mis hetkel ja kui palju kilpkonni me juurde teeme, alustavad nad kõik samast keskpunktist, kus esimesed kaks. Mitte ükski kilpkonn ei tea midagi teiste olekutest ning me saame pöörduda vaid ühe poole korraga.
Kõiki kilpkonni, ehk Turtle objekte, ühendab asjaolu, et neil on olemas samad muutujad ja funktsioonid. Seega võib öelda, et kõik meie kilpkonnad on Turtle klassi instantsid. Klassidest ja objektidest saab täpsemalt lugeda Klassid ja objektid.
Ka esimestes näidetes luuakse tegelikult turtle objekt, kuid see tegevus on meie eest peidetud turtle mooduli sisse. Lihtsustus on tehtud selleks, et joonistada saaks ka siis, kui objektorienteeritusest midagi ei tea.
Lisaks on kasulik teada, et objekte saab täpselt samamoodi argumentidena kasutada, nagu teisi muutujaid. Näiteks võime ruudu joonistamise funktsiooni täiendada:
def draw_square(width, turtle_obj):
for i in range(4):
turtle_obj.forward(width)
turtle_obj.left(90)
Nüüd saame funktsiooni väljakutsel valida, milline kilpkonna objekt ruudu joonistab.
kilbi = turtle.Turtle()
kilpron = turtle.Turtle()
draw_square(20, kilbi) # only kilbi starts drawing