Henrik Hillestad Løvold
Objektorientert programmering med PYTHON

HenrikHillestadLøvold
Copyright © 2024by
Vigmostad&BjørkeAS
AllRightsReserved
1.utgave2024/1.opplag2024
ISBN:978-82-450-5156-8
Grafiskproduksjon:JohnGrieg,Bergen
Omslagsdesign:EndreBarstad
ForfatterenharmottattstøttefraDetfaglitterærefond.
BokenerutgittmedstøttefraKunnskapsdepartementet vedLærebokordningenforhøyereutdanning.
Spørsmålomdennebokenkanrettestil: Fagbokforlaget
Kanalveien51 5068Bergen
Tlf.:55388800
e-post:fagbokforlaget@fagbokforlaget.no www.fagbokforlaget.no
Materialetervernetetteråndsverkloven. Utenuttrykkeligsamtykkeereksemplarfremstilling baretillattnårdeterhjemletilovelleravtalemedKopinor.
Vigmostad&BjørkeASerMiljøfyrtårn-sertifisert, ogbøkeneerprodusertimiljøsertifisertetrykkerier.
Jegbegyntesåsmåttåprogrammeredajeggikkpåungdomsskolen, dengangiNotepadpåWindows98.MinvennHansPetterogjeg skrevnettsideriHTML3.0,ogselvomminnettside kalkunweb.com ble relativtålreit,forstodjegaldrihvordanhanfikktiltable-tag’en.
Mittførstemøtemedprogrammeringienfagligkontekstvar,utrolignok,iFlash/ActionScript3.0.Heleandreåretmittpåvideregående skrevvimerksnodigeskriptsomutrolignokfikkfigurertilåbevegeseg påskjermen.Detvarogsådetteåretjegforstodatdethet“while-løkker” ogikke“whælløkker”,somminlæreroftesa.
I2012startetjegmittinformatikk-studiumvedUniversitetetiOslo. Studietbødpåmangefagligeutfordringer,ogetterbådeoppturerog nedturer(jegserpådeg, Metoderigrafiskdatabehandlingogdiskret geometri )gikkjegutmedenmastergradi2017.
Detsomfengetmegmestunderstudietvarikkebarestudietselv,men ogsåmittarbeidsomgruppelærerikurseneomobjektorientertprogrammering.Åundervisesammenmeddyktigemedstudentersliksom AstridHeleneHolterogMalinAandahlgamegmotivasjonoginspirasjon.
Medlittflaks,myehjelpfrauniversitetslektorSiriMoeJensenogArbeidsmiljøloven§14-9endtejegtilsluttoppmedenfaststillingved UiO.I2021blejegtilbudtenstillingvedUiTiTromsøsomjegvalgteå tiltre,mensjegbeholdtkontaktenmedUiOgjennomenbistilling.
Idagerjegtakknemligforåfålovtilåunderviseinformatikkogprogrammeringtilbådebachelor-ogmasterstudenter.Åsenyestudenter kommeinniauditorietforførstegang,ogfemårseneresedesamme studenteneforlateuniversitetetmedenmastergradsomjegharbidratt til,gjørmegbådegladoglittvemodig.
Åskriveenbokeretstortarbeid,ogenspesielltakkmårettestilmin kjæreFridaE.Aasenforatjegharfåtttidtilarbeidet.Utenhennes hjelpogstøttevilleikkedetteprosjektetblittnoeav.
EnstortakkmåogsårettestilNorskfaglitterærforfatter-ogoversetterforening,somhargittstøttetilåskrivedenneboken.
Jeghåperdulikerdenneboken,atdenkanvekkenysgjerrighetoggi motivasjontilålære.
Idennebokenharjegtattformegdegrunnleggendekonsepteneiobjektorientertprogrammering,ogbrukerPythonsomprogrammeringsspråkforåvisehvordandukanbrukeobjektorientertprogrammering ipraksis.Dutrengerikkehaprogrammeringserfaringfrafør,forboken startermedeninnføringigrunnleggendeprogrammering.Hvisdukan dettefrafør,ogermerinteressertiåfordypedegidenobjektorienterte delen,såerdetbareåhoppeoverdenførstedelen.
Objektorientertprogrammeringeretprogrammeringsparadigmesom bleutvikletpå60-tallet,ogsomharsittutspringfraUniversiteteti Oslo.ProfessoreneOle-JohanDahlogKristenNygaardønsketåta programmeringennærmeredekonseptenevikjennerfradenvirkeligeverden.Deintrodusertebegrepeneklasserogobjekterforåkunne modellereprogrammerpåennaturligogoversiktligmåte.Idagerobjektorienteringetavdemestbrukteparadigmeneiprogrammeringsom benyttesbådeiforskning,undervisningognæringsliv.
Pythoneretspråksomermyebenyttetiundervisning,ettersomuttrykksformenispråketerrelativtnærtnaturligespråksomvibenytter idetdaglige.Språketbleførstutvikletpåsluttenav80-tallet,oger nåiversjon3.Pythonerbyggetoppsometutelukkendeobjektorientertspråk,ogegnersegderforgodtfordemsomønskeretlettfattelig språksomdekkerdeobjektorienterteprinsippenegodt.Utenomundervisningbenyttesdetmyeiforskningpågrunnavsingodestøttefor matematiskeogstatistiskeapplikasjoner,menogsåinæringslivetialt fraweb-programmeringtilkompleksesystemer.
Dennebokendekkerpensumidegrunnleggendeemneneiobjektorientertprogrammeringsomtypiskgisiløpetavdetførsteåretveduniversiteteroghøgskoler.Denerspesielttilpassetundervisningenslikden gisiNorge,ogharetlettfatteligspråkogkortekapitler.Hvertkapittel oppsummeresieksempeloppgaversomdetkanværenyttigågjørefor åbekrefteatmanharforståttdetmanharlest.
Takk!
HenrikHillestadLøvold,Tromsø,juni2024
1Hvaerprogrammering?15
2Objektorientertprogrammering19
4Utsagn,variablerogdatatyper33
9Løkker73
IIIObjektorientertprogrammering
12Objekter101
13Klasser105
14Referanser113
15Objektorientertdesign125
16Modelleringogdokumentasjon137
17Etstørreobjektorientertsystem151
IVAvanserteobjektorienterteprinsipper
18Arv171
18.1Superklasserogsubklasser...................
18.1.1Flereklasserarverfrasammesuperklasse......
18.2Polymorfi............................
18.3Multippelarv..........................
18.3.1Diamantproblemet...................
18.3.2Enlitenadvarsel....................
18.4Operatoroverloading......................
18.4.1Likhetmellomobjekter................
19Avansertedesignmønstre189 19.1Arvogkomposisjon.......................
19.1.1Arv...........................
19.1.2Komposisjon......................
19.1.3Arvversuskomposisjon................
20Egnedatastrukturermedklasserogobjekter203 20.1Lenketliste...........................
20.1.1Oppbyggingavenlenketliste.............
20.1.2Fjerneobjekter.....................
20.1.3Andrelisteoperasjoner.................
20.2.1Rekursjonmedobjekter................
20.4Oppgaver............................
21Testingavobjektorienterteprogrammer211 21.1Enhetstesting..........................
21.1.1Åskriveenhetstester..................
Programmeringerenmetodeforåløseetproblem.Densomprogrammerermådefinerefremgangsmåtensåpresistatselvendatamaskinkan forståhvordanproblemetskalløses.
Idettekapitteletskalvitaforossbegrepeneprogrammering,algoritmer,programmeringsspråkogPython.
Foråforståhvaprogrammeringer,behøverduigrunnikkehakunnskap omdatamaskineridetheletatt.Alleprogrammerervitilstadighet, utenatviengangerklaroverdet.Etprogramernemligbareetsettmed veldefinerteinstruksjoner,sattsammentilenfremgangsmåte.
Erdugladiåbake,følgerdukanskjeoppskrifterforålageuliktbakeverk.Enslikoppskriftinneholderinformasjonomhvilkeingredienser somskalbrukes,ogihvilkenrekkefølgestegskalutføresforåfåbest muligresultat.Ingredienserogfremgangsmåtervilværeuliktforhver typeavbakeverk,mendeterviktigatoppskriftenerskrevetslikatvi kanforstådenogfølgeden.
Nettoppviktighetenavdetåværepresis,blirtydelignårviskalprogrammereendatamaskintilåutføreenoppgave.Omdetmangleret kommaienbakeoppskrift,ellerkanskje“gjær”erskrevetfeil,ervii standtilåforståhvasomermentlikevel.Endatamaskinerdum,og ikkeistandtilågjøreantakelseridetheletatt.Omviskaldefinereen
fremgangsmåteforåfådatamaskinentilåsummeretall,ogvedslump glemmeråavslutteenparentes,vilikkedatamaskinengjettesegtilhva vi antakelig menteågjøre,menhellergiossbeskjedomatdetteikke ernoedenkanforstå.
Fremgangsmåtereraltsåheltsentraltinnenprogrammering.Åprogrammereinnebærerågåfraetutgangspunkttiletønsketresultat, gjennometbestemtsettavsteg.Eninformatikervilkalleenslikfremgangsmåteforen algoritme.Dettebegrepetvildufågodkjennskaptil iløpetavdekommendekapitleridenneboken.
Vimenneskersnakkermedhverandrepåmenneskespråk.Entendeter norsk,engelskellertysk,brukerviordsombærermening,ogsetter demsammentilsetningersomkanforstås.Slikerdetogsånårviskal kommuniseremedendatamaskin.Akkuratsomdetfinnesulikemenneskespråk,finnesdetogsåulikeprogrammeringsspråksomkanbenyttesforåfortelledatamaskinenhvadenskalgjøre.Ulikespråkeregnet forulikeformål,ogidennebokenharvivalgtåbrukedetspråketsom heterPython.
Pythoneretprogrammeringsspråksomdukketoppi1991,ogsomsidenharblittoppdatertetterhvertsomdenteknologiskeutviklingen hargåttvidere.IdagerPythonetavdespråkenesombrukesmest ibegynneropplæringeniprogrammering.Hovedårsakentildette,erat språketerganskenærtmenneskespråk,ogatvikanskriveenkle,korteprogrammersomgodtillustrererakkuratdetkonseptetviønsker åillustrere,utenatmanbehøverytterligereordellertegnsomleder oppmerksomhetenbort.
EnannenfordelmedPythonsomspråkforopplæringiprogrammering, eratdetermegetgenerelt.Vikanbenyttedettilåløseproblemerinnenenrekkefelt–altfratolkningavmenneskespråktilprogrammering avnettsider,tilavansertmatematikk.IdesenereåreneerogsåPython blittetsværtrelevantspråkforutviklingavkunstigintelligens.Selv omviidennebokenikkegårinnpåavanserteprogrammeringskonsepter,børduviteatPythonbrukesmyeiarbeidslivet;deteraltsåikke kunetbegynner-språk.MedPythonkanmanprogrammerepåulike
måter,oftekaltprogrammeringsparadigmer.Ettsliktparadigmekalles objektorientertprogrammering,ogerdetviskalfokuserepåidenne boken.
Objektorientertprogrammeringerdetsomkallesetprogrammeringsparadigme.Merfolkelig,kanvikanskjesiatdeteretbestemtmønstersom følgesnårviskriverprogrammer.Måletmedobjektorientertprogrammeringeråmodellereprogrammenevåreetterkonsepterogobjekter fradenvirkeligeverden.
Foråforståhvaobjektorientertprogrammeringer,oghvorfordeterså myebrukt,kandetværenyttigåselittpåhvordandetkomtil.Dette eretstortfelt,ogidettekapitteletfårduenkortinnføringihvordanvi havnetdervieridag,oghvorforobjektorientertprogrammeringsom paradigmebleverdensledende.
Dadeelektroniskedatamaskinenegjordesittinntogpåmidtenavdet forrigeårhundre,vardettungvintåprogrammeredemtilåløseoppgaver.Oftemåtteprogrammerernedefinerealgoritmenesinesåpresistat hverenkeltkretsimaskinenmåttefortellesomdenskulleledestrøm ellerikke!Detholdtikkeåsiatmanønsketåsummeretallet5og tallet6,manmåttefaktiskfortelledatamaskinenhvordantallene5og 6skullerepresenteres,oftemedenremse(ja,faktiskgjerneenfysisk papirremsemedhull!)avtallene0og1,sombeskrevomstrømmeni enkretsentenskulleværeavellerpå.
Dennemåtenåprogrammerepåvarsværttungvinn,ogkrevdedyp forståelseavhverenkelttypedatamaskinforåfåtil.Etprogramsom
Kapittel2.Objektorientertprogrammering
fungertepåénmaskin,villeikkenødvendigvisfungerepåenannen, ettersomoppbyggingenavmaskinenvilleværeannerledes.Forskerne såbehovetforålageetmergenereltspråk,derinstruksjonerkunne oversettestil1og0avetdataprogram,forsååkjørespåendatamaskin. Meddettesommotivasjonblenoevikaller assembly-språk til.
Assembly-språkenevaretstortfremskritt.Detfaktumatetprogram kunneskriveséngangogoversettestilkodeforfleretypermaskiner,var enrevolusjon.Språkeneisegselvvarlikevelganskevrieneåforståseg på,ogkrevdefortsattdypinnsiktihvordanmaskinenduprogrammerte forfungerte.
Foråbringeprogrammeringennærmerespråkenevimenneskerbruker forågihverandreinstruksjoner,blenyespråkintrodusertpå50-og 60-tallet.Dermantidligeremåttebrukeavanserteremseravvanskeliglesbareord,fikkmanmeddenyespråkenemulighettilåfortelle datamaskinensliktsom"HVISnoe,GJØRdette",eller"GJENTA100 GANGER:GJØRdette".
SpråksomCOBOLogALGOLblepopulærepågrunnavsinveldefinertesyntaks,ogdetfaktumatdefungertegodtpåetbredtutvalgav datamaskiner.Metodensomblebrukt,ogsomfortsattbrukesidag,var atprogrammenesombleskrevetbleoversattavetannetprogramtil assembly-kodesompassetmaskinenmanjobbetmed,ogsomdermed kunnekjøres.
Duerkanskjeikkeklaroverdet,menetavdestørstefremskrittene innenprogrammeringpåhele1900-talletkomfraforskerevedUniversitetetiOslo,herililleNorge.ProfessoreneOle-JohanDahlogKristen Nygaardsåatsystemenevibygget,oftearbeidetpådataknyttettil konkreteobjekterfradenvirkeligeverden.Etsystemienbankknyttet personeroppmotkontoer,ogetsystemforsatellitterholdtstyrpåflere enhetersposisjoneriromogtid.
Meddettesomutgangspunkt,dannetdeetheltnyttprogrammeringsparadigme,somvikjennersomobjektorientertprogrammering.Språket deutviklet,Simula,bleoffentliggjorti1967,ogintrodusertekonsepte-
2.3.Simula67,objektorientertprogrammering
ne klasser og objekter.Enklassekantenkespåsomen“oppskrift”på hvanoeer.Tardukonseptet“bil”,vildetteværeensammensetningav egenskaperoghandlingersomkanutføres.Allebilerharenfarge,motorstørrelseogmodell,ogallebilerkankjøre,bremseogsvinge.Dette er klassen bil,ogutifradettekanvikonstrueremange objekter avbiler –hvermedsinfarge,motorstørrelseogmodell,ogmedulikekjøreegenskaper.
Konsepteneklasseogobjekterheltsentraleinnenobjektorientering, ogvildannegrunnlagformyeavdetduskallærenårduleserdenne boken.
Foråkommeigangmedprogrammeringen,trengerviførstålaste nedoginstallerenoendataprogrammer.Idettekapitteletfårduet rasktoverblikkoverhvasombrukesforåskriveogkjøreprogrammene dine.
ForåkunnekjøreprogrammeneviskriverispråketPython,trengset programsomfortellerdatamaskinenhvordandenskaltolkeinstruksjonenevåre.Noenoperativsystemer,sliksomLinuxogMacOSkommer medPythonferdiginstallert,mendeterlikevelanbefaltåfølgestegene underforåforsikredegomatduhardetsomtrengs.
DetfinnesulikeversjoneravprogrammeringsspråketPython,ogdenvi skalbenyttekallesPython3.Detteerdenmestmodernevariantenav Python,ogharistorgradtattoverfortidligereversjoner.Nårdulaster nedoginstallererdet,vilduseatvariantenheterPython3.x,derxer etløpenummerforsisteversjon.Deterikkeviktighvanummereter,så lengedetbegynnermed3ogettalletterpunktum.
NårviprogrammerermedPython,henderdetavogtilatvivilbenytteossavfunksjonalitetsomikkekommer“innebygget”ispråket.Slik funksjonalitetkanhentesgjennomnoesomkalles moduler.Foråfåmed allemodulerviønsker,finnesenfinpakkesomheterAnaconda.
ForålastenedAnaconda,gårdutil https://www.anaconda.com/.Her velgerdu“IndividualEdition”,oglasterprogrammetnedtildindatamaskin.Nårduskallastened,forsikrerdudegomatdufårvarianten sominneholderPython3,ogatdenpassertildetoperativsystemetdu harpådatamaskinen.Installasjonenskalværelikeenkelsomåinstallere ethvilketsomhelstannetprogram.
ForåundersøkeomduharinstallertPythonpåkorrektmåte,kandu følgedennefremgangsmåten:
• Åpneoppet terminal-program
– PåWindowssøkerduetter“cmd”istart-menyen
– PåLinuxellerMacOSsøkerduetterprogrammet“Terminal”
• Pålinjensomdukkeropp,skriverdu python3–version
Omdetdukkeroppentekstsomsiernoesliktsom“Python3.x.x”,så hardugjortdetteriktig,ogerklartilåprogrammere.Omdufåren feilmelding,månoerettesopp.GodhjelptildettefinnespåAnacondanettsiden,derdukansøkeoppfeilmeldingendufikkogfåenfremgangsmåteforåløseproblemet.
Ettekstredigeringsprogram,gjernekalten“editor”,ernødvendigforå skrivePython-kodenviønskeratdatamaskinenskalutføre.Defleste datamaskinerkommermedetsliktprogramferdiginstallert,sliksom “Notepad”påWindows,eller“TextEdit”påMacOS,menforåfålitt ekstra,nyttigfunksjonalitetsompassertilprogrammering,anbefales detålastenedenlittmeravanserteditor.
Editorerkommerimangeformerogfasonger.Noenerheltenkleoghar kunenlagre-knappogettekstfelt,mensandreersværtavanserteog inneholderverktøyforprofesjonellproduksjonavkode.Nårmanskal begynneålæresegprogrammering,trengermantypiskenganskeenkel editor.Detenestesomkrevesaveditorenduskalbrukenårduleser denneboken,eråkunneskrivetekst,lagretekst,oghenteoppigjen programmersomdutidligereharlagret.
Demestpopulæreeditoreneforbegynnerprogrammeringer Atom og
VisualStudioCode(VSCode).Disseerheltgratisogkanlastesnedfra internett.
DeterfleremåteråkjøreetPython-programpå.Nårdufølgerdenneboken,anbefallesdetåkjøreprogrammenedineidetsomkalles en terminal.Terminaleneretprogramsomlardegkommuniseremed datamaskinenviatekst.Nårduførstegangåpnerterminalen,kanden selittskummelut,mennårdukommerlittinnidet,erdengreiå bruke.ErduavdeneldregardeogharbruktMS-DOSfør,vildufort kunnefåflashbacksnå!
Modernedatamaskinerkommermedetterminal-programinnebygget. PåWindows-maskinerheterterminalen“cmd”,mensdenpåMacOSog Linuxheter“Terminal”.ForåfinneterminalenpåenWindows-maskin, trykkerdupåsøkefeltetistart-menyenogskriver“cmd”.PåMacOS ellerLinuxåpnerduetsøkefeltogskriver“Terminal”.
Nårprogrammeteråpnet,vilduseetvindumednoetekst,typiskhvitt påsvartellersvartpåhvitt,ogdukanbegynneåskrivekommandoer tildatamaskinen.Duhartusenvisavkommandoertilgjengelig,mendet erheldigviskunetfåtalldubehøverforåkjørePython-programmene dine.
Nårdulagrerenfilpådatamaskinendin,velgerduhvilkenmappeduvil lagredeni.Vanligvisnavigererviimappenevårevedåklikkeossrundt imappestrukturenforåfinnedetvileteretter.Nårviskalleteoppen filiterminalen,gjørvidettevedågikommandoer.Dettegjøresheltlikt påMacOSogLinux,menernoeannerledesiWindows,såherfårdu enintroduksjontilhvordandugjørdetibeggetyperterminaler.
NavigeringpåWindows
PåenWindows-maskinerdettokommandoerdumåkjennetil.Disse er dir og cd.dirstårfor“Directory”,ognårdukjørerkommandoenvil dufåopphvilkefilerogmappersomertilgjengeligeimappendustår i.ddstårfor“ChangeDirectory”,oglardegbyttetilenannenmappe.
Objektorientert programmering med Python er en lett tilgjengelig innføringsbok skrevet for å dekke pensum i grunnleggende objektorientert programmering ved universiteter og høgskoler.
Objektorientert programmering (OOP) organiserer kode rundt objekter, noe som gjør det lettere å modellere virkelige objekter og deres interaksjoner på en naturlig måte. OOP har fordeler som modularitet, gjenbrukbarhet, enkel feilsøking, skalerbarhet og bedre vedlikehold. Det ble utviklet ved Universitetet i Oslo på 60tallet og har nå blitt det mest utbredte programmeringsparadigmet verden over. Python har en enkel og lesbar syntaks som gjør det svært brukervennlig. Det støtter fullt ut OOP og er derfor et velegnet språk for å lære og forstå objektorienterte prinsipper.
Du trenger ingen forhåndskunnskaper i programmering, da boken starter fra grunnleggende konsepter og bygger videre derfra. Så enten du er nybegynner uten programmeringserfaring eller mer erfaren og ønsker å dykke dypere inn i OOP med Python, vil denne boken være for deg. Boken er strukturert med korte og oversiktlige kapitler som følger progresjonen til et typisk grunnkurs i OOP. Hvert kapittel avsluttes med oppsummerende eksempeloppgaver, så du får testet forståelsen.
Henrik Hillestad Løvold er universitetslektor ved UiT – Norges arktiske universitet og Universitetet i Oslo. Han underviser begynneremner i programmering med Python.