Homework CW06

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Homework CW06
Hallo zusammen,

ich habe eine kleine Verständnisfrage zum aktuellen Übungsblatt (beginnend ab heute).
Ich verstehe nicht ganz den Unterschied zwischen der spährischen und der kartesischen Distanz.

Beide Koordinaten-Klassen haben ihre eigene Repräsentation des Punktes im Raum (kartesisch vs. sphärisch). Soweit, so gut.
Beide Repräsentationen sollte man ineinander umwandeln können, da es sich ja nur um zwei verschiedene Darstellungsweisen handelt.
Somit sollten auch die beiden Distanzen identisch sein… nur der Rechenweg unterscheidet sich.

Habe ich irgendwo einen Denkfehler? Denn mir erschließt sich gerade noch nicht so recht der Nutzen, diese Implementierungsdetails über das Interface zugänglich zu machen, wobei doch eigentlich die Implementierungen selbst sich darum kümmern könnten.
Oder handelt es sich womöglich um einen Schreibfehler, sodass es sich eigentlich um eine Umwandlungsmethode der erbenden Klassen handelt? → asCartesianCoordinate() und asSphericCoordinate()

Schon mal vielen Dank im Voraus!

Grüße,
Georg Schwarz


Hallo zusammen,

wir sind in CW #05. Heutiger Lerninhalt sind Klassen und Schnittstellen (und dann unterschiedliche Implementierungen derselben Schnittstelle).

Fuer naechsten Montag, in CW #06, sind dann Coordinate (Schnittstelle) und Implementierungen SphericCoordinate und CartesianCoordinate due (Klassen).

Sie muessen die getDistance() Methode aufrecht erhalten; Semantik ist “direct distance” im kartesischen System (also nicht auf einem sphärischen Ball e.g. Erdoberfläche).

Die Herausforderung ist die Austauschbarkeit der Objekte hinter der Schnittstelle. Die Implementierung sollten Sie natuerlich nicht in der Schnittstelle offenlegen, aber ich interpreteire Methoden, welche eine Koordinate als spärisch oder kartesische repräsentieren nicht als Implementierungsfrage. Insofern ist Ihre Interpretationsmethode eine mögliche Lösung.

Mit wiederverwendbaren abstrakten Oberklassen in der darauffolgenden Woche wird es noch etwas interessanter.

HTH,

Dirk Riehle


Hallo,

ich verstehe das Klassendiagramm leider auch nicht, trotz Erklärung:

Warum gibt getDistance() einen boolean Wert zurück? Das passt irgendwie weder zum Namen noch zu der Vorgabe vom letzten Mal, wo double zurückgegeben wurde.
Die zwei Methoden asCartesianDistance() und asSphericalDistance(), die einen double zurückgeben, verstehe ich auch nicht. Vor allem angesichts der Erklärung, dass getDistance() grundsätzlich ja schon als Distanz im karthesischen Koordinatensystem gedacht ist.
Außerdem deutet as… doch auf eine conversion method hin, also eine Methode, die das Objekt in etwas anderes konvertiert. Wie kann ich ein einzelnes Object der Klasse Coordinate in eine Distanz “umwandeln”?


Die Signatur von getDistance() ist “double getDistance(Coordinate c);” // das war ein Fehler in der zweiten Folie.

Die beiden anderen Methoden sollten dann nicht asCartesianDistance() oder asSphericDistance() heissen sondern get…Distance(). Genauer also:

double Coordinate#getCartesianDistance(Coordinate c);
double Coordinate#getSphericDistance(Coordinate c);

sollen implementiert werden, so dass der dynamische Typ von c gleichgueltig ist.

Sobald ich eine funktionierende Windows-VM wieder habe (und damit an Sparx EA komme), werde ich die Diagramme korrigieren.


Bedeutet das, dass die methoden getCartesianDistance und getSphericDistance mit den gleichen parametern (Coordinaten) den gleichen wert zurück geben?
Jeweils die länge der kürzesten strecke zwischen den beiden koordinaten.


Ah, nein.

getDistance() == getCartesianDistance() // kartesische “direkte” Distanz

Nicht gleich getSphericDistance();

Wir haben tatsaechlich spaerische Distanz nicht spezifiziert. Es ist euch somit offen gelassen.

Im dreidimensionalen ist es klar, wenn der Radius der zwei Koordinaten derselbe ist. Somit waere das Ergebnis die Distanz auf einer Kugel mit gegebenem Radius.

Im Fall unterschiedlicher Radien koennt ihr euch entscheiden: Am kompliziertesten waere die Distanz auf einem Ellipsoid. Am einfachsten waere, wenn ihr wieder die Kugel nehmt und euch fuer einen Radius entscheidet. Oder ihr nehmt als fixen Radius immer den der Erdkugel an. Letzteres war die urspruengliche Intention.

Tatsaechlich geht es bei der Hausaufgabe weniger um Trigonometrie etc. sondern um den effizienten Umgang mit zwei Implementierungen, deren Instanzen beliebig miteinander arbeiten koennen sollen.