Programutvikling V2015 — øvingsoppgave for uke 6

De første oppgavene er en øvelse i å definere og bruke et klassehierarki, samt å programmere en sammenkjedet liste der objektene er av forskjellige typer innen samme klassehierarki.

Oppgave 1

Du skal definere et klassehierarki som kan brukes til å lagre informasjon om forskjellige typer bøker. (Den informasjon som er valgt her, ville neppe samsvare med den informasjon en ville registrere i biblioteksammenheng. Den er bare valgt for å få til en passende oppgave.) Klassene som hierarkiet skal bestå av er nevnt etter beskrivelsen av hvilken informasjon som skal lagres for de forskjellige boktyper.

For alle typer bøker skal det lagres følgende informasjon:

I tillegg skal det lagres litt forskjellig informasjon avhengig av typen bok.

For skolebøker skal det lagres

For fagbøker skal det lagres

For alle romaner skal det lagres

I tillegg skal det for romaner, avhengig av dens opphavsland lagres følgende:

For norske romaner:

For utenlandske romaner:

Definer klassene Bok, Skolebok, Fagbok, Roman, NorskRoman og UtenlandskRoman svarende til de boktypene som er nevnt. Klassene Bok og Roman skal være abstrakte klasser. De har bare som formål å inneholde det som er felles for de boktyper som deres ikke-abstrakte subklasser representerer. De andre klassene skal representere hver sin boktype av dem som er nevnt ovenfor. De skal defineres slik at data som er felles for flere typer i størst mulig grad blir arvet. Alle klassene skal ha en konstruktør som gir initialverdier til datafeltene ved hjelp av parametre. Dessuten skal alle klassene ha en toString-metode som returnerer en tekststreng med de data som er lagret for boka.

Alle bokobjektene som blir opprettet (instansiert) av de nevnte typene skal kjedes sammen i én sammenhengende liste. Bok-klassen må derfor inneholde en peker til neste Bok-objekt i lista. (Med Bok-objekt menes her et objekt av en av de nevnte ikke-abstrakte subklasse-typene. Husk at et subklasse-objekt regnes også som tilhørende superklasse-typen. I denne oppgaven vil derfor objekter av typene Skolebok, Fagbok, NorskRoman og UtenlandskRoman alle sammen bli oppfattet som Bok-objekter, siden de nevnte klassene må være subklasser (direkte eller indirekte) til klassen Bok.)

Oppgave 2

Nedenfor finner du en skisse av klassen Bokregister som skal representere en sammenkjedet liste av Bok-objekter.

public class Bokregister
{
  private Bok første;

  //registrerer et bokobjekt
  public void settInn( Bok ny )
  {
    //Setter inn Bok-objektet ny i lista av Bok-objekter.
  }

  //utskrift av innhold i bokliste
  public void skrivListe( JTextArea bøker )
  {
    //Gjennomløper lista av Bok-objekter og tilføyer i tekstområdet
    //bøker informasjonen som er lagret om hver enkelt bok.
  }
}

Programmer metodene settInn og skrivListe. I den første av disse kan du selv velge hvor i lista du vil sette inn det nye objektet: forrest, bakerst eller et annet sted.

Oppgave 3

Programmer et enkelt brukergrensesnitt som gjør det mulig å lagre og vise bokinformasjon i en bokliste av den type du har programmert i de to første oppgavene. Nedenfor er det vist et bilde av en mulig utforming av programmets brukervindu.

NB! Innlesing av data til programmet skal gjøres på en "sikker" måte, det vil si at programmet skal behandle mulige unntakssituasjoner (exceptions) som kan oppstå fordi tekstfelter ikke er fylt ut riktig av brukeren.

Programmer en egen "driverklasse" med

Utfordring! Gjør forandringer i koden slik av listen holdes sortert og at dette utnyttes for å gjøre andre metoder mer effektive.
Utvid programmet til både å kunne finne og slette bøker.

Løsningsforslag

Oppgave 1: Klasse-hierarki: Bok.java
Oppgave 2: Liste-klassen, Bokregister.java
Oppgave 3: Vindusklasse, Bokarkiv.java
Oppgave 3, Driverklasse med vinduslytter, Bokprogram.java