Implementieren Sie eine Klasse Box, ähnlich wie in der vorherigen Testaufgabe.
Aber die neue Implementierung von Box wird eine bessere Kapselung
haben.
ist die Dokumentation für Box:
class BoxEine Klasse, die einen Karton implementiert.
Konstruktoren
Box ( double breite, double hoehe, double laenge )
Box ( double seite )
Methoden
double volumen()
double flaeche()
Verwenden Sie als Ausgangsbasis die vorherige Programmieraufgabe, die für diese und die nächsten zwei Übungen leicht modifiziert werden kann.
Deklarieren Sie in der jetzigen Implementierung von Box alle
Instanzvariablen als private.
Das bedeutet, dass nur die Methoden eines Box-Objekts dessen Objektdaten sehen kann.
Das Objekt wird unveränderbar sein, wenn es keine Zugriffsmethoden gibt, die die Daten ändern.
Ein unveränderbares Objekt ist ein Objekt, dessen Daten sich nicht ändern.
Sie erinnern sich vielleicht, dass Stringobjekte unveränderbar sind --- sobald die Zeichen des Strings mit dem Konstruktor gesetzt worden sind, werden sie sich niemals ändern (obwohl sie für die Erzeugung anderer Stringobjekte verwendet werden können.)
Es gibt viele Vorteile in der Verwendung unveränderbarer Objekte, besonders in der Programmierung mit Threads (mit Threads werden fast alle umfangreichen Programme geschrieben).
Geben Sie auf die Methoden von Box öffentlichen (public) Zugriff.
Testen Sie Ihre Box-Klasse mit verschiedenen Versionen dieses Programms:
class BoxTester
{
public static void main ( String[] args )
{
Box box = new Box( 2.5, 5.0, 6.0 ) ;
System.out.println( "Flaeche: " + box.flaeche() + " Volumen: " + box. volumen() );
System.out.println( "Laenge: " + box.laenge + " Hoehe: " + box. hoehe +
"Breite: " + box.breite ) ;
}
}
(Das obenstehende Programm wird, so wie wir es wollten, nicht kompilieren. Überlegen Sie warum es nicht kompiliert und bessern Sie es aus, so dass es sich kompilieren lässt.) Zurück zur Übersicht.
Box
Die Implementierung von flaeche() , wie sie in der vorherigen Testaufgabe gegeben wurde, ist wahrscheinlich vernünftig für die Box-Klasse.
Aber um private Methoden zu üben, schreiben Sie wie folgt:
double flaeche()
{
return 2 * flaecheVorn() + 2 * flaecheOben() + 2 * flaecheSeitlich() ;
}
Dabei sind
flaecheVorn(),
flaecheOben() und
flaecheSeitlich()
private Methoden, um die Fläche der vorderen, der oberen und der seitlichen Seite der Box zu berechnen.
Sie müssen sie Ihrer Klasse hinzufügen.
Private Methoden sind oft "Hilfsmethoden", die von den öffentlichen Methoden
verwendet werden, aber nicht von außerhalb der Klasse verwendet werden können.
Testen Sie Ihr Programm mit verschiedenen Versionen des folgenden:
class BoxTester
{
public static void main ( String[] args )
{
Box box = new Box( 2.5, 5.0, 6.0 ) ;
System.out.println( "Flaeche: " + box.flaeche() + " volumen: " + box. volumen() );
System.out.println( "Flaeche oben: " + box.flaecheOben() );
}
}
(Das oben stehende Programm wird, wie erwartet, nicht kompilieren.) Zurück zur Übersicht.
Fügen Sie der Box-Klasse einen neuen Konstruktor hinzu:
Der Konstruktor erzeugt ein neuesBox( Box oldBox )
Box-Objekt mit genau den gleichen Dimensionen des alten Box-Objekts.
Natürlich wird das alte Objekt nicht verändert.
Fügen Sie jetzt einige Zugriffsmethoden hinzu.
Eine Zugriffsmethode ist eine Methode, die verwendet werden kann, um auf private Variablen (und andere Variablen) eines Objekts zuzugreifen:
Jede dieser Methoden gibt bloß den Wert einer Instanzvariablen zurück. Da das Objekt unveränderbar ist, gibt es keine Zugriffsmethode, um die Instanzvariablen zu ändern. Testen Sie Ihr Programm mit der geänderten Testklasse der vorherigen Aufgabe.public double getLaenge() public double getHoehe() public double getBreite()
Es wäre schön eine Box zu erzeugen, die größer ist als eine gegebene Box. Schreiben Sie diese Methode:
Das ist eine öffentliche Methode, die eine Referenz auf eine neuepublic Box biggerBox( Box oldBox )
Box zurückgibt.
Die neue Box wird in jeder Dimension 25% größer sein als die alte Box.
Die Methode wird einen Konstruktor verwenden müssen, um die neue Box zu erzeugen:
public Box biggerBox( Box oldBox )
{
return new Box( 1.25*oldBox.getWidth(), ...... )
}
Schreiben Sie jetzt eine Methode, die eine Box zurückgibt, die in jeder Dimension 25% kleiner ist als eine gegebene Box. Wie üblich, schreiben Sie ein Testprogramm um Ihre Klasse zu testen.
Zurück zur Übersicht.
Schreiben Sie eine Methode, die true oder false ergibt,
je nach dem, ob eine Box vollständig in eine andere Box passt:
Dies ist möglicherweise eine schwierige Methode, da die innere Box hineinpassen oder nicht hineinpassen kann, je nach dem wie sie gedreht wird. Um die Methode zu vereinfachen, schreiben Sie sie so, dass siepublic boolean nests( Box outseiteBox, Box inseiteBox )
true zurückgibt, wenn zwei Boxen ohne Rotation ineinander geschachtelt
werden können (Höhe wird mit Höhe verglichen, Länge mit Länge usw.).
Zurück zur Übersicht.
Wenn das ein Auftrag für eine regelgerechte Klasse wäre, würden Sie aufgefordert werden das folgende abzuliefern:
Die Zusammenstellung des abzuliefernden Materials ist häufig ein substantieller Teil der Arbeit. Dies ist gute Praxis für die "reale Welt".
Ende der Aufgaben. Zurück zur Übersicht.