# Grundsätzliche Programmstruktur planen



## seballa (12. Jan 2013)

Hi,

ich lerne seit einigen Wochen Java (u.a. von Kopf bis Fuss), programmieren ist nur Hobby ich bin aber nicht ganz ohne Vorkenntnisse und hab auch schon einige Projekte in anderen Sprachen programmiert, Objektorientierung ist mir allerdings neu.

Meine Grundmotivation Java zu lernen ist es einen *Ersatz für das Reservierungsbuch* (im Moment noch so richtig mit Papier und so) unseres kleinen Hotels zu schreiben.

Auch wenn das Programm am Anfang nicht sehr viel können muss(soll) ist das Projekt für mich recht ambitioniert aber ich denke so kann ich am besten lernen. Ich versuche deshalb im Vorfeld alles möglichst gründlich zu planen.

Ich habe mir eine grobe Programmstruktur entworfen und dabei sind mir einige Fragen gekommen. Und gerade jetzt in dieser 1. Phase möchte ich Fehler vermeiden da die wohl später nicht so einfach zu verbessern sind:







1. Sieht die Struktur grundsätzlich für euch vernünftig aus??

2. Um die Vorteile der DB zu nutzen möchte ich keine Objekte speichern sondern die einzelnen Werte in Tabellen, spricht etwas dagegen?? 

3. Wo packe ich komplexere Abfragen hin (Select unden,Zimmer Where ("Zeitraum von bis"))? Packe ich die in die DB Klasse und spreche sie  direkt von der GUI aus an oder packe ich die in eine Extra AbfragenKlasse und pack da auch ?

Noch ein bisschen früh, aber ich mach mir halt 1000 Gedanken:
4. Was lasse ich im Arbeitsspeicher?? Lese ich bei jeder Benutzer Aktion nur einige Datensätze aus der DB und mache neue Objekte oder checke ich bei jeder Abfrage ob schon ein Objekt mit der KundenID im Speicher besteht (ich hab früher vor allem mit PHP programmiert, da gabs in dem Sinn keinen Arbeitsspeicher)

Vielen Dank für eure Hilfe

Liebe Grüße und Hallo erstmal

Seballa


----------



## tröööt (12. Jan 2013)

also ohne irgendwie voreingenommen zu sein oder dir nicht zu glauben ... klingt das irgendwie wie ne aufgabe ausm abi / uni ... zumindest bin ich der meinung das wir diese bzw eine ähnliche hausaufgabe hier schon mal hatte ... auch wenns ne weile her ist ...

ohne damit sagen zu wollen das es ne gut verpackte hausaufgabe sein könnte ... sieh meinen post mehr in die richtung : genau das thema gabs hier schon mal und wurde beantwortet ... versuch dir doch erstmal daraus ein paar ideen zu holen ... und bei problemen kannst du ja dann hier mit genauen fehlermeldungen und code-teilen gerne weiter posten ...

was ich mit sagen will : an sich keine schwere aufgabe ... aber da so bereits schon mal hier gelöst werden wohl nur weniger lust verspüren sich von damals zu wiederholen


----------



## gst (12. Jan 2013)

Für sowas gibt es fertige Software. Privat zu programmieren ist OK. Aber Sachen, mit denen du Geld verdienen willst, sollten keine Spielwiese und Experimentierfeld sein. Speziell, wenn du mit Fehlern in der Software Ärger bekommst und finanzielle Verluste einfährst (fehlerhafte und fehlende Buchungen, falsche Preise, ...). Ansonsten kannst du mit etwas Vorwissen und genügend Motivation in ein paar Wochen einen einfachen Prototypen machen. Der Entwurf ist nicht gerade gut. Was sollen die doppelten Pfeile andeuten? Dass jeder mit jedem wild durcheinander kommuniziert? Domänenobjekte sollten nichts von GUI wissen. Genausowenig wie die DB auf die DOs zugreift. Benamungen sind auch recht seltsam. Was ist ein "KlasseZimmer"? Und tut es wirklich Not, jedes Implementierungsdetail wie Setter/Getter hinzuschreiben? Mache ein einfaches Diagramm ohne den ganzen Implementierungskram, das dafür aber eine erkennbare Struktur aufweist. Und vergiss "Ich versuche deshalb im Vorfeld alles möglichst gründlich zu planen." am besten ganz schnell wieder. Sowas funktioniert nicht.


----------



## seballa (12. Jan 2013)

Erstmal danke für die Antworten



tröööt hat gesagt.:


> was ich mit sagen will : an sich keine schwere aufgabe ... aber da so bereits schon mal hier gelöst werden wohl nur weniger lust verspüren sich von damals zu wiederholen



Bin schon ein paar Jahre aus der Schule raus und hab da leider nicht Programmiert, ist tatsächlich nur mein Hobby.
Ich such nochmal, hab ich allerdings schon gemacht und leider nichts gefunden, falls ich es jetzt finde schreib ich hier den Link noch rein.
Ok jetzt habe ich das hier gefunden. Hilft mir aber nicht wirklich weiter, ich will nicht abrechnen sondern nur reservieren. http://www.java-forum.org/hausaufgaben/145680-konventionelles-uml-klassendiagramm-erstellen.html



gst hat gesagt.:


> Für sowas gibt es fertige Software. Privat zu programmieren ist OK. Aber Sachen, mit denen du Geld verdienen willst, sollten keine Spielwiese und Experimentierfeld sein. Speziell, wenn du mit Fehlern in der Software Ärger bekommst und finanzielle Verluste einfährst (fehlerhafte und fehlende Buchungen, falsche Preise, ...). Ansonsten kannst du mit etwas Vorwissen und genügend Motivation in ein paar Wochen einen einfachen Prototypen machen.


Ja geb ich dir recht. Hab ich mir schon einige angesehen und ich hab mit den wichtigsten großen Hotelprogramen schon gearbeitet. Aber das ist mir 1. fast immer viel zu aufgebläht und kompliziert und 2. brauch die Software nicht wirklich, wir kommen prima zurecht. Es ist mehr der Weg das Ziel. Will sagen, ich BIN motiviert jedoch zur Zeit noch am Anfang. Je nachdem was/ob was rauskommt wird es erstmal parallel geführt, es geht hier nur um wenige Zimmer.Außerdem soll keine Abrechnung damit gemacht werden sondern ausschließlich die Kundenkartei geführt und die Reservierungen angezeigt werden. 
Wichtig ist mir überhaupt irgendwo anzufangen. weil ich der Meinung bin ohne eigenes Projekt lerne ich Java nicht, und das war das erste, dass mir eingefallen ist und das mich interessiert.



gst hat gesagt.:


> Der Entwurf ist nicht gerade gut. Was sollen die doppelten Pfeile andeuten? Dass jeder mit jedem wild durcheinander kommuniziert? Domänenobjekte sollten nichts von GUI wissen. Genausowenig wie die DB auf die DOs zugreift. Benamungen sind auch recht seltsam. Was ist ein "KlasseZimmer"? Und tut es wirklich Not, jedes Implementierungsdetail wie Setter/Getter hinzuschreiben? Mache ein einfaches Diagramm ohne den ganzen Implementierungskram, das dafür aber eine erkennbare Struktur aufweist. Und vergiss "Ich versuche deshalb im Vorfeld alles möglichst gründlich zu planen." am besten ganz schnell wieder. Sowas funktioniert nicht.



 
1. Ähh ja, Der Pfeil von der DB zurück sollte den Datenfluss darstellen, die Datenbank wird gefragt, und liefert die Daten zurück. Die Gui ruft eine Methode auf und zeigt das zurückgelieferte an. Die KlasseZimmer soll ein Zimmerobjekt erzeugen (unterschiedliche Zimmer, unterschiedliche Preise)
2. Ich hab EINFACH versucht meine Gedanken zu ordnen und das ist raus gekommen.  
3. Das es erstens anders kommt und zweitens als man denkt ist nun mal  so im Leben. Nur hab ich mir vorgenommen bei diesem Projekt meine arbeit vorher zu strukturieren (das erste mal). Ich hab sonst immer einfach aus Spaß drauf losgeschrieben bin aber auch häufiger mal hängen geblieben oder hab mir unnötig viel arbeit gemacht.


----------



## deetee (12. Jan 2013)

Also für einen Informatiker ist dieses Diagramm inakzeptabel, aber für jemanden, der das zum ersten Mal macht und aus einem völlig anderen Bereich kommt, ist das schon sehr ambitioniert und ganz ok.

Was du bedenken solltest ist, dass man auch diese Planungsarbeit erlernen muss, genauso wie das Programmieren. Sicher hast du schon von UML gehört, damit erstellt man in der Informatik solche Diagramme. 

Zu deinen Fragen:



> 1. Sieht die Struktur grundsätzlich für euch vernünftig aus??


Das meiste ist ok, aber ich würde z.B. nicht den Preis an das Zimmer binden, sondern an eine Buchung.



> 2. Um die Vorteile der DB zu nutzen möchte ich keine Objekte speichern sondern die einzelnen Werte in Tabellen, spricht etwas dagegen??


Einzelne Werte in Tabellen? Du meinst sicherlich einzelne Werte in Spalten. Ja, das ist allgemein sinnvoll.



> 3. Wo packe ich komplexere Abfragen hin (Select unden,Zimmer Where ("Zeitraum von bis"))? Packe ich die in die DB Klasse und spreche sie direkt von der GUI aus an oder packe ich die in eine Extra AbfragenKlasse und pack da auch ?


Hier wirds komplizierter! Es gibt viele Wege die nach Rom führen. Es gibt diverse Prinzipien, die für eine saubere Struktur förderlich sind, z.B. das Single Responsibility Principle. Das bedeutet, dass eine Klasse nur eine bestimmte Verantwortlichkeit haben sollte, z.B. Lesen aus der Datenbank, Schreiben in die Datenbank, usw. 
Es kann aber für Anfänger einfach sein erstmal mehrere solcher Verantwortlichkeiten in einer Klasse zu implementieren. Du merkst dann mit der Zeit was du optimieren könntest, und das nennt man das Refactoring.



> Noch ein bisschen früh, aber ich mach mir halt 1000 Gedanken:
> 4. Was lasse ich im Arbeitsspeicher?? Lese ich bei jeder Benutzer Aktion nur einige Datensätze aus der DB und mache neue Objekte oder checke ich bei jeder Abfrage ob schon ein Objekt mit der KundenID im Speicher besteht (ich hab früher vor allem mit PHP programmiert, da gabs in dem Sinn keinen Arbeitsspeicher)


Da siehst du was falsch, auch mit PHP nutzt man den Arbeitsspeicher. Ehrlich gesagt weiß ich gerade nicht worauf du hinaus möchtest, evtl. Caching?
Auf jedenfall klingt das für mich, als ob du das erstmal ignorieren kannst. Optimieren kannst du später, und eine saubere Basis wird dir dann hoffentlich dabei behilflich sein.


----------



## seballa (12. Jan 2013)

Hallo deetee, vielen Dank für deine Antwort, das hilft mir schon mal sehr weiter. Ich werde jetzt meine Struktur nochmal überdenken, Planen in welcher Reihenfolge ich programmiere und dann einfach mal anfangen. Und dann nach und nach weiter machen bis zur Gui. Wichtig war mir das ich nicht völlig daneben liege. 

Vielen Dank
Seballa


----------

