forked from IF-LK-2020/oop1
Projektdateien zur Wiederholung OOP
This commit is contained in:
parent
c245d1d32d
commit
485e9d5624
|
@ -0,0 +1,112 @@
|
|||
|
||||
/**
|
||||
* Klasse für einen Besitzer
|
||||
*
|
||||
* Ein Besitzer hat immer einen Namen und genau einen Motorroller.
|
||||
* Er kann Geld bekommen und weiß, ob er einen Führerschein hat.
|
||||
*
|
||||
* @author J. Neugebauer
|
||||
* @version 1.1
|
||||
*/
|
||||
public class Besitzer {
|
||||
|
||||
// Objektvariablen deklarieren
|
||||
private String name;
|
||||
|
||||
private double geld;
|
||||
|
||||
private boolean fuehrerschein;
|
||||
|
||||
private Motorroller meinRoller;
|
||||
|
||||
/**
|
||||
* Konstruktor für Objekte der Klasse Besitzer
|
||||
*/
|
||||
public Besitzer(String pName, double pGeld, boolean pFuehrerschein, Motorroller pMeinRoller) {
|
||||
// Objektvariablen initialisieren
|
||||
name = pName;
|
||||
geld = pGeld;
|
||||
fuehrerschein = pFuehrerschein;
|
||||
meinRoller = pMeinRoller;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public double getGeld() {
|
||||
return geld;
|
||||
}
|
||||
|
||||
public boolean hatFuehrerschein() {
|
||||
return fuehrerschein;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt die Referenz auf das Objekt vom Typ "Motorroller" zurück.
|
||||
*/
|
||||
public Motorroller getMeinenRoller() {
|
||||
return meinRoller;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ändert die Motorroller-Referenz auf ein neues Objekt vom Typ
|
||||
* "Motorroller".
|
||||
*/
|
||||
public void setMeinenRoller( Motorroller pNeuerRoller ) {
|
||||
meinRoller = pNeuerRoller;
|
||||
}
|
||||
|
||||
public void taschengeldBekommen( double pBetrag ) {
|
||||
if( pBetrag > 0 ) {
|
||||
geld = geld + pBetrag;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tankt den zugeordneten Roller um die angegebene Menge (in Litern) auf.
|
||||
* Dabei wird zunächst geprüft wie viel Platz noch im Tank ist
|
||||
* und nur die Menge getankt, die auch noch in den Tank passt.
|
||||
* Für die getankte Menge müssen pro Liter 1.5 Euro gezahlt werden, die
|
||||
* vom vorhandenen Geld abgezogen werden.
|
||||
*/
|
||||
public void tankeRoller( double pMenge ) {
|
||||
meinRoller.tanke(pMenge);
|
||||
geld = geld - 1.5*pMenge;
|
||||
|
||||
// TODO:
|
||||
// - Teste die Methode mit verschiedenen Eingaben. Probier
|
||||
// auch Werte aus, die eigentlich nicht logisch sind (z.B.
|
||||
// negative Mengen).
|
||||
// - Diese Methode wurde nicht korrekt nach der
|
||||
// Spezifikation (im Kommentar oben) implementiert.
|
||||
// Welche Fehler können auftreten?
|
||||
// - Korrigiere so viele Fehler wie möglich.
|
||||
// - Bei dieser Methode ist auch die Spezifikation fehlerhaft.
|
||||
// Welche möglichen Objektzustände werden dort nicht
|
||||
// beachtet?
|
||||
// - Ergänze den Kommentar zu einer möglichst exakten Beschreibung.
|
||||
}
|
||||
|
||||
/**
|
||||
* Fährt den Roller um die angegeben Strecke (in km). Der Besitzer
|
||||
* prüft zunächst, ob genug Benzin im Tank ist für die Strecke, und fährt
|
||||
* nur dann los. Er prüft dies, indem er ungefähr den Verbrauch des Rollers
|
||||
* abschätzt.
|
||||
*/
|
||||
public void fahreRoller( int pStrecke ) {
|
||||
if( meinRoller.getTankinhalt() >= pStrecke ) {
|
||||
meinRoller.fahre(pStrecke);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO:
|
||||
// - Der Besitzer schätzt nur grob den Verbrauch seines Rollers ab.
|
||||
// Wie macht er das?
|
||||
// - Wie könnten die Klassn sinnvoll ergänzt werden, um eine genauere
|
||||
// Rechnung pro Roller zu ermöglichen?
|
||||
// - Implementiere eure Idee.
|
||||
}
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
|
||||
/**
|
||||
* Klasse für einen Motorroller
|
||||
*
|
||||
* Ein Motorroller wird von einem Besitzer "besessen" und ist
|
||||
* diesem per Referenz zugeordnet.
|
||||
*
|
||||
* @author J. Neugebauer
|
||||
* @version 1.0
|
||||
*/
|
||||
public class Motorroller
|
||||
{
|
||||
// Attribute deklarieren
|
||||
private int kilometerstand;
|
||||
|
||||
private double tankgroesse;
|
||||
|
||||
private double tankinhalt;
|
||||
|
||||
/**
|
||||
* Konstruktor für Objekte der Klasse Motorroller
|
||||
*/
|
||||
public Motorroller( int pKilometerstand, double pTankgroesse, double pTankinhalt )
|
||||
{
|
||||
// Attribute initialisieren
|
||||
kilometerstand = Math.max(0,pKilometerstand);
|
||||
tankgroesse = pTankgroesse;
|
||||
tankinhalt = pTankinhalt;
|
||||
|
||||
// TODO:
|
||||
// - Erstellt ein Objekt mit negativem Kilometerstand und Tankgroesse.
|
||||
// - Warum ist dieses Objekt nicht sinnvoll?
|
||||
// - Verhinder bei der Initialisierung der Attribute die Speicherung
|
||||
// unsinniger Werte.
|
||||
}
|
||||
|
||||
public int getKilometerstand()
|
||||
{
|
||||
return kilometerstand;
|
||||
}
|
||||
|
||||
public double getTankgroesse()
|
||||
{
|
||||
return tankgroesse;
|
||||
}
|
||||
|
||||
public double getTankinhalt()
|
||||
{
|
||||
return tankinhalt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tankt den Roller um die übergebene Menge (in Litern) auf. Dabei kann
|
||||
* der Tank nicht voller werden, als durch die Tankgroesse
|
||||
* festgelegt ist. Das zuviel getankte Benzin verfällt einfach.
|
||||
*/
|
||||
public void tanke( double pMenge )
|
||||
{
|
||||
tankinhalt += pMenge; // += rechnet "tankinhalt + pMenge" und weist das Ergebnis "tankinhalt" zu
|
||||
|
||||
// TODO:
|
||||
// - Diese Methode wurde nicht korrekt nach der
|
||||
// Spezifikation (im Kommentar oben) implementiert.
|
||||
// Was ist fehlerhaft?
|
||||
// - Korrigiere die fehlerhafte Implementierung.
|
||||
}
|
||||
|
||||
/**
|
||||
* Fährt den Roller eine angegebene Strecke (in km). Der Roller verbraucht
|
||||
* pro Kilometer 0.625 Liter Benzin. Ist im Tank nicht genug Benzin für die
|
||||
* volle Strecke, dann fährt der Roller nur so weit, wie er mit dem verbleibenden
|
||||
* Benzin kommt. Der Kilometerstand wird um die gefahrene Strecke hochgezählt.
|
||||
*/
|
||||
public void fahre( int pStrecke )
|
||||
{
|
||||
// TODO:
|
||||
// - Diese Methode muss noch nach den Spezifikationen
|
||||
// oben implementiert werden.
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Die Test-Klasse MotorrollerTest.
|
||||
*/
|
||||
public class MotorrollerTest
|
||||
{
|
||||
|
||||
@Test
|
||||
public void testeTanke() {
|
||||
Motorroller m = new Motorroller(1000, 25, 10);
|
||||
|
||||
assertEquals("Der Tank sollte 10 Liter enthalten", 10, m.getTankinhalt(), 0.0);
|
||||
m.tanke(10);
|
||||
assertEquals("Der Tank sollte 20 Liter enthalten", 20, m.getTankinhalt(), 0.0);
|
||||
m.tanke(10);
|
||||
assertEquals("Der Tank sollte 25 Liter enthalten", 25, m.getTankinhalt(), 0.0);
|
||||
|
||||
|
||||
m = new Motorroller(1000, 25, 10);
|
||||
assertEquals("Der Tank sollte 10 Liter enthalten", 10, m.getTankinhalt(), 0.0);
|
||||
m.tanke(-10);
|
||||
assertEquals("Der Tank sollte 0 Liter enthalten", 0, m.getTankinhalt(), 0.0);
|
||||
m.tanke(-10);
|
||||
assertEquals("Der Tank sollte 0 Liter enthalten", 0, m.getTankinhalt(), 0.0);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testeFahre() {
|
||||
float verbrauch = 0.625f;
|
||||
|
||||
Motorroller m = new Motorroller(1000, 25, 10);
|
||||
|
||||
assertEquals("Der Stand sollte 1000 km betragen", 1000, m.getKilometerstand());
|
||||
m.fahre(6);
|
||||
assertEquals("Der Stand sollte 1006 km betragen", 1006, m.getKilometerstand());
|
||||
m.tanke(1);
|
||||
assertEquals("Der Stand sollte 1006 km betragen", 1006, m.getKilometerstand());
|
||||
|
||||
|
||||
m = new Motorroller(1000, 25, 10);
|
||||
|
||||
assertEquals("Der Stand sollte 1000 km betragen", 1000, m.getKilometerstand());
|
||||
m.fahre(7);
|
||||
assertEquals("Der Stand sollte 1006 km betragen", 1006, m.getKilometerstand());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
|
||||
public class Todo
|
||||
{
|
||||
// TODO:
|
||||
// Schon mit allen anderen TODOs fertig?
|
||||
// - Überlege dir neue Erweiterungen für das Projekt und implementiere sie.
|
||||
// Hier sind einige Ideen:
|
||||
// - Ein Polizist, der beim Fahren (mit einer gewissen W'keit)
|
||||
// die Führerscheine der Fahrer prüft.
|
||||
// - Eine Tankstelle, an der getankt wird und die variierende
|
||||
// Benzinpreise hat.
|
||||
// - Eine Werkstatt, in der die Motorroller "getuned" werden können.
|
||||
// - Weitere Attribute wie Gewicht, Geschwindigkeit, etc, die
|
||||
// das Fahren und den Verbrauch beeinflussen.
|
||||
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
#BlueJ package file
|
||||
dependency1.from=Besitzer
|
||||
dependency1.to=Motorroller
|
||||
dependency1.type=UsesDependency
|
||||
dependency2.from=MotorrollerTest
|
||||
dependency2.to=Motorroller
|
||||
dependency2.type=UsesDependency
|
||||
editor.fx.0.height=777
|
||||
editor.fx.0.width=1244
|
||||
editor.fx.0.x=-124
|
||||
editor.fx.0.y=-895
|
||||
objectbench.height=101
|
||||
objectbench.width=1002
|
||||
package.divider.horizontal=0.6
|
||||
package.divider.vertical=0.8497913769123783
|
||||
package.editor.height=604
|
||||
package.editor.width=888
|
||||
package.editor.x=39
|
||||
package.editor.y=23
|
||||
package.frame.height=777
|
||||
package.frame.width=1026
|
||||
package.numDependencies=2
|
||||
package.numTargets=4
|
||||
package.showExtends=true
|
||||
package.showUses=true
|
||||
project.charset=UTF-8
|
||||
readme.height=58
|
||||
readme.name=@README
|
||||
readme.width=47
|
||||
readme.x=10
|
||||
readme.y=10
|
||||
target1.height=50
|
||||
target1.name=Todo
|
||||
target1.showInterface=false
|
||||
target1.type=ClassTarget
|
||||
target1.width=80
|
||||
target1.x=220
|
||||
target1.y=450
|
||||
target2.height=50
|
||||
target2.name=Besitzer
|
||||
target2.showInterface=false
|
||||
target2.type=ClassTarget
|
||||
target2.width=80
|
||||
target2.x=130
|
||||
target2.y=50
|
||||
target3.height=50
|
||||
target3.name=Motorroller
|
||||
target3.showInterface=false
|
||||
target3.type=ClassTarget
|
||||
target3.width=80
|
||||
target3.x=220
|
||||
target3.y=340
|
||||
target4.height=50
|
||||
target4.name=MotorrollerTest
|
||||
target4.showInterface=false
|
||||
target4.type=UnitTestTargetJunit4
|
||||
target4.width=110
|
||||
target4.x=569
|
||||
target4.y=170
|
Loading…
Reference in New Issue