Elegantere Lösung bei der Implementierung eines Interfaces

Status
Nicht offen für weitere Antworten.
B

backbone

Gast
hallo!

ich habe ein problem bei der implementierung eines interfaces.
hier die genaue beschreibung:

ich habe eine Klasse Matrix, welche eine vielfältige anzahl an funktionen für matrizen über einen Körper (Zahlen, Polynome etc.) bereitstellt.

die matrix elemente werden in einer objektvariable der klasse gespeichert. die variable ist 2 dimensional und vom typ Body.

Body ist ein Interface, welches grundlegende eigenschaften von körpern beschreibt wie addition, multiplikation etc.

Konkret sieht das so aus:
Code:
public interface Body
{
	public Body add(Body Addend);
	
	public Body multiply(Body Multiplicator);
	
	public Body subtract(Body Subtrahend);
	
	public Body divide(Body Divisor);
	
	public Body negate();
	
	public Body pow(int power);
	
	public int scale();
	
	public Body setScale(int scale);
	
	public String toString();
	
	public Body ZERO();
}

nun gibt kann die Matrix mit all den Objekten einer Klasse gefüllt werden, welche dieses Body-interface implementieren. für die reellen zahlen hab ich dazu eine Klasse realNum geschrieben.

Code:
public class realNum
implements Body
{
	private BigDecimal Num;
	private int scale;
...	
//Konstruktoren
...
	public Body add(Body Addend)
	{
		return new realNum(Num.add(Addend.Num), scale);
	}
...
//alle anderen funktionen des intefaces
...
}

das problem dabei ist das Addend ebenfalls vom typ Body ist (was natürlich ja auch so sein muss, da es im interface so deklariert wurde). jedoch kennt der datentyp Body nicht die Objektvariable Num nich, sodass Addend.Num nen dicken Fehler ergibt.

eine lösung des problems wäre in dem interface Body eine Methode getNum() zu deklarieren, welche Num des Objekts zurück gibt.

hier gibt es allerdings dann einen fehler in bezug auf die implementierung in anderen Körpern.

zum bsp. der körper der polynome. hier könnte man schlecht eine getNum() methode implementieren, da es ja mehrere signifikante zahlen in einem polynom gibt.

eine weitere lösung welche keine probleme bei anderen körpern hervorruft ist die nutzung der Methode toString(). Da ja alle mathematischen Körpern aus der realen welt kommen gibt es immer eine entsprechende notation.

bei reellen zahlen wäre dies zum beispiel: 65293.1235876e23
bei polynomen: 52x^2+41x-2

so müsste man dann einfach einen parser schreiben der den string in den gewünschten datentyp auf den der körper operiert umwandelt.

bei reellen zahlen: aus dem String "3961.241e12" wird dann eine entsprechende variable vom typ BigDecimal (auf den eben meine Klasse realNum operiert)
bei polynomen: "52x^2+41x-2" wird dann ein zum beispiel ein BigDecimal-Array mit den Koeffizienten des polynoms.

hier leidet aber dann deutlich die performance, da es ja eigentlich unnötig ist den inhalt eines elements eines körper in einen string zu verwandeln und dann wieder zurück. und außerdem können körper nur elemente von ihnen selbst addieren, multiplizieren, ...
man kann zum beispiel nich ein polynom mit einer reellen zahl multiplizieren (schon aber dann muss aus der reellen zahl erst ein polynom nullten grades gemacht werden)

gibt es hierzu eine lösung, bei der die performance nicht dermaßen leidet.

danke schon mal ;)

cya
 
B

Beni

Gast
Die Stringlösung ist schlecht, verursacht nur Probleme zur Laufzeit.

Ich würde mit Generics eine Erweiterung machen:
Code:
public interface Body<B extends Body>{
  public B add( B other );
  ...
}

und dann:

Code:
public class RealNum implements Body<RealNum>{
  public RealNum add( RealNum other ){...}
}
 

Bleiglanz

Gesperrter Benutzer
verwende 2 Interfaces

Field extends Ring

Ring

hat ja keinen Sinn, dass du Polynome in eine Struktor pressen willst, die für Körper ausgelegt ist

und mach deine Matrizen zu Matrizen über Ringen


und im übrigen hast du da was falsch verstanden

