Hallo zusammen,
aufgrund einer vor Kurzem geführten Diskussion, wie ein korrektes Dreieck erzeugt werden kann (sollte), habe ich mir auch Gedanken zu dem Thema gemacht. Das hat keinen tieferen Hintergrund und ist eher theoretischer Natur. Ich bin ja schließlich auch noch Anfänger
Eine bereits angesprochene Lösung war, der Klasse "Dreieck" mehrere Konstruktoren zu geben, um Dreiecke z.B. mit drei Seiten, zwei Seiten und Winkel oder einer Seite und zwei Winkeln zu erzeugen. Ergänzen, könnte man jetzt noch Konstruktoren mit Fläche und Seiten (und/oder Winkeln) usw.
Das finde ich jetzt aber auch nicht so richtig flexibel, da habe ich mich an CAD erinnert, wo es den Begriff der Constraints gibt, also geometrische Grenzen, die ein Objekt einhalten muss.
Mein Ansatz wäre demnach eine sehr einfache Klasse "Dreieck", mit einem simplen "drei bekannte Seiten Konstruktor" und eine Fabrik-Klasse. Die "Idee" ist, dieser Klasse solange Werte für Dreiecksparameter zu geben (Seitenlängen, Winkel, Fläche, Umfang) bis ein gültiges Dreieck erzeugt werden kann. Ungefähr so:
Damit ist allerdings das "Wissen" über die Erzeugung (und auch einiges an Berechnung) nicht in der Klasse Dreieck, sondern in der Fabrik. Die Klasse Dreieck hat Berechnungsmethoden für alle Winkel, Fläche und Umfang (was leider ggf. doppelten Code mit der Fabrik bedeuten kann). Denkbar wäre es das alles in der Klasse Dreieck zu veranstalten, aber dann würde durch den Konstruktor zunächst ein ungültiges Dreieck erzeugt, was mich nicht überzeugt.
Ist das vom Design her in Ordnung oder gibt es bessere Ansätze?
aufgrund einer vor Kurzem geführten Diskussion, wie ein korrektes Dreieck erzeugt werden kann (sollte), habe ich mir auch Gedanken zu dem Thema gemacht. Das hat keinen tieferen Hintergrund und ist eher theoretischer Natur. Ich bin ja schließlich auch noch Anfänger
Eine bereits angesprochene Lösung war, der Klasse "Dreieck" mehrere Konstruktoren zu geben, um Dreiecke z.B. mit drei Seiten, zwei Seiten und Winkel oder einer Seite und zwei Winkeln zu erzeugen. Ergänzen, könnte man jetzt noch Konstruktoren mit Fläche und Seiten (und/oder Winkeln) usw.
Das finde ich jetzt aber auch nicht so richtig flexibel, da habe ich mich an CAD erinnert, wo es den Begriff der Constraints gibt, also geometrische Grenzen, die ein Objekt einhalten muss.
Mein Ansatz wäre demnach eine sehr einfache Klasse "Dreieck", mit einem simplen "drei bekannte Seiten Konstruktor" und eine Fabrik-Klasse. Die "Idee" ist, dieser Klasse solange Werte für Dreiecksparameter zu geben (Seitenlängen, Winkel, Fläche, Umfang) bis ein gültiges Dreieck erzeugt werden kann. Ungefähr so:
Java:
TriangleFactory factory = new TriangleFactory();
factory.setSide(SIDE.a, 10);
factory.setSide(SIDE.b, 10);
factory.setAngle(ANGLE.alpha, 60);
// validate and then
Triangle triangle = factory.getInstance();
Damit ist allerdings das "Wissen" über die Erzeugung (und auch einiges an Berechnung) nicht in der Klasse Dreieck, sondern in der Fabrik. Die Klasse Dreieck hat Berechnungsmethoden für alle Winkel, Fläche und Umfang (was leider ggf. doppelten Code mit der Fabrik bedeuten kann). Denkbar wäre es das alles in der Klasse Dreieck zu veranstalten, aber dann würde durch den Konstruktor zunächst ein ungültiges Dreieck erzeugt, was mich nicht überzeugt.
Ist das vom Design her in Ordnung oder gibt es bessere Ansätze?