Darstellungskonvertierung Klassenaufbau

  • Java

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Darstellungskonvertierung Klassenaufbau

    Hallo,

    Ich habe die Idee für ein mathematische Problemstellung eine Klasse zu entwerfen, wobei es unterschiedliche Darstellungen der Lösung gibt. Es verhält sich ähnlich wie bei Ebenen, nämlich dass es z.B. die Koordinatenform und die Normalform gibt und diese ineinander umgewandelt werden können. Meine Frage ist, wie ich die Sachverhalte am schönsten und praktischten in eine Klasse packen kann, sodass ich unter anderem auch Operatoren definieren kann um beide Formen miteinander verrechnen. Also soll die Klasse alle Darstellungen ineinander umrechnen können sowie für alle dieselben Operatoren bereitstellen, soweit möglich.

    Wie würdet ihr das anfangen?

    8-) faxe1008 8-)
    ich würde mir als erstes einen Namen für die Klasse ausdenken - weißt ja: Nomen est Omen!.
    Mehr kann dazu zum derzeitigen Informationsstand nicht gesagt werden - alles was ich weiß ist, dass es sich um eine "mathematische Problemstellung" handelt, aber für MathematischeProblemStellung als Name würde ich mich vermutlich nicht entscheiden.
    Es geht hierbei um die Darstellung von Zahlen, ähnlich wie bei rationalen Zahlen gibt es ja zum einen Brüche und andererseits gibt es auch Dezimalzeichen. Ich möchte eine Klasse für den Umgang mit komplexen Zahlen darstellen, um mit jeder Form wie der Polarform rechnen zu können, um beispielsweise Wurzeln zu ziehen oder Potenzen zu bilden.

    8-) faxe1008 8-)
    Ich würde dir vorschlagen, alle Formen, die du brauchst, intern nebeneinander abzuspeichern (von außen muss man nicht unbedingt an alle rankommen können). Gib der Struktur für jede mögliche Darstellung einen Konstruktor, der alle benötigten Darstellungen erzeugt. Dann bist du eig. schon fertig.
    Je nachdem, welche Berechnungen du durchführen willst, wählst du die jeweils passende Darstellung aus (die ja laut oben immer verfügbar ist), rechnest, und steckst das Ergebnis in den passenden Konstruktor, der dir dann die restlichen Darstellungen für das neue Objekt ja wieder erzeugt. Bei impliziten (und expliziten) Typkonvertierungen musst du auch einfach nur den passenden Konstruktor wählen.
    Das alles funktioniert so schön, weil es eine Struktur ist und keine Klasse und du deswegen nach jeder Operation wieder ein neues Objekt erstellen kannst (musst), anstatt am alten rumzupfuschen.

    faxe1008 schrieb:

    Darstellung von Zahlen
    Sei A die Menge der Normalform-Daten, B die Menge der transformierten Daten.
    Nehmen wir an, Daten können in der Form A und in der Form B vorliegen (wenn sie nur als A vorliegen - um so einfacher).
    Mach eine Klasse, deren Instanz einen solchen Datensatz hält.
    Mach eien Input für Daten im A-Format und einen Input für Daten im B-Format.
    Wenn es sinnvoll ist, lass beide Datensätze A und B parallel vorliegen (das hängt vom Datenvolumen und dem Konvertierungsaufwand ab),
    oder
    überführe ingeputete Daten in das Format, das am häufigsten zugegriffen wird.
    Dazu die internen Transformationsprozeduren und Zustandsflags.
    Für mehr reicht der Input erst mal nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mir ist gerade aufgefallen, dass ich die Frage als VB.NET getaggt habe - eigentlich handelt es sich um ein Java Projekt. Würdet ihr den Aufbau dennoch so empfehlen? Java hat nämlich keine Structs, ich müsste also mit normalen Klassen basteln.

    @Artentus: Das mit dem Konstruktor in dem Struct quasi universal zu machen ist sehr schwierig, denn die Formen müssen teilweise erst konvertiert werden dazu kommt das die Berechnung auch quer erfolgen kann.

    Normalform:


    Trigonometrische Form:



    Polarform:



    Diese Darstellungen sind möglich wobei sich, das Problem stellt dass sich die Polarform nicht ohne weiteres in die Normalform umwandeln lässt.
    Wenn ich damit komplet falsch liege könnte jemand ein Diagramm für den Aufbau erstellen (z.B. quick and dirty Paint)? Wenn ich das visuell sehe fällt mir es leichter nachzuvollziehen was du meinst.

    8-) faxe1008 8-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „faxe1008“ ()

    Ich hab mir mal erlaubt, das Thema in den richtigen Bereich zu verschieben.

    In Java ist der Ansatz mit Strukturen natürlich hinfällig (allein das Fehlen dieses fundamental wichtigen Konzeptes macht Java mmn bereits für jegliche Projekte ungeeignet, aber das nur mal am Rande).
    Du könntest es mit einer immutable class versuchen (siehe z.B. String aus .Net), falls sowas in Java überhaupt geht (sollte aber). Oder du machst dir halt die Mühe und hängst an jede Operation eine Neuberechnung aller internen Darstellungen an, das wird allerdings unter Umständen unübersichtlich und auf jeden Fall fehleranfälliger.