Digitalklokke med tallvisere
Lov på eksamen
- Datamaskin med programmeringsverktøy
- Lærebok, dokumentasjon og egne notater og programmer
Ikke åpent internett (bare noen utvalgte nettressurser), kommunikasjon med andre eller kunstig intelligens.
Kan den løses uten PC?
1 av 4 deloppgaver kan løses uten PC.
Fra 2027 er det bare kalkulator og skriftlige hjelpemidler på del 2. Vurderingen er gjort med KI og kan inneholde feil.
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.

Forklar diagrammet ved å beskrive relasjonen mellom klassene og hva klassene representerer. Du skal også identifisere og forklare attributtene og metodene i klassene.
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.
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.
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
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
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: inter tallet telleren viser nå, for eksempel 7 timer eller 45 minutter.maks_verdi: inter 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å tolkemaks_verdisom 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 ogmaks_verdi− 1.øk()økerverdimed 1. Når verdien nårmaks_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(): strreturnerer verdien som tekst med to sifre, for eksempel"07".
Digitalklokke representerer selve klokka, med timer og minutter.
timer: Tallviserogminutter: Tallviserer de to tellerne klokka består av.set_tid(int, int)stiller klokka. Den tar inn timer og minutter og kallerset_verdipå 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(): strreturnerer tiden som tekst på formen"TT:MM", for eksempel"09:05", ved å sette sammenvis_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.