Erste Schritte Objekte als Datenelemente

ocsme

Top Contributor
Guten Tag,

ich hab eine Frage und zwar habe ich zwei Klassen erstellt.
Eine Klasse Point die sieht so aus:
Java:
public class Point {
   
    final double x;
    final double y;
   
    Point(double x, double y) {
        this.x=x;
        this.y=y;
    }
   
    Point(double x){
        this(x,0);
    }
   
    Point() {
        this(0);
    }
   
    double getX() {
        return x;
    }
   
    double getY() {
        return y;
    }
   
    double distance(Point p) {
        return Math.hypot(x-p.x, y-p.y);
    }

    boolean isSame(Point p, double within) {
        return distance(p) < within;
    }
   
    Point moved(double dx, double dy) {
        return new Point(x+dx, y+dy);
    }
}

und nun eine Klasse Triangle die sieht noch so aus:
Java:
public class Triangle {
   
    private final Point p0;
    private final Point p1;
    private final Point p2;
   
    Triangle(Point p0, Point p1, Point p2) {
        this.p0=p0;
        this.p1=p1;
        this.p2=p2;
    }
}

Nun meine Frage! Wieso geht das in Triangle ohne Point mit new neu zu erschaffen. Muss ich dann neue Objekte immer nur in meiner MAIN Methode erschaffen ist das so üblich? Denn ich hab es auch schon anders gemacht bei anderen Aufgaben wo ich in eine Klasse ein neues Objekt instanziert habe um dann mit diesem Objekt eben genauso wie hier zu verfahren. Oder liegt es daran das alles public ist.

Danke für die Antwort =)

LG
 

mihe7

Top Contributor
Wieso geht das in Triangle ohne Point mit new neu zu erschaffen.
Du brauchst die Point-Objekte nicht zu erstellen, weil Du sie im Konstruktor übergeben bekommst.

Muss ich dann neue Objekte immer nur in meiner MAIN Methode erschaffen ist das so üblich?
Nein, man erzeugt Objekte nicht nur in main.

Oder liegt es daran das alles public ist.
Das schon gar nicht.
 

ocsme

Top Contributor
o_O oha ja gutes Deutsch sry!
Danke mihe7 hat es gut beantwortet.

Also geht Java so vor sobald ich new Triangle aufrufe in meiner main Methode. Erstellt er ein neues Objekt Triangle geht in den zugehörigen Konstruktor rein sucht nach der Klasse Point geht in Point rein und übergibt dort wieder in den Konstruktor meine Werte danach kehrt die Rutine wieder zurück kann man es sich so vorstellen?

Und noch eine Kleine Frage wenn ich die Datenelemente private mache dann brauche ich ja getter und setter. Ist es dann üblich das man in der Klasse auch mit den getter und setter Methoden arbeitet?
Also ich habe eine Methode reduce() arbeitet man dann so:
Java:
        return new Rational(getDenom(), getNum());

Wieso nimmt man nicht weiterhin die Datenelemente in der Eigenen Klasse dort sind sie ja immer verfügbar?
 

mihe7

Top Contributor
Also geht Java so vor sobald ich new Triangle aufrufe in meiner main Methode. Erstellt er ein neues Objekt Triangle geht in den zugehörigen Konstruktor rein sucht nach der Klasse Point geht in Point rein und übergibt dort wieder in den Konstruktor meine Werte danach kehrt die Rutine wieder zurück kann man es sich so vorstellen?

Nein. Dein Konstruktor erhält "fertige" Point-Objekte, d. h. der Konstruktor der Point-Objekte wurde bereits vorher aufgerufen. In dem Triangle-Konstruktor erfolgt dann nur noch die Zuweisung der Referenzen auf diese Objekte.

Beispiel:
Java:
Point p0 = new Point(10, 10); // hier wird der Point-Konstruktor aufgerufen
Point p1 = new Point(20, 10); // hier wird der Point-Konstruktor aufgerufen
Point p2 = new Point(10, 20); // hier wird der Point-Konstruktor aufgerufen
Triangle t = new Triangle(p0, p1, p2); // hier wird der Triangle-Konstruktor mit drei "fertigen" Point-Objekten aufgerufen


Und noch eine Kleine Frage wenn ich die Datenelemente private mache dann brauche ich ja getter und setter.
Public Getter und Setter brauchst Du nur, wenn Du von außen auf die Elemente zugreifen willst bzw. musst.

Ist es dann üblich das man in der Klasse auch mit den getter und setter Methoden arbeitet?
Das kann man pauschal nicht sagen und hängt auch nicht unbedingt mit der Sichtbarkeit (public, protected, private, package private) zusammen.

Ganz allgemein verwende ich Methoden intern dann, wenn ich sie brauche - dazu zählen auch Getter/Setter. Bei diesen ist das aber höchstens der Fall, wenn Sie über eine direkte Rückgabe/Zuweisung hinausgehen.
 

Blender3D

Top Contributor
Und noch eine Kleine Frage wenn ich die Datenelemente private mache dann brauche ich ja getter und setter. Ist es dann üblich das man in der Klasse auch mit den getter und setter Methoden arbeitet?
Wie oben bereits erwähnt. Nur dann wenn man von außen darauf zugreifen muss.
In Deinem Fall machst Du ja eine Objekt mit konstanten Attributen. Also sind Setter sowieso überflüssig.
Und Getter kann man sich sparen indem man die Attribute public macht. Da kann nichts passieren, weil diese ja konstant sind.
;)
 

ocsme

Top Contributor
Okay danke das habe ich nun alles verstanden.
Ich frage mich nur immer noch ob der Umgang mit diesen Objekten nicht etwas schwerfällig ist.
Es gibt heut zu tage doch so komplexe Programme die Objektorientiert arbeiten dort gibt man doch sicherlich auch nicht immer wieder ein: t1=new Triangle();
oder wird das immer so gemacht? Ich kann mir derzeit einfach nicht vorstellen wie komplexere Programme arbeiten.

z. B. habe ich eine Methode geschrieben für die Zentrische Streckung eines Dreiecks die sieht so aus:
Java:
    public Triangle stretching(Point p, double a) {
        return moved(-p.x(), -p.y()).stretching(a).moved(p.x(),p.y());
    }
und in meiner Main Methode rufe ich das ganze so auf:
Java:
Triangle t4=new Triangle();
        t4=t3.stretching(p3,xx);

Wenn ich mir vorstelle wie Programme arbeiten mit Grafischeroberfläche und der gleichen dann kommt mir das alles "schwerfällig" vor :( Ist das am Anfang normal?

LG
 

temi

Top Contributor
z. B. habe ich eine Methode geschrieben für die Zentrische Streckung eines Dreiecks die sieht so aus:
Java:
    public Triangle stretching(Point p, double a) {
        return moved(-p.x(), -p.y()).stretching(a).moved(p.x(),p.y());
    }
und in meiner Main Methode rufe ich das ganze so auf:
Java:
Triangle t4=new Triangle();
        t4=t3.stretching(p3,xx);
Die Methode Triangle liefert ja als Wert bereits ein Triangle-Objekt zurück. Du kannst also auch schreiben ohne vorher ein Dreieck zu erzeugen, das du anschließend mit einem anderen Dreieck wieder überschreibst.
Java:
Triangle t4=t3.stretching(p3,xx);

Oder du schreibst deine Methode "stretch" so, dass sie gar keinen Wert zurück liefert, sondern die Instanz selbst ändert, auf der sie aufgerufen wird.
Java:
t3.stretch(p3,xx); // streckt das Dreieck t3
 

temi

Top Contributor
Und Getter kann man sich sparen indem man die Attribute public macht.
In der Objektorientierung gilt ja, soviel Informationen wir möglich zu verbergen und nur das nötige zu veröffentlichen. Deshalb sollte das schon begründet sein. Das gilt auch für Getter und Setter. Die sollte es nur für Werte geben, auf die auch tatsächlich von außen zugegriffen werden MUSS. Besser ist es, wenn der Objektzustand nicht durch Setter geändert werden kann, sondern durch Aktionen, die mit dem Objekt durchgeführt werden. Dadurch kann die Änderung abgesichert werden, damit keine unzulässige Zustände entstehen, z.B.
Java:
class Counter {
   private int value = 0;

   // lesender Zugriff auf den aktuellen Zählerstand
   public int getValue() {
      return value;
   }

   // Kein Setter, der Zählerstand wird durch eine Aktion erhöht.
   public void countUp() {
      value++;
   }

   // Kein Setter, der Zählerstand wird durch eine Aktion verringert, ein unzulässiger negativer Wert wird verhindert
   public void countDown() {
      if (value > 0) {      
         value--;
      }
   }
}
 

ocsme

Top Contributor
Supi danke für die Antwort :)
so langsam verstehe ich das ganze :D
Das hier hatte ich auch probiert aber irgendwie ging es zuerst nicht Triangle t4=t3.stretching(p3,xx); <- doch in eclipse geht es :)

LG
 

mrBrown

Super-Moderator
Mitarbeiter
In der Objektorientierung gilt ja, soviel Informationen wir möglich zu verbergen und nur das nötige zu veröffentlichen. Deshalb sollte das schon begründet sein. Das gilt auch für Getter und Setter. Die sollte es nur für Werte geben, auf die auch tatsächlich von außen zugegriffen werden MUSS.
Ein Triangel besteht im Idealfall nur aus den drei unveränderlichen Punkten, die kann man problemlos öffentlich machen (Getter sind aber zusätzlich sinnvoll, weil du mehr erlauben als nur Felder) ;)

Besser ist es, wenn der Objektzustand nicht durch Setter geändert werden kann, sondern durch Aktionen, die mit dem Objekt durchgeführt werden. Dadurch kann die Änderung abgesichert werden, damit keine unzulässige Zustände entstehen, z.B.
Mit Settern kann man das aber auch absichern :p
 

mihe7

Top Contributor
Ich frage mich nur immer noch ob der Umgang mit diesen Objekten nicht etwas schwerfällig ist.
Es gibt heut zu tage doch so komplexe Programme die Objektorientiert arbeiten dort gibt man doch sicherlich auch nicht immer wieder ein: t1=new Triangle();
oder wird das immer so gemacht?
Ich weiß nicht, worauf Du hinaus willst. Mal andersrum gefragt: wie wäre denn Deine Vorstellung?
 

ocsme

Top Contributor
Ich weiß nicht, worauf Du hinaus willst. Mal andersrum gefragt: wie wäre denn Deine Vorstellung?

Naja meine Vorstellung war komplett verkehrt :D Ich dachte mehr oder weniger das sich die Objekte später mal vielleicht wie selbst erzeugen können.
Doch ein Objekt muss ja mit new Instanziert werden! Deswegen war das alles kompletter quatsch denn "normale" variablen fallen ja auch nicht vom Himmel. Ich muss das ganze Thema einfach noch viel mehr üben damit ich das richtig verstehe und drauf habe.
Danke für eure Antworten :)

LG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
W Objekte reproduzieren Allgemeine Java-Themen 2
W Objekte per Reflexion instanziieren Allgemeine Java-Themen 7
W Unittest - Objekte simulieren Allgemeine Java-Themen 7
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
F Objekte erzeugen Allgemeine Java-Themen 1
E Threads ThreadPoolExecutor remove mit callable Objekte Allgemeine Java-Themen 3
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
E OOP Objekte und Methoden Allgemeine Java-Themen 1
@SupressWarnings() Umgebungsvariable Objekte "gekoppelt" Allgemeine Java-Themen 6
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
B Objekte anhand von Properties file Allgemeine Java-Themen 41
U Tiefe Objekte schreiben Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
F FileOutput/Input Objekte Allgemeine Java-Themen 6
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
U Set erklären dass objekte gleich sind Allgemeine Java-Themen 12
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
N 2 Objekte zu einer Gruppe zusammenfügen Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
H Objekte Serialisiert speichern Allgemeine Java-Themen 10
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
M Java Objekte in XML mit JAXB Allgemeine Java-Themen 9
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
H COM-Objekte/ AktiveX Objekte Allgemeine Java-Themen 4
C Script für Website mit Objekte Ausblenden Allgemeine Java-Themen 3
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
D Grafische Objekte zeichnen Allgemeine Java-Themen 4
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
F Referenzen auf Objekte Allgemeine Java-Themen 5
H Eclipse und Objekte Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
N Dynamische Objekte / DB Allgemeine Java-Themen 5
J Objekte binär speichern Allgemeine Java-Themen 10
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
V Objekte in Kategorien einteilen. Allgemeine Java-Themen 6
M 3D Objekte mit einer Linie Verbinden Allgemeine Java-Themen 3
F Wie zur Laufzeit ganz neue Objekte erzeugen? Allgemeine Java-Themen 5
A Dummy-Objekte für Webgui erzeugen Allgemeine Java-Themen 12
W Objekte speichern mit JFileChooser Allgemeine Java-Themen 8
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
L Objekte in Liste packen Allgemeine Java-Themen 2
S XML in Objekte wandeln. Euer Rat? Allgemeine Java-Themen 12
G Objekte serialisieren Allgemeine Java-Themen 2
L Parameter-Objekte verändern oder nicht? Allgemeine Java-Themen 6
D Objekte nur unter bestimmten Voraussetzungen erzeugen Allgemeine Java-Themen 4
S Objekte mit Arrays Allgemeine Java-Themen 9
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S erzeugte objekte zählen Allgemeine Java-Themen 3
U auf Objekte mit variablem Namen zugreifen Allgemeine Java-Themen 4
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
Landei Objekte ohne Konstruktoraufruf erzeugen Allgemeine Java-Themen 7
E tiefe Kopie nicht serialisierbarer Objekte Allgemeine Java-Themen 3
J Speicherbedarf und persistente Objekte Allgemeine Java-Themen 4
J ArrayList Objekte anhand Propertywerte filtern Allgemeine Java-Themen 3
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
J Eindeutige ID für Objekte als Keys in TreeMap Allgemeine Java-Themen 12
G Unveränderbare Objekte Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben