Eine konzeptionelle Frage zu OOP

Jeykay

Mitglied
Hallo zusammen.

Ich schreibe ein Programm um einen Schichtplan zu erstellen. Da die erste Version zwar soweit schon läuft, aber alles vom Stil her ganz gruselig programmiert ist (das erste umfangreichere Projekt in JAVA), habe ich es neu angefangen. Dabei stolpere ich nun über das Konzept meiner Objektorientierte Programmierung. Ich versuche es mal etwas Bildlich zu erklären.

Ich habe einen Desktop [Main] welcher eine Ablage [Unverteilt] und zwei weitere Ablagen [Ablage Jan] und [Ablage Frank] hat. In der Ablage [Unverteilt] liegt nun eine Zettel mit Schichtdaten [Schicht]. Nun möchte ich die [Schicht] mit der Maus anklicken und in die [Ablage Jan] ziehen.

Jetzt aber die eigentliche Frage wie ich hier vorgehe? Es gibt min. 2 Möglichkeiten.

1. Ich schreibe im [Main] einen Mouselistener, der dann der [Schicht] "sagt" von wo nach wo sie geschoben wird.

2. Ich schreibe in der [Schicht] einen Mouselistener der dann die eigene [Schicht] verschiebt.

Zurzeit mache ich es mit Version 2. Das ist aber ein relativ hoher Aufwand abzufragen von und nach wo die Schicht geschoben (per Mousedrag) wird, da jedes Mal abgefragt werden muss welches Panel gerade angesprochen wird. Ist alles machbar aber doch schon ein ganz schönes Gehangel durch die getComponets, getParent und so weiter. Und die UI reagiert auf eine Maus, die mit gedrückter Maustaste gezogen wird, sehr anders als ohne gedrückte Maustaste.

Welcher Ansatz ist, OOP mässig, der richtige/bessere.

Gruß
Jan
 
Zuletzt bearbeitet:
Wenn du ganz neu mit einer 2. Version beginnst, dann finde ich es ziemlich gruselig, wenn man ein Java-Desktop-Programm schreibt. Gerade einen Schichtplan möchte man ja immer verfügbar haben, z.B. um Termine zu planen usw.. Also kommen für eine Neuentwicklung nur 2 Plattformen in Frage. Eine App für Mobilgeräte oder eine Webanwendung. In beiden Fällen würde sich ein RaspberryPi oä. (welcher 24/7 laufen kann) als Backend zur Speicherung der Daten anbieten. Ein Frontend könnte dann aus HTML + JavaScript bestehen. Wenn alle deine Geräte von einem System sind, also Tablet und Handy alles von Apple dann würde ich eine App bevorzugen, wenn es aber Geräte unabhängig sein muss/soll dann würde ich eine Webseite verwenden, evtl. eine progressive Webapp. Falls du noch Angst hast dich in HTML+JS einzuarbeiten, es gibt da mittlerweile sehr gute Komponenten-Frameworks, mit denen man gute und sichere Webanwendungen bauen kann.
 
Also wenn es um OOP geht, dann ist es erst einmal relativ egal, welche Technologie so benutzt wird (So die verwendeten Sprachen OO unterstützen).

Aber bei den Angaben kann ich erst einmal keinerlei OO Design erkennen. Alles, was ich so sehe, ist etwas UI, deren Aufbau und Hinweise zu wenigen konkreten Umsetzungen.

Ich habe etwas den Eindruck, dass Du wenig abstrahiert hast. Kann es sein, dass du die diversen Ablagen alle als Klassen modelliert hast? Das wäre dann vermutlich fatal. Es würde ja eine Klasse Ablage reichen und da hättest Du dann mehrere Instanzen von für jede benötigte Ablage.

Was aber direkt deutlich wird: Du denkst nur aus Sicht der UI. Das ist der falsche Ansatz! Du solltest immer mit dem Model starten. Was hast Du alles für Elemente und was für Eigenschaften haben diese. Was für Operationen führst Du aus?
Das wird dann (in der Regel) auch als erstes implementiert. Das ist dann auch unabhängig von weiteren Technologien: Das kann eine Konsolenanwendung sein oder auch Swing / JavaFX nutzen. Du kannst mit einem Framework wie Spring Boot oder Quarkus die Dateb per REST Services nach außen geben, Du kannst direkt ein Webfrontend bauen mit Technologien wie z.B. Spring Boot & Thymeleaf oder was auch immer Du da machen möchtest. Du rennst also so Aspekte komplett voneinander.

Wenn es dann eine Swing Anwendung sein soll: Dann hast Du halt z.B. das MVC Pattern um dann dein Model (das Du schon fertig gebaut hast) mit Controller und View zu ergänzen.

Das wären so ein paar erste Ratschläge, die man ganz allgemein geben kann. Aber ohne Details wird man da nichts konkretes sagen können. Vielleicht willst Du uns ja einmal mehr Details geben, was Du bisher so gebaut / geplant hast. Wenn man genaue Details hat, dann kann man auch deutlich mehr sagen.

Das umfangreiche bei Drag & Drop ist z.B. mit Sicherheit auch optimierbar. Das klingt etwas, als ob Du da paar Dinge sehr umständlich machst. Aber das kann prinzipiell auch täuschen - Drag & Drop kann teilweise umfangreicher werden.
 
Zusatz: welche Teile der Software könn(t)en / soll(t)en ... sich häufig(er) ändern ? Diese gilt es geschickt auszulagern. Die wenig(er) veränderlichen Teile werden zusammengefügt. Das ist u.a. der Sinn der Schichtentrennung: den Einfluss von Änderungen/Erweiterungen möglichst beherrschbar zu halten.
 

Neue Themen


Zurück
Oben