Was machen wenn Datenstruktur sich ständig ändert?

Status
Nicht offen für weitere Antworten.

dflasjjs

Bekanntes Mitglied
Hi,

ich versuche gerade für die Portierung eines Programms eine Datenstruktur zu erstellen.
Die steht quasi auch in großen Teilen.
Nur für manche Probleme gibt es keine allgemeine Datenstruktur, also die ist von Kunde, zu Kunde unterschiedlich in Teilbereichen des Programms. Was habe ich da nun für Möglichkeiten um mich den örtlichen Gegenbenheiten einfach (am besten ohne viel Änderung im direktem Code) anzupassen?

Ich hoffe es ist klar was ich damit meine. Um es mal platt auszudrücken, bei manchen Kunden gehen mir die Variablen aus. Und ich kann es nicht mit dynamischen Strukturen lösen, weil es keine Struktur zwischen Kunde1 und Kunde2 gibt, es ist einfach ein komplett anderer Aufbau.

Beispiel:
Es soll das Eigenkapital berechnet werden:
Kunde1: gibt das Eigenkapital als Wert direkt ein. Ich habe quasi 1 Wert.
Kunde2: gibt 5 Werte ein, die teilweise mit -/+/* verknüpft sind, zudem noch Zusatzwerte über die Gewichtung brauchen etc.
Kunde3: der Fantansie sind keine Grenzen gesetzt...
 
S

SlaterB

Gast
es ist nicht so ganz deutlich, wie weit das Problem reicht,
z.B. ob die Datenstrukturen in irgendeiner Art gemeinsam verarbeitet werden müssen (gar in einer DB abgelegt werden)

allgemein gesprochen kann ein Teil der Datenstruktur und/ oder der Verarbeitung ein Interface sein, zu dem es pro Kunde eine andere implementierende Klasse gibt,

im Interface eine Methode berechneX() mit festen Rückgabewert double oder was auch immer und fertig,
falls die vielen Datenfelder doch irgendwie in ein Klassenattribut passen müssen, dann z.B. ein String und die kundenspezifische Klasse muss ihre zehn Felder passend kodieren/ dekodieren
 

dflasjjs

Bekanntes Mitglied
es ist nicht so ganz deutlich, wie weit das Problem reicht,
z.B. ob die Datenstrukturen in irgendeiner Art gemeinsam verarbeitet werden müssen (gar in einer DB abgelegt werden)

die werden weiter verarbeitet, allerdings wie ich das sehe, wird nur der Endwert benötigt.
Also es wird immer eine Berechnung vollzogen, aber nur das Ergebnis dieser Berechnung interessiert nachher.


allgemein gesprochen kann ein Teil der Datenstruktur und/ oder der Verarbeitung ein Interface sein, zu dem es pro Kunde eine andere implementierende Klasse gibt,

im Interface eine Methode berechneX() mit festen Rückgabewert double oder was auch immer und fertig,
falls die vielen Datenfelder doch irgendwie in ein Klassenattribut passen müssen, dann z.B. ein String und die kundenspezifische Klasse muss ihre zehn Felder passend kodieren/ dekodieren

Hmm, im Prinzip könnte ich dann ja nen Interface bauen mit dem Resultat, welches dann quasi immer an der selben Stelle ist und die Weiterverarbeitung keine Probleme bereitet und den weg dorthin wirklich durch andere Klassen austauschen. Danke für den Denkanstoß, ich werde noch mal drüber nachdenken.


EDIT: ich müsste bei der Klassenänderung natürlich auch Servlet/JSP-Seiten ändern, gibts da irgendwelche Tricks wie man das umgehen kann oder muss man dort einfach durch?
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
mhnnn
schau dir das mal an. ich weiß nicht ob es für dich sinn macht, aber vielleicht hilft es dir ja...

Code:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


public abstract class Person {
   
   protected Map<String, Integer> values = new HashMap<String, Integer>();
   
   public abstract int calculate();
   
   public void setValue(String key, Integer value){
      values.put(key, value);
   }
   
   public static void main(String[] args) {
      ArrayList<Person> personen = new ArrayList<Person>();
      Person alk = new AlkPerson();
      alk.setValue("Bier", 500);
      alk.setValue("Wein", 300);
      personen.add(alk);
      
      Person essen =new EssenPerson();
      essen.setValue("Brot", 20);
      essen.setValue("Wurst", 30);      
      personen.add(essen);
      
      for(Person p: personen)
         System.out.println(p.calculate());
           
   }
   

}

.....


public class AlkPerson extends Person {

   @Override
   public int calculate() {
      int bier = values.get("Bier");
      int wein = values.get("Wein");
      return bier+wein;
   }

}

.....


public class EssenPerson extends Person {

   @Override
   public int calculate() {
      int brot = values.get("Brot");
      int wurst = values.get("Wurst");
      return brot+wurst;
   }

}
 

byte

Top Contributor
Es soll das Eigenkapital berechnet werden:
Kunde1: gibt das Eigenkapital als Wert direkt ein. Ich habe quasi 1 Wert.
Kunde2: gibt 5 Werte ein, die teilweise mit -/+/* verknüpft sind, zudem noch Zusatzwerte über die Gewichtung brauchen etc.
Kunde3: der Fantansie sind keine Grenzen gesetzt...

Schreib das ganze doch erstmal als BNF auf, um genau zu definieren, was Du brauchst. Daraus lässt sich dann recht einfach ein OO-Design ableiten. Wenn Du ganz geil bist, generierst Du Dir daraus gleich eine eigene DSL. Für die Realisierung von DSLs in Java gibts ja einige gute Tools (siehe z.B. JBoss Drools).
 

Wildcard

Top Contributor
Oder auch den immer gleichen Teil mit zB EMF generieren und dann pro Kunde ein EMF Modell erstellen das das erste erweitert.
Für die View verwendest du eine Adapterlösung die die Daten des konkreten Modells für die View verständlich aufarbeitet.
 

dflasjjs

Bekanntes Mitglied
Ich muss den Thread noch mal ausgraben, weil ich nun auf ein Problem gestoßen bin.
Erst mal noch die Antworten:

@byto: Die Informationen stehen mir jetzt nicht zur Verfügung. Da kann immer noch einer kommen und sagen, wir berechnen das so und so und wieder ganz anders.

@Wildcard: Es wird keinen immer gleichen Teil geben, entweder es passt eben auf ein bereits erstelltes oder halt gar nicht, dann muss alles neu.

Also ich habe wie oben geschrieben, bisher ein Interface gebaut und dann pro Kunde lustig implementiert (bzw habe das vor).
Problem ist nun, in der Klasse die das Interface implementiert habe ich ja einige Datenfelder.
Auf die müsste ich natürlich Zugriff haben (set/get), das Interface hat diese Methoden natürlich nicht.

Wie komme ich nun an diese Datenfelder, die in jeder Klasse vollkommen unterschiedlich sein, ran?
 
M

maki

Gast
Strategy Pattern, allgemein gesagt.
Dazu noch eine Hierarchy von Interfaces mit entsprechenden Methoden.
 

diggaa1984

Top Contributor
total dümmlich, aber eventuell einfach in dem interface ne set und get bereitstellen, welche nen object und n value oder dergleichen bekommt?!

musst dann eben in der implementierung guggn, was da versucht wurde zu getten und zu setten!? .. wie sonst soll man da etwas verallgemeinern
 

dflasjjs

Bekanntes Mitglied
Ich habe mir gerade meinen Code noch mal angeguckt und gerade gesehen, dass ich das Problem schon mal gelöst habe. Ich habe dann einfach nen Cast gemacht. Ist zwar net wunderschön, aber da es für jede Interface-Implementation eh genau eine JSP-Seite und genau ein Servlet gibt, wo dieser Cast stattfindet und dort niemals eine andere Interface-Implementation hingelangt, gehts i.O. würde ich sagen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
C Erst weiter machen wenn fertig Java Basics - Anfänger-Themen 3
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
K mit <<1 kann man mal 2 machen, mit >>2 geteilt durch zwei und was bewirkt <<<1 und >>>1? Java Basics - Anfänger-Themen 5
U Char zu einem String machen Java Basics - Anfänger-Themen 1
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
B Screenshots machen und zwar viele und speichern Java Basics - Anfänger-Themen 12
C Was machen mit nicht mehr verwendeten Instanzen ? Java Basics - Anfänger-Themen 18
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
M Ist es möglich, das größte und zweitgrößte element in einem Array mit nur einer Schleife ausfindig zu machen ? Java Basics - Anfänger-Themen 19
H Array Slot frei machen Java Basics - Anfänger-Themen 3
H Array Slot frei machen Java Basics - Anfänger-Themen 4
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
iman Eingabe von Benutzer Filter machen. Java Basics - Anfänger-Themen 7
F JTextField Kursiv und Fett machen Java Basics - Anfänger-Themen 4
F Aufgabenstellung genauer formulieren/verständlicher machen? Java Basics - Anfänger-Themen 10
A Ich habe das Gefühl etwas grundlegendes falsch zu machen Java Basics - Anfänger-Themen 6
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
I JFrame proportional verkleinerbar machen Java Basics - Anfänger-Themen 3
F Aus geraden eine Kurve machen Java Basics - Anfänger-Themen 6
G Boolschen Ausdruck true machen Java Basics - Anfänger-Themen 2
M Java Methode editierbar machen im Programm Java Basics - Anfänger-Themen 62
T Wie weiter machen? Java Basics - Anfänger-Themen 9
G Erste Schritte Fehler ausfindig machen Java Basics - Anfänger-Themen 4
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
J Fenster wieder unsichtbar machen Java Basics - Anfänger-Themen 2
DaCrazyJavaExpert JScollPane scrollbar unsichtbar machen Java Basics - Anfänger-Themen 2
P Aus einem Array zwei Arrays machen Java Basics - Anfänger-Themen 3
G Objekt Instanziierung von Eingabe abhängig machen Java Basics - Anfänger-Themen 5
B Unique ID nochmal Unique machen Java Basics - Anfänger-Themen 20
S JLabel sichtbar machen/GUI Java Basics - Anfänger-Themen 3
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
W Wie kann man zufällige Anordnungen machen? Java Basics - Anfänger-Themen 1
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
D Objekt Transparenter machen Java Basics - Anfänger-Themen 1
S OOP Frage: Methoden nur bei bestimmten Gegebenheiten aufrufbar machen? Java Basics - Anfänger-Themen 4
A Wie kann ich mein Programm noch effizienter machen? Java Basics - Anfänger-Themen 1
S BufferedImage heller/dunkler machen mit RescaleOp Java Basics - Anfänger-Themen 2
I OOP Wie kann ich diesen Code 'Objektorientiert machen' ? Java Basics - Anfänger-Themen 1
C Mit Java Musik machen? Java Basics - Anfänger-Themen 86
TheSorm String zu Methode machen Java Basics - Anfänger-Themen 1
S Funktionen/Atrribute nur innerhalb einer package Zugänglich machen Java Basics - Anfänger-Themen 8
O Zwei Methoden zueinander Thread-safe machen (Locken) Java Basics - Anfänger-Themen 9
Y Eingabe-Formular mit JSP dynamisch machen - j/n/wie? Java Basics - Anfänger-Themen 2
M Ausführen rückgängig machen Java Basics - Anfänger-Themen 2
K RGB Wert Heller machen (Dunkler machen klappt) Java Basics - Anfänger-Themen 2
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T Text auf der Konsole farbig machen Java Basics - Anfänger-Themen 6
O Eigenen Addon-Loader machen? Java Basics - Anfänger-Themen 33
L Auf herunterfahren des PCs reagieren und Datensatz update machen Java Basics - Anfänger-Themen 15
J jar Dateien global erreichbar machen Java Basics - Anfänger-Themen 3
I Objekte verfügbar machen Java Basics - Anfänger-Themen 5
D Panel sichtbar/unsichtbar machen im ActionListener Java Basics - Anfänger-Themen 3
R Anzahl der ineinander verschachtelten for-Schleifen von Variable abhängig machen Java Basics - Anfänger-Themen 5
K Vererbung Methoden in klassen auslagern und in mehreren Klassen verfügbar machen Java Basics - Anfänger-Themen 8
B Datentypen Casts typesafe machen? ("unchecked") Java Basics - Anfänger-Themen 10
A Objekt global verfügbar machen Java Basics - Anfänger-Themen 4
B Threads Geschwindigkeit der Befehle auf verschiedenen PCs gleich machen Java Basics - Anfänger-Themen 3
H Ausgabe nebenläufig machen Java Basics - Anfänger-Themen 6
S Erste Schritte import für andere Klassenfiles verfügbar machen? (Java unter Eclipse) Java Basics - Anfänger-Themen 8
GianaSisters Methoden eigenes TableModel -> removeRow möglich machen Java Basics - Anfänger-Themen 30
G Eingabe beliebig lang machen Java Basics - Anfänger-Themen 8
S Kapselung Member korrekt nach aussen verfügbar machen Java Basics - Anfänger-Themen 6
C Threads Methode unterbrechbar machen Java Basics - Anfänger-Themen 12
S Bytecode sichtbar machen Java Basics - Anfänger-Themen 2
L Aus ArrayInformationen Objekt machen? Java Basics - Anfänger-Themen 6
E Klasse abstract machen Java Basics - Anfänger-Themen 3
K Klasse für andere Klassen sichtbar machen Java Basics - Anfänger-Themen 6
P Aus einer Klasse ein Interface machen? Java Basics - Anfänger-Themen 5
B String zu int machen Java Basics - Anfänger-Themen 23
M Programm lauffähig machen ohne Run Configurations Java Basics - Anfänger-Themen 5
M aus vielen backsalshs einen machen Java Basics - Anfänger-Themen 6
M Backslash aus mehreren einen machen? Java Basics - Anfänger-Themen 7
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
F Was soll dieses Programm genau machen ? Java Basics - Anfänger-Themen 9
O Will ein Jar-Archive machen mit FAT JAR - geht nicht ! Java Basics - Anfänger-Themen 2
J Wie java programm noch schneller machen? Java Basics - Anfänger-Themen 30
R Problem: Threads Synchronized machen Java Basics - Anfänger-Themen 5
TheKing Bild nur in Kreis sichtbar machen Java Basics - Anfänger-Themen 6
V JFrame erst sichtbar machen wenns geladen ist Java Basics - Anfänger-Themen 8
J Oracle XE bekannt machen Java Basics - Anfänger-Themen 8
K Farbe heller machen Java Basics - Anfänger-Themen 4
C OOP Klassen in der "Hauptklasse" bekannt machen Java Basics - Anfänger-Themen 4
Q Iteration wie machen Java Basics - Anfänger-Themen 5
T Applet zentrieren / Rand machen Java Basics - Anfänger-Themen 5
M Fenster unsichtbar machen Java Basics - Anfänger-Themen 9
J binaerbaum aus listen machen Java Basics - Anfänger-Themen 8
A snapshot machen Java Basics - Anfänger-Themen 4
C Wie Objekte am besten anklickbar machen ? Java Basics - Anfänger-Themen 9
J arraylist ausserhalb der main Methode zugänglich machen (Elemente adden und updaten) Java Basics - Anfänger-Themen 4
H Parameterobjekt in App anwendungsweit verfügbar machen Java Basics - Anfänger-Themen 6
H JTable editierbar machen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben