Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Bitte verurteilt mich nicht für diese "blöde" Frage, aber ich bin mit der Java Programmierung gerade erst eingestiegen. 😮💨
Ich suche jemanden, der mir helfen kann meinen Code in verschiedene Packages aufzuteilen. Klingt total simple, ich weiß, aber ich stelle mich einfach zu blöd an. Ich habe den gesamten Code schon geschrieben, einfach Methode für Methode hintereinander weg. Meine Uni verlangt bei der Aufgabenstellung allerdings die Aufteilung in mehrere Packages. Ich habe einen Plan wie ich den Code aufteilen will, bekomme es aber einfach nicht hin...
Du musst uns schon etwas geben mit dem wir arbeiten koennen. Am besten eine kurze Beschreibung was dein Projekt macht, und dann zumindest die Namen von den Klassen welche du bereits hast.
Du musst uns schon etwas geben mit dem wir arbeiten koennen. Am besten eine kurze Beschreibung was dein Projekt macht, und dann zumindest die Namen von den Klassen welche du bereits hast.
Es handelt sich um eine einfach Getränkelagerverwaltung. Sie zeigt in einer gui die Getränke mit jeweiligen Lagerbeständen an, die ich über Buttons ändern kann. Mein Programm greift dazu auf eine Datei zu, in welcher die Getränke + Anfangsbestände stehen. Wenn ich die Bestandsänderung über meinen Button eingebe, speichert es diese auch in der Datei. Ich habe auch die Möglichkeit in der Benutzeroberfläche ein neues Getränk+Anfangsbestand hinzuzufügen.
Ich hoffe das war halbwegs verständlich.
Klassen habe ich kaum. Da müsste ich vermutlich welche erstellen und die methoden „verteilen“.
Ich würde gern alles zur gui in ein package, alles zu der datenverarbeitung in ein anderes und dann noch eine zu externen änderungen, da habe ich eine Klasse für eine weitere Datei, welche jede Minute prüft ob es diese Datei gibt und in der ebenfalls Bestandsänderungen stehen, die verarbeitet werden müssen.
Ich würde gern alles zur gui in ein package, alles zu der datenverarbeitung in ein anderes und dann noch eine zu externen änderungen, da habe ich eine Klasse für eine weitere Datei, welche jede Minute prüft ob es diese Datei gibt und in der ebenfalls Bestandsänderungen stehen, die verarbeitet werden müssen.
Also du hast die Geschaeftslogik und Model getrennt von der GUI. Das hat zwei Vorteile, du kannst die Geschaeftslogik ganz einfach durch automatisierte Tests testen (Unit-Tests), und du kannst die GUI jeder Zeit austauschen, oder mehrere gleichzeitig anbieten. Das schreiben und Lesen der Text-Datei kommt in eine eigene Klasse, dann kannst du auch dort jeder Zeit andere Mechanismen einsetzen.
Und alles was mit der GUI zu tun hat kommt in das GUI-Paket, weil da gehoert es hin. Du musst eben aufpassen dass du keine Geschaeftslogik dort aus Versehen einbaust.
Jetzt wo ich noch so darueber nachdenke, koennte man noch Model und Logik mischen, dann muss man das nicht ganz so zerkleinert handhaben. Aber das siehst du eh in dem Moment wo du das baust.
Zum umbauen selber, fang' damit an dass du das Model in Klassen abtrennst. Dann kannst du anfangen die gesamte Logik in eine eigene Klasse auszulagern.
Ich mache hier jetzt mal beinhart einen teilweisen Review, damit andere auch noch etwas davon haben.
Java:
import java.awt.*;
Ich persoenlich wuerde vorschlagen Wildcard-Imports zu vermeiden, es kann zu Kollisionen fuehren und man nimmt die falsche Klasse ohne es zu merken.
Java:
private static final long serialVersionUID = 1L;
Ich weisz dass Eclipse da eine Warnung ausgibt, aber die kannst du genauso gut abschalten. Wenn du nicht vorhast deine Klassen ueber den Standard-Java-Mechanismus zu serialisieren (kleiner Hinweis: Mach das nicht) dann brauchst du dieses Feld nie.
Java:
// das Lager ist eine Datenstruktur, die Getränke und ihren Bestand
// speichert
private Map<String, Integer> lager;
Und Jetzt sind wir beim Kern direkt angekommen. Anstelle einer Map solltest du eigene Model-Klassen machen. Sowas in der Richtung (Pseudo-Code):
Java:
public class Artikel {
public String getBezeichnung();
public String getMenge();
}
public class Lager {
public void addArtikel(Artikel);
public List<Artikel> getArtikel();
public Artikel getArtikel(String name);
public void removeArtikel(Artikel);
}
Mit den Klassen kannst du bereits einen guten Teil der Kapselung herstellen.
Java:
System.exit(0);
Freundliche Erinnerung dass System.exit ein hartes beenden der JVM ist. Das ist in etwas so als wuerde man den Stecker ziehen. Das kann gewollt sein, kann aber auch Seiteneffekte haben, in diesem Fall duerfte es keine Rolle spielen. Nachdem du die Close-Operation auf deinem Fenster gesetzt hast, waere es sauberer das Fenster einfach zu schlieszen und damit dann die Applikation zu beenden.
Um dann noch zur Logik zurueckzukehren. Wenn du dir die obigen Model-Klassen angelegt hast, und dann die Map damit ersetzt hast, kannst du anfangen die Logik in weiteren Klasse zu sammeln. Sowas wie:
Java:
public class Lagerverwaltung {
private Lager lager = new Lager();
public void eintragen(Artikel artikel);
public boolean genugVorhanden(String artikelName, int menge);
public void entnehmen(String artikelName, int menge);
}
Die Klasse verwendest du dann in deiner Oberflaeche. Ist jetzt auch nicht ganz sauber, aber ich bin auch nicht mehr ganz wach. Aber so in die Richtung sollte es gehen.
Also nochmal nur um sicher zu gehen: Erster Schritt, ersetzen der Map durch eine List mit Artikel (man koennte auch wieder eine Map machen). Zweiter Schritt, ersetzen dieser List/Map dann durch Lager. Und als dritter Schritt, einen groszen Teil der Logik (ist genuegend da? Gibt es den Artikel?) dann in Lagerverwaltung.