Verzögerte Berechnung "Lazy"

NeoKortex

Neues Mitglied
Hey,

ich habe eine alte Übungsaufgabe ( Thema: Nebenläufige Programmierung ) gefunden, bei welcher ich die Aufgabenstellung nicht ganz verstehe ( brauche keine Lösung ).

Ist hier das Arbeiten mit Futures gemeint?

Aufgabe:
Gegeben ist die folgende Klasse mit unveränderlichen x- bzw. y-Koordinaten eines Punktes.
Java:
public class Point {
private final double x, y;
private double distance; // Hinweis: sqrt (x*x+y*y);
public Point(final double x, final double y) {this.x = x;this.y = y;this.distance = -1; // Lazy: Könnte u.U. nie benötigt werden

}
public double getX() { return x; }
public double getY() { return y; }
public double getDistance() {
...???
}

}

Aufgabenstellung

getDistance() soll die Distanz des Punktes zum Ursprung liefern. Die Distanz soll weder bei der Initialisierung gesetzt werden, noch bei jedem Aufruf neu berechnet werden (da mit x und y auch die Distanz konstant ist).
 
K

kneitzel

Gast
Also ich verstehe das so, dass Werte, die berechnet werden können, nicht sofort berechnet werden. Erst wenn der Wert benötigt wird, wird dieser berechnet. Das findet sich nicht nur bei Berechnungen sondern auch beim Laden von Inhalten.

So werden ggf. Dinge aus einer Datenbank erst geladen, wenn auf diese zugegriffen wird. Wichtig kann sein, dass ggf. Ergebnisse invalide gemacht werden müssen. Also wenn es sowas wie "setX" und "setY" gibt, dann müsste man da distance wieder auf 0 oder so setzen. (Finde ich hier blöd gemacht, da 0 ja ein gültiger Wert ist. Daher wäre ein -1 oder so evtl. besser.)

Konrad
 

Flown

Administrator
Mitarbeiter
Du könntest es mit einem Future lösen, doch würde ich eher auf ein boolean oder einfach auf die Wrapper-Klasse gehen:
Java:
private Double distance = null;
public double getDistance() {
  if(distance == null) {
    distance = Math.sqrt(x*x + y*y*);
  }
  return distance;
}
 

Flown

Administrator
Mitarbeiter
Das ist jetzt Geschmackssache. Ich persönlich finde es sauberer das mit null zu initialisieren und danach mit den "richtigen" Werten zu arbeiten. Wenn es negativ initialisiert wird, dann ist das in meinen Augen einfach falsch!
 
K

kneitzel

Gast
Ja, da gebe ich Flown zu 100% Recht. Daher habe ich das ja auch versucht zu thematisieren. Im Code war halt nur schon der Typ double vorgegeben. Aber eine Änderung zur Klasse Double ist mehr als angebracht. Bei einem Code Review würde ich auch immer auf genau dies Wert legen.

Wenn aber eine Vorgabe 1:1 genutzt werden muss, dann geht es ja leider nicht und die Vorgabe hatte ich so verstanden, dass nur noch nach dem Getter gefragt war.

Konrad
 

nvidia

Bekanntes Mitglied
Das ist jetzt Geschmackssache. [...]Wenn es negativ initialisiert wird, dann ist das in meinen Augen einfach falsch!

Und ich finde es nicht falsch, erstens, weil es sehr lokal ist und der Wert nie die Außenwelt sieht, zweitens, weil per Definition der Berechnung nie ein negativer Wert entsteht und in diesem Fall ein negativer Wert semantisch identisch zu null ist und drittens, da Java keine value-Typen hat, man so auf Autoboxing sowie eine weitere Indirektion verzichtet.
 
K

kneitzel

Gast
Jetzt müsste man erst einmal definieren, was richtig und was falsch ist.

Richtig mag es sein, weil es funktioniert. Damit könnte man sich zufrieden geben.
Richtig mag es sein, weil es durch die Aufgabe vorgegeben ist. Es ist halt nur die Funktion zu schreiben, die genau dies implementiert.

Falsch ist es aber, wenn man sich mit Clean Code auseinander setzt. Das -1 ist weder intuitiv verstehbar noch hat es die Bedeutung von "kein Wert vorhanden". Daher ist es im Rahmen einer Code Review direkt anzupassen. (Das wäre die Position, die ich bei einer Code Review vertreten würde. Denn die Punkte von oben sind in keiner Weise ausreichend für eine richtige Lösung! Das merkt man dann, wenn man größere Projekte pflegen und warten muss!)
Daher meine klare Position bezüglich falsch was die generelle Thematik angeht. Auch wenn eine solche Lösung für die gestellte Aufgabe falsch ist, da hier ja das Feld vorgegeben wurde.
 

Flown

Administrator
Mitarbeiter
Und ich finde es nicht falsch, erstens, weil es sehr lokal ist und der Wert nie die Außenwelt sieht, zweitens, weil per Definition der Berechnung nie ein negativer Wert entsteht und in diesem Fall ein negativer Wert semantisch identisch zu null ist und drittens, da Java keine value-Typen hat, man so auf Autoboxing sowie eine weitere Indirektion verzichtet.
Entschuldige ich wollte nicht ausdrücken, dass die Variante an sich falsch ist, da du recht hast. Ich wollte nur ausdrücken, dass der Wert distance an sich mit -1 falsch ist und ein ungültiger Wert in meinen Augen ist!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Labyrinth, Backtracking, verzögerte Anzeige Java Basics - Anfänger-Themen 15
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
Jamie logische Verknüpfung zur Schaltjahr-Berechnung Java Basics - Anfänger-Themen 30
Stephan_kl Reihenwert-Berechnung, Ergebnis mit vorherigem Ergebnis vergleichen Java Basics - Anfänger-Themen 11
Abraham42 Berechnung der Kühlung Java Java Basics - Anfänger-Themen 12
S Hashcode-Berechnung + ^ Java Basics - Anfänger-Themen 2
J Median-Berechnung von 2D-Teilarrays Java Basics - Anfänger-Themen 56
F Tabelle - Berechnung Rang Java Basics - Anfänger-Themen 2
B Berechnung der Position von Kinderelemente von einem Elternknoten Java Basics - Anfänger-Themen 23
S Berechnung der sleep time ist falsch Java Basics - Anfänger-Themen 46
S Switch-Case zur Berechnung der Einkommensteuer Java Basics - Anfänger-Themen 15
F Berechnung der Rektaszension und Deklination eines Sterns Java Basics - Anfänger-Themen 7
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
V Erste Schritte Pi Berechnung Java Basics - Anfänger-Themen 47
M Berechnung der Reststrecke bei Graphen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
B Berechnung zu einer Schleife formen Java Basics - Anfänger-Themen 6
B Berechnung Median mit Methode Java Basics - Anfänger-Themen 7
CptK Methoden Berechnung von Anfangsgeschwindigkeit und Winkel Java Basics - Anfänger-Themen 27
K Erste Schritte Berechnung der Summe zweier Arrays Java Basics - Anfänger-Themen 15
S Erste Schritte Berechnung des Paketportos - Problem/Frage Java Basics - Anfänger-Themen 52
J Gleitkommazahlen, Berechnung von pi Java Basics - Anfänger-Themen 4
J Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
kilopack15 Verzweiflung wegen Berechnung mit Multithreading Java Basics - Anfänger-Themen 1
A Die Werte zur Berechnung müssen als Parameter übergeben werden? Java Basics - Anfänger-Themen 7
Salo Berechnung von Winkeln Java Basics - Anfänger-Themen 28
M Restbuchwert Berechnung geht nicht Java Basics - Anfänger-Themen 45
Ghostman1711 Pi berechnung Methode aufrufen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
beatles Operatoren Operatoren - Berechnung Java Basics - Anfänger-Themen 40
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
J Erste Schritte Rundungsproblem - Berechnung Notendurchschnitt Java Basics - Anfänger-Themen 13
S Variablen Vektor zur Berechnung verwenden Java Basics - Anfänger-Themen 4
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
M Berechnung in Java Java Basics - Anfänger-Themen 4
S Berechnung der Arbeitstage in einem Zeitraum Java Basics - Anfänger-Themen 9
E Problem bei rekursiver Berechnung des Binomialkoeffizienten Java Basics - Anfänger-Themen 5
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
S Double, int, Berechnung Java Basics - Anfänger-Themen 3
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
E Berechnung für Shop einbinden Java Basics - Anfänger-Themen 8
S Klassen Formel zur Berechnung .... Bitte um Hilfe Java Basics - Anfänger-Themen 7
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
P Schleife zur Berechnung von einer Summe Java Basics - Anfänger-Themen 16
F Berechnung einer linearen Abschreibung Java Basics - Anfänger-Themen 5
E Berechnung von Punkten Java Basics - Anfänger-Themen 4
D Berechnung des Abstandes von zwei Punkten in einem Koordinatensystem Java Basics - Anfänger-Themen 14
A Methoden PI-Berechnung Java Basics - Anfänger-Themen 22
S Erste Schritte Berechnung mit Daten aus CSV und Date Objekt Java Basics - Anfänger-Themen 2
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
A Erste Schritte Steuer Berechnung, Alters Abhängig Java Basics - Anfänger-Themen 5
T Erste Schritte Berechnung von gerade und ungerade Zahlen Java Basics - Anfänger-Themen 10
J Erste Schritte Berechnung Ratten vermehrung Java Basics - Anfänger-Themen 4
P falsches ergebnis bei einfacher berechnung Java Basics - Anfänger-Themen 3
T Iterative Berechnung einer Satellitenbahn Java Basics - Anfänger-Themen 20
M Java Berechnung mit mehreren Lösungen? Java Basics - Anfänger-Themen 9
D Nullstellen-Berechnung Java Basics - Anfänger-Themen 10
L Fehlermeldung bei falscher Berechnung anzeigen Java Basics - Anfänger-Themen 31
A berechnung multiplikatives inverses Java Basics - Anfänger-Themen 5
J Berechnung des aktuellen Alters auf Basis des Geburtstags Java Basics - Anfänger-Themen 45
J Datentypen Fehler bei Berechnung mit Double und Int-Werten Java Basics - Anfänger-Themen 22
G Berechnung von Winkeln mit Cosinussatz Java Basics - Anfänger-Themen 2
B Arrays verwenden für Berechnung Java Basics - Anfänger-Themen 3
R Merkwürdige Modulo Berechnung Java Basics - Anfänger-Themen 7
B Hausaufgabe Berechnung quadratischer Funktion Java Basics - Anfänger-Themen 16
U Alter Berechnung + sortierung Java Basics - Anfänger-Themen 6
P Berechnung wird nicht durchgeführt Java Basics - Anfänger-Themen 2
D Berechnung von Ostern und Ramadan! Java Basics - Anfänger-Themen 24
N Algorithmus für Berechnung einer Quersumme Java Basics - Anfänger-Themen 9
D Berechnung von Geldausgabe Java Basics - Anfänger-Themen 22
F Berechnung von Kugeln! Java Basics - Anfänger-Themen 9
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
S Hausaufgabe: Java-Programm schreiben zur Berechnung von x und y Java Basics - Anfänger-Themen 9
Y Ergebnis einer Berechnung an die Main Methode übergeben Java Basics - Anfänger-Themen 11
Semox Ersten Wert eines Intervalls bei Berechnung einschließen Java Basics - Anfänger-Themen 8
J Logarithmische Berechnung und Arrays Java Basics - Anfänger-Themen 2
B LinkedList - Berechnung des Produkts Java Basics - Anfänger-Themen 6
B Berechnung von Preisen per Java-Programm Java Basics - Anfänger-Themen 27
M Alters berechnung aus Geburtsjahr aus dem Buch Java Basics - Anfänger-Themen 5
O Fehler in der String-Distanz-Berechnung Java Basics - Anfänger-Themen 5
-horn- "Berechnung vorwärts, Optimierung rückwärts?" - Wie würdet ihr das machen? Java Basics - Anfänger-Themen 8
P iterative Berechnung Java Basics - Anfänger-Themen 9
1 Berechnung von PI mithilfe von Buffons Nadelproblem Java Basics - Anfänger-Themen 2
G Berechnung zwei Komplexen Zahlen Java Basics - Anfänger-Themen 34
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
J Programm für interaktive Berechnung von Temperaturverläufen Java Basics - Anfänger-Themen 9
K Annährende ganzzahlige Berechnung der Wurzel Java Basics - Anfänger-Themen 8
L Berechnung von Perioden Java Basics - Anfänger-Themen 4
D einfach berechnung einer onlinezeit Java Basics - Anfänger-Themen 25
S Euklid Klasse mit Methoden zur Berechnung des ggT Java Basics - Anfänger-Themen 23
G Frage zur Primzahlen berechnung Java Basics - Anfänger-Themen 11
G Berechnung von N-Tageslinien von Aktienkursen Java Basics - Anfänger-Themen 13
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
W Schaltjahr Berechnung Java Basics - Anfänger-Themen 24
A Probleme mit Programm zur Pi-Berechnung Java Basics - Anfänger-Themen 6
X Temperatur-Berechnung /Array(?) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben