Metaohjelmointi Python 3:ssa
Meskanen, Markus (2020)
Meskanen, Markus
2020
Tieto- ja sähkötekniikan kandidaattiohjelma - Bachelor's Programme in Computing and Electrical Engineering
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2020-12-30
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202012229143
https://urn.fi/URN:NBN:fi:tuni-202012229143
Tiivistelmä
Toistuva ohjelmakoodi mielletään usein paheeksi, sillä mahdolliset muutokset koodiin joudutaan toteuttamaan useaan eri paikkaan, mikä aiheuttaa enemmän työtä ja inhimillisiä virheitä. Tästä syystä ohjelmointikielet tarjoavat useita työkaluja ohjelmakoodin rakentamiseksi, joiden avulla päästään eroon toistuvasta koodista ja vähennetään ohjelmoijan työmäärää.
Perinteisiä ohjelmoinnissa käytettyjä työkaluja ovat luokat ja funktiot, jotka mahdollistavat saman koodin käyttämisen useaan otteeseen. Ne hyödyntävät abstraktioperiaatetta, jonka mukaan yksittäisiä ohjelman osia ei kirjoiteta yksi kerrallaan, vaan kirjoitetaan laajempia abstraktioita kuvaamaan useita samankaltaisia osia kerrallaan. Joskus nämä työkalut eivät kuitenkaan riitä, vaan eri luokat tai funktiot jakavat keskenään toistuvaa koodia.
Yhtenä ratkaisuna toistuvaan koodiin abstrakteissa kuvauksissa toimii metaohjelmointi, joka vie abstraktioperiaatteen korkeammalle tasolle, mahdollistaen useiden samankaltaisten funktioiden tai luokkien kuvaamisen yhdellä kertaa. Toteutuksen tasolla metaohjelmointi mahdollistaa ohjelmakoodin muokkauksen ohjelman suorituksen aikana. Näin luokissa ja funktioissa toistuva koodi voidaan määritellä ohjelmoijan toimesta vain kertaalleen, jonka jälkeen se voidaan kopioida ohjelman toimesta kaikille sitä tarvitseville luokille tai funktioille ohjelman ajon aikana.
Tässä työssä esitellään Pythonin tärkeimpiä metaohjelmointityökaluja, kuten dekoraattorit, deskriptorit, sekä metaluokat. Työssä käydään läpi esimerkkejä tyypillisistä luokkien ja funktioiden käytössä syntyvistä ongelmista, sekä metaohjelmoinnin tarjoamia ratkaisuja niihin. Työssä käsitellään myös metaohjelmointityökalujen hyödyntämiä kielen ominaisuuksia, jotta työkalujen toimintaa voidaan pohjustaa ja ymmärtää syvemmin.
Perinteisiä ohjelmoinnissa käytettyjä työkaluja ovat luokat ja funktiot, jotka mahdollistavat saman koodin käyttämisen useaan otteeseen. Ne hyödyntävät abstraktioperiaatetta, jonka mukaan yksittäisiä ohjelman osia ei kirjoiteta yksi kerrallaan, vaan kirjoitetaan laajempia abstraktioita kuvaamaan useita samankaltaisia osia kerrallaan. Joskus nämä työkalut eivät kuitenkaan riitä, vaan eri luokat tai funktiot jakavat keskenään toistuvaa koodia.
Yhtenä ratkaisuna toistuvaan koodiin abstrakteissa kuvauksissa toimii metaohjelmointi, joka vie abstraktioperiaatteen korkeammalle tasolle, mahdollistaen useiden samankaltaisten funktioiden tai luokkien kuvaamisen yhdellä kertaa. Toteutuksen tasolla metaohjelmointi mahdollistaa ohjelmakoodin muokkauksen ohjelman suorituksen aikana. Näin luokissa ja funktioissa toistuva koodi voidaan määritellä ohjelmoijan toimesta vain kertaalleen, jonka jälkeen se voidaan kopioida ohjelman toimesta kaikille sitä tarvitseville luokille tai funktioille ohjelman ajon aikana.
Tässä työssä esitellään Pythonin tärkeimpiä metaohjelmointityökaluja, kuten dekoraattorit, deskriptorit, sekä metaluokat. Työssä käydään läpi esimerkkejä tyypillisistä luokkien ja funktioiden käytössä syntyvistä ongelmista, sekä metaohjelmoinnin tarjoamia ratkaisuja niihin. Työssä käsitellään myös metaohjelmointityökalujen hyödyntämiä kielen ominaisuuksia, jotta työkalujen toimintaa voidaan pohjustaa ja ymmärtää syvemmin.
Kokoelmat
- Kandidaatintutkielmat [8344]