Hausarbeit in Java

Status
Nicht offen für weitere Antworten.
J

Java-Gott

Gast
Hallo Jungs bzw Mädels
ich muss in Java eine Hausarbeit für Informatik machen.
Es geht darum, eine Zeichenfläche mit Verschiedenen Vierecken darauf erstellen.
Also eine Zeichenfläche wo ein Quadrat, ein Rechteck, ein Trapez usw drauf ist.
Das soll irgendwie "objektorientiert" sein, dh das Rechteck wär dann vom Quadrat abgeleitet usw.
Kann das jemand? Mir machen?
mfg und danke
 

mahe

Aktives Mitglied
Toller Nick-Name ???:L

Da es eine Hausarbeit sein soll, nehme ich an, ihr habt schon irgendwas gelernt. Dann ist es wahrscheinlich so, dass ihr das gelernte anwenden sollte. Deine Angabe ist aber viel zu allgemein um auf Deinen Soll-Wissensstand schließen zu können und Dir eine richtige Lösung erstellen zu können.

Also musst Du dich entweder selbst bemühen (und bei Bedarf nachfragen) oder mehr Informationen preisgeben und hoffen, dass es wirklich jemand für Dich macht.
 
J

Java-Gott

Gast
also ich hab schon was gemacht, ich woltle nicht so aussehen als ob jemand für mich arbeiten soll
hier ist meine bisherige Arbeit, ist aber leider nochgarnicht fertig, vermittelt aber hoffetnlich einen ansatz
Code:
class Quadrat {

int a;

int eins,zwei,drei,vier,fünf,sechs,sieben,acht;
Quadrat (int a){
  this.a = a;
}

void seteins () {
eins=0;
}
void setzwei () {
zwei=0;
}
void setdrei () {
drei=a;
}
void setvier () {
vier=0;
}
void setfünf () {
fünf=0;
}
void setsechs () {
sechs=a;
}
void setsieben () {
sieben=a;
}
void setacht () {
acht=a;
}

class Zeichnen extends Canvas {
Zeichnen () {};
public static void main (String[] args){
  Zeichnen Z=new Zeichnen;
  Quadrat Q = new Quadrat (5);
paint( Graphics g ){
g.drawLine(Q.eins, Q.zwei, Q.drei, Q.vier );
                      };
}
}
 

hdi

Top Contributor
Erstmal sollte man eine Variable niemals "a" nennen, weil das sagt nix aus.

Und wie definierst man mit möglichst wenigen Informationen ein Quadrat?
Auf jeden Fall nicht mit 8 Punkten. In diesem Zusammenhang ist dein Konstruktor
auch etwas seltsam.
Zwei Dinge brauchst du: Position und Kantenlänge

Und genau, OO heisst Quadrat erbt von Rechteck (nicht andersrum, ich hoffe mal das war
ein Flüchtigkeitsfehler ;)). Es ist eine Sonderform eines Rechteckes.
D.h. der Konstruktor von Quadrat muss den Konstruktor von Rechteck aufrufen, und zwar
mit bestimmten Werten, sodass dieses Rechteck eben ein Quadrat ist.

OO heisst weiterhin: Du zeichnest nicht jedes einzelne Quadrat mit einer neuen Anweisung.
Ein Rechteck hat eine paint-Methode, die es zeichnet. Wenn Quadrat davon erbt, hat sie diese
Methode automatisch.

in deiner main-Methode solltest du am Ende also nur ein paar Konstruktoren aufrufen, und dann
auf allen Objekten ein paint() machen. Damit das mit Vererbung klar ist, das sieht dann so aus:

Code:
List<Rechteck> rechtecke = new ArrayList<RechtEck>();
rechtecke.add  (new Rechteck(...));
rechtecke.add (new Quadrat(...)): // <- das geht, weil Quadrat = Unterklasse von Rechteck
// usw..

for (Rechteck rechteck : rechtecke){
       rechteck.paint() // wie auch immer du das malen realisieren möchtest
}

Generell musst du so an das Problem herangehen:
1) Was gibt es alles, also welche Objekte hast du? -> Rechteck, Quadrat, Trapez etc.
2) Finde die Gemeinsamkeiten von möglichst vielen dieser Objekte, und mach eine Klasse daraus
3) Die einzelnen Objekte erben dann von dieser Superklasse und implementieren dann nur kleinere
Änderungen, die das Objekt halt zu einem Spezialfall der Superklasse machen
4) Mach nichts doppelt, d.h. auch keine Methoden öfters implementieren als nötig (siehe 1))

Natürlich ist es nicht immer so, dass du ALLE Objekte zu EINER Superklasse zusammenfassen kannst.
zB wirst du Trapez und Kreis nicht sinnvoll unter einen Hut bringen können. Dann hast du halt Kreis
als eigene Klasse. Aber versuche, so wenig Klassen und Methoden wie möglich zu schreiben
 

0x7F800000

Top Contributor
@Java-Gott:
int eins,zwei,drei,vier,fünf,sechs,sieben,acht;
sag mal, bist du dir ganz sicher, dass du kein troll bist? ???:L

@hdi
Auf jeden Fall nicht mit 8 Punkten.
Naaja, das sind ja alles vierecke, und ein Trapez ist schon fast so unregelmäßig, dass es fast wie ein allgemeines Polygon aussieht, da wäre es wohl doch die richtige idee, die eckpunkte einzeln abzuspeichern, um das alles einheitlich zu behandeln, weil's ja alles spezielle Polygone sind.

Aber die Punkte sollte man sicherlich nicht so bescheuert in variablen "eins, zwei, drei" abspeichern :?
 
J

Java-Gott

Gast
Vielen Dank an hdi und an den deppen unter seinem post: hdf

also gut, da ich leider nicht wie meine name sagt ein java-gott bin^^, würd ich gern wissen wie man das genau macht mit dem abeiten von den klassen
also sagen wir wir haben in der funktion quadrat eine methode, die die vier eckpunkte ausrechnet, die das quadrat hat.
Wenn ich jetzt die Klasse Recheck von Quadrat ableite, wie kann ich dann diese Methode weiterbenutzen bzw so verändern, dass sie die werte für ein rechteck ausliefert?
Die Quadrat-Methode hätte doch nur eine Variable, die Kantenlänge (position is mir jetzt egal).
Wie kann ein Rechteck (mit 2 Kantenlängen) diese Methode mitbenutzen?
mfg
 

hdi

Top Contributor
Ein Rechteck ist kein Quadrat!!!

Ich dachte erst du hast dich verschrieben, aber jetz schon wieder..
Ein Quadrat ist ein Rechteck! So rum isses richtig!
Und wenn du es so rum implementierst, hast du auch nicht das Problem dass du
aus einem Attribut zwei machen musst. Hier, so ist das:

Code:
class Rechteck{

    private int x_kante, y_kante;
   
    public Rechteck(int x_kante, int y_kante){
            this.x_kante = x_kante;
            this.y_kante = y_kante;
    }
}

class Quadrat extends Rechteck{

    public Quadrat(int kante){
          // Ein Quadrat ist ein Rechteck, bei dem x_kante und y_kante gleich lang sind:
          super(kante,kante);
    }
}

Das ist objektorientiertes Programmieren, und das hatte ich ja beim letzten Post
auch gemeint: Quadrat ruft nur den Konstruktor der Vaterklasse mit bestimmten Werten
so auf, dass es ein spezielles Rechteck, nämlich eben ein Quadrat, ist.

Ist das soweit klar?

Die ganze Idee vom Objektorientierten Programmieren ist ja einfach, dass du weggehst
von "harter" Programmierung und hin zu leichter Verständlichen Dingen.
Eigentlich brauchst du ja so eine Klasse Quadrat nicht, du könntest genauso gut
ein Rechteck erstellen und im Konstruktor halt zwei gleiche Werte übergeben. Nichts anderes
tut ja die Klasse Quadrat in ihrem eigenen Konstruktor. Aber es ist leichter ein Quadrat zu finden,
wenn es dafür eine Klasse gibt, statt jede Erstellung eines Rechtecks darauf zu prüfen, welche
Werte du ihm übergibst und ob das jetzt zufällig ein Quadrat darstellen soll.
und an den deppen unter seinem post: hdf
:shock: :shock: :shock: Wenn das ein Mod sieht... Das geht eindeutig zu weit!
 

ARadauer

Top Contributor
Code:
class Quadrat { 

int a; 

int eins,zwei,drei,vier,fünf,sechs,sieben,acht; 
...
}
erklär mir das...
 
J

Java-Gott

Gast
Echt super vielen dank an hdi, jetzt ist mir das klarer mit dem ableiten. Also das unspezifischste Viereck steht quasi ganz oben, und von dem Abgeleitet ist dann das Trapez, von dem das Rechteck bis zum Quadrat.
Danke :)

ARadauer, ich habe die 4 Variablen, aus denen ein Quadrat besteht, in 8 einzelwerte aufgeteilt, (x+y), und die wollte ich der paintmethode übergeben. Wie das genau klappen sollte weiß ich nicht, sonst hätte ich mich nicht an das forum gewendet ;)

ich werde jetzt das so weitermachen nach hdi's vorschlag, und wenn ich probleme habe melde ich mich!
 

hdi

Top Contributor
Also du musst dich echt erstmal mehr mit der Aufgabe an sich befassen, bevor du anfängst
zu programmieren...

Seit wann ist denn ein Rechteck bitteschön ein Trapez?

Die Ableitungshierarchie sieht so aus:
Code:
Viereck -> Rechteck -> Quadrat
        -> Trapez
 

0x7F800000

Top Contributor
na gut, sagen wir mal so, ein rechteck ist kein echtes trapez aber immerhin ein trapez mit winkeln 90°, wenn du das gemeint hast.
 

hdi

Top Contributor
Thinking ... ???:L Done :idea: Auf die Gefahr hin, dass ich mich komplett peinlich mache, aber ich habe heute Abend
noch nichts getrunken und bin auch ausgeschlafen.. Also ich geh das Risiko ein: Was soll daran falsch sein?
 

0x7F800000

Top Contributor
hdi hat gesagt.:
Also ich geh das Risiko ein: Was soll daran falsch sein?
Bei einem rechteck sind jeweils zwei seiten parallel, insbesondere gibt es da zwei parallele seiten, insbesondere ist jedes rechteck ein trapez ;) , bzw Rechteck ist eine Spezialisierung der Trapez.
Also ist Polygon->Viereck->Trapez->Rechteck->Quadrat schon richtig ;)
 

Java-Gott

Mitglied
ja, ich habe gemeint das bei einem unspezifischen 4eck alle 4 seiten unterschiedlich lang sind, beim trapez sind 2 seiten gleichlang, also gibts 3 seitenlängen, beim rechteck 2 verschiedene seitenlängen

