Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Excerpt

I denne oppgaven skal vi modellere to typer togvogner og bruke dem i et tog. Vi vil bruke arv og samle det som er felles for togvognene i en superklasse.

Del 1 - TrainCar

 

I denne delen skal du lage en klasse kalt TrainCar for en enkel og generell togvogn, med følgende funksjonalitet (se også diagrammet til høyre):

  • TrainCar(int) - en konstruktør som tar inn hvor mye en tom vogn veier.
  • int getTotalWeight - returnerer vognas totale vekt. Merk at denne også skal kunne kalles på subklasser og fortsatt returnere totalvekta toil til vogna (stikkord: redefinering).
  • setDeadWeight(int) - setter hvor mye en tom vogn veier. Altså vekten til kun vognen, uten passasjerer eller last.
  • int getDeadWeight() - returnerer hvor mye en tom vogn veier. Altså vekten til kun vognen, uten passasjerer eller last.
PlantUML Macro
class TrainCar {
	int getTotalWeight()
	void setDeadWeight(int)
	int getDeadWeight()
}

 

JExercise-testkode for oppgavene Testkode for oppgaven finner du her: inheritance/TrainCarTest.java. Originalkoden (jextest) for testen finner du her: inheritance/TrainCarTestTrainCar.jextest.

Del 2 - CargoCar og PassengerCar

I denne delen skal du lage to forskjellige typer togvogner som er spesialiserte for sitt bruk. Begge skal arve fra TrainCar.
CargoCar extends TrainCar:

Denne klassen skal gjenspeile en lastevogn som frakter diverse ting og tang. Følgende funksjonalitet trengs (se også diagrammet til høyre):

  • CargoCar(int, int) - her tas inn hvor mye en tom vogn veier (som i TrainCar), og hvor mye vogna sin last veier.
  • int getCargoWeight() - returnerer hvor mye lasten veier.
  • setCargoWeight(int)  - setter en ny verdi for vekten til lasten.
PassengerCar extends TrainCar:

Denne klassen gjenspeiler en passasjervogn. Legg til følgende metoder (se også diagrammet til høyre):

  • PassengerCar(int, int) - her tas inn hvor mye en tom vogn veier (som i TrainCar), og hvor mange passasjerer det er i vogna. 
  • int getPassengerCount() - returner antall passasjerer.
  • setPassengerCount(int) - setter en ny verdi for antall passasjerer.

For å beregne totalvekta, så kan du anta at en gjennomsnittspassasjer veier 80 kg.

PlantUML Macro
class TrainCar {
	int getTotalWeight()
	void setDeadWeight(int)
	int getDeadWeight()
}
class CargoCar{
	CargoCar(int,int)
	int getCargoWeight()
	void setCargoWeight(int)
}
class PassengerCar{
	PassengerCar(int,int)
	int getPassengerCount()
	void setPassengerCount(int)
}
TrainCar <|--CargoCar
TrainCar <|--PassengerCar
 

 

JExercise-testkode for Testkode for oppgavene finner du her: inheritance/PassengerCarTest.javainheritance/CargoCarTest.java. Originalkoden (jextest) for testene finner du her: inheritance/PassengerCarTestPassengerCar.jextest og inheritance/CargoCarTestCargoCar.jextest.

Del 3 -

...

Train

Klassen Locomotive skal Train skal forestille et lokomotiv som har tog bestående av et sett med vogner knyttet til seg. Klassen skal ha følgende metoder (se også diagrammet til høyre):

  • addTrainCar(TrainCar) - denne metoden skal ta inn en togvogn og knytte den til dette lokomotivet.
  • boolean contains(TrainCar) - Sjekker om lokomotivet har TrainCar-argument knyttet til seg.
  • int getTotalWeight() - returner alle vognene sin totale vekt. Vi tar ikke høyde for lokomotivet sin eventuelle vekt.
  • int getPassengerCount() - tilsvarende PassengerCar sin metode, men returnerer antallet for alle vognene.
  • int getCargoWeight() - tilsvarende CargoCar sin metode, men returnerer lastevekten for alle vognene.
  • String toString() - Redefiner Locomotive  sin toString-metode. Den metoden skal sette sammen en String med oversikt over alle vognene som er knyttet til den. For hver vogn skal vogntype og totalvekt være med. Passasjervogner skal i tillegg ha med antall passasjerer og lastevogner skal ha med hvor mye lasten veier.
PlantUML Macro
class LocomotiveTrain {
	addTrainCar(TrainCar)
	boolean contains(TrainCar)
	int getTotalWeight()
	int getPassengerCount()
	int getCargoWeight()
	String toString()
}
 
class TrainCar {
	int getTotalWeight()
	void setDeadWeight(int)
}
 
Locomotive *-	int getDeadWeight()
}
class CargoCar{
	CargoCar(int,int)
	int getCargoWeight()
	void setCargoWeight(int)
}
class PassengerCar{
	PassengerCar(int,int)
	int getPassengerCount()
	void setPassengerCount(int)
}

TrainCar <|--CargoCar
TrainCar <|--PassengerCar 
Train *-right-> "*" TrainCar: trainCars

 

JExercise-testkode for oppgavene Testkode for oppgaven finner du her: inheritance/TrainTest.java. Originalkoden (jextest) for testen finner du her: inheritance/TrainTest.jextest.Train.jextest.

Exercise-panelet

Bruk av Exercise-panelet er obligatorisk for denne øvingen. Du må ha panelet åpent med Train.ex-filen (tests > inheritance Train.ex) i før du begynner med oppgaven. For mer informasjon/hjelp, se nederst på forrige side, altså hovedsiden for Øving 9.

 

Include Page
Bunntekst for JExercise- oppgaver
Bunntekst for JExercise- oppgaver
 

SidetypeDekningsgradOmfangFerdig
oppgave502595