mintmaroo Geschrieben 2. Februar 2018 Geschrieben 2. Februar 2018 (bearbeitet) Hallo ihr Lieben, wie ihr aus anderen Beiträgen entnehmen könnt, entwickel ich an einem XML Validator zur Zeit. Ich bin an einem Punkt angelangt, an dem ich nur eingeschränkten Überblick habe, da ich 6 Klassen geschrieben habe und noch Anfänger bin. Ich habe eine Klasse ModelAusgabe, die alle Attribute und Getter und Setter enthält. In einer Klasse ControllerAusgabe mappe ich den Inhalt aus einer Txt-Datei auf die Attribute. Jetzt möchte ich in einer Klasse FileRead alle Attribute aus ModelAugabe auslesen und als Variabeln in den Code einspeise. Meine Frage: Wo instanziere ich das Objekt von ModelAusgabe, damit ich mit allen Klassen darauf zugreifen kann? Wenn ihr den Quellcode braucht, sagt Bescheid, dann poste ich diesen nachträglich hier ein. Hoffe ihr versteht mich und könnt mir helfen. VG, mintmaroo Bearbeitet 2. Februar 2018 von mintmaroo Zitieren
arlegermi Geschrieben 2. Februar 2018 Geschrieben 2. Februar 2018 Erste Frage: Der Unterschied zwischen einer Klasse und einem Objekt ist dir klar? Wenn nicht, dann schau dir das erstmal an; als einfache Analogie fand' ich immer den Zusammenhang zwischen Blaupause und Haus ganz anschaulich. In dem Beispiel ist die Klasse die Blaupause und das Haus das Objekt. Das nur vorweg, damit wir auch vom gleichen reden. Ich verstehe deinen Satz mit FileRead nicht wirklich. Du möchtest ein Objekt vom Typ ModelAusgabe entgegennehmen und dann ... was? Das erschließt sich mir nicht ganz. Zur Frage, wo du ModelAusgabe instanzieren sollst: Du schreibst doch selber, dass deine Klasse ControllerAusgabe Inhalt einer Textdatei auf die Attribute deines Models mappt. Wieso erzeugst du dann das Model nicht genau da, wo du die Datei ausliest? Also irgendwie sowas: class ControllerAusgabe{ public ModelAusgabe readFromFile(String filePath){ ModelAusgabe model = new ModelAusgabe(); // werte aus Datei lesen und in model eintragen return model; } } class FileRead{ public void otherMethod(ModelAusgabe model){ String x = model.GetX(); // ich verstehe nicht genau, was du hier machen möchtest } } Das ganze wird normalerweise ja von irgendwo aus aufgerufen, bspw. aus deiner Main.java: public static void main(){ ControllerAusgabe controller = new ControllerAusgabe(); ModelAusgabe model = controller.readFromFile(theFile); FileRead read = new FileRead(); read.otherMethod(model); } Zitieren
Whiz-zarD Geschrieben 2. Februar 2018 Geschrieben 2. Februar 2018 (bearbeitet) Wenn wir tatsächlich darüber sprechen, dass du eine XML-Datei nach Fehler überprüfen willst, dann würde ich dir sehr stark davon abraten, dies selbst zu schreiben, da das nicht so trivial ist, wie du dir das wohl vorstellst. Wieso verwendest du nichts fertiges? Oder soll das eine Übungsaufgabe sein? Aber ehrlich gesagt, verstehe ich denen gesamten Text nicht. Wofür dient ModelAusgabe? Was für Getter und Setter besitzt sie? Wenn du das Model-View-Controller-Pattern benutzen willst, dann ist ControllerAusgabe nicht die richtige Klasse. Der Controller sollte am besten das Model reingereicht bekommen. Das Parsen der XML-Datei geschieht also außerhalb des Controllers. Der Controller sollte nur zwischen der View und dem Modell koordinieren. Dein "FileRead" nennt sich auch Parsing bzw. Deserialisierung und dafür gibt es auch schon fertige Klassen, die eine XML-Datei deserialisieren. Bearbeitet 2. Februar 2018 von Whiz-zarD Zitieren
mintmaroo Geschrieben 7. Februar 2018 Autor Geschrieben 7. Februar 2018 Ich habe das Problem jetzt anders gelöst. Ich nehme Java Properties und lade die Daten aus der Property in static Vars und gebe diese dann aus. Funktioniert einwandfrei und auch ohne Dependency Injections. Zitieren
arlegermi Geschrieben 7. Februar 2018 Geschrieben 7. Februar 2018 Wo kommt denn auf einmal Dependency Injection her? Ohne dir zu nahe treten zu wollen, aber deine Wortwahl ("Property", "static Vars", ...) klingt irgendwie danach, als wärst du noch nicht ganz sattelfest in OOP. Ich würde dir nahelegen, dich einmal gründlich mit den Grundlagen vertraut zu machen, bevor du versuchst, komplexe(re) Dinge zu lösen. Zitieren
Whiz-zarD Geschrieben 7. Februar 2018 Geschrieben 7. Februar 2018 vor 13 Minuten schrieb arlegermi: Wo kommt denn auf einmal Dependency Injection her? Das frage ich mich auch. Weiß du überhaupt, was "Dependency Injection" bedeutet? vor 16 Minuten schrieb arlegermi: Ohne dir zu nahe treten zu wollen, aber deine Wortwahl ("Property", "static Vars", ...) klingt irgendwie danach, als wärst du noch nicht ganz sattelfest in OOP. Die Properties-Klasse verwendet er wohl, weil man darüber XML-Dateien lesen und schreiben kann. Also geht es im Grunde nicht um einen XML-Validator, sondern lediglich um einen XML-Parser. "var" hat man in Java 9 eigentlich auch nur aufgrund der Lesbarkeit eingeführt, weil man somit unnötigen Code sparen kann. "static var" klingt in der Tat sehr gruselig und würde einem "static object" gleichkommen. Ich kenne nun das "var" unter Java nicht ganz so gut, da ich mit Java schon seit Jahren nicht mehr entwickelt habe aber unter C# würde dies gar nicht funktionieren und würde auch eher auf die "Dinge, die man nie tun sollte"-Liste gehören. Zitieren
arlegermi Geschrieben 7. Februar 2018 Geschrieben 7. Februar 2018 vor 39 Minuten schrieb Whiz-zarD: Die Properties-Klasse Da muss ich mir an die eigene Nase fassen - bin völlig im C#-Modus gewesen. Ich bleibe aber dabei, dass die ganze Problembeschreibung und Wortwahl für mich darauf hindeutet, dass hier Grundlagen fehlen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.