Code:
class Unspezifisch {


      private int x_kante, y_kante, z_kante, q_kante;

      public Unspezifisch(int x_kante, int y_kante, int z_kante, int q_kante){
        this.x_kante = x_kante;
        this.y_kante = y_kante;
        this.z_kante = z_kante;
        this.q_kante = q_kante;
      }
      

}



class Trapez extends Unspezifisch {


      private int x_kante, y_kante, z_kante;
      
      public Trapez(int x_kante, int y_kante, int z_kante){
        this.x_kante = x_kante;
        this.y_kante = y_kante;
        this.z_kante = z_kante;
                       super (int x_kante, int y_kante, int z_kante, int q_kante);
      }


}

class Rechteck extends Trapez{

    private int x_kante, y_kante;

    public Rechteck(int x_kante, int y_kante){
            this.x_kante = x_kante;
            this.y_kante = y_kante;
                         super(x_kante, y_kante, x_kante);
    }
}

class Quadrat extends Rechteck{

    public Quadrat(int x_kante){
          // Ein Quadrat ist ein Rechteck, bei dem x_kante und y_kante gleich lang sind:
                          super(x_kante,x_kante);
    }
}

wie kann ich jetzt diese Werte einer Paintfunktion übergeben?

wenn ich zB eine give-Funktion in unspezifisches Viereck schreibe, die jetzt koordinaten für die punkte des vierecks erstellt, wie kann ich die dann der paintfunkton "geben"?
also sowas wie

public void paint (Graphics g){
g.drawLine(myQuadrat(5 //Wobei hier die Kantenlänge 5 sein soll );
}
 

hdi

Top Contributor
Das war unfair, ein Rechteck sieht voll gar nich wie ein Trapez aus :(

@OT:

Deine Klasse Viereck hat ne Methode paint, und darin malt sie einfach nur 4 Linien zwischen
den Punkten. Welches Punktepaar du jeweils für eine Linie hernimmst, kannst du dir vorher abfragen,
indem du die 4 Punkte des Vierecks vergleichst (also ein paar if-Abfragen von den x-und y Werten der Punkte).
 

0x7F800000

Top Contributor
Code:
private int x_kante, y_kante, z_kante, q_kante;
Die bezeichner sind diesmal schon wesentlich angenehmer zu lesen :toll: aber dennoch muss man sagen, dass der erste ansatz mit den koordinaten der einzelnen Ecken mathematisch gesehen korrekt war (auch wenn gruselig zu lesen, da kannst du schimpfen wie du willst ;) )

Denn:
1) Nicht jedes Viereck mit 2 gleichlangen seiten ist ein Trapez, betrachte etwa (0,0) (1,0) (3,3) (0,1)
2) Nicht jede Trapez hat zwei gleichlange Seiten. Das gilt nur für gleichschenklige Trapezen, bei den sind die "Schenkeln" in der tat gleichlang. Aber bei der trapez (0,0) (10,0) (9,1) (8,1) sind keine zwei seiten gleichlang, obwohl die kanten (0,0)-(10,0) und (8,1)-(9,1) offenbar parallel sind.
 

tfa

Top Contributor
hdi hat gesagt.:
class Quadrat extends Rechteck

Das ist objektorientiertes Programmieren, und das hatte ich ja beim letzten Post
auch gemeint: Quadrat ruft nur den Konstruktor der Vaterklasse mit bestimmten Werten
so auf, dass es ein spezielles Rechteck, nämlich eben ein Quadrat, ist.
Vorsicht. Vom objektorientierten Standpunkt aus ist ein Quadrat kein Rechteck!
Ein Rechteck kann verschieden lange Seiten haben. Auf ein Quadrat trifft das nicht zu.
Ein beliebtes Beispiel, um das Liskovsche Substitutionsprinzip zu erläutern.

Eigentlich brauchst du ja so eine Klasse Quadrat nicht, du könntest genauso gut
ein Rechteck erstellen und im Konstruktor halt zwei gleiche Werte übergeben.
Das ist die beste Lösung des Problems.
 

Java-Gott

Mitglied
wenn die einzelnen klassen eine paintmethode haben sollen, muss ja jede klasse ein canvas sein.
(paint können doch nur klassen benutzen, die von canvas abgeleitet sind, oder?)
Ich will aber ein Canvas, wo alle diese Vierecke auf einmal draufgemalt sind.
Wenn aber jede klasse ein Canvas währe, würden sich dann nicht alle "übermalen"?
 

hdi

Top Contributor
Das war unfair, ein Rechteck sieht voll gar nich wie ein Trapez aus icon_sad.gif

aber natürlich, das sieht sogar aus zwei verschiedenen richtungen wie ein trapez aus icon_wink.gif

Wenigstens kann ich mir jetzt guten Gewissens einen schönen Sex on the beach machen. Meine
Konzentration kann darunter ja heute scheinbar nicht mehr viel leiden.

Eigentlich brauchst du ja so eine Klasse Quadrat nicht, du könntest genauso gut
ein Rechteck erstellen und im Konstruktor halt zwei gleiche Werte übergeben.

Das ist die beste Lösung des Problems.

