Objektorientertprogrammering medPython
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.
Omdenneboken
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
Innhold
IIntroduksjon
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..................
DelI Introduksjon
Kapittel1 Hvaerprogrammering?
Programmeringerenmetodeforåløseetproblem.Densomprogrammerermådefinerefremgangsmåtensåpresistatselvendatamaskinkan forståhvordanproblemetskalløses.
Idettekapitteletskalvitaforossbegrepeneprogrammering,algoritmer,programmeringsspråkogPython.
1.1 Programmeringogalgoritmer
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.
1.2 Programmeringsspråk
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.
1.2.1 Python
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.
Kapittel2
Objektorientertprogrammering
Objektorientertprogrammeringerdetsomkallesetprogrammeringsparadigme.Merfolkelig,kanvikanskjesiatdeteretbestemtmønstersom følgesnårviskriverprogrammer.Måletmedobjektorientertprogrammeringeråmodellereprogrammenevåreetterkonsepterogobjekter fradenvirkeligeverden.
2.1 Hullkortogassembly-språk
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.
2.2 Modernespråk
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.
2.3 Simula67,objektorientertprogrammering
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.
Kapittel3 Programmeringsverktøy
Foråkommeigangmedprogrammeringen,trengerviførstålaste nedoginstallerenoendataprogrammer.Idettekapitteletfårduet rasktoverblikkoverhvasombrukesforåskriveogkjøreprogrammene dine.
3.1 Python
ForåkunnekjøreprogrammeneviskriverispråketPython,trengset programsomfortellerdatamaskinenhvordandenskaltolkeinstruksjonenevåre.Noenoperativsystemer,sliksomLinuxogMacOSkommer medPythonferdiginstallert,mendeterlikevelanbefaltåfølgestegene underforåforsikredegomatduhardetsomtrengs.
3.1.1 NedlastingoginstallasjonavPython3
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.
Anaconda3
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.
3.2 Editor
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.
3.3 ÅkjøreetPython-program
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å!
3.3.1 Åpneterminalen
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.
3.3.2 Navigeringiterminalen
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.