Probe-Klausur OOP Aufgabe 1) Bei diesem

Werbung
Probe-Klausur OOP
Aufgabe 1)
Bei diesem Entwurf wird in der Klasse Grafikelement gezeichnet. Bei Moebel wird das
Zeichnen an Grafikelement delegieren. Die Elemente werden aus zusammengesetzten
Formen (Kreis und Rechteck) gezeichnet.
Bei der gewohnten Modellierung wurden die Elemente durch gibAktuelleFigur() sofort
gezeichnet.
Nicht Grafikelement zeichnet direkt, sondern delegiert das an die Klasse Canvas. Aber es
werden die Formen von Grafikelelemnt gezeichnet – aus denen setzen sich dann auch die
Möbel zusammen.
Aufgabe 2)
Die Klasse RaumNeu wurde bereits auf den Zetteln, die uns gegeben wurden, implementiert.
Da habe ich euch aus versehen die Lösung schon gegeben – sorry.
Stuhl ist eine Unterklasse von Moebel. Es ruft den Befehl zeichne () auf. Dabei wird auf die
Oberklasse Moebel zugegriffen. Bei Moebel geht es weiter zu dem Befehl zeichne(), wo es
aber zur Klasse Grafikelement und zur Methode macheSichtbar() geht. Von macheSichtbar()
von zeichne(). Dieses delegiert er zu Canvas. Dort ruft er die Methode draw auf. Dort wird
das Element anschließend gezeichnet.
ODER:
Stuhl greift auf die Klasse Rechteck zu und auf den Befehl aendereGroesse();.
Dann auf aendereGroesse, wo die Methode zeichne(); steht. Da es eine Unterklasse von
GrafikElement ist, geht er zu der Klasse hoch. Dort zu zeichne(); dabei auch
holeSichtbarkeit(). Geht zur Klasse Canvas. In Canvas draw() indem er vom Shape in
Rechteck holeForm() aufruft.
So wird das auf die Leinwand gemalt.
Aufgabe 3)
Public class Tisch extends Moebel {
Public Tisch (String farbe, double breite, double laenge) {
Super ( new Kreis ());
This.aenderFarbe (farbe);
This.aendereGroesse (breite, laenge);
}
}
Public class Stuhl extends Moebel {
Public Stuhl (String farbe,double breite, double tiefe) {
Super (new Rechteck ());
This.aendereGroesse (tiefe,breite)
This.aendereFarbe (farbe);
}}
Gut!
Aufgabe 4)
Da GleichseitigesDreieck später von anderen Elementen als Form genutzt werden soll, muss
sie eine Unterklasse von GrafikElement sein.
public class GleichseitigesDreieck extends GrafikElement {
private double breite;
Private double hoehe;
public GleichseitigesDreieck (){
double breite = 80;
double hoehe = 50;
}
public double holeXGroesse(){
Return breite;
}
public double holeYGroesse(){
return hoehe;
}
public double berechneQm(){
return breite*hoehe;
}
public void aendereGroesse(double breite, double hoehe){
loesche();
this.breite = breite;
this.hoehe = hoehe;
zeichne();
}
public Shape holeForm(){
GenerealPath dreieck = new GeneralPath(),
hier fehlt die konkrete Form mit moveTo und lineTo….
return dreieck;
}
}
Aufgabe 5)
public void verschiebe(double xAbstand, double yAbstand){
grafikElem.bewegeHorizontal(xAbstand);
grafikElem.bewegeVertikal(yAbstand);
}
In ZusammengesetztesMoebel geht das so nicht, da über die ArrayList jedes einzelne
Element verschoben werden muss – dort tibt es auch kein grafikElem…grafikElemente ist
eine ArrayList!!! Das solltet ihr unbedingt überarbeiten und verstehen!
Aufgabe 6)
Kreis
Public double kosten () {
Double m;
M= (berechneQm*5.0); unklar!!!
Return m;
}
]
Rechteck
Public double kosten (){
Double m;
M= (berechneQm ()* 5.0);
Return m;
}
}
Beobachter ????? wo soll der sein???
Private ArrayList <Moebel> m = new ArrayList <Moebel>;
Public void hinzufuegen (Moebel z) {
m.add (z);
}
Public double berechneKosten ()
{
Double preis;
For (Moebel aktmoebel:m)
{
Preis= preis + this.kosten (); falsch, bei jedem Durchlauf ist in m das aktuelle Element, auf
das kosten() angewendet werden soll – erweiterte for-Schleife nochmal klären.
}
Return preis;
}
Da fehlt noch etwas – wie werden die kosten bei Zusammengesetzte Möbel berechnet – wo
werden die Gesamtkosten berechnet? Wo soll das mit dem hinzufügen von Moebeln
eingefügt werden? Wo kommt berechneQm her – eas soll das mit *5?????
Herunterladen