Objektorientert programmering med Python (9788245051568)

Page 1


Henrik Hillestad Løvold

Objektorientert programmering med PYTHON

Objektorientertprogrammering medPython

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

TilElla

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å 60­tallet 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.

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.