Aber nicht objekt-orientiert gesehen. Ist schon gut, dass er das so macht. Wenn man das nicht so
macht ist es ganz einfach nur Faulheit, und sobald du mit den Objekten wirklich mehr machen willst,
würdest du es bereuen wenn du keine Quadrat-Klasse hast.

Vorsicht. Vom objektorientierten Standpunkt aus ist ein Quadrat kein Rechteck!
Wenn nicht vom objektorientierten Standpunkt, von welchem dann sonst...
Gerade im OO-Standpunkt ist es so! Ein Quadrat hat alle Eigenschaften (im Sinne von Attributen)
und das gleiche Verhalten (im Sinne von Methoden) wie jedes Rechteck.
 

0x7F800000

Top Contributor
tfa hat gesagt.:
Vorsicht. Vom objektorientierten Standpunkt aus ist ein Quadrat kein Rechteck!
Ein Rechteck kann verschieden lange Seiten haben. Auf ein Quadrat trifft das nicht zu.
Ein beliebtes Beispiel, um das Liskovsche Substitutionsprinzip zu erläutern.
Ich mache die Klassen immutabel, indem ich alle member-variablen privat deklariere, und nur getter, aber keine Setter zur verfügung stelle. Die einzige Möglichkeit, die breite des Quadrates zu beeinflussen ist der Konstruktor, der einmal aufgerufen wird, und mir garantiert einen Quadrat erstellt. So, wie sollte man jetzt laut Fr. Liskov [1] mein Quadrat in irgendeinen ungültigen nicht-quadratischen Zustand überführen? ???:L

Gib's doch zu, du wolltest einfach nur für's totale chaos hier sorgen, als du gesehen hast, auf was für einem Schwammigen Boden die ganze Geometrie hier steht :lol:

edit:
[1] Barbara Liskov (* 7. November 1939) , US-amerikanische Informatikerin, Professorin für Elektrotechnik und Informatik am MIT
(sorry, hab nicht gewusst, wen ich mir unter dem Namen vorzustellen hab, hab mich vom endbuchstaben des Namens verwirren lassen, und habe daher spontan auf irgendeinen russisch-polnischen Informatiker getippt, beides traf hier nicht zu :D , jaja, ich weiß, immer googln bevor man scheiße labert ;) )
 

hdi

Top Contributor
@OT

Moment mal, "paint" ist nur ein Name. Du machst einfach eine Methode:

Code:
public void eineMethodeDieMalt (Graphics g){
         // malen...
}

Und die will lediglich ein Graphics-Objekt. Das kannst du ihr zB von nem JPanel genauso gut
übergeben, die muss kein Canvas sein.
 

Java-Gott

Mitglied
Code:
class Rechteck extends Trapez{

    private int x_kante, y_kante;

    public Rechteck(int x_kante, int y_kante){
            this.x_kante = x_kante;
            this.y_kante = y_kante;
                         super(x_kante, y_kante, x_kante);
    }

    public void Rechteck_Paint (Graphics g){
         g.drawRect(10,10,x_kante,y_kante);
}

class Quadrat extends Rechteck{

    public Quadrat(int x_kante){
          // Ein Quadrat ist ein Rechteck, bei dem x_kante und y_kante gleich lang sind:
                          super(x_kante,x_kante);
    }
    public void Quadrat_Paint (Graphics g){
         g.drawRect(10,10,x_kante,x_kante);
}
}
 

0x7F800000

Top Contributor
nein. genau so nicht. indem du anfängst, die methoden unterschiedlich zu benennen, machst du dir die ganze Polymorphie kaputt. Alle diese methoden sollten gleich heißen, die methode "paint" sollte in der obersten klasse vorhanden sein, und um ganz sicher zu gehen, müsste noch ein "@Override" davorstehen. Was die Argumente und anwendung angeht, ist das richtig.

Code:
class Viereck{
   ...
   public void paint(Graphics g){
      ...
   }
}

class Rechteck extends Trapez{

    private int x_kante, y_kante;

    public Rechteck(int x_kante, int y_kante){
            this.x_kante = x_kante;
            this.y_kante = y_kante;
                         super(x_kante, y_kante, x_kante);
    }
   
    @Override
    public void paint (Graphics g){
         g.drawRect(10,10,x_kante,y_kante);
}

class Quadrat extends Rechteck{

    public Quadrat(int x_kante){
          // Ein Quadrat ist ein Rechteck, bei dem x_kante und y_kante gleich lang sind:
                          super(x_kante,x_kante);
    }

    @Override
    public void paint (Graphics g){
         g.drawRect(10,10,x_kante,x_kante);
    }
}

Dann kannst du die beim zeichnen alle gleich behandeln, nämlich:
Code:
Viereck[] vierecke={new Viereck(...), new Rechteck(3,2), new Quadrat(7)};
for(Viereck v:vierecke){
    v.paint(g);
}
...was ja grad das schöne an polymorphie ist.

Und übrigens: wenn du auf die Korrekte eckpunkt-speicherung umsteigst, dann musst du die methode nur einmal ganz oben in der Viereck-Klasse definieren, die sieht dann ja überall gleich aus.
 

hdi

Top Contributor
Code:
public Rechteck(int x_kante, int y_kante){
this.x_kante = x_kante;
this.y_kante = y_kante;
super(x_kante, y_kante, x_kante);
}

Das ist nicht kompilierbar. Der Super-Aufruf muss als erste Zeile im Konstruktor stehen,
und das Setzen der Variablen ist auch nicht nötig. Das tut ja die Vaterklasse! Du erbst ja auch
alle Attribute der Vaterklasse, also wenn du nur den Konstruktor aufrufst, dann werden
x_kante und y_kante auch in der Rechteck Klasse gesetzt!

Ich denke das hier wär für dich auch nicht verkehrt, lies es dir einmal durch:

http://www.java-forum.org/de/topic80410_vererbung-polymorphie.html

Ansonsten: Nur die absolute Oberklasse kriegt eine paint-Methode, nicht alle!
Die musst du halt wie ich schon sagte so implementieren, dass sie dir dein Viereck (egal jetzt
ob Trapez oder Rechteck oder Quadrat) gescheit malt.
 

tfa

Top Contributor
hdi hat gesagt.:
Eigentlich brauchst du ja so eine Klasse Quadrat nicht, du könntest genauso gut
ein Rechteck erstellen und im Konstruktor halt zwei gleiche Werte übergeben.

Das ist die beste Lösung des Problems.

Aber nicht objekt-orientiert gesehen. Ist schon gut, dass er das so macht. Wenn man das nicht so
macht ist es ganz einfach nur Faulheit, und sobald du mit den Objekten wirklich mehr machen willst,
würdest du es bereuen wenn du keine Quadrat-Klasse hast.
Dann mach ich eine, wenn es wirklich nötig ist. Aber ich werde sie nicht von Rechteck ableiten.

Vorsicht. Vom objektorientierten Standpunkt aus ist ein Quadrat kein Rechteck!
Wenn nicht vom objektorientierten Standpunkt, von welchem dann sonst...
Vom mathematisch-geometrischen.
Gerade im OO-Standpunkt ist es so! Ein Quadrat hat alle Eigenschaften (im Sinne von Attributen)
und das gleiche Verhalten (im Sinne von Methoden) wie jedes Rechteck.
Quadrat müsste Zusicherungen über die Attribute der Oberklasse machen. Und sowas stinkt.
Wie würdest du hiervon Quadrat ableiten?
Code:
public class Rechteck { 

	private int hoehe;
	private int breite;
	
	public Rechteck(int hoehe, int breite) {
		this.hoehe = hoehe;
		this.breite = breite;
	}

	public int getHoehe() {
		return hoehe;
	}

	public void setHoehe(int hoehe) {
		this.hoehe = hoehe;
	}

	public int getBreite() {
		return breite;
	}

	public void setBreite(int breite) {
		this.breite = breite;
	}
}

Andrey hat gesagt.:
Ich mache die Klassen immutabel, indem ich alle member-variablen privat deklariere, und nur getter, aber keine Setter zur verfügung stelle. Die einzige Möglichkeit, die breite des Quadrates zu beeinflussen ist der Konstruktor, der einmal aufgerufen wird, und mir garantiert einen Quadrat erstellt. So, wie sollte man jetzt laut Herr Linkov mein Quadrat in irgendeinen ungültigen nicht-quadratischen Zustand überführen?
Dann müsste selbst Frau Liskov passen. Klar. Aber wenn eh alles immutable ist, reicht bestimmt eine Rechteck-Klasse mit isQuadrat()-Methode.

Gib's doch zu, du wolltest einfach nur für's totale chaos hier sorgen, als du gesehen hast, auf was für einem Schwammigen Boden die ganze Geometrie hier steht
Du hast mich ertappt :wink:
 

0x7F800000

Top Contributor
@tfa: da müsste auch Oma von Frau Linkov passen, es sei denn die ist total blutrünstig und ballert wie bekloppt mit reflection um sich, und killt alle public-setter in allen Oberklassen... Dann kann man das Programm auch direkt wegwerfen^^ Haha, wenn man das alles bedenken würde, wo würden wir dann enden? :D Ne, komm. Dass die beispiele aus Hausaufgaben manchmal etwas realitätsfern sind ist ja nichts neues :roll:

@Java-Gott:
Zum Problem auf dem Bild: Du könntest das Problem umgehen, indem du im Konstruktor direkt 4 Punkte verlangst, dann prüfst, ob das eine Trapez ist, und wenn nicht, schmeisst du einfach eine IllegalArgumentException und verschiebst die ganze verantwortung auf den benutzer der Klasse. So ein test ist schon wesentlich einfacher, als Konstruktion.

Oder du könntest einige besonders einfach zu handhabende Konstruktionen mit Winkelangaben verwenden: etwa wenn man zwei eckpunkte einer kante, zwei Winkeln, und noch z.B. die Höhe angibt, könnte man daraus die 4 Punkte der Trapez konstruieren, speichern, und sie ganzen winkeln anschließend verwerfen, weil das Trapez ja schon vollständig durch Eckpunkte beschrieben wäre. Das wäre aber wieder mit einem vergleichsweise hohen Aufwand und unangenehmer Rechnerei verbunden, die in dem Fall nicht wirklich nötig ist, weil's ja um was anderes geht.
 

Java-Gott

Mitglied
also ich mach's gerade so:
unspezifisch
trapez (beides eigene klassen)
rechteck <--- quadrat (aus rechteck abgeleitet)
dh, dass ich für trapez und unspezifisch jeweils ne eigene paint methode schreibe, zb hier:
Code:
class Unspezifisch {


      private int x_1, y_1, x_2, y_2, x_3, y_3, x_4, y_4;

      public Unspezifisch(int x_1, int y_1, int x_2, int y_2, int x_3, int y_3, int x_4, int y_4){
        this.x_1 = x_1;
        this.y_1 = y_1;
        this.x_2 = x_2;
        this.y_2 = y_2;
        this.x_3 = x_3;
        this.y_3 = y_3;
        this.x_4 = x_4;
        this.y_4 = y_4;
      }
      public void Paint (Graphics g){
         g.drawLine(x_1, y_1, x_2, y_2,);
         g.drawLine(x_2, y_2, x_3, y_3,);                  // 4 Linien = 1 Viereck
         g.drawLine(x_3, y_3, x_4, y_4,);
         g.drawLine(x_4, y_4, x_1, y_1,);
}



}

so ok?
die paint für rechteck + quadrat kann ich ja dann einfach mit ner drawRect machen
alles ok soweit?

edit: ich habs mir anders überlegt ^^, es wär doch praktisch wenn man trapez von unspezifisch ableitet.
Jetzt muss man also auch für Trapez 4 Punkte eingeben. Wie kann ich das machen, das wenn die 4 Punkte kein trapez bilden sollten, eine Errormeldung kommt? Oder kann ich das Trapez nicht irgendwie doch mit Winkeln und ner Höhe machen? Die Bedienung soll ja auch einfach sein, nicht das man sich davor ausrechnen muss bei welchen koordinaten genau ein trapez rauskommen würde..
 

0x7F800000

Top Contributor
mach dir doch nicht soviel schreibarbeit, pack die koordinaten einfach in ein array.
Code:
double[][] vertices=new double[4][2]; //4 Punkte mit jweils zwei koordinaten
vertices[2][0]; //dritter punkt x koordinate
vertices[3][1]; //vierter punkt y koordinate usw.
da sparst du dir schreibarbeit mit diesen ganzen zuweisungen.

Paint ist eine methode, muss deswegen kleingeschrieben werden.

es wär doch praktisch wenn man trapez von unspezifisch ableitet.
Jetzt muss man also auch für Trapez 4 Punkte eingeben.
richtig. das gleiche gilt auch für alle anderen vierecke. Dann brauchst du keine weiteren paint-methoden mehr zu schreiben, alles wird gleich behandelt. drawRect kannst du dir dann sparen, weil es intern wohl auch nicht viel anderes macht, als vier striche zu zeichnen. Und außerdem dachte ich, dass du das alles auch gekippt zeichnen willst (sah auf der skizze so aus) das geht ja nur mit einzelnen linien, nicht mit drawRect.


Fehlermeldungen kannst du so schmeißen:
Code:
public Rechteck(...punkte...) throws IllegalArgumentException{
   if( ...rechteck nicht rechteckig... ){
      throw new IllegalArgumentException("die übergebenen Punkte ergeben kein rechteck");
   }else{
      //ansonsten alles normal
   }
}
 

Java-Gott

Mitglied
hey jungs, ich hab nurnoch einen Fehler!
^^
Code:
import javax.swing.*;
import java.awt.*;

class Unspezifisch extends Component{


      int x_1, y_1, x_2, y_2, x_3, y_3, x_4, y_4;

      public Unspezifisch(int x_1, int y_1, int x_2, int y_2, int x_3, int y_3, int x_4, int y_4){
        this.x_1 = x_1;
        this.y_1 = y_1;
        this.x_2 = x_2;
        this.y_2 = y_2;
        this.x_3 = x_3;
        this.y_3 = y_3;
        this.x_4 = x_4;
        this.y_4 = y_4;
      }
      public void paint (Graphics g){
         g.drawLine(x_1, y_1, x_2, y_2);
         g.drawLine(x_2, y_2, x_3, y_3);                  // 4 Linien = 1 Viereck
         g.drawLine(x_3, y_3, x_4, y_4);
         g.drawLine(x_4, y_4, x_1, y_1);
      }



  }



class Trapez extends Unspezifisch{


      
      public Trapez(int x,int y,int h,int v){
         super (v, 0, y, 0, 0, h, x, h);

      }


  }

class Rechteck extends Unspezifisch{

    public Rechteck(int x_kante, int y_kante){
    super (0, 0, x_kante, 0, 0, y_kante, x_kante, y_kante);
         x_1 = 0;
         y_1 = 0;
         x_2= x_kante;
         y_2 = 0;
         x_3 = 0;
         y_3 = y_kante;
         x_4 = x_kante;
         y_4 = y_kante;

    }
  }


class Quadrat extends Rechteck{

    public Quadrat(int x_kante){
      super(x_kante,x_kante);
    }
}

class Zeichenfläche extends Canvas {
     //Unspezifisch[] myVierecke;
     
    // public Zeichenfläche( ) {
    //   myVierecke = new Unspezifisch[100];
    // }
    
    
    public static void main (String args[]){
      Zeichenfläche myZeichenfläche = new Zeichenfläche();
       Quadrat myQuadrat = new Quadrat (12);
       Rechteck myRechteck = new Rechteck (5,20);
       Trapez myTrapez = new Trapez (11,4,21,13);
       Unspezifisch myUnspezifisch = new Unspezifisch (16,10,23,18,12,14,25,10);
       myZeichenfläche.add(myRechteck);
     JFrame myFenster = new JFrame ("myFenster");
     myFenster.setSize (305,299);
     myFenster.add(myZeichenfläche);
     myFenster.setVisible(true);

    }
  }

also, alles soweit ok (dank eurer hilfe xd)!!
nurnoch die Fehlermeldung
Compiliere H:\Dokumente und Einstellungen\Til\Desktop\Java\Java_Gott.java mit Java-Compiler
Java_Gott.java:82:23: add(java.awt.PopupMenu) in java.awt.Component cannot be applied to (Rechteck)
myZeichenfläche.add(myRechteck);
^
1 error
mfg
 

0x7F800000

Top Contributor
hmmm, ich dachte eigentlich du hättest es irgendwie anders geplant aber gut...
versuch mal statt von Canvas von einem Panel abzuleiten. Mit Canvas.add() kannst du nur irgendwelche menus hinzufügen, das ist für was ganz anderes.
 
D

Developer_X

Gast
Du bist doch der Java Gott, also warum brauchst du dann hilfe?
 

hdi

Top Contributor
Du bist doch der Java Gott, also warum brauchst du dann hilfe?

Und du bist doch der Rayman Expert Developer, der "ein Java3D Profi" ist und dann im Forum danach
fragt, wie man ein kreisrundes JFrame macht. Also wer im Glashaus sitzt... :roll:
 

Java-Gott

Mitglied
wer nich auf meine fragen antwortet sondern über meinen nic diskutiert sollte das bitte nicht hierhinschreiben, sondern dann per pn an mich richten (die ich dann aber nicht lesen werde...)

ich hab also nurnoch das eine Problem: Wie krieg ich das jetzt gezeichnet?
Der .add Befehl war doch eigentlich insofern nicht sinnvoll, da die 4Ecke ja garkein Canvas sind.
Ich habe die Fragliche Zeile (Z. 82) durch
Code:
 myUnspezifisch.paint()
ersetzt.
Aber jetzt kommt der Fehler:
Compiliere H:\Dokumente und Einstellungen\Til\Desktop\Java\Java_Gott.java mit Java-Compiler
Java_Gott.java:86:21: paint(java.awt.Graphics) in Unspezifisch cannot be applied to ()
myUnspezifisch.paint();
^
1 error

was soll ich da machen?
Bitte einfach zu verstehende Antworten, wir sind ja im Anfänger-Forum :oops:

Andrey, ich hab versucht von Panel abzuleiten, es kam der gleiche Fehler.
Und das mit Canvas.add hab ich nicht richtig verstanden, kannst du bitte den Code schicken so wie du's meinst bzw meinen Fehler da beheben?

MfG
 
J

javaZEUS

Gast
JAVA-GOTT ....... java-gott ..... j a v a g o t t .... muhahaha muha muhahahaha muha .... hihi hähä hohohohoho .... blubblubblub
 

hdi

Top Contributor
paint(java.awt.Graphics) in Unspezifisch cannot be applied to ()

Das heisst dass in deiner Klasse Unspezifisch eine Methode paint(Graphics g) definiert ist,
du nun aber versuchst, sie ohne den erwarteten Parameter (ein Graphics-Objekt) aufzurufen.
 

Java-Gott

Mitglied
hdi hat gesagt.:
paint(java.awt.Graphics) in Unspezifisch cannot be applied to ()

Das heisst dass in deiner Klasse Unspezifisch eine Methode paint(Graphics g) definiert ist,
du nun aber versuchst, sie ohne den erwarteten Parameter (ein Graphics-Objekt) aufzurufen.

mmh.
Code:
myUnspezifisch.paint(g);
führt zu:

Java_Gott.java:86:28: cannot find symbol
symbol : variable g
location: class Zeichenfläche
myUnspezifisch.paint(g);
^
1 error
obwohl ich doch hier:
Code:
public void paint (Graphics g){...}
das Graphics-Objekt g genannt habe...
 

hdi

Top Contributor
Puh.. also ich will mich nicht auch über deinen Nick lustig machen, aber dir fehlen
ganz fundamentale Kentnisse.

Es bringt jetzt hier überhaupt nichts, weiterzureden. Leg deine IDE erstmal weg,
vergiss was du grad programmieren willst.

Bitte Kapitel 1 bis mindestens einschliesslich 10 von diesem E-Book lesen!
Ausserdem kannst du mal in unsere FAQ reinschauen (Link dazu oben im Menü) und dir paar Dinge durchlesen.

Wenn du das alles getan hast, und dann noch Fragen hast, kannst du dich wieder melden.
Aber es macht wirklich keinen Sinn, dass du jetzt versuchst irgendwas zu programmieren wenn du
noch nicht mal einen soliden Boden unter deinen Füssen hast! Viel Spass beim Lesen!
 
G

Guest

Gast
also, ich habe da nicht allein dran gearbeitet, sondern mit einem Kumpel der sich sehr gut in Java auskennt. Doch gerade bei einem so komplexen Thema können einem leicht kleine Details aus den Augen geraten.
Ich dachte, dass solche Fragen hier gerne mit einem freundlichen Ton beantwortet werden. Das ist nur zT hier der Fall. Der meiste Teil der User
will nur rummeckern
protzt mit seinen Kellerkind-Kenntnissen
und außerdem: Wer sich in seiner Freizeit mit Java beschäftigt hat auch nen Knall... :autsch:
 

hdi

Top Contributor
Natürlich helfen wir hier gerne, das haben wir ja auch getan! Aber dann merke ich, dass
du mich Dinge fragst, bei denen ich weiss es bringt nix dir einfach die Lösung zu sagen,
weil du 2 Minuten später das nächste Problem haben wirst, und 2 Minuten darauf das nächste usw.

Programmieren ist nix Gott-gegebenes, da muss man Zeugs lesen um es zu verstehen.

und außerdem: Wer sich in seiner Freizeit mit Java beschäftigt hat auch nen Knall...
... dann hat jeder Software-Entwickler nen Knall. Und mit so einer Einstellung wirst du weder Java-Gott,
noch Java-Engel, höchstens so eine schäbige Aushilfe die nich mal mehr fliegen kann.
 
G

Guest

Gast
hdi hat gesagt.:
Natürlich helfen wir hier gerne, das haben wir ja auch getan! Aber dann merke ich, dass
du mich Dinge fragst, bei denen ich weiss es bringt nix dir einfach die Lösung zu sagen,
weil du 2 Minuten später das nächste Problem haben wirst, und 2 Minuten darauf das nächste usw.

Programmieren ist nix Gott-gegebenes, da muss man Zeugs lesen um es zu verstehen.

und außerdem: Wer sich in seiner Freizeit mit Java beschäftigt hat auch nen Knall...
... dann hat jeder Software-Entwickler nen Knall. Und mit so einer Einstellung wirst du weder Java-Gott,
noch Java-Engel, höchstens so eine schäbige Aushilfe die nich mal mehr fliegen kann.

ja, ich glaub auch das jeder software-entwickler nen knall hat
aber immerhin kriegt der geld für seine arbeit, im gegensatz zu euch deppen hier!
css = besser als wow,
ati > nvidia
usa > iran
 
G

Guest

Gast
saddam wird euch noch kriegen!!!!!
xd nen gast account kann man nichma sperren
:autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch:
 

Ark

Top Contributor
tfa hat gesagt.:
Wie würdest du hiervon Quadrat ableiten?
Du hast hoffentlich nichts dagegen, wenn ich die Eigenschaften nur protected mache?! Das würde zumindest den Schreibstil etwas verbessern (sonst müsste man mit den super-settern arbeiten):
Code:
public class Rechteck { 

	protected int hoehe;
	protected int breite;
	
	public Rechteck(int hoehe, int breite) {
		this.hoehe = hoehe;
		this.breite = breite;
	}

	public int getHoehe() {
		return hoehe;
	}

	public void setHoehe(int hoehe) {
		this.hoehe = hoehe;
	}

	public int getBreite() {
		return breite;
	}

	public void setBreite(int breite) {
		this.breite = breite;
	}
}
So würde dann Quadrat aussehen:
Code:
public class Quadrat extends Rechteck { 

	public Quadrat(int seitenlaenge) {
		this.hoehe = this.breite = seitenlaenge;
	}

	@Override
	public void setHoehe(int hoehe) {
		this.breite = this.hoehe = hoehe;
	}

	@Override
	public void setBreite(int breite) {
		this.hohe = this.breite = breite;
	}
@tfa: Noch Fragen? ^^

Ark
 

tfa

Top Contributor
@tfa: Noch Fragen? ^^

Gerne. Was liefert folgender Testfall für eins deiner Quadrat-Objekte?:

Code:
public void testRechteck(Rechteck r) {
    int flaeche = r.getBreite() * r.getHoehe();
    // Einheitsrechteck: Rechteck so stauchen, dass Breite = 1 bei gleichem Flächeninhalt
    r.setHoehe(flaeche);   
    r.setBreite(1);

   // Flächeninhalt hat sich nicht geändert (gilt für alle Rechtecke)
   assert flaeche == r.getBreite() * r.getHoehe();
}


testRechteck( new Rechteck(10,20));  // -> ok
testRechteck( new Quadrat(10)); // ??
 

hdi

Top Contributor
Naja die Diskussion kann ewig so weitergehen:

Code:
class Rechteck{

     public void stauchen(double flaeche){
          setBreite(1);
          setHoehe(flaeche);
     }
}

class Quadrat extends Rechteck{
  
     @Override 
     public void stauchen(double flaeche){}
}
Aber man kann das halt nicht pauschalisieren. Es macht sicher in vielen Fällen Sinn,
Quadrat von Rechteck abzuleiten, und in anderen Fällen macht es keinen Sinn.
Deswegen sollte man ja auch wissen, was man tun möchte, bevor man anfängt zu coden...
 

tfa

Top Contributor
Natürlich kann man ein kaputtes Design irgendwie Flicken, aber dadurch wird es nicht besser. Das ganze ist auch nur ein Beispiel um OO-Prinzipien zu verstehen. Manchmal sind so einfache und eindeutige Aussagen wie "Quadrate sind Rechtecke" eben nicht unproblematisch. Das ist nicht nur theoretisches Zeugs für die Uni, sondern auch wichtig für die Praxis.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Probleme bei Hausarbeit Java Basics - Anfänger-Themen 5
J Probleme mit drucken aus Java Java Basics - Anfänger-Themen 3
Gokul Java chart library suggestion for web application? Java Basics - Anfänger-Themen 2
D wie kann ich gcc aus einer .java datei heraus aufrufen? Java Basics - Anfänger-Themen 2
S Text Formatierung in Java Java Basics - Anfänger-Themen 2
B Erste Schritte yaml parsen in Java Java Basics - Anfänger-Themen 19
C Methoden Umlaute in Java Java Basics - Anfänger-Themen 18
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 45
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 3
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 27
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
G Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
G Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben