Oppgaven handler om en Vehicle-klasse, som håndterer informasjon om et kjøretøy og implementerer innkapslingsmetoder med validering.
Et Vehicle-objekt inneholder type kjøretøy, drivstoffet det bruker og registreringsnummer:
Typen kan være enten motorsykkel eller bil.
Drivstoffet kan være enten hydrogen, elektrisitet, diesel eller bensin. Kun biler kan gå på hydrogen.
Gyldige registreringsnummeret avhenger av typen kjøretøy og drivstoff etter følgende regler:
Kjøretøy som går på elektrisitet skal ha registreringsnummer som starter med bokstavene “EL” eller “EK”
Hydrogenbilene har registreringsnummer som begynner med bokstavene “HY”
Dieselkjøretøy og bensinkjøretøy har registreringsnummer som begynner på to bokstaver. De kan ikke være “EK”, “EL” eller “HY”. Bokstavene Æ, Ø og Å skal ikke brukes.
For alle drivstoff gjelder det at det skal være brukt store bokstaver.
Ellers så gjelder det at motorsykler har 4 sifre etter bokstavene, mens biler har 5.
Følgende metoder må implementeres:
Vehicle(char, char, String) - Konstruktør der argument-rekkefølgen må være kjøretøystype, drivstofftype og registreringsnummer. Ved ugyldige argumenter utløses unntak av typen IllegalArgumentException.
- getFuelType() - returnerer type drivstoff som følgende: ‘H’ for hydrogen, ‘E’ for elektrisitet, ‘D’ for diesel eller ‘G’ for bensin.
- getRegistrationNumber() - returnerer registreringsnummeret
setRegistrationNumber(String) - endrer registreringsnummeret dersom det er gyldig i henhold til kravene over, og utløser unntak av typen IllegalArgumentException dersom det ikke er gyldig.
getVehicleType() - returnerer kjøretøystype: 'M' for motosykkel, 'C' for bil.
Del 1 – Java-kode
Implementer Vehicle-klassen som beskrevet over med stram innkapsling. Eventuelle hjelpemetoder for validering bør også ha stram innkapsling. Det kan være lurt å lese om String-klassen og dens metoder før du setter i gang.
Testkode for denne oppgaven finner du her: encapsulation/VehicleTest.java. Jextest-koden for oppgaven finner du her: encapsulation/Vehicle.jextest
Merk at din implementasjon må ligge i en pakke med samme navn som testkodens pakke. Pass derfor på at Vehicle-klassen ligger i pakken "encapsulation"
1 Comment
Unknown User (eskildsa)
I henhold til wiki siden om Gyldig tilstand, burde ikke testen til setRegistration forvente IllegalStateException i tilfeller der registreringsnummer er et gyldig registreringsnummer men ikke i kombinasjon med fuelType. Istedefor IllegalArgumentException?