wenn du den Körper der Rellenzahlen "implements Body" schreibst, dann wird doch gar nix zwischen Strings und Zahlen hin und her gewandelt

wenn du einen Polynomring implementierst, dann musst du dir schon selbst eine gute "Darstellung" überlegen (z.B. ein Vector der Koeffizienten oder sonstwas), wüsste nicht wo da "Performance" Probleme auftauchen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Elegantere "dirty" Prüfungen? Allgemeine Java-Themen 8
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
temi Lösung zum Speichern von Deltafiles Allgemeine Java-Themen 6
M Hamstersimulator- lösung Allgemeine Java-Themen 3
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
E Methoden Hat jemand eine gute Lösung? Allgemeine Java-Themen 5
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
N Static oder andere Lösung Allgemeine Java-Themen 5
TheWhiteShadow Reflection-Lösung für Objektkopien Allgemeine Java-Themen 3
B Datentypen wav Dateien abspielen mit JMF, Clip und Player klappt nicht. Lösung Codec? Allgemeine Java-Themen 13
J [SWING]Elegante Java Formular Lösung? XML? Allgemeine Java-Themen 4
W Saubere Lösung für das Auslesen einer Html Seite (Mehrsprachigkeit) Allgemeine Java-Themen 5
Private Void rekursive vs. iterative Lösung für Berechnung der Fakultät Allgemeine Java-Themen 12
D Lösung Differentialgl. mit RungeKutta + Kurve zeichnen Allgemeine Java-Themen 3
S große CSV-Dateien Importieren. Beste Lösung ?! AWS,S3,Hadoop!? Allgemeine Java-Themen 4
J Welche Lösung für Servlets und JSPs in Eclipse? Allgemeine Java-Themen 5
hdi Häufige Fehler und deren Lösung Allgemeine Java-Themen 4
G Speichern von Dateien - Lösung bei JNLP? Allgemeine Java-Themen 8
V [Lösung]Hohe Systemauslastung bei JFileChooser auf WindowsXP Allgemeine Java-Themen 5
T Ist IAdaptable die richtige Lösung? Allgemeine Java-Themen 4
T Unbekannte Fehlermeldung + Lösung? Allgemeine Java-Themen 4
K Elegante Lösung zum Manipulieren von Collections gesucht Allgemeine Java-Themen 16
S Problem! Lösung mit Double buffering Allgemeine Java-Themen 3
H if - else if-else bessere Lösung gesucht Allgemeine Java-Themen 4
V Lösung mit iText gesucht. Allgemeine Java-Themen 2
G Was wäre am einfachsten bzw. die beste Lösung? Allgemeine Java-Themen 6
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
L rotateLeft implementierung Allgemeine Java-Themen 2
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Mutable objects und Implementierung von ChangeEvents Allgemeine Java-Themen 5
W Queue Implementierung Allgemeine Java-Themen 6
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
F Implementierung von Teilprogrammen [Java|Python] Allgemeine Java-Themen 7
I TimSort - Sortieralgorithmus - Erklärung und Pseudocode - Implementierung Allgemeine Java-Themen 2
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
ruutaiokwu burstsort-implementierung in java? Allgemeine Java-Themen 2
D Implementierung einer Mehrsprachigkeit, wichtig ? Allgemeine Java-Themen 5
D Implementierung einer Rechteverwaltung Allgemeine Java-Themen 2
R "Countdown" Implementierung Allgemeine Java-Themen 5
K A*-Implementierung flexibler machen Allgemeine Java-Themen 4
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S BlueJ Cäsar-Implementierung Allgemeine Java-Themen 6
S Implementierung Programmneustart Allgemeine Java-Themen 10
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
S Implementierung einer PluginArchitektur Allgemeine Java-Themen 5
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
R Intervall-Implementierung mit selbstgebauter LinkedList Allgemeine Java-Themen 7
J Best Practice für implementierung von equals(...) Allgemeine Java-Themen 7
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
V Wie finde ich die konkrete Implementierung? Allgemeine Java-Themen 8
G Implementierung vom AKS-Test Allgemeine Java-Themen 11
R software implementierung Allgemeine Java-Themen 3
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
K Design / Implementierung Allgemeine Java-Themen 5
B jre browser implementierung ? Allgemeine Java-Themen 4
G Klasse Queue Implementierung in Java Allgemeine Java-Themen 4
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben