Bibliotek med bøker og lånere
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 skal du lage et program for administrasjon av et bibliotek ved hjelp av to klasser: Bok og Låner. Klassene Bok og Låner skal inneholde funksjonalitet for utlån og tilbakelevering av bøker. Klassene er definert med følgende egenskaper og metoder:
Merk: Klassene under er beskrevet med navn i camelCase og norske bokstaver (æ, ø, å). Du kan bruke det som er naturlig i din løsning.
Klassen Bok:
tittel : string– tittelen på bokenforfatter : string– forfatteren av bokenutlånt : Låner– hvem boken er utlånt til, om den er detvisInfo()– viser informasjon om boken (tittel, forfatter, om den er utlånt eller ikke)
Klassen Låner:
lånerID : int– unik ID for lånerenlånteBøker : [Bok]– referanser til bøkene som er lånt av denne lånerenlånBok(Bok)– låner en bok og merker den som utlåntleverTilbakeBok(Bok)– returnerer den lånte boken og markerer den som levert tilbake
Lag et klassediagram som viser klassene Bok og Låner med egenskapene og metodene som er beskrevet over. Forklar og tegn riktig relasjon mellom de to klassene. (Tips: Klassediagrammet kan lagres og leveres inn som pdf-dokument eller bildefil.)
Med utgangspunkt i klassediagrammet du laget i oppgave a: Implementer klassene Bok og Låner i ditt programmeringsspråk.
Implementer et testprogram for klassene Bok og Låner som gjør følgende:
oppretter noen bøker og låner dem ut til en låner
tester at boken kan lånes ut og leveres tilbake korrekt
tester at det ikke er mulig å låne ut en bok som allerede er utlånt
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 i kommentarer i koden.
Fasit
Klassediagram med Bok (tittel, forfatter, utlånt / visInfo) og Låner (lånerID, lånteBøker / lånBok, leverTilbakeBok). Relasjonen er en toveis assosiasjon: en låner kan ha 0..* bøker, og en bok er lånt ut til 0..1 låner. Det er ikke komposisjon, fordi bøkene finnes uavhengig av låneren.
LøsningsforslagKI-generert

Klassene. Hver klasse tegnes som en boks med tre felt: klassenavnet, egenskapene med datatype og metodene med parametertype. Egenskapene er merket - (private), slik at de bare kan endres gjennom metodene. Metodene er merket + (offentlige).
Bokhartittelogforfatterav typenstringogutlånt, som er en referanse til den låneren som har boken, eller ingenting hvis boken er ledig. MetodenvisInfo()viser tittel, forfatter og om boken er utlånt.LånerharlånerIDav typenintoglånteBøker, som er en liste med referanser tilBok-objekter. MetodenlånBok(Bok)legger boken i lista og setterutlåntpå boken til låneren.leverTilbakeBok(Bok)fjerner boken fra lista og setterutlånttilbake til ingenting.
Relasjonen. Klassene er knyttet sammen med en assosiasjon, tegnet som en heltrukket linje mellom boksene. Assosiasjonen går begge veier: Låner kjenner til bøkene sine gjennom lånteBøker, og Bok kjenner til låneren sin gjennom utlånt. Derfor har linjen ingen pilspiss.
Multiplisiteten står ved hver ende av linjen:
- 0..* ved
Bok: en låner kan ha lånt ingen, én eller mange bøker. - 0..1 ved
Låner: en bok er enten ledig eller lånt ut til nøyaktig én låner.
Hvorfor ikke komposisjon eller arv? Komposisjon ville betydd at bøkene bare finnes inne i låneren og forsvinner sammen med den. Slik er det ikke. En bok finnes i biblioteket før den lånes ut og etter at den er levert tilbake, og den kan lånes av mange lånere etter hverandre. Arv passer heller ikke, fordi en bok ikke er en spesiell type låner eller omvendt. Aggregering (hul rombe ved Låner) kan forsvares, siden låneren «har» bøker som lever uavhengig av den. Men relasjonen er midlertidig og gjelder bare så lenge boken er utlånt, så en vanlig assosiasjon beskriver den best.
Sensorveiledning
Oppgaven gir til sammen 12 poeng
Det gis uttelling for klassene, egenskaper og metoder, riktig forklart relasjon og riktig tegnet relasjon.
Det gis uttelling for implementerte klasser med riktig konstruksjon/instansiering/initialisering, egenskaper og metoder.
Det gis uttelling for hvert av de tre punktene som skal testes.
Det gis uttelling for håndtering av feil og unntak i inntil tre nivåer etter sensors skjønn.