Java Aufbau von Programmen

TheRepatriate

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
258
Hallo zusammen.
ich studiere jetzt inzwischen in fünften Semester Wirtschaftsinformatik und komme soweit auch ganz gut zurecht :) Bis jetzt habe ich die Klausur "Programmierung" die für uns vorgesehen ist noch nicht geschrieben, die steht in diesem Semester an, was aber kein Problem sein sollte. Die Themen der Veranstaltung sind alle Grundkonzepte, von Datentypen über Schleifen, Arrays, Objektorientierung, Rekursion, Vererbung und nützliche Datenstrukturen (Bäume, Graphen etc....).
Das verstehe ich auch soweit alles. Wir schreiben während des Semesters Testate um unsere Klausurzulassung zu erhalten (bis jetzt alles bestanden). Da werden allerdings nur Methoden ausgefüllt und ein Gefühl dafür ein komplexes Programm zu schreiben bekommt man nicht.
Im letzten Semester stand ein Software-Projekt an, bei dem ich teilweise gemerkt habe, wie wenig ich trotz meiner vorhandenen Grundkenntnisse eigentlich kann.

Deswegen habe ich an euch die Frage: Was würdet ihr empfehlen, wie man am besten lernt ein Programm an sich zu schreiben? Ich weiß wohl, dass man am besten lernt, wenn man ein Programm selber schreibt, aber dazu muss ich erstmal kommen.

Mir fehlt es vor allem daran kontroll klassen zu schreiben (denke ich). Ich weiß nicht wie ich Abläufe richtig programmiere (macht man das mit Threads?). Außerdem verzweifel ich daran, was genau ich in die Main-Methode schreibt, was genau in Konstrukoren, oder doch lieber über Methoden....
Das Problem ist schwer zu beschreiben, aber vielleicht hab ihr es ein bischen verstanden, dass es bei mir daran scheitert, wie ein Programm richtig aufgebaut wird und Klassen (bzw. Objekte) interagieren.

Ich programmiere in Java, mit Eclipse. Vielleicht habt ihr grundlegende Tipps oder könnt Bücher/Tutorials empfehlen, die halt nicht nur beschreiben was Schleifen, Arrays und Objekte sind.

Dankeschön im Voraus!!!
 
Such dir nen Hiwi Job in dem Bereich. Sei ehrlich, wie viel du kannst - wirst in der Regel trotzdem genommen. Und dann quasi bezahlt fürs lernen... Ist zusätzliche Motivation ;)

Mache das gerade mit C++ :D

Dein Betreuer wird dir weiterhelfen, wenn du wo hängst - ansonsten google. Hauptsache du hast ein konkretes Ziel.
 
Also für mich sieht das aus, als wenn dein Problem nicht Java ist, sondern das Objektorientierte Programmieren im Allgemeinen.

Es gibt diverse Bücher (auch Java), die das Programmieren anhand von mehr oder weniger komplexen Programmen beibringen
 
Also man muss zunächst natürlich unterscheiden zwischen Programmieren "im Kleinen" und "im Großen". Für letzteres brauchste Kenntnisse im Software Engineering und über Softwarearchitektur, aber nach dem was du so schreibst, solltest du dich wirklich mehr mit Programmieren "im Kleinen" beschäftigen, also dich beispielsweise intensiv mit Java an sich auseinandersetzen und viele viele Programme schreiben. Auch Lektüre über Design Pattern etc. solltest du dir reinziehen. Und natürlich grundlegende Bücher bzgl. OOA und OOD.
 
Ja also Grundlegend verstehe ich die Objektorientierung, also warum es Objekte gibt, Listen, Vererbung etc. In den testaten haben wir halt so Programme, beispielsweise eine Software für ein Krankenhaus und müssen dann so Methoden programmieren wie: gib die Station mit den meisten Patienten zurück etc.... recht simpel.
Grundlagen der Modellierung kenne ich auch. Nur halt welche Klassen ich konkret brauche, neben dem Datenmodell, die die Abläufe verwalten und wie diese implementiert werden kenne ich nicht.

Kann mir da jemand konkret ein Buch empfehlen (am besten anhand von Java) wo so etwas erklärt wird?
 
Irgendwas sagt mir das was du suchst sind Designpatterns.
Les dir vielleicht einmal was zum Thema Multitier (2/3-Tier Architektur) durch.
Ich denk damit fängt Architektonisch alles an.

Was ist überhaupt das Ziel der ganzen aktion willst du programmierer werden (langfristig)
 
Danke schonmal an alle. Ich will kein Programmierer werden, jedenfalls nicht typischerweise.... Neben dem Studium bilde ich mich gerade in SAP weiter und werde da wahrscheinlich auch mit ABAP anfangen, aber grundsätzlich Programmierer an sich will ich nicht umbedingt werden. Ich denke aber trotzdem das programmieren können irgendwie ne Fähigkeit an sich ist, die einem in vielen Dingen einfach weiterhilft, wenn man erstmal grundsätzliche Dinge verstanden hat.
Deswegen will ich das eher für mich selber und so kleinere Programme schreiben, die mir im Kopf rumschweben. Vielleicht auch kleinere Spiele entwickeln, halt Freizeitmäßig.
 
Ui, ein Thread mit klar formuliert Frage, Satzzeichen und ohne Rechtschreibfehler. Wird immer mehr zu einer Seltenheit.

Ich würde empfehlen, dass du dir einmal die MVC-Architektur (Model-View-Control) ansiehst. Dabei wird sehr stark der Idee der OOP gefolgt. Im Grunde wird dabei sehr strikt gekapselt in "Informationshalter" (Model), "Informationsverwalter" (Control) und "Informationsdarsteller" (View).

Kleines Beispiel:
Wir wollen ein Programm schreiben, mit dem wir den Treibstoffverbrauch eines Fahrzeugs simulieren und durch mehrere Tabellen und Graphen ausgeben können.

Dazu brauchen wir laut MVC (mindestens) folgende drei (beispielhafte) Klassen:
- Auto (Model)
- Fahrverhalten (Control)
- Auswertung (View)

Die Klasse Auto könnte dabei folgende Informationen halten:
- Aktuelle Geschwindigkeit
- Maximale Geschwindigkeit
- Zurückgelegte Strecke
- Bisher verbrauchter Treibstoff
- Verbrauchter Treibstoff während des letzen gefahrenen Kilometers
- etc...

Auch wären Methoden sinnvoll, mit denen beispielsweise beschleunigt, abgebremst, aufgetankt oder ähnliches ausgeführt werden kann.
Du merkst schon, die Klasse hat wirklich nur Member, die auch etwas mit dem Auto zu tun haben. Auc darin enthaltene Logik sollte auschließlich begrenzt sein auf Funktionalität, die etwas mit dem Auto zu tun hat. (Zum Beispiel in der Methode accelerate() überprüfen, ob die Maximalgeschwindigkeit schon erreicht ist.)

In der Klasse Fahrverhalten würde ich dann zum Beispiel die Strecke "abfahren lassen", die ich eben testen möchte. Das bedeutet, ich würde zu den richtigen Zeitpunkten beschleunigen, bremsen, und so weiter und so fort. In von mir festgelegten Abständen würde ich dann den Treibstoffverbrauch auslesen und an die Klasse Auswertung, also das View, schicken, wo der Spaß dann angezeigt wird.

Warum ist das ganze nun eigentlich so toll?
Stell dir vor, du hast nun in mühevoller Arbeit diese drei Klassen zusammengeschustert und alles funktioniert soweit. Nun kommt jemand daher und sagt, er will aber ein ganz anderes Auto auf die Straße setzen. Bei der strikten Trennung, wie sie MVC vorgibt, kannst du einfach viele weitere Models schreiben und je nach Bedarf eines davon auf die "Strecke setzen". Andersherum kannst du natürlich auch andere Strecken simulieren oder aber die Darstellung der ausgewerteten Daten verändern. (Eine View muss hier nichteinmal wirklich auf dem Bildschirm zu sehen sein. Man könnte zum Beispiel zwei Views gleichzeitig benachrichtigen, wobei eine nur in eine Datei schreibt.)



Weil du vorhin Threads erwähnt hast: Mach dir um die erstmal nicht allzuviele Gedanken. Setze dich erstmal mit verschiedenen Architekturen auseinander, bevor du versuchst, Vorgänge zu parallelisieren oder aufeinander abzustimmen.
Wenn du etwas üben möchtest, mal ein Programm "von Grund auf aus dem Boden zu stampfen", dann würde ich dir den Sprung ins kalte Wasser empfehlen. Programmiere in Java "Conways Game of Life". So hab' ich damals ebenfalls Java gelernt.
Dein Vorteil an Java ist, dass es nur eine Library gibt (anders als beispielsweise bei C oder C++). Das erleichtert das googlen nach Problemlösungen ungemein. Game of Life lässt sich ganz wunderbar mit der MVC-Idee implementieren und bietet teilweise ein paar knifflige Aufgaben, mit denen man sich ein wenig auseinandersetzen muss, dabei aber auch ein hervorragendes Verständnis mit auf den Weg bekommt.

So, hoffentlich konnte ich dir damit ein wenig den Weg weisen. Bei weiteren Fragen einfach melden. Die Java-Programmierer hier im Forum sind alle ein wenig verrückt, meistens musst du nicht länger als zehn Minuten auf eine Antwort fragen ;)

Gruß
 
@killkrog: Vielen Dank, ich glaube du hast das Problem ganz gut getroffen. Werde mich über die MVC-Architektur informieren und mich am besten einfach mal hinsetzen und loslegen. Denke was mir vor allem fehlt ist die Erfahrung.

Danke euch!
 
Zurück
Oben