Osa 8

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.

Jatkokurssi ja peruskurssi ovat TMC:ssä yhtenä kurssina. Jos lopetit juuri peruskurssin tekemisen, jatkokurssin tehtävät löytyvät samasta kurssista. Tämän jatkokurssin ensimmäisen osan numero on Osa 8. Mikäli et ole tehnyt tähän jatkokurssin liittyvää peruskurssia, valitse TMC-pluginissa organisaatioksi MOOC ja kurssiksi Ohjelmoinnin MOOC 2022 ja aloita kurssin tekeminen osasta 8.

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"])
Esimerkkitulostus

Vanhus ja Python Seitsemän Pythonia Jäähyväiset aaseille Seitsemän Pythonia

8 1 1

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)
Esimerkkitulostus

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"))
Esimerkkitulostus

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)
Esimerkkitulostus

[1, 2, 3, 5, 1] [2, 3, 5, 1]

Loading
Loading
Seuraava osa: