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?????