Oliot ja metodit
Tämä on Ohjelmoinnin jatkokurssin ensimmäinen osa, ja kurssilla käytetään VS Codea samaan tapaan kuin Ohjelmoinnin perusteissa. Jos et ole käyttänyt ennen VS Codea, löydät tästä ohjeet ympäristön asentamiseen.
Kuten kurssin ensimmäisen puolikkaan aikana huomattiin, on usein hyödyllistä yhdistää samaan asiaan liittyvät tiedot yhdeksi kokonaisuudeksi. Esimerkiksi kirjaa on kätevä mallintaa vaikkapa tuplen tai sanakirjan avulla, kun kaikki kirjaan liittyvät tiedot voidaan tallentaa samaan rakenteeseen.
Tuplea käyttämällä esimerkki voisi näyttää tältä:
nimi = "Nuoruuteni näppäilyt"
kirjailija = "Pekka Python"
vuosi = 1992
# Yhdistetään yhdeksi tupleksi
kirja = (nimi, kirjailija, vuosi)
# Tulostetaan kirjan nimi
print(kirja[0])
Sanakirjassa on tässä yhteydessä se etu, että avaimina voidaan käyttää merkkijonoja kokonaislukujen sijasta. Näin ollen alkioille voidaan antaa niiden sisältöä kuvaavat nimet:
nimi = "Nuoruuteni näppäilyt"
kirjailija = "Pekka Python"
vuosi = 1992
# Yhdistetään yhdeksi sanakirjaksi
kirja = {"nimi": nimi, "kirjailija": kirjailija, "vuosi": vuosi}
# Tulostetaan kirjan nimi
print(kirja["nimi"])
Molemmissa tapauksissa tietojen tallentaminen tietorakenteeseen muodostaa olion. Olio on itsenäinen kokonaisuus, joka sisältää (tässä tapauksessa) toisiinsa liittyvää tietoa. Itsenäisyys tarkoittaa sitä, että olioon tehdyt muutokset eivät vaikuta muihin olioihin.
Jos esimerkiksi muodostetaan sanakirjaa käyttäen kaksi kirjaoliota, ensimmäiseen kirjaan tehdyt muutokset eivät vaikuta toiseen kirjaan:
kirja1 = {"nimi": "Vanhus ja Python", "kirjailija": "Ernest Pythonen", "vuosi": 1952}
kirja2 = {"nimi": "Seitsemän Pythonia", "kirjailija": "Aleksis Python", "vuosi": 1894}
print(kirja1["nimi"])
print(kirja2["nimi"])
kirja1["nimi"] = "Jäähyväiset aaseille"
print(kirja1["nimi"])
print(kirja2["nimi"])
Vanhus ja Python Seitsemän Pythonia Jäähyväiset aaseille Seitsemän Pythonia
Oliot ja metodit
Olioiden tietosisältöä voidaaan havainnoida ja muuttaa metodien avulla. Metodi on funktio, jonka toiminta kohdistuu annettuun olioon. Metodin erottaa muista funktioista tapa, jolla sitä kutsutaan: ensin kirjoitetaan kohdeolio ja sen perään kutsuttava metodi pisteellä erotettuna. Esimerkiksi sanakirja-olion kaikki arvot voidaan palauttaa metodin values
avulla:
# muodostetaan sanakirjatyyppinen kirjaolio
kirja = {"nimi": "Vanhus ja Python", "kirjailija": "Ernest Pythonen", "vuosi": 1952}
# Tulostetaan kaikki arvot
# Metodikutsu values() kirjoitetaan muuttujan perään
# pisteellä erotettuna
for arvo in kirja.values():
print(arvo)
Vanhus ja Python Ernest Pythonen 1952
Samalla tavalla merkkijonometodit kohdistuvat siihen merkkijonoon, jonka kautta niitä kutsutaan. Esimerkiksi merkkijonon metodeja ovat count
ja find
:
nimi = "Keijo Keksitty"
# Tulostetaan K-kirjaimien määrä
print(nimi.count("K"))
# K-kirjaimien määrä toisessa jonossa
print("Karkkilan Kolisevat Karjut".count("K"))
# Osajonon Keksitty indeksi
print(nimi.find("Keksitty"))
# Tästä merkkijonosta osajonoa ei löydy
print("Ihan eri jono".find("Keksitty"))
2 3 6 -1
Merkkijonometodit palauttavat arvoja, mutta niiden avulla ei voida muuttaa merkkijonoa. Kuitenkin esimerkiksi lista-olion metodien avulla voidaan muuttaa listan sisältöä:
lista = [1,2,3]
# Lisätään pari alkiota
lista.append(5)
lista.append(1)
print(lista)
# Poistetaan alkio alusta
lista.pop(0)
print(lista)
[1, 2, 3, 5, 1] [2, 3, 5, 1]