erstellt: 30.09.99; überarbeitet: 07.03.00; übersetzt: 15.06.03; © Copyright 2003 Deutsche Übersetzung Heinrich Gailer
In dieser Aufgabe werden Sie das Entwerfen von Objekten aus anderen Objekten üben. Zuerst werden Sie die Jam-Klasse (Marmeladen-Klasse) definieren. Objekte dieser Klasse repräsentieren Gläser (jars) von eingemachten Früchten. Dann werden einige dieser Gläser in eine Vorratskammer (Pantry) gestellt.
1. Entwurf der Jam-Klasse. Objekte dieser Klasse werden ein Glas von eingemachten Früchten repräsentieren, so wie sie Ihre Großmutter in jedem Herbst gemacht hat. Überlegen Sie sich drei Werte, die Sie über ein Marmeladenglas wissen möchten.
Denken Sie jetzt an ein paar Methoden, die auf ein Jam-Objekt angewendet werden können. Es ist fast immer eine gute Idee eine Möglichkeit zu haben die Daten eines Objekts auszugeben:
Dies ist ein etwas dummes Beispiel und es wäre nicht ungewöhnlich, wenn Sie an etwas anderes gedacht haben um die Lücken auszufüllen.
2. Klasse dokumentieren. Füllen Sie jetzt die Lücken für die Klassendefinition aus:
3. Das Design überprüfen. Um das Design zu überprüfen, schreiben Sie ein kleines Programm, das die Klasse verwendet, Natürlich kann das Programm nicht kompiliert werden bis die Klasse geschrieben ist, aber Sie können ein Gefühl dafür bekommen, indem Sie das tun, ob das Klassendesign vernünftig ist.
Sie könnten einige Zweifel haben, dass dies ein vernünftiges Programm ist.
Vielleicht wäre es eine gute Idee die spread() Methode jedes Mal eine Mitteilung aus geben zu lassen, wenn sie verwendet wird.
4. Füllen Sie die Instanzvariablen aus. Füllen Sie den Datentyp für jede Instanzvariable aus.
5. Vervollständigen Sie den Konstruktor. Der Konstruktor wird die Instanzvariablen des zu konstruierenden Objekts initialisieren.
6. Vervollständigen Sie die Methoden. Wenn der Anwender mehr Marmelade als verfügbar ist auftragen möchte, tragen Sie nur die Menge auf, die im Glas übrig ist.
7. Design der Pantry-Klasse (Vorratskammer). Sagen wir, dass eine Vorratskammer aus drei Marmeladengläsern beliebigen Typs und beliebiger Größe besteht.
Um ein Glas Marmelade zu verwenden, muss man erst zur Vorratskammer gehen und eines auswählen.
8. Instanzvariablen und Konstruktor. Entscheiden Sie über die Instanzvariablen. Es wird eine Variable geben, die auf das gegenwärtig ausgewählte Marmeladenglas verweist. Wenn kein Glas ausgewählt ist, sollte sie auf kein Objekt verweisen. Außenstehende sollten nicht in der Lage sein die Variablen direkt zu ändern.
9. Implementieren Sie die print() Methode. Die print() Methode wird jedes der Gläser in der Vorratskammer ausgeben.
10. Implementieren Sie die select() und spread() Methoden.
Vollständiges Programm mit einer Test-Klasse: Sie möchten vielleicht dieses Programm nach NotePad kopieren, es als Datei speichern und damit spielen.
class Jam
{
// Instanzvariablen
String contents ; // Art der Frucht im Glas
String date ; // Datum des Abfüllens
int capacity ; // Menge der Marmelade im Glas
// Konstruktoren
Jam( String contents, String date, int size )
{
this . contents = contents ;
this . date = date ;
capacity = size;
}
// Methoden
public boolean empty ()
{
return ( capacity== 0 ) ;
}
public void print ()
{
System.out.println ( contents + " " + date + " " + capacity + " fl. oz." ) ;
}
public void spread ( int fluidOz)
{
if ( !empty() )
{
if ( fluidOz <= capacity )
{
System.out.println("Auftragen von " + fluidOz + " fluessigen Unzen von "
+ contents );
capacity = capacity - fluidOz ;
}
else
{
System.out.println("Auftragen von " + capacity + " fluessigen Unzen von "
+ contents );
capacity = 0 ;
}
}
else
System.out.println("Keine Marmelade im Glas!");
}
}
class Pantry
{
// Instanzvariablen
private Jam jar1 ;
private Jam jar2 ;
private Jam jar3 ;
private Jam selected ;
// Konstruktoren
Pantry( Jam jar1, Jam jar2, Jam jar3 )
{
this . jar1 = jar1 ;
this . jar2 = jar2 ;
this . jar3 = jar3 ;
selected = null ;
}
// Methoden
public void print()
{
System.out.print("1: "); jar1 . print() ;
System.out.print("2: "); jar2 . print() ;
System.out.print("3: "); jar3 . print() ;
}
// wir setzen voraus, dass der Anwender eine richtige Auswahl trifft, 1, 2, oder 3
public void select( int jarNumber )
{
if ( jarNumber == 1 )
selected = jar1 ;
else if ( jarNumber == 2 )
selected = jar2 ;
else
selected = jar3 ;
}
// Auftragen der ausgewählten Marmelade
public void spread( int oz )
{
selected . spread( oz ) ;
}
}
class PantryTester
{
public static void main ( String[] args )
{
Jam goose = new Jam( "Gooseberry", "7/4/86", 12 );
Jam apple = new Jam( "Crab Apple", "9/30/99", 8 );
Jam rhub = new Jam( "Rhubarb", "10/31/99", 3 );
Pantry hubbard = new Pantry( goose, apple, rhub );
hubbard.print();
hubbard.select(1);
hubbard.spread(2);
hubbard.print();
hubbard.select(3);
hubbard.spread(4);
hubbard.print();
}
}
Wenn Sie das Programm starten, werden Sie mit der Ausgabe belohnt:
1: Gooseberry 7/4/86 12 fl. oz. 2: Crab Apple 9/30/99 8 fl. oz. 3: Rhubarb 10/31/99 3 fl. oz. Auftragen von 2 fluessigen Unzen von Gooseberry 1: Gooseberry 7/4/86 10 fl. oz. 2: Crab Apple 9/30/99 8 fl. oz. 3: Rhubarb 10/31/99 3 fl. oz. Auftragen von 3 fluessigen Unzen von Rhubarb 1: Gooseberry 7/4/86 10 fl. oz. 2: Crab Apple 9/30/99 8 fl. oz. 3: Rhubarb 10/31/99 0 fl. oz.
Ende der Übung. Wenn Sie sie wiederholen möchten, klicken Sie in Ihrem Browser auf "Aktualisieren". Zurück zur Übersicht.