Design-Frage

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hi-Ho,

mal ne allgemeine Design-Frage: Ich habe eine Klasse A von dieser Klasse erben mehrere Klassen (Achildren). Dann habe ich eine weitere Klasse B, von welcher auch mehrere Klassen erben (Bchildren).

Code:
public class A {

  private String name = null;
  private double wert = 0.0;

  protected A() {};

  protected A(String name, double wert) {
    this.name = name;
    this.wert = wert;
  }

  public double getWert() {
    return this.wert;
  }

  public String toString() {
    return this.name;
  }
}

Code:
public class Achildren extends A {

  public Achildren() {
    super("Achildren", 3.30);
  }
}

Der Aufbau von B und Bchildren ist ähnlich.

Gesucht ist das Design für Klasse Z. Klasse Z kennt nur die Superklassen A und B und soll alle Subklassen dieser Superklassen einmal aufnehmen (praktisch eine Art Auflistung), und in Form von ihrer Superklasse wieder zurückgeben können. Außerdem müssen über die toString()-Methode in der Klasse Z die Name aller Achildren und Bchildren (die ja dann nur noch in Form ihrer Superklasse vorliegen) zurückgegeben werden.

Normalerweise würde Klasse Z dann in etwa so aussehen:

Code:
public class Z {

  A[] as = null;
  B[] bs = null;

  public Z() {
    
    as = new A[10];
    bs = new B[10];
  }

  public void addA(A a) {
    // a hinzufügen
  }

  public A getA(int pos) {
    // a zurückgeben
  }

  public void addB(B b) {
    // b hinzufügen
  }

  public B getB(int pos) {
    // b zurückgeben
  }

  public String toString() {

    String str = "";   
    for (int i = 0; i < as.length; i++) {
      str += as[i].toString();
    }
    // selbes für bs
  }
}

Die Klasse, die alle Achildrens, Bchildrens und Z instanziiert und beinhaltet nennen wir M. Mein Problem liegt jetzt darin, dass Z eigentlich keine Objekte von A und B benötigt, sondern lediglich deren Namen über toString und ein eindeutiges Identifikationsmerkmal, über welches ich später in M (M fragt zu einem späteren Zeitpunkt über getA oder getB Werte von Z ab) neue Instanzen der Achildrens und Bchildrens erstellen kann => Jede Subklasse von A und B darf und muss ja nur genau einmal in Z vorkommen, und ein Objekt dieser Subklassen in Z wird nicht benötigt, da später in M ohnehin anhand des Rückgabetyps von Z ein neuer Typ von Achildren bzw. Bchildren erstellt wird. Deshalb erscheint mir diese Implementierung etwas unsauber.

Falls meine Ausführungen jetzt jemand verstanden, und einen Lösungsansatz für mich hat, wäre ich sehr dankbar.
 

Marco13

Top Contributor
So ganz hab' ich glaubich nicht kapiert, aber ... bei "Identifizierungsmerkmal" und "genau eine" dachte ich spontan an eine
Map<Identifizierungsmerkmal, ? extends A> mapA = ...
???:L
Aber irgendwie klingt es auch, als wäre "Z" nur eine Art "factory" für die verschiedenen Unterklassen... Beschreib vielleicht nochmal (als Pseudocode oder Kommentiertes Interface) was Z genau können soll...
 

The_S

Top Contributor
OK, ich erkläre die Situation mal an einem etwas konkreterem Beispiel:

Klasse A ist ein Getränk (Getraenk), Achildren sind Klassen wie Cola, Bier, Wasser, ... Klasse B ist ein Gericht (Gericht), Bchildren sind Klassen wie Schweinebraten, Lasagne, Suppe, ... Klasse Z ist die Speisekarte, die alle Gerichte und Getränke auflistet. Klasse M ist der Kellner, der die Speisekarte zum Klasse "Gast" bringt. Der Gast wählt ein Getränk und ein Gericht aus der Speisekarte aus, und gibt dem Kellner die Klasse "Bestellung" zurück. Der Kellner bringt die Bestellung dann zur Klasse "Koch", welcher die gewünschten Gerichte (Schweinebraten, Lasagne, Suppe, ...) kocht und die Getränke aus dem Kühlschrank holt (Objekt instanziiert). Der Kellner bringt dann das Gericht und das Getränk wiederrum zum Gast, welcher die Gerichte verzehrt.

Die Frage ist jetzt: Wie schaut die Klasse "Speisekarte" aus?

Wenn das mal keine geile Darstellung war ... :cool: . Ich hoffe jetzt ist alles klar.
 

Tobias

Top Contributor
Die "Speisekarte" könnte doch statt konkreter Instanzen einfach die entsprechenden Class-Instanzen transportieren - da kriegt man den Namen raus und der Koch kann sie womöglich sogar zum Kochen mißbrauchen ;).
 

The_S

Top Contributor
Und wie bekomme ich da die Namen raus? Ich möchte ja nicht den Namen der Klasse haben, sondern den Namen, den die toString()-Methode zurückliefert (wenn auf der Speisekarte eine GemueseSuppe steht, ist das einfach was anderes, wie wenn da eine Gemüse Suppe steht ;) ).
 

SilentJ

Bekanntes Mitglied
Vielleicht solltest Du ein Interface definieren, dass den Klassennamen gemäß deiner Anforderung zurückliefert?
 

The_S

Top Contributor
Joa, dessen bin ich mir bewusst - und da ist auch das Problem. Meinetwegen könnte man auch auf die "toString" verzichten, wenn man das irgendwie anders designen könnte.
 

byte

Top Contributor
Du willst also in der Speisekarte alle Namen von Getränken und Gerichten eintragen, ohne Objekte davon zu erzeugen?

Du könntest z.B. die Namen als Meta-Informationen in den Klassen führen. Du kannst Dir z.B. eine Annotation definieren, die den Namen des Gerichts oder des Getränks hält. Die Speisekarte liest diese Meta-Informationen dann per Reflection oder AnnotationProcessor aus.
 

The_S

Top Contributor
Richtig. Womit wir beim nächsten Problem wären => Annonations kann ich leider nicht verwenden :x . Aber danke für den Hinweis.
 

byte

Top Contributor
Du könntest ähnliches pre Java 5.0 auch mit XDoclet erreichen, aber das ist für Deinen Fall vielleicht etwas overkill.

Ansonsten würde ich mir einfach so eine Art Registry bzw. Factory implementieren, wo alle Gerichte und Getränke registriert sind. Die Registry kennt alle Implementierungen sowie deren Namen und kann diese bei Bedarf auch erzeugen. In Deinem Fall wäre die Registry der Koch.

Einziges Manko: Kommt eine neue Implementierung (Gericht, Getränk) hinzu, so muss die Implementierung erst beim Koch registriert werden. Sonst steht sie nicht auf der Speisekarte.
 
G

Gast

Gast
Das mit dem registrieren sehe ich weniger kritisch, der Koch kann ja später nicht einfach etwas kochen, von dem er noch nie etwas gehört hat.

Ich würde Auch zu einer Registry tendieren. Eine Factory würde ich bei bedarf zusätzlich anbieten, passt aber nicht wirklich zur Rolle des "Kochs".
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Java Design Frage Allgemeine Java-Themen 10
M OOP Design Frage Allgemeine Java-Themen 2
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
L Design-Frage: Platzierung der Save-Methode Allgemeine Java-Themen 3
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
S Frage zum Design der Datenstruktur Allgemeine Java-Themen 10
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
M Frage zum Design :: allgemein Allgemeine Java-Themen 6
U Frage zu DB Design Allgemeine Java-Themen 3
S design frage Allgemeine Java-Themen 10
R Design-Frage Allgemeine Java-Themen 9
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
S ArrayList Design Allgemeine Java-Themen 4
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
M Diverse Design-Fragen Allgemeine Java-Themen 6
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
T OOP Fehler im Design Allgemeine Java-Themen 9
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
R Parameter Adapter - Design Allgemeine Java-Themen 1
D Bezüglich Design meines Codes Allgemeine Java-Themen 1
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
J Domain Driven Design - Modellierungsfrage Allgemeine Java-Themen 3
F Welches Design Pattern? Allgemeine Java-Themen 3
H MVC Design Allgemeine Java-Themen 9
J Swing Eigenes Button-design Allgemeine Java-Themen 2
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
C Gutes Code Design (3 Schichten Modell) Allgemeine Java-Themen 19
D Design Stations-Gitter Allgemeine Java-Themen 4
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
G Design Patterns für Programm Allgemeine Java-Themen 3
I Wie populär ist Design by Contract in Java und was haltet ihr davon? Allgemeine Java-Themen 5
Landei Design-Problem Formel-Parser Allgemeine Java-Themen 10
J Aktionen im State-Design-Modell Allgemeine Java-Themen 3
S Design Oberfläche Allgemeine Java-Themen 2
G Domain Driven Design Model Allgemeine Java-Themen 14
G konkretes Domain Driven Design Aggregate Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
B Design Problem Allgemeine Java-Themen 8
faulelotte Verständnisproblem Domain Driven Design Allgemeine Java-Themen 3
D design gesucht - Angabe von zu ersetzenden substrings Allgemeine Java-Themen 2
D Design ohne Getter und Setter Allgemeine Java-Themen 8
D Design: on-the-fly-Parsing + Datenstrukturen Allgemeine Java-Themen 5
N Welches design pattern? Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
S JToolBar Design Allgemeine Java-Themen 3
M Bildersyncronisierung - Design Patterns? Allgemeine Java-Themen 2
T Design - Exception in Thread Allgemeine Java-Themen 3
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
K Design / Implementierung Allgemeine Java-Themen 5
N Checkstyle - Design for Extension Allgemeine Java-Themen 4
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
E Was ist ein gutes Design fuer meine Programm? Allgemeine Java-Themen 3
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
P Apple Design Allgemeine Java-Themen 5
T Design-Tipp gesucht Allgemeine Java-Themen 2
M Design von Java Klassen Allgemeine Java-Themen 2
G java design von klassen und projekten Allgemeine Java-Themen 6
K Design: Klassen in Pakete aufteilen - Eure Meinung Allgemeine Java-Themen 8
S Programmierstil / design Allgemeine Java-Themen 9
S Exception design Allgemeine Java-Themen 2
m@nu Exception-Design Allgemeine Java-Themen 4
N Hilfe beim Design Allgemeine Java-Themen 13
D Design Pattern: Singleton Allgemeine Java-Themen 4
Torres Design-Problem mit Jakarta Struts Allgemeine Java-Themen 2
A Anwendungs-Design (Plugin-Architektur) Allgemeine Java-Themen 4
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Frage regex greater than less than Allgemeine Java-Themen 7
berserkerdq2 Frage zu IntelliJ und JavaFX Allgemeine Java-Themen 1
W Timer Konzept-Frage Allgemeine Java-Themen 16
T Eine Frage des Designs Allgemeine Java-Themen 2
C Frage zu eigenem TableCellRenderer Allgemeine Java-Themen 11
C Programmvorstellung & Frage zum Thema Geschäftsform Allgemeine Java-Themen 51
J Frage zu System.getproperties. Allgemeine Java-Themen 60
molat100 wie kann man die Frage beantworten Allgemeine Java-Themen 1
pkm Frage zur Präzision von Calendar.WEEK_OF_YEAR Allgemeine Java-Themen 12
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
pkm Frage nach eventuellem syntaktischen Zucker bei der Konkatenation von ArrayLists Allgemeine Java-Themen 4
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
F Frage zu System.in Allgemeine Java-Themen 3
marcooooo Frage zum Beispiel im Anhang Allgemeine Java-Themen 16
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
B For-Loop Frage Allgemeine Java-Themen 21
L Java frage Allgemeine Java-Themen 3
bueseb84 Frage zu Mock und UpperBound Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben