![]() |
|
|
|||||||
| Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Nicht angemeldet
Fachbeiträge: n/a
|
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 |
| #2 (permalink) | |
|
Benutzer
double
Registriert seit: 06.11.2008
Fachbeiträge: 72
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Toller Nick-Name
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. |
|
|
| #3 (permalink) | |
|
Nicht angemeldet
Fachbeiträge: n/a
|
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 );
};
}
}
|
| #4 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 17.01.2008
Fachbeiträge: 3.622
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
|
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
}
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
__________________
Java Lernen leicht gemacht: www.javavideokurs.de Java Video Kurs - Java Video Tutorials - Online Java lernen! |
|
|
| #5 (permalink) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 22.04.2007
Fachbeiträge: 3.668
Abgegebene Danke: 17
Erhielt 36 Danke für 36 Beiträge
|
@Java-Gott:
![]() @hdi
Aber die Punkte sollte man sicherlich nicht so bescheuert in variablen "eins, zwei, drei" abspeichern :? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6 (permalink) | |
|
Nicht angemeldet
Fachbeiträge: n/a
|
Vielen Dank an hdi und an den ****** 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 |
| #7 (permalink) | ||||||||||||||||
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 17.01.2008
Fachbeiträge: 3.622
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
|
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);
}
}
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.
Wenn das ein Mod sieht... Das geht eindeutig zu weit!
__________________
Java Lernen leicht gemacht: www.javavideokurs.de Java Video Kurs - Java Video Tutorials - Online Java lernen! |
|||||||||||||||
|
|
||||||||||||||||
| #8 (permalink) | |
|
Stammbenutzer
CD-R 74
Registriert seit: 16.09.2006
Fachbeiträge: 6.762
Abgegebene Danke: 28
Erhielt 529 Danke für 496 Beiträge
|
Code:
class Quadrat {
int a;
int eins,zwei,drei,vier,fünf,sechs,sieben,acht;
...
}
__________________
Welches ist das beste Buch für Anfänger? Das: Java von Kopf bis Fuss Nach den ersten Schritten? Das: Der Weg zum Java-Profi |
|
|
| #9 (permalink) | |
|
Nicht angemeldet
Fachbeiträge: n/a
|
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! |
| #10 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 17.01.2008
Fachbeiträge: 3.622
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
|
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
__________________
Java Lernen leicht gemacht: www.javavideokurs.de Java Video Kurs - Java Video Tutorials - Online Java lernen! |
|
|
| #12 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 17.01.2008
Fachbeiträge: 3.622
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
|
Thinking ...
Done Auf die Gefahr hin, dass ich mich komplett peinlich mache, aber ich habe heute Abendnoch nichts getrunken und bin auch ausgeschlafen.. Also ich geh das Risiko ein: Was soll daran falsch sein?
__________________
Java Lernen leicht gemacht: www.javavideokurs.de Java Video Kurs - Java Video Tutorials - Online Java lernen! |
|
|
| #13 (permalink) | ||||||||||||||||
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 22.04.2007
Fachbeiträge: 3.668
Abgegebene Danke: 17
Erhielt 36 Danke für 36 Beiträge
|
, bzw Rechteck ist eine Spezialisierung der Trapez.Also ist Polygon->Viereck->Trapez->Rechteck->Quadrat schon richtig
|
|||||||||||||||
|
|
||||||||||||||||
| #14 (permalink) | |
|
Neuer Benutzer
byte
Registriert seit: 10.01.2009
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
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);
}
}
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 ); } |
|
|
| #15 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 17.01.2008
Fachbeiträge: 3.622
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
|
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).
__________________
Java Lernen leicht gemacht: www.javavideokurs.de Java Video Kurs - Java Video Tutorials - Online Java lernen! |
|
|
| #16 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 22.04.2007
Fachbeiträge: 3.668
Abgegebene Danke: 17
Erhielt 36 Danke für 36 Beiträge
|
Code:
private int x_kante, y_kante, z_kante, q_kante; 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. |
|
|
| #17 (permalink) | |||||||||||||||||||||||||||||||
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 19.03.2007
Fachbeiträge: 3.565
Blog-Einträge: 24
Abgegebene Danke: 52
Erhielt 300 Danke für 288 Beiträge
|
Ein Rechteck kann verschieden lange Seiten haben. Auf ein Quadrat trifft das nicht zu. Ein beliebtes Beispiel, um das Liskovsche Substitutionsprinzip zu erläutern.
__________________
Snippets: Hibernate-Mappings - Nichtrechteckige Fenster - SwingWorker - ReadWriteLock - Database ConnectionPool - Synchronisation mit Locks - EventBus - BlockingQueue - RMI - Scripting mit JRuby - Embedded Derby How-Tos: Remoting mit Spring - Dependency Injection mit Spring FAQs: Exceptions |
||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||
| #18 (permalink) | ||||||||||||||||
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 22.04.2007
Fachbeiträge: 3.668
Abgegebene Danke: 17
Erhielt 36 Danke für 36 Beiträge
|
|
|||||||||||||||
|
|
||||||||||||||||
| #19 (permalink) | |
|
Neuer Benutzer
byte
Registriert seit: 10.01.2009
Fachbeiträge: 10
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
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"? |
|
|
| #20 (permalink) | ||||||||||||||||||||||||||||||||||||||||||||||
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 17.01.2008
Fachbeiträge: 3.622
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
|
Konzentration kann darunter ja heute scheinbar nicht mehr viel leiden.
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.
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.
__________________
Java Lernen leicht gemacht: www.javavideokurs.de Java Video Kurs - Java Video Tutorials - Online Java lernen! |
|||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| java Thread java.lang.OutOfMemoryError: Java heap space | joerg1978 | Allgemeine Java-Themen | 7 | 09.01.2007 20:58 |
| Hausarbeit -> Datenbankzugriff über JDBC | Crassy85 | Datenbankprogrammierung | 2 | 29.07.2006 16:35 |
| Hausarbeit über JDBC HILFE ! | Gast | Hausaufgaben | 8 | 19.07.2006 17:38 |
| Java - Enterprise Java Beans - Java Server Pages | AndyK | Allgemeine Java-Themen | 3 | 14.06.2005 11:36 |
| Java-APIs in Java ServerPages, Java Server Faces ? | Webdevil | Allgemeines EE | 2 | 03.11.2004 11:10 |
| Lesezeichen |
|
|