OOP Mehrfache Vererbung von abstrakten Klassen

skummy

Aktives Mitglied
Hallo Forum,

meine Frage bezieht sich eher auf Code und OOP-Style. Das Programm funktioniert und macht im Prinzip was es soll.

Ich habe eine abstrakte Basis-Klasse:

Java:
public abstract class XMLResponse  {

    protected InputStream in;
    protected String specialChild;

    public void execute() throws JDOMException, IOException {
        this.parseResponse();
    }

    public abstract List<?> getParseObjects();

    public void setResponseContent(InputStream in) {
        this.in = in;
    }

    public void setSpecialChild(String specialChild) {
        this.specialChild = specialChild;
    }

    protected abstract void parseResponse() throws JDOMException, IOException;
}

Diese Basis-Klasse implementiert die Methoden zum Setzen der Eigenschaften. Dann existierten zwei weiteren Klassen, die von dieser Basisklasse erben:

Java:
public abstract class XMLMasterDataResponse extends XMLResponse {


    protected List xmlItems;    

    @Override
    public List<?> getParseObjects() {
        return xmlItems;
    }

    @Override
    protected void parseResponse() throws JDOMException, IOException {
        XMLParser parser = new XMLMasterData(in);
        Element items = parser.getSpecialChildParserElement(specialChild);
        this.createItemObjects(items);        
    }

    public abstract void createItemObjects(Element items);

}

Die andere Klasse, die von dieser erbt implementiert nur die Methode parseResponse() auf eine andere Art und Weise.

Die konkrete Klassen, die einfach von XMLMasterDataResponse erben, brauchen nur noch die Methode createItemObjects(Element items) implementieren:

Java:
public class XMLMasterDataBillOfMaterial extends XMLMasterDataResponse {

    @Override
    public void createItemObjects(Element items) {
        xmlItems = new ArrayList<XMLBillOfMaterialStructure>();
        List<Element> item = items.getChildren();
        for(Element i: item) {
            XMLBillOfMaterialStructure billItem = new XMLBillOfMaterialStructure();
            billItem.setItemIDSupplier(i.getChild("ItemIDSupplier").getText());
            billItem.setArticleIDSupplier(i.getChild("ArticleIDSupplier").getText());
            billItem.setDescription(i.getChild("Description").getText());
            xmlItems.add(billItem);
        }
    }
}

Um andere Werte in die xmlItems-Liste einzufügen, muss immer nur eine andere Klasse erstellt werden, die createItemObjects(Element items) implementiert.

Erzeugt und konfiguriert werden die einzelnen Objekte dann so:
Java:
       XMLResponse response = new XMLMasterDataBillOfMaterial();
       response.setSpecialChild("BillOfMaterial");
       response.setResponseContent(in2);
       response.execute();

Normalerweise übergebe ich das response Objekt noch einer Methode sendXML(XMLResponse response), die die Funktionen response.setResponseContent(in2) und response.execute() ausführt.


Kurz und Knapp...kann man das so machen? Für Tipps und Hinweise wäre ich sehr dankbar.


Grüße,
Sandro
 

RySa

Bekanntes Mitglied
Die andere Klasse, die von dieser erbt implementiert nur die Methode parseResponse() auf eine andere Art und Weise.

Irgendwie kann ich hier, "die andere Klasse" nicht finden

Aber von dem was ich hier sehen kann, sieht es eigentlich ganz ok aus. Da kann man sich noch streiten, ob 1-2 von den Methoden nicht im Interface festgelegt werden sollten, aber sonst müsste es ok sein :)
 
Zuletzt bearbeitet:
S

SlaterB

Gast
sieht grundsätzlich schlüssig aus,
man sollte nur überlegen es nicht zu übertreiben,
vielleicht zeigen andere Klassen noch mehr Verwendung, bisher könnte es genausogut auch einfach

Java:
public abstract class XMLResponse  {
   public List<Element> parse(InputStream in, String specialChild) throws ..;
}
lauten, mit entsprechenden Unterklassen,

die gesparten Zeilen
> XMLParser parser = new XMLMasterData(in);
> Element items = parser.getSpecialChildParserElement(specialChild);
erscheinen marginal, mehrfaches
> xmlItems = new ArrayList<XMLBillOfMaterialStructure>();
könnte man auch noch vermeiden, aber naja
 

skummy

Aktives Mitglied
@SlaterB

Okay, vielleicht hätte ich den letzen Absatz vom Post doch ausführlicher schreiben sollen:

Es existiert eine weitere Klasse, die ein (noch nicht fertig konfigurtiertes) Objekt vom Datentyp XMLReponse entgegennimmt und erst dort ausführt.

Java:
public class SendXML {

public void sendXML(XMLResponse response) throws IOException, JDOMException {
 
//... erstelle in2 Objekt

            response.setResponseContent(in2);
            response.execute();

//... weiteres
            List responseList = response.getParseObjects();
}

    public List<?> getResponseList() {
        return responseList;
    }

Bevor ich das response Objekt an die sendXML Methode übergebe, mache ich noch folgendes:

Java:
        XMLResponse response = new XMLMasterDataBillOfMaterial();
        response.setSpecialChild("BillOfMaterial");
        SendXML send = new SendXML();
        send.sendXML(response);
        send.getResponseList();

        XMLResponse response2 = new XMLMasterDataBillOfMaterialVersions();
        response2.setSpecialChild("Items");
        SendXML send2 = new SendXML();
        send2.sendXML(reponse2);
        send2.getResponseList();

Mit deiner Methode, müsste ich das specialChild Element mit an sendXML übergeben, was ich aber vermeiden wollte, da die Klasse SendXML davon eigentlich nichts wissen muss, oder?

Grüße
 

Marco13

Top Contributor
Nur aus Neugier, weil da ein paar Trigger-Worte gefallen sind, und nur, falls das kein "Betriebsgeheimnis" ist: Kannst du ein paar Stichworte über den "groben Zusammenhang" nennen, in dem du das schreibst?
 

skummy

Aktives Mitglied
@Marco13

Hmmm...es ist im Grunde genommen ein WebService, der per REST XML-Dateien an einen ESB sendet, empfängt und aufbereitet (parsing).
Die Funktionien für die einzelnen Clients werden per WSDL-Datei bereitstellt. Da der REST Endpunkt allein sehr unflexibel und viel Overhead hat, exisitiert dieser WebService dazwischen, der Request und Response für die Clients sehr stark vereinfacht.

Oder wolltest du auf etwas komplett anderes hinaus?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
A Mehrfache XOR Verschlüsselung Allgemeine Java-Themen 11
Daniel_L Mehrfache Ausführung desselben Threads/Tasks verhindern? Allgemeine Java-Themen 4
U Vererbung?! Allgemeine Java-Themen 15
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
MiMa Vererbung und Komposition?? Allgemeine Java-Themen 38
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
W Generics + Vererbung Allgemeine Java-Themen 47
M Vererbung mithilfe von Bluej Allgemeine Java-Themen 3
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
A Vererbung Selbstreferenzparameter Allgemeine Java-Themen 14
D Thema: Vererbung Ober-/Unterklassen Allgemeine Java-Themen 16
D Frage zu Vererbung Allgemeine Java-Themen 5
N Vererbung mit GUI Allgemeine Java-Themen 9
E Vererbung Countable mit Vererbung Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
T Javaklassen und vererbung Allgemeine Java-Themen 32
F Vererbung Allgemeine Java-Themen 5
Neumi5694 Vererbung Restriktive Vererbung Allgemeine Java-Themen 4
A Vererbung Übungsaufgabe Vererbung - Erstellung Klassenhierarchie Allgemeine Java-Themen 1
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
L Unabhängige Auslieferung bei Vererbung Allgemeine Java-Themen 20
S MVC - Vererbung Allgemeine Java-Themen 4
C Enums und Vererbung Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
D Unterschied Vererbung und Polymorphie? Allgemeine Java-Themen 4
K Vererbung ohne Basisklasse zu kennen Allgemeine Java-Themen 20
Da_Tebe ArrayList<xyz> Verschachtelung oder Vererbung? Allgemeine Java-Themen 6
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
M OOP PropertyChangeListener - Vererbung oder Komposition? Allgemeine Java-Themen 5
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
dayaftereh Vererbung Hilfe Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
A PropertyChangeListener Vererbung Allgemeine Java-Themen 4
P DefaultTreeCellRenderer Vererbung Allgemeine Java-Themen 5
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
J Vererbung bei abstrakten Klassen Allgemeine Java-Themen 2
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
L Checkstyle: Wann ist eine Methode für Vererbung entworfen? Allgemeine Java-Themen 13
S normale vererbung als interface Allgemeine Java-Themen 2
S statische Methoden und Vererbung Allgemeine Java-Themen 6
R Vererbung - doppelte Paint-Methode Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Vererbung bei enums ? Allgemeine Java-Themen 3
W Frage zu Vererbung / konkretes Beispiel Allgemeine Java-Themen 4
F Vererbung von SessionBeans Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
L Annotations mit Vererbung Allgemeine Java-Themen 4
M Singleton und Vererbung? Allgemeine Java-Themen 45
T Problem mit Vererbung Allgemeine Java-Themen 3
V Vererbung und Schleifen Allgemeine Java-Themen 5
C Comparable + Vererbung Funktioniert nicht? Allgemeine Java-Themen 4
A Ansatz Objektorientierung, Methoden Vererbung Allgemeine Java-Themen 2
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
D Zugriffsmethode nach Vererbung ändern? Allgemeine Java-Themen 5
S Vererbung in UML Allgemeine Java-Themen 3
T Nochmal Frage zu Vererbung Interfaces etc. Allgemeine Java-Themen 10
Y Gedanken zur Vererbung Allgemeine Java-Themen 7
F Vererbung, Generizität und Collections. Allgemeine Java-Themen 7
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
F Vererbung Allgemeine Java-Themen 5
S Vererbung von mehreren Klassen? Allgemeine Java-Themen 5
C enum und Vererbung Allgemeine Java-Themen 3
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
G vererbung vs benutzung Allgemeine Java-Themen 7
L Vererbung klappt nicht Allgemeine Java-Themen 5
W Probleme mit Arrays und Vererbung ! Allgemeine Java-Themen 5
M vererbung einer "selbst-instanzierungs-klasse" Allgemeine Java-Themen 16
J Vererbung. Allgemeine Java-Themen 8
H Frage zur Vererbung Allgemeine Java-Themen 5
S private Instanzvaribalen bei "Innerer-Vererbung" Allgemeine Java-Themen 9
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
M frage zur vererbung Allgemeine Java-Themen 12
G Generics und Vererbung. Allgemeine Java-Themen 21
M Vererbung von Hashtables Allgemeine Java-Themen 5
C dynamische Vererbung Allgemeine Java-Themen 6
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
S Polymorphie Polymorphismus bei Abstrakten Klassen Allgemeine Java-Themen 2
sliwalker Redundante Deklarationen in abstrakten Klassen Allgemeine Java-Themen 6
GilbertGrape Wo Dokumentation einer abstrakten Methode? Allgemeine Java-Themen 5
C Exception weiterleiten bei Abstrakten Methoden ( run ) Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben