Vererbung und Komposition??

Diskutiere Vererbung und Komposition?? im Allgemeine Java-Themen Bereich.
M

MiMa

Nicht wirklich, das ist mein zweiter Anlauf das Zeug zu verstehen, denn ich komme da ziemlich schnell durcheinander.
Was ich auf Anhieb verstanden habe ist die Vererbung durch Extend.
Aber irgendwann muss man da mal durch und das ist bei mir aktuell.
 
F

fhoffmann

Nicht wirklich, das ist mein zweiter Anlauf das Zeug zu verstehen, denn ich komme da ziemlich schnell durcheinander.
Was du vorhast - tausende Dateien zú bearbeiten, sie zu vergleichen und ggf. umzuwandeln - ist ein grßes Projekt. Wenn du noch nicht einmal die Basics (Vererbung) von Java verstanden hast, wirst du daran scheitern.
Sorry,ich will dich nicht entmutigen sondern nur vor fast unvermeidlichen Frustrationen schützen..
 
M

MiMa

Die meisten Methoden habe ich bereits in den letzten 2 Jahren in Java geschrieben und somit auch die Sprache Java, MySQL, XML, kennen gelernt.
Davor habe ich ein Jahr mit Applescript gelernt, was jetzt ohne Mac sinnlos ist.
Jetzt versuche ich es etwas energischer es zu erlernen, denn jetzt ist der Zeitpunkt gekommen wo ich es benötige.
Ich mache das als Hobby in meiner Freizeit und die Motivation ist es zu sehen wie es funktioniert. Ich habe schon viele Methoden programmiert die das machen was sie sollen. Oft lerne ich das was ich gerade benötige. Und wenn es XML ist dann lerne ich halt mal ein paar Monate mal XML.
Zu verstehen wie JavaFX GUI mit FXML und MVC funktioniert und es endlich geschafft hatte es selbst um zu setzten hat zwar auch ein Jahr gedauert, aber jetzt kann ich es einigermassen.

Der Anzahl der Post nach, scheint meine Aktuelle Frage doch nicht so trivial zu sein?
 
Zuletzt bearbeitet:
T

temi

Doch hat es, denn die Methoden zur Speicherung der Daten in ein PDF unterscheiden sicher erheblich als das schreiben der Daten in eine doc.
Willst du denn Daten in ein PDF oder DOC schreiben? Ich dachte du möchtest Dateien klassifizieren. Dazu musst du Informationen aus den Dateien lesen, z.B. Dateigröße, Dateiname, MIME-Typ, EXIF-Informationen, usw.

Und genau diese gelesenen Daten, dann anschließend in deiner Software speichern. Demnach hättest du eine Klasse in der die gesammelten Informationen gespeichert werden und für jeden Dateityp (Textfile, JPG, PNG, DOC, PDF, usw.) eine ReaderKlasse, die die gesuchten Informationen aus den Dateien liest.

Ich könnte mir das ungefähr so vorstellen:
Java:
FileInfoReader reader = new CompositInfoReader();

reader.addReader(new PdfInfoReader());
reader.addReader(new DocInfoReader());
reader.addReader(new PngInfoReader());

List<FileInfo> fileInfos; // die gewünschten Daten
for (var f : files) { // alle gefundenen Dateien
    fileInfos.add(reader.getInfo(f));
}
Es gibt für jeden Dateityp einen spezialisierte Klasse. Der CompositReader sammelt diese einzelnen Reader. Danach gibts du jede gefundene Datei an den CompositReader, der diese intern an seine enthaltenen spezialisierten Reader weitergibt. Sollte ein Reader zur übergebenen Datei passen, liest er die gewünschten Daten und gibt diese zurück.

Vorteil wäre, dass es sich einfach für weitere Dateitypen erweitern lässt.

Aber vielleicht habe ich einfach mißverstanden, was du erreichen möchtest.
 
M

MiMa

@temi
danke für Deine Info, aber diese Reader habe ich bereits.
Was ich benötige ist das dynamische erstellen von Objekten während der Laufzeit, damit die spezifischen Variablen und Methoden der entsprechenden Dateitypen genutzt werden können.

Mittlerweile habe ich etwas über dynamische Bindung gelesen und muss mal sehen ob dies mein Problem löst.
Im Grunde ist es so das ich für eine gefundene PDF-Rechnung andere Instanzvariabeln und Methoden benötige als eine Doc-Rechnung.
Demnach ist der Inhalt eines Objektes bei pdf anders als bei doc.

Die gefundenen Daten aus den Inhalten der Dateien sind quasi Metadaten und diese schreibe ich in eine MySQL Datenbank und zusätzlich an die richtigen Stellen der Datei damit diese Metadaten aus irgendeinen Grund nicht nochmal erneut ermittelt werden müssen.
 
T

temi

Im Grunde ist es so das ich für eine gefundene PDF-Rechnung andere Instanzvariabeln und Methoden benötige als eine Doc-Rechnung. Demnach ist der Inhalt eines Objektes bei pdf anders als bei doc.
Also geht es doch um die enthaltenen Metadaten, die sich je nach Dateityp unterscheiden?
 
T

temi

Ich hatte mir mal Gedanken gemacht, ein kleines Programm zur Verwaltung einer Sammlung zu schreiben. Das Problem ist ungefähr das gleiche, denn je nachdem was in der Sammlung enthalten ist, sind verschiedene Eigenschaften notwendig, z.B. bei Briefmarken (Land, Datum, Erhaltung, Motiv) und bei Porzellan (Land, Manufaktur, Erhaltung).

Meine Idee dazu, war eine Klasse Item (das Sammelobjekt) und eine Klasse Property (die Eigenschaft). Item enthält eine Map mit Eigenschaften, die variabel zugewiesen werden können. Es soll dem Benutzer möglich sein, für "seine" Sammlung die notwendigen Eigenschaften selbst anzulegen. Vielleicht wäre das ja eine mögliche Richtung für dich.

Ganz grob, um die Idee zu skizzieren.
Java:
class Item {
    private final String name;
    private final Map<Property, String> properties = new HashMap<>();
    
    public void addProperty(Property property, String value) {
        properties.put(property, value);
    }
}

class Property {
    public final String name;
    
    public Property(final String name) {
        this.name = name;
    }
}

Property manufacturer = new Property("Manufacturer");
Property year = new Property("Year");

Item antiqueCup = new Item("Antike Tasse");
antiqueCup.addProperty(manufacturer, "Meissen");
antiqueCup.addProperty(year, "1905");
 
M

MiMa

Danke für den Tipp.
Das würde bedeuten, da sich je nach Dokumenttyp wie Rechnung alle Instanzvariablen und Methoden zusammenstellen kann.
Das heißt aber auch das ich ein Pool von Instanzvariablen und einen Pool von Methoden habe aus der ausgewählt werden kann.
Ich denke das dabei die Verwaltung und Erweiterbarkeit stark darunter leidet und auch die Übersichtlichkeit verloren geht??
Aktuell habe ich 215 Methoden die übersichtlich in Klassen gegliedert sind, welche dann aufgelöst werden müssten??
Oder verstehe ich das falsch?

Aktuell durchsuche ich den Inhalt nach einer Dokumentart und wollte nach den Ergebnissen das Objekt rückwärtig zusammen bauen.
Suche Dokumentart, dann ermittelt den Dateityp und baut das Objekt zusammen.
PDF-Rechnung = Datei <-- pdf <-- Rechnung
Word-Rechnung = Datei <-- doc <-- Rechnung

Die alternative habe ich schon vor Monaten gemacht und die wäre den Suchalgorithmus um zu drehen.
Also nicht gleich nach der Dokumentart suchen, sondern erst nach dem Dateityp und vererbe es nach und nach!
PDF = Datei <-- pdf.
In der Klasse PDF würde dann die Suche nach der entsprechenden Dokumentart "Rechnung" statt finden.
PDF-Rechnung = Datei <-- pdf <-- Rechnung
Der Nachteil ist, das ich in jeder DateiTyp Klasse nach der Dokumentart suchen muss.
 
Zuletzt bearbeitet:
T

temi

Ich verstehe immer noch nicht, warum der Infosatz einer pdf-Rechnung andere Methoden als der Infosatz einer doc-Rechnung haben sollte. Kannst du mal ein Beispiel nennen?

Ich glaube wir schreiben immer noch aneinander vorbei.
 
M

MiMa

1. Die Datei wird untersucht und aus dem Inhalt werden Metadaten ermittelt.
Bei einer PDF-Rechnung sind die Informationen wie bei der Doc-Rechnung genau die gleichen.
PDF-Rechnungen können gescannte Papierdokumente sein oder aus Online Shops die als PDF geladen wurden.
Eine Doc-Rechnung ist in der Regel eine Rechnung die ich selbst an jemanden geschrieben haben kann.
Bei beiden werden die gleichen Daten ermittelt die in einem Objekt Platz finden Datei <-- Rechnung
Die Vererbung wäre recht simpel.
Da ich aber die gefundenen Metadaten nicht nur in meine Datenbank speichere, sondern auch in die Datei direkt einbetten möchte benötige ich spezielle Methoden die meine gefundenen Metadaten in das PDF eingebettet. Das kann mit iText oder pdfBox gemacht werden. Und dazu benötige ich die Klasse pdf welche genau diese Instanzvariablen und Methoden beinhaltet. diese Muss zur Erzeugung des Objektes zwischen der Klasse Datei und der Klasse Dokument gebaut werden. Datei <-- pdf <-- Rechnung
PDF-Rechnung.JPG
Bei einer Doc-Rechnung werden die Informationen anders in die Datei eingebettet und daher sind andere Methoden nötig.
Ich kann da nicht mit iText und pdfBox Methoden arbeiten.
Doc-Rechnung.JPG
Es müssen halt immer andere Objekte zusammengebaut werden die aus den verschiedenen Klassen zusammengesetzt werden müssen.
 
T

temi

Ok, verstanden. Aber dazu benötigst du nur ein Pendant zu den oben beschriebenen Readern, eben Writer. Das muss meiner Ansicht nach nicht in den Infosatz (ich nenn das jetzt einfach mal so).

Also:

Du liest eine Datei ein. Ein zum Dateityp passender Reader holt die notwendigen Informationen aus der Datei. Der Infosatz wird erstellt. Soll geschrieben werden (z.B. EXIF), dann wird der Infosatz an einen zum Dateityp passenden Writer übergeben. Fertig.
 
M

MiMa

Wenn ich mal genauer darüber nachdenke, hast du recht.
Es wird überhaupt keine weitere Klasse benötigt die in ein Objekt eingebettet werden muss. Lediglich die Methoden zum schreiben in die Datei müssen verfügbar sein.
Ich werde das mal so implemetieren und schauen ob weniger mehr ist und vor allem das Problem löst?
Danke.
 
T

temi

Beschäftige dich mal mit SOLID. Hier geht es speziell um das Single-Responsibility-Prinzip.

Durch separate Reader und Writer hast du ein sehr offenes System, dass du Stück für Stück implementieren/testen und um neue Dateitypen erweitern kannst. Im Idealfall musst du für einen neuen Typen nur einen Reader und Writer schreiben und irgendeiner Verwaltungsklasse (z.B. CompositReader) hinzufügen.
 
T

temi

Und wenn du noch etwas Zeit sinnvoll investieren magst und es noch nicht getan hast, dann arbeite doch mal das Buch "Entwurfsmuster von Kopf bis Fuß" durch. Das wird dir ganz neue Horizonte eröffnen!
 
Zuletzt bearbeitet:
M

MiMa

Danke dir das werde ich machen. Die Kopf bis Fuß Bücher finde ich ganz besondert toll weil dort in Wort und Bild erklärt wird.
 
W

White_Fox

Und wenn du noch etwas Zeit sinnvoll investieren magst und es noch nicht getan hast, dann arbeite doch mal das Buch "Entwurfsmuster von Kopf bis Fuß" durch. Das wird dir ganz neue Horizonte eröffnen!
Dem stimme ich zu. Bezüglich Java und Softwareentwicklung allgemein war dies das bisher erhellendste Buch, das ich gelesen habe.
 
Thema: 

Vererbung und Komposition??

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben