Eksamensoppgavene er utgitt av Utdanningsdirektoratet. Første nedlasting kjører en bot-sjekk i nettleseren (Vercel BotID) — mer i personvernerklæringen.
5 timer — alle hjelpemidler8 oppgaver
Oppgave 1·Mekanisme for å generalisere klasser til en superklasse
Hjelpemiddelkrav: For hånd
En utvikler som modellerer et objektorientert program, oppdager at flere av klassene har like eller lignende metoder og egenskaper. Utvikleren velger å generalisere de felles metodene og egenskapene til en superklasse.
Hvilket prinsipp eller hvilken mekanisme må implementeres for å realisere denne modellen med objektorientert programmering?
Fasit
Arv: subklassene arver de felles metodene og egenskapene fra superklassen.
LøsningsforslagKI-generert
Når felles egenskaper og metoder flyttes opp i en superklasse, må de andre klassene arve fra den. Da blir de subklasser. De får alt superklassen har, uten at koden skrives flere ganger, og de kan i tillegg ha egne egenskaper og metoder. I UML heter dette generalisering og tegnes med en hul trekant som peker mot superklassen.
De andre alternativene gir ikke en superklasse:
Abstraksjon betyr å ta med bare det som er viktig for problemet og se bort fra detaljene. Det er en del av all modellering, men det er ikke mekanismen som knytter klassene til en superklasse.
Polymorfisme betyr at objekter av ulike klasser kan svare på det samme metodekallet på hver sin måte. Den bygger ofte på arv, men er ikke det som realiserer generaliseringen.
Innkapsling betyr å samle data og metoder i en klasse og skjule de indre detaljene for resten av programmet.
På et universitet kan studentene velge å knytte seg til et valgfritt fakultet og da bli en del av fakultetet. Dette er modellert med de to klassene Student og Fakultet i klassediagrammet nedenfor.
a)Hjelpemiddelkrav: For hånd
Se på klassediagrammet ovenfor. Hva er riktig type relasjon mellom de to klassene i objektorientert modellering (OOM)?
b)Hjelpemiddelkrav: For hånd
Begrunn svaret ditt på oppgave a.
Fasit
a)
Aggregering.
b)
Fakultetet har studenter, men en student kan eksistere uten fakultetet (studenten velger selv om hun vil knytte seg til et). Delene lever uavhengig av helheten, så det er aggregering og ikke komposisjon.
LøsningsforslagKI-generert
a)
Riktig svar er aggregering. Et fakultet består av studenter, men studentene er ikke avhengige av fakultetet for å finnes. Det er en «har»-relasjon (del–helhet) med løs kobling.
Generalisering er arv («er en»). En student er ikke et fakultet, og omvendt.
Komposisjon er en sterk del–helhet-relasjon der delene ikke kan eksistere uten helheten.
Avhengighet betyr bare at en klasse bruker en annen en kort stund, for eksempel som parameter i en metode. Den sier ingenting om at studenten er en del av fakultetet.
b)
Teksten sier at studentene velger å knytte seg til et fakultet og da blir en del av fakultetet. Det gir to kjennetegn:
Del–helhet. Fakultetet er helheten og studentene er delene. Da er det aggregering eller komposisjon, ikke generalisering eller avhengighet.
Delene lever uavhengig av helheten. Tilknytningen er valgfri. En student finnes også uten fakultet, kan melde seg ut eller bytte fakultet. Legges fakultetet ned, forsvinner ikke studentene. Ved komposisjon ville studentobjektene blitt slettet sammen med fakultetet, og det passer ikke her.
Derfor er relasjonen aggregering. I klassediagrammet tegnes den som en linje mellom klassene med en hul rombe ved Fakultet (helheten). Multiplisiteten kan skrives som 0..1 ved Fakultet (en student har null eller ett fakultet) og * ved Student (et fakultet har mange studenter).
I denne oppgaven skal du lage en funksjon som bygger opp en tekst basert på noen regler. Funksjonen er ikke ferdig skrevet og mangler en del som bestemmer hvilket dyrenavn som skal legges til. Funksjonen er beskrevet ved hjelp av følgende pseudokode:
FUNCTION beskrivDyr(n): SET resultat TO " " FOR hvert tall i fra 1 til n IF i % 2 EQUAL TO 0 SET resultat TO resultat + "Blå " ELSE SET resultat TO resultat + "Rød " ENDIF // mangler pseudokode her for å legge til dyrenavn ENDFOR RETURN resultatENDFUNCTIONDISPLAY beskrivDyr(5)
Forventet resultat for denne funksjonen er: Rød Mus Blå Mus Rød Katt Blå Mus Rød Hund
Fullfør funksjonen slik at den også legger til riktig dyrenavn for hvert tall. Skriv den manglende pseudokoden.
Fasit
Tall 3 gir «Katt», tall 5 gir «Hund» og de andre gir «Mus», for eksempel:
IF i % 5 EQUAL TO 0 SET resultat TO resultat + "Hund " ELSE IF i % 3 EQUAL TO 0 SET resultat TO resultat + "Katt " ELSE SET resultat TO resultat + "Mus " ENDIF
LøsningsforslagKI-generert
Løkken går gjennom tallene 1 til 5. For hvert tall legger den først til en farge og så, i den delen som mangler, et dyrenavn. Vi deler det forventede resultatet i par med farge og dyr:
i
i % 2
Farge
Dyr
1
1
Rød
Mus
2
0
Blå
Mus
3
1
Rød
Katt
4
0
Blå
Mus
5
1
Rød
Hund
Fargene stemmer med den ferdige if-setningen. Dyrene må vi bestemme selv: tallet 3 gir «Katt», tallet 5 gir «Hund», og alle andre tall gir «Mus». Et mønster som passer, er at tall som er delelige med 5, gir «Hund», og tall som er delelige med 3, gir «Katt». Den manglende koden settes inn etter ENDIF og før ENDFOR:
FUNCTION beskrivDyr(n): SET resultat TO " " FOR hvert tall i fra 1 til n IF i % 2 EQUAL TO 0 SET resultat TO resultat + "Blå " ELSE SET resultat TO resultat + "Rød " ENDIF IF i % 5 EQUAL TO 0 SET resultat TO resultat + "Hund " ELSE IF i % 3 EQUAL TO 0 SET resultat TO resultat + "Katt " ELSE SET resultat TO resultat + "Mus " ENDIF ENDFOR RETURN resultatENDFUNCTIONDISPLAY beskrivDyr(5)
Forklaring:
Hvert dyrenavn slutter med et mellomrom, akkurat som fargene. Da blir ordene skilt fra hverandre i resultatet.
Bare ett dyr skal legges til per tall. Derfor brukes én IF … ELSE IF … ELSE-setning og ikke tre separate IF-setninger. Da blir «Mus» bare lagt til når ingen av de andre betingelsene er sanne.
Rekkefølgen på testene betyr noe hvis n er større. Tallet 15 er delelig med både 3 og 5. Med testen for 5 først blir det «Hund».
Det forventede resultatet sier bare hva som skal skje for tallene 1 til 5, så andre løsninger er også riktige. Man kan for eksempel teste i EQUAL TO 3 og i EQUAL TO 5 i stedet for å bruke %.
Pseudokoden nedenfor beskriver en algoritme som behandler et positivt firesifret heltall, der det første sifferet ikke er 0:
FUNCTION tallspill(tall) REPEAT SET stigendeTall TO sortAscending(sifrene i tall) SET synkendeTall TO sortDescending(sifrene i tall) SET nyttTall TO synkendeTall - stigendeTall DISPLAY tall, "->", synkendeTall, "-", stigendeTall, "=" og nyttTall SET tall TO nyttTall UNTIL tall er det samme som i forrige runde RETURN tallENDFUNCTION
Forklaring
sortAscending(sifrene i tall): sorterer sifrene i tallet fra minste til største
sortDescending(sifrene i tall): sorterer sifrene i tallet fra største til minste
Forklar med egne ord hva algoritmen gjør. Beskriv hvordan algoritmen endrer tallet for hvert steg, og hvordan algoritmen fortsetter til et tall gjentas. Du skal fokusere på hva som skjer i algoritmen som helhet, ikke forklare hver linje i pseudokoden.
b)Hjelpemiddelkrav: Krever PC
Implementer algoritmen i ditt programmeringsspråk. Programmet skal ta inn et heltall fra brukeren, for eksempel tallet 3142, og vise hvert steg i algoritmen slik pseudokoden beskriver, helt til tallet ikke endrer seg lenger.
Fasit
a)
I hvert steg sorteres sifrene i tallet synkende og stigende, og det minste tallet trekkes fra det største. Differansen blir det nye tallet. Dette gjentas til differansen blir den samme som tallet vi startet steget med. For firesifrede tall der ikke alle sifrene er like, ender algoritmen alltid på 6174 (Kaprekars konstant), fordi .
LøsningsforslagKI-generert
a)
Algoritmen tar et firesifret tall og lager to nye tall av de samme sifrene: det største tallet (sifrene sortert synkende) og det minste tallet (sifrene sortert stigende). Så trekker den det minste fra det største. Differansen er det nye tallet, og hele prosessen starter på nytt med det. Hvert steg vises på skjermen.
Løkken fortsetter så lenge tallet endrer seg. Når differansen blir lik tallet den ble regnet ut fra, vil alle senere steg gi det samme tallet. Da stopper algoritmen og returnerer tallet.
Med startverdien 3142 blir stegene:
Steg
Tall
Synkende
Stigende
Differanse
1
3142
4321
1234
3087
2
3087
8730
0378
8352
3
8352
8532
2358
6174
4
6174
7641
1467
6174
I steg 4 gir 6174 seg selv igjen, og algoritmen stopper. Tallet 6174 kalles Kaprekars konstant. Alle firesifrede tall der ikke alle sifrene er like, ender på 6174 etter høyst sju steg.
To ting er verdt å merke seg:
Sifrene må regnes som fire. Differansen kan få færre enn fire sifre, for eksempel . Da må tallet regnes som 0999, med en null foran, ellers virker ikke algoritmen. Det er derfor stigende sortering av 3087 blir 0378 i eksempelet.
Tall med fire like sifre. For 1111, 2222 og så videre er det største og det minste tallet like, så differansen blir 0. Da gir neste steg også 0, og algoritmen stopper på 0 i stedet for 6174. Oppgaven sier ikke at sifrene må være ulike, så et program bør ta høyde for dette.
I denne oppgaven får du utdelt et klassediagram som viser strukturen til en digital klokke. Diagrammet består av to klasser: Tallviser og Digitalklokke.
Tallviser representerer en enkel teller med en verdi og en maksimal verdi. Den kan brukes for timer og minutter.
Digitalklokke består av to tallvisere, en for timer og en for minutter, og har metoder for å stille inn tiden, la tiden gå og vise tiden som tekst.
a)Hjelpemiddelkrav: For hånd
Forklar diagrammet ved å beskrive relasjonen mellom klassene og hva klassene representerer. Du skal også identifisere og forklare attributtene og metodene i klassene.
b)Hjelpemiddelkrav: Krever PC
Implementer klassene i ditt programmeringsspråk ved å lage klassen Tallviser med alle nødvendige attributter og metoder, og ved å lage klassen Digitalklokke, som bruker to instanser av klassen Tallviser.
c)Hjelpemiddelkrav: Krever PC
Implementer et testprogram som oppretter en instans av klassen Digitalklokke, og som tester metodene for å stille inn tid, la tiden gå og vise tiden. Test også at 60 minutter blir til en time når klokken går.
d)Hjelpemiddelkrav: Krever PC
Implementer nødvendig håndtering av feil og unntak i programmet. Hvis du allerede har skrevet programmet slik at dette er håndtert, trenger du bare å påpeke dette med kommentarer i koden.
Fasit
a)
Komposisjon: en Digitalklokke består av to Tallviser-objekter, timer og minutter, som bare finnes som deler av klokka. Tallviser er en teller med verdi og maks_verdi og metodene set_verdi, øk og vis_verdi. Digitalklokke har metodene set_tid, tid_går og vis_tid, som bruker metodene i de to tallviserne.
LøsningsforslagKI-generert
a)
Oversikt. Diagrammet er et UML-klassediagram med to klasser. Hver boks har tre felt: klassenavnet øverst, attributtene med datatype i midten og metodene nederst. Etter kolon står datatypen til et attributt eller returverdien til en metode.
Relasjonen. Linjen mellom klassene har en fylt rombe ved Digitalklokke. Det betyr komposisjon: Digitalklokke er helheten, og Tallviser er en del av den. Attributtene timer: Tallviser og minutter: Tallviser viser at klokka har to slike deler. Det er komposisjon og ikke aggregering fordi tallviserne lages av klokka og ikke har noen mening alene. Slettes klokka, forsvinner tallviserne med den.
Tallviser representerer en teller som teller fra 0 og opp til en øvre grense, og så begynner på nytt. Den samme klassen brukes både til timer og til minutter. Forskjellen er bare den øvre grensen.
verdi: int er tallet telleren viser nå, for eksempel 7 timer eller 45 minutter.
maks_verdi: int er grensen der telleren går rundt til 0 igjen: 24 for timer og 60 for minutter. Gyldige verdier er da 0–23 og 0–59. Man kan også tolke maks_verdi som den største tillatte verdien, altså 23 og 59. Det viktige er at valget brukes likt i hele klassen.
set_verdi(int) stiller telleren til en bestemt verdi. Metoden bør kontrollere at verdien er gyldig, altså mellom 0 og maks_verdi − 1.
øk() øker verdi med 1. Når verdien når maks_verdi, settes den til 0. Det er praktisk om metoden også sier fra når telleren har gått rundt, slik at klokka vet at timene skal økes.
vis_verdi(): str returnerer verdien som tekst med to sifre, for eksempel "07".
Digitalklokke representerer selve klokka, med timer og minutter.
timer: Tallviser og minutter: Tallviser er de to tellerne klokka består av.
set_tid(int, int) stiller klokka. Den tar inn timer og minutter og kaller set_verdi på hver av tallviserne.
tid_går() lar ett minutt gå. Den kaller øk() på minutter. Går minuttene rundt fra 59 til 0, kalles også øk() på timer. Etter 23:59 blir tiden dermed 00:00.
vis_tid(): str returnerer tiden som tekst på formen "TT:MM", for eksempel "09:05", ved å sette sammen vis_verdi() fra de to tallviserne med et kolon imellom.
Ansvarsfordeling.Digitalklokke vet ikke selv hvordan det telles. Den overlater det til tallviserne og samordner dem bare. Det er et eksempel på innkapsling: detaljene om telling og grenser ligger i Tallviser, og klokka bruker bare metodene. Diagrammet viser ikke synlighet (+/-) eller konstruktører. Attributtene bør være private, og Tallviser trenger en konstruktør som tar inn maks_verdi.
Oppgave 6·Etisk dilemma ved KI-chatbot som samtalepartner
Hjelpemiddelkrav: For hånd
Tema: Kan kunstig intelligens hjelpe ungdom med depresjon?
I dag undersøkes det hvordan kunstig intelligens (KI), som chatboter, kan brukes til å støtte ungdom som sliter med depresjon og vonde tanker. Forskning viser at mange ungdommer synes det er enklere å åpne seg for en chatbot enn for et menneske, fordi de ikke føler seg dømt og kan bruke den i trygge omgivelser, som hjemme.
Samtidig er det flere utfordringer ved det: Chatboter kan gi feil eller upassende svar dersom de ikke overvåkes godt nok, og det er viktig at ungdom forstår at de snakker med en maskin og ikke med et menneske. Et annet spørsmål er hvordan sensitive opplysninger blir lagret og brukt.
KI kan altså senke terskelen for å søke hjelp, men det reiser også vanskelige etiske dilemmaer.
Situasjonsbeskrivelse
Anna er 17 år og går på videregående. Hun har den siste tiden følt seg trist, ensom og nedstemt. Hun synes det er vanskelig å snakke med foreldrene eller helsesykepleieren på skolen, for hun er redd for at de skal misforstå eller tenke dårlig om henne.
En kveld finner hun en gratis chatbot-app som lover å være en «venn å snakke med». Anna opplever at det er mye lettere å åpne seg for chatboten enn for mennesker. Hun forteller om følelsene sine, og chatboten svarer raskt og vennlig. Etter en stund begynner hun å bruke den nesten hver dag.
Men så skjer det to ting:
Chatboten gir av og til råd som virker litt rare og ikke alltid hjelper. Anna blir usikker på om den egentlig forstår henne.
Hun leser på nettet at appen kan lagre dataene hennes og selge dem videre til andre selskaper.
Drøft ett etisk dilemma som kan oppstå i Annas situasjon når hun bruker chatboten som samtalepartner over lengre tid. I drøftingen din kan du presentere argumenter for og imot dilemmaet du velger, bruke etiske begreper som ansvar, konsekvenser, tillit og personvern og avslutte med din egen vurdering: Hva mener du Anna bør gjøre, og hvilken rolle bør KI ha i psykisk helsehjelp til ungdom?
Fasit
Et godt svar velger ett dilemma, for eksempel om Anna bør fortsette å bruke chatboten: den gir lav terskel og støtte når hun ikke tør å snakke med noen, men den kan gi feil råd, gjøre henne avhengig og samle inn og selge svært sensitive opplysninger. Svaret drøfter argumenter på begge sider med begreper som ansvar, konsekvenser, tillit og personvern, og ender i en begrunnet vurdering av hva Anna bør gjøre og hvilken rolle KI bør ha i psykisk helsehjelp.
LøsningsforslagKI-generert
Svaret nedenfor er et eksempel. Kandidaten kan velge et annet dilemma, så lenge det henger sammen med Annas situasjon og drøftes fra flere sider.
Dilemmaet. Bør Anna fortsette å bruke chatboten som samtalepartner? På den ene siden gir den henne noen å snakke med når hun ikke tør å gå til foreldrene eller helsesykepleieren. På den andre siden kan den gi dårlige råd, erstatte hjelp fra mennesker, og den kan lagre og selge det hun forteller. Det finnes gode grunner for begge valgene, og det er derfor et dilemma.
Argumenter for å bruke chatboten:
Lav terskel. Anna åpner seg lettere for en maskin fordi hun ikke føler seg dømt. Å sette ord på følelsene kan i seg selv lette. Uten chatboten er det mulig at hun ikke snakker med noen i det hele tatt.
Tilgjengelighet. Chatboten er gratis og svarer med en gang, også sent på kvelden. Helsetjenester har ofte ventetid og er bare åpne på dagtid.
Autonomi. Anna er 17 år og har rett til å bestemme mye selv. Hun velger selv hvem hun vil snakke med og når.
Konsekvenser. Ut fra en konsekvensetisk vurdering er det godt hvis chatboten gjør at Anna føler seg mindre ensom, og kanskje etter hvert tør å søke hjelp hos et menneske.
Argumenter mot å bruke chatboten slik:
Feil og upassende råd. En språkmodell forstår ikke Anna. Den lager svar som høres riktige ut, men som kan være feil. Hvis Anna får det verre eller får vonde tanker, kan et dårlig svar få alvorlige konsekvenser. Chatboten kan ikke vurdere fare eller ringe etter hjelp slik en helsesykepleier kan.
Ansvar. En helsesykepleier har taushetsplikt, faglig ansvar og plikt til å handle. Det er uklart hvem som har ansvaret når en app gir dårlige råd: selskapet, utviklerne eller Anna selv. Appen lover å være en «venn», men tar ikke ansvaret en venn eller en fagperson har.
Tillit og avhengighet. Chatboten svarer alltid raskt og vennlig. Det kan gi Anna tillit til noe som ikke fortjener den, og gjøre det enda vanskeligere å snakke med ekte mennesker. Da kan ensomheten øke i stedet for å minke. Det er også et spørsmål om ærlighet: Anna må forstå at hun snakker med en maskin, og at vennligheten er laget for at hun skal fortsette å bruke appen.
Personvern. Det Anna forteller, er helseopplysninger. De hører til de særlige kategoriene av personopplysninger i GDPR og har ekstra sterk beskyttelse. Å selge dem videre krever uttrykkelig samtykke, og et samtykke som er gjemt i vilkår Anna ikke har lest, er ikke et reelt samtykke. Opplysningene kan havne hos annonsører eller andre selskaper, bli brukt til å profilere henne, eller lekke ved et datainnbrudd. Skaden kan ikke gjøres om. Gratis-appen kan være betalt med dataene hennes.
Pliktetikk. Selskapet har en plikt til ikke å utnytte en sårbar person. Uansett hvilke fordeler appen gir, er det galt å tjene penger på å selge det en nedstemt 17-åring betror seg om.
Min vurdering. Chatboten hjelper Anna nå, og det er ikke riktig å si at hun gjorde noe galt da hun begynte å bruke den. Men akkurat denne appen gir feil råd og kan selge dataene hennes, og da veier ulempene tyngst. Anna bør slutte å fortelle personlige ting til denne appen, se om hun kan få slettet det hun allerede har delt, og ta skrittet mot et menneske hun stoler på: helsesykepleieren, fastlegen, en voksen i familien eller en anonym chattetjeneste som drives av en seriøs organisasjon med fagfolk. Hun kan gjerne bruke det hun har skrevet til chatboten til å finne ord på hvordan hun har det.
KI kan ha en rolle i psykisk helsehjelp til ungdom, men som et supplement og ikke som en erstatning for mennesker. Da må noen krav være oppfylt: det må være tydelig at man snakker med en maskin, tjenesten må være utviklet og fulgt opp av helsefaglige personer, den må henvise videre til ekte hjelp når samtalen tyder på alvorlige problemer, og den må behandle opplysningene etter GDPR, med dataminimering, formålsbegrensning og uten salg av data. Ansvaret for at tjenesten er trygg, må ligge hos dem som lager og tilbyr den, ikke hos en 17-åring som har det vondt.
Du skal lage et program som leser inn informasjon fra et datasett, bearbeider og presenterer det. Datasettet inneholder informasjon om antall elever i noen skolefag i Norge de tre siste årene.
Datasettet er kodet i tegnsettet Windows-1252 og tilgjengelig i CSV- og JSON-format. Last ned datasettet her: datasett med elevtall (csv og json).
I innleveringsmappen må du huske å legge inn datasettfilen du bruker sammen med programmet, slik at det fungerer når sensor skal kjøre det.
a)Hjelpemiddelkrav: Krever PC
Lag et program som leser inn data fra datasettet, lagrer det i egnet datastruktur og regner ut totalt antall elever innenfor hvert fagområde. Programmet skal presentere resultatet i et tabellignende oppsett som viser fagområdene og antall elever i fagområdet hvert av de tre årene. Merk: Fagområdene skal hentes fra datasettet for full uttelling. Sammenligning med hardkodede verdier gir bare noe eller ingen uttelling.
b)Hjelpemiddelkrav: Krever PC
Utvid programmet slik at brukeren kan angi eller velge et fagområde. Programmet skal deretter vise alle fagene for det valgte fagområdet med elevtall for hvert av de tre årene.
c)Hjelpemiddelkrav: Krever PC
Utvid programmet til å vise fire fag for et valgt fagområde fra skoleåret 2022/23 til skoleåret 2024/25. Dette er de fire fagene som skal vises:
Oppgave 8·Simulering av bunndyr som spiser plankton
Hjelpemiddelkrav: Krever PC
Du skal lage en simulering av et bunndyr som sitter stille på havbunnen. Bunndyret lever av ulike typer plankton som faller mot bunnen. Enkelte planktontyper får bunndyret til å vokse, andre typer virker som gift og gjør at bunndyret krymper. Simuleringen avsluttes når bunndyret dør, enten fordi det har forspist seg, eller fordi det er forgiftet.
Oppstart
Simuleringen starter med at bunndyret sitter stille på havets bunn og samler plankton. Bunndyret vises nede i skjermbildet som en rektangulær, gråfarget boks.
Simuleringen skal bruke to typer plankton: grønne og røde. Begge typer plankton faller mot bunnen fra tilfeldige posisjoner øverst i skjermbildet.
Simuleringens gang
Når grønnfarget plankton treffer bunndyret, vil bunndyret vokse i bredde. Når rødfarget plankton treffer bunndyret, vil bunndyret krympe i bredde. Plankton som ikke treffer bunndyret når det kommer ned til bunnen, skal forsvinne.
Under simuleringen skal mengden av grønnfarget plankton som faller ned mot bunnen, kunne økes eller reduseres. Mengden av grønt plankton som faller ned, kan styres med piltaster eller på en annen måte som du velger fritt. Obs: Husk å fortelle sensor hvordan det styres.
Simuleringen skal ha en maksverdi for mengde grønnfarget plankton som faller per tidsenhet.
På illustrasjonen nedenfor er mengden grønnfarget plankton økt.
Avslutning
Simuleringen avsluttes når bunndyret er forspist, eller når det er forgiftet. Bunndyret er forspist når det er like bredt som skjermbildet. Bunndyret dør av forgiftning når det når en minstestørrelse som du kan bestemme selv.
Bruk objektorientert programmering med passende valg av klasser, og lag simuleringen.