Hilfe bei Design (Pattern)

Hallo zusammen.

Ich habe heute mal eine theoretische Frage, zum Design von meiner Software. Kurz zum Ziel. Ich möchte für einen Sportverein, eine Planungssotware schreiben. Es soll möglich sein, verschiedene Mannschaften (z.B. Frauen I, U20 weiblich usw) anzulegen. Es soll dann weiter möglich sein, für jedes Mannschaftsmitglied einen persönlchen Spielplan zu erstellen.

So nun gibt es verschiedene Objekete.
Einen Nationalenverband, mehrere Regionalverbände und weiter Lokalverbände. Alle Verbände behinhalten Wettbewerbe (zum Regionalmeisterschaften, Deutsche Meistschaften usw).

Aus diesem Grund gibt es eine Basisklasse (AbstractAssociation).

Alle Objekte sind abgeleitet von einer Data Klasse, die die gemeinsamen Funktioenn und Members beinhaltet. Allerdings gibt es Klassen, die mit Listen arbeiten (werden von ListOperation) abgeleitet, andere dürfen keine Listen haben und werden nur von SportsObject abgeleitet. Ich finde das ewtas umübersichtlich. Allerdings ist mir nichts anderes eingefallen.

Ich hofe meine Erklärung war nicht zu konfus
 

mrBrown

Super-Moderator
Mitarbeiter
Alle Objekte sind abgeleitet von einer Data Klasse, die die gemeinsamen Funktioenn und Members beinhaltet. Allerdings gibt es Klassen, die mit Listen arbeiten (werden von ListOperation) abgeleitet, andere dürfen keine Listen haben und werden nur von SportsObject abgeleitet.
Dieser Teil klingt merkwürdig und tendenziell nach schlechtem Design, aber in der kürze ist das zu wenig Info, um da mehr zu sagen.

Generell würde ich Vererbung vermeiden, wenn es keine sinnvolle "ist ein"-Beziehung ist, sondern nur zum Teilen von Methoden etc dient - und Data als Klasse klingt nicht nach einer sinnvollen Oberklasse, kommt aber auf den Kontext an.
Für ListOperation als Klasse gilt das gleiche - AbstractAssociation und SportsObject klingen dagegen schon besser, auch wenn der Name von letzterer uU etwas ungünstig ist.
 
Danke für deine schnelle Antwort. Ohne Klassendiagramm ist auch nicht so einfach nachzu vollzeiehen.

Meine Abstrakte Klasse beinhaltet eine Liste, die verschiedene SportsObjekte aufnehmen kann. Ich wollte mir den ganzen Kram ersparen addLocalAssociation, addRegionalAssoication. Stattdessen gibt es nur eine Liste, und mann kann dann über getter die Objekte abfrage.

Also : Meine Abstrakte klasse beinhaltet Daten. Aus diesem Grund kann ich ja keine INterface Lösung verwenden. Zumindest nicht nach meinem Kenntnistsand
 

looparda

Top Contributor
Leider wird mir der Sachverhalt nicht ganz klar. Kannst du vielleicht ein Minimalbeispiel bereitstellen oder ein Klassendiagramm, welches das Problem aufzeigt?
Alle Objekte sind abgeleitet von einer Data Klasse, die die gemeinsamen Funktioenn und Members beinhaltet. Allerdings gibt es Klassen, die mit Listen arbeiten (werden von ListOperation) abgeleitet, andere dürfen keine Listen haben und werden nur von SportsObject abgeleitet.
Du kannst natürlich immer mit Listen arbeiten, und dort wo keine Daten vorhanden sind eine leere Liste zurückgeben.
 

mrBrown

Super-Moderator
Mitarbeiter
Meine Abstrakte Klasse beinhaltet eine Liste, die verschiedene SportsObjekte aufnehmen kann. Ich wollte mir den ganzen Kram ersparen addLocalAssociation, addRegionalAssoication. Stattdessen gibt es nur eine Liste, und mann kann dann über getter die Objekte abfrage.

Also : Meine Abstrakte klasse beinhaltet Daten. Aus diesem Grund kann ich ja keine INterface Lösung verwenden. Zumindest nicht nach meinem Kenntnistsand
Welche Abstrakte Klasse meinst du? Ich les da oben von vieren, die abstrakt sein sollten ;)
 
Java:
public class DataObject implements Comparable<DataObject> {

    private final String name;

    /**
     * default constructor <br>
     *
     * @param name
     */
    public DataObject(@NonNull String name) {
        log.debug("create a new {} object", DataObject.class.getSimpleName());       
        this.name = name;
    }

    @Override
    public int compareTo(@NonNull DataObject dataObject) {
        return name.compareTo(dataObject.name);
    }

    @Override
    public int hashCode() {
        return 31 + name.hashCode();
    }

    @Override
    public boolean equals(@NonNull Object object) {
        DataObject dataObject = (DataObject) object;

        return name.equals(dataObject.name);
    }

    @Override
    public String toString() {
        return name;
    }
}

Java:
@Slf4j
public abstract class SportsObject extends DataObject{

    /**
     * default constructor <br>
     *
     * @param name
     */
    public <T extends SportsObject> SportsObject(@NonNull String name) {
        super(name);

        log.debug("create a new {} object", VolleyballListObject.class.getSimpleName());
    }
   
    /**
     * update the element <br>
     *
     * @param element
     */
    public abstract <T extends SportsObject> void updateElement(@NonNull T element);
}
Java:
public abstract class SportsListObject extends SportsObject {

    @Getter(AccessLevel.NONE)
    private Set<Class<?>> acceptedElementType = Sets.newHashSet();

    @Getter(AccessLevel.NONE)
    private List<SportsObject> elementList = Lists.newArrayList();

    /**
     * default constructor <br>
     *
     * @param name
     */
    public SportsListObject(@NonNull String name) {
        super(name);

        log.debug("create a new {} object", SportsListObject.class.getSimpleName());
    }

    /**
     * add the element class to the acceptedElementType list <br<
     *
     * @param list
     */
    protected void acceptedElementType(List<Class<?>> list) {
        for (Class<?> type : list) {
            log.debug("accept {} ", type.getSimpleName());
            acceptedElementType.add(type);
        }
    }

    /**
     * add the list elements to the elementList <br>
     * check if the element class is accepted <br>
     * update the list element if it exists already <br>
     *
     * @param elements
     */
    public <T extends SportsObject> void addElement(@NonNull List<T> elements) {
        for (T element : elements) {

            if (acceptedElementType.contains(element.getClass())) {
                // check if the element exists already
                Optional<SportsObject> optional = elementList.stream().filter(e -> e.equals(element)).findFirst();

                if (optional.isPresent()) {
                    // update the existing element
                    optional.get().updateElement(element);
                } else {
                    // add the element to the element list
                    log.debug("add the {}", element);
                    elementList.add(element);
                }

            } else {
                log.warn("the class {} is not supported ", element, element.getClass().getSimpleName());
            }
        }
    }

    /**
     * remove the elements of the list to the elementList <br>
     * check if the element class is accepted <br>
     * remove the list element if it exists <br>
     *
     * @param elements
     */
    public <T extends SportsObject> void removeElement(@NonNull List<T> elements) {
        for (T element : elements) {

            if (acceptedElementType.contains(element.getClass())) {
                // check if the element exists already
                Optional<SportsObject> optional = elementList.stream().filter(e -> e.equals(element)).findFirst();

                if (optional.isPresent()) {
                    // remove the existing element
                    log.debug("remove the {}", element);
                    elementList.remove(optional.get());
                } else {
                    log.debug("the element {} was not found", element);
                }

            } else {
                log.warn("the class {} is not supported ", element, element.getClass().getSimpleName());
            }
        }
    }

    /**
     * @param elementType
     * @return a list with elements of the appropriate type <br>
     */
    @SuppressWarnings("unchecked")
    protected <T extends SportsObject> List<T> getElementOf(@NonNull Class<T> elementType) {
        return (List<T>) elementList.stream().filter(e -> e.getClass().equals(elementType))
                .collect(Collectors.toList());
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
N Hilfe beim Design Allgemeine Java-Themen 13
W Hilfe bei Methode Allgemeine Java-Themen 14
M Javascript Hilfe bei ToDoList? Allgemeine Java-Themen 1
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
T Hilfe bei negation von suchabfrage Allgemeine Java-Themen 2
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
A Hilfe beim Verständnis Allgemeine Java-Themen 16
V Hilfe mit Java Code Allgemeine Java-Themen 4
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
alinakeineAhnungv Hilfe bei einem Straßenbahn-Projekt von mir Allgemeine Java-Themen 18
Aboya Kugel mit Hilfe von Dreiecken rekursiv zeichnen Allgemeine Java-Themen 2
K Anzeigemöglichkeit von Bildern in JavaFX mit Hilfe von MongoDB GridFS Allgemeine Java-Themen 0
A Preisberechnung, Hilfe Allgemeine Java-Themen 4
M Bräuchte Hilfe bei der Aufgabe Allgemeine Java-Themen 1
s_1895 Hilfe bei Java Tic Tac Toe Allgemeine Java-Themen 8
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
U Erste Schritte Hilfe bei simplem Glücsspiel in Java Allgemeine Java-Themen 4
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
K Objektorientierung, hilfe Allgemeine Java-Themen 9
V Bilder bei bestimmten Zeiten wechseln, bitte um Hilfe Allgemeine Java-Themen 5
D Hilfe bei Informatik Hausaufgaben Allgemeine Java-Themen 30
RalleYTN Brauche Hilfe beim Run-Length-Decoding Allgemeine Java-Themen 9
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
F NetBeans Hilfe!!! Allgemeine Java-Themen 23
H Schiffe versenken JButton Schiffe mit GUI verbinden Hilfe! Allgemeine Java-Themen 2
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
S GetMethode erstellen mit Hilfe von Parametern Allgemeine Java-Themen 9
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
B Hilfe bei Übungsblätter Allgemeine Java-Themen 9
O Erste Schritte Benzinverbrauch Code Hilfe Allgemeine Java-Themen 3
C Hilfe Bei Vegas Slide Allgemeine Java-Themen 0
B Hilfe!! spiel um Funktion des Selektierens erweitern (mit ASCII-Tabelle) Allgemeine Java-Themen 3
Ice4P4rty Hilfe Bei Promillerechner Allgemeine Java-Themen 9
C Atfx mit Hilfe von OpenAtfx auslesen Allgemeine Java-Themen 1
G Hilfe bei Projektarbeit Allgemeine Java-Themen 5
GenerationLost Input/Output Custom Serialization - hilfe bei Realisierung Allgemeine Java-Themen 8
J Hilfe!!! Ausbildung Allgemeine Java-Themen 14
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
T Hilfe bei Code Allgemeine Java-Themen 3
U Swing Hilfe beim Quellcode für ein Codierungs-/Decodierungsprogramm Allgemeine Java-Themen 9
S Hilfe bei Gui Allgemeine Java-Themen 3
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
GRAZZ0R Hilfe zum Spiel Mensch ärger dich nicht Allgemeine Java-Themen 1
C Hilfe bei den Ausgaben Allgemeine Java-Themen 4
K Hilfe bei GUI für Pizza-Service Allgemeine Java-Themen 11
J Hilfe bei Datumsberechnung aus Textfeld Allgemeine Java-Themen 10
I Bitte Drngend hilfe Allgemeine Java-Themen 2
C Hilfe bei NoClassDefFoundError Allgemeine Java-Themen 14
C Hilfe bei einer Fehler meldung Allgemeine Java-Themen 3
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
C Hilfe bei einer Point Ausgabe Allgemeine Java-Themen 7
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
N Erste Schritte [HILFE] effizienter,leistungsfähigermbackground Pixelbot Allgemeine Java-Themen 5
A Hilfe gesucht Allgemeine Java-Themen 44
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
C Hilfe bei einer Fehlermeldung Allgemeine Java-Themen 5
C Hilfe bei MalformedURLException Allgemeine Java-Themen 7
D Baum zeichnen hilfe Allgemeine Java-Themen 4
M Hilfe bei parseInt Allgemeine Java-Themen 4
F Compiler-Fehler Hilfe bei Startup error Allgemeine Java-Themen 3
D Mit Hilfe von Java aus Excel-Sheet Zellen in neues Excel Dokument kopieren Allgemeine Java-Themen 3
F Socket NullPointerException Bitte um hilfe! Allgemeine Java-Themen 12
M Input/Output Java + OCR ? Erfahrungen und bitte um Hilfe Allgemeine Java-Themen 12
M Brauche Hilfe bei Quellcodeverständnis Allgemeine Java-Themen 4
B Zahlen ausgeben hilfe! Allgemeine Java-Themen 8
S Java USB dringend Hilfe! Allgemeine Java-Themen 6
X Hilfe bei Programm Allgemeine Java-Themen 5
zer0zer0 Best Practice apache common cli - optionen für hilfe ausblenden Allgemeine Java-Themen 5
F Bitte um Hilfe! Allgemeine Java-Themen 5
S Hilfe bei geeignetem Pattern (Decorierer) Allgemeine Java-Themen 2
D Brauche Hilfe bei Rechnung (Exponentiation) Allgemeine Java-Themen 12
F Brauche Hilfe bei Java Allgemeine Java-Themen 6
S Hilfe bei simplem Programm Allgemeine Java-Themen 3
J Ein blutiger Anfänger braucht Hilfe Allgemeine Java-Themen 7
B Hilfe bei JUnit Test Allgemeine Java-Themen 1
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
B Dringend Hilfe gesucht für Struktogramm Allgemeine Java-Themen 11
C Brauche Hilfe mit Modulo Strategie Allgemeine Java-Themen 2
S Brauche Hilfe: Prüfungsaufgabe Java Allgemeine Java-Themen 8
J Probleme bei kompilieren ... Bitte um Hilfe Allgemeine Java-Themen 2
G java.exe in System 32. Hilfe!!! Allgemeine Java-Themen 8
M google plus java api - Anfänger sucht Hilfe Allgemeine Java-Themen 7
M Hilfe mit JOptionPane Allgemeine Java-Themen 2
I Hilfe: Klasse Vieleck Allgemeine Java-Themen 5
I javax.sound.sampled.* - Hilfe zu den Controls Allgemeine Java-Themen 8
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
S Hilfe bei der Cosinusapproximation Allgemeine Java-Themen 10
K Arraylist Hilfe Allgemeine Java-Themen 13
K Hilfe Felder Allgemeine Java-Themen 7
T Hilfe im Lizenz-Dschungel Allgemeine Java-Themen 11
S brauche Hilfe für ssh connection in java Allgemeine Java-Themen 6
W sql Query abspeichern selber variabele hilfe...? Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben