Bitte um Überprüfung :-)

Neue Frage »

Auf diesen Beitrag antworten »
Java_Beginner Bitte um Überprüfung :-)

Meine Frage:
Hallo, ich würde euch mal bitten meinen Code zu überprüfen, vielen Dank.

Meine Ideen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
/*Für ein CAD-Programm sollen verschiedene Figuren programmiert werden 
(Kreise, Rechtecke, Quadrate usw.). Alle Figuren haben eine Farbe 
(bei uns nur ein String) und entsprechend eine setFarbe() und getFarbe()-Methode. 
Darüber hinaus kann von allen Figuren der Umfang und die Fläche berechnet werden.
(getUmfang() und getFlaeche()). Die für die spezielle Figurenform nötigen Parameter 
(z.B. Radius oder Kantenlänge) können pro Figurenform ebenfalls mittels geeigne-ter 
set- und get-Funkionen gesetzt und gelesen werden. Mangels eines geeigneten 
Zeichenpro-gramms gibt die print()-Funktion alle Merkmale einer Figur aus 
(z.B. Typ, Farbe, Parameter, Um-fang, Fläche). Programmieren Sie eine
abstrakte Klasse Figur, in die Sie so viel, wie möglich ge-meinsame 
Funktionalität aller Figuren packen. Die spezifische Information spezieller
Figuren wird in davon abgeleiteten Klassen implementiert. Programmieren Sie 
die Klasse Kreis, Rechteck und Quadrat. Achten Sie auf guten Zugriffsschutz,
d.h. alle Elemente müssen private sein, Zugriff er-folgt ausschließlich über
Methoden. Konstruktoren sind vorhanden.
b) Realisieren Sie in Ihrer main()-Funktion Polymorphismus, indem Sie ein 
Array mit verschiedenen Figuren anlegen und dann in einer Laufschleife Ihre 
Figuren mittels print() ausgeben.*/

package klausurtest_for_schleife;

public class Klausurtest_for_Schleife 
{
    public static void main(String[] args) 
    {
        Figur [] array = new Figur [3];
        array[0] = new Kreis ("Rot",6.2F,"violett");
        array[1] = new Rechteck ("Blau", 3.2F,9.1F);
        array[2] = new Quadrat ("Grün",8.3F); 
               
        for (int i=0; i<array.length;i++)
        {
            System.out.println(array[i].toString());
        }
    }
}

abstract class Figur
{
    private String farbe; 
    
    abstract public double getUmfang ();
    abstract public double getFlaeche ();
        
    public Figur (String farbe)
    {
        this.farbe = farbe; 
    }
    
    public void setFarbe(String farbe)
    {
        this.farbe = farbe;
    }
    
    public String getFarbe ()
    {
        return farbe; 
    }
}


class Kreis extends Figur
{
    private float radios;
    private String typ;
    private String kreisFarbe; 
    
    public Kreis (String farbe, float radius, String kreisFarbe)
    {
       super (farbe);
       radios = radius;  
       this.kreisFarbe = kreisFarbe; 
    }

    public void setRadius (float radius)
    {
        radios = radius; 
    }
    
    public String getRadius()
    {
        return " " + radios; 
    }
    
    public double getUmfang() 
    {
        return (2*radios*Math.PI); 
    }

    public double getFlaeche()
    {
        return (radios*radios*Math.PI);
    }

    public String toString ()
    {
        return "Umfang: \t" + String.valueOf(getUmfang()) + "\t Flaeche: \t" + String.valueOf(getFlaeche());
    }
}
    
class Rechteck extends Figur
{
    private float laenge; 
    private float breite; 
    
    
    public Rechteck (String farbe, float laenge, float breite)
    {
       super (farbe);
       this.laenge = laenge; 
       this.breite = breite;  
    }
    
    public void setLaengeundBreite (float laenge, float breite)
    {
       this.laenge = laenge;
       this.breite = breite; 
    }
    
    public String getLaengeundBreite()
    {
        return String.valueOf(laenge + " " + breite); 
    }
    
    public double getUmfang() 
    {
        return (2*laenge + 2*breite); 
    }

    public double getFlaeche()
    {
        return (laenge*breite);
    }

    public String toString ()
    {
        return "Umfang: \t" + String.valueOf(getUmfang()) + "\t Flaeche: \t" + String.valueOf(getFlaeche());
    }
}


class Quadrat extends Figur
{
    private float laenge; 
    
    public Quadrat (String farbe, float laenge)
    {
        super (farbe);
        this.laenge = laenge; 
    }
    
    public void setLaenge (float laenge)
    {
        this.laenge = laenge; 
    }
    
    public String getLaenge()
    {
        return " " + laenge;  
    }
    
    public double getUmfang ()
    {
        return 4*laenge; 
    }
    
    public double getFlaeche ()
    {
        return laenge*laenge; 
    }
    
    public String toString ()
    {
        return "Umfang: \t" + String.valueOf(getUmfang()) + "\t Flaeche: \t" + String.valueOf(getFlaeche());
    }
}
 
Auf diesen Beitrag antworten »
eulerscheZahl

Sieht insgesamt ok aus.
So, wie du toString() geschrieben hast, kannst du es auch gleich in Figur. Du solltest noch formspezifische Dinge wie den Kreisradius ausgeben. Warum hast du den eigentlich radios genannt?
Und fürs Rechteck würde ich getrennte getter/setter für breite und hoehe schreiben. Und ein Rückgabetyp String würde mich ziemlich aufregen, müsste ich damit arbeiten.
Auf diesen Beitrag antworten »
Java_Beginner

Vielen Dank für die Rückmeldung. Das mit dem String als Rückgabewert ändere ich noch ab :-)

radios habe ich gewählt, weil ich sonst im Konstruktor Kreis mit this.radius = radius; und in der setRadius()-Methode auch mit this.radius = radius hätte arbeiten müssen und die this-Funktion greift doch nur auf das darüberliegende Attribut?
Auf diesen Beitrag antworten »
eulerscheZahl

Mit this kommst du auf die Attribute der aktuellen Klasse. Für darüberliegendes gibt es super.
 
Auf diesen Beitrag antworten »
Java_Beginner

Vielen Dank.

Weil wir gerade beim Thema "super" sind. Warum muss ich bei einer vererbten Klasse im Konstruktor super() nur die Variablennamen schreiben, jedoch nicht mehr die Deklaration durchführen?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
public Kreis (String farbe, float radius, String kreisFarbe)
    {
       super (farbe);    //Diese Codezeile meine ich :-)
       radios = radius;  
       this.kreisFarbe = kreisFarbe; 
    }

Auf diesen Beitrag antworten »
eulerscheZahl

Da kann ich nicht viel mehr sagen als "ist halt so, schau in die Sprachspezifikation".
Auf diesen Beitrag antworten »
Java_Beginner

Dankeschön Wink
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »