Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: WebStyleBoard. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Mittwoch, 17. September 2003, 16:32

Das Java-Tutorium (Inhalt)

Das Java-Tutorium (Inhalt und Struktur)!



Vorwort:

Worum geht es - wen soll das hier ansprechen und warum zum Geier sollte ich Java lernen?

Es geht schlichtweg um ein von mir angeregtes Java-Tutorium aufgrund meiner Tätigkeit als Programmieren-Hiwi (siehe dazu Thread: xyz). Ziel dieses Tutoriums soll es sein Grundlagen in der Programmiersprache Java zu vermitteln, sowie Verständnis für das Programmieren zu lehren. Das ist nen evtl. recht edles Ziel von mir - und ich glaube kaum, dass ich das wirklich erreichen kann - aber ich versuchs einfach mal ;)



<content>----------------------------------------

Inhalt:

- Grundkentnisse Java - Aufbau von Programmen, Klassen, Compiler, Editoren, "Hallo Welt!" ...
Das sollte in diesem 0. Kapitel abgearbeitet werden. Hierbei ist zu erwähnen, dass man keineswegs das verstehen muss, was in dem Programm letztlich passiert. Wichtig ist nur den groben Aufbau eines "Java-Programms" kennenzulernen, damit man überhaupt mal anfangen kann und weiß, was man so zum Programmieren alles brauch...
Evtl. möchte ich noch nen paar Vorzüge von Java erleutern und Unterschiede zu anderen Programmiersprachen aufzeigen.

- Datentypen, Variablen & Co
In dem anschließenden Kapitel möchte ich ersteinmal versuchen ein wenig "imperatives Programmieren" in Java zu machen. Was das ist und warum das ganze, werd ich natürlich an dortiger Stelle auch noch erklären. Ich halte das für wichtig, da man ersteinmal wesentliche Programmier-Werkzeuge kennen sollte, bevor man in die hohe Schule der Objektorientierung einsteigen kann. Die Programmieren-Hausaufgaben und die Vorlesung (Script nicht so ganz... in der Hinsicht imho etwas unstrukturiert allerdings ist das Ganze ja auch für Informatiker gedacht. Die müssen da schonmal rannklotzen ;)) gehen nach dem gleichen Schema vor...
Bestandteil dieses Kapitels ist jedoch ersteinmal ein wenig Licht ins Dunkle zu bringen was Datentypen allgemein angeht, welche es in Java gibt, wie man sie deklariert und benutzt, was das mit dem Geltungsbereich (Scope) soll und so weiter...

- Ausdrücke, Anweisungen und Operatoren...
..ist das nächste Thema. Das beinhaltet einen kleinen Logik-Ausflug, das Thema Schleifen, if-Abfragen und alles was der ein oder andere da schon gehört hat ;) ... ich versuche dabei immer nen paar Beispiele einzubaun (logen!). Das Script verweist da auf ganz viele schöne Imperative-Programmier-Beispiele... die sind allerdings ziemlich mathematisch angehaucht und ich guck da mal, was für diese Umgebung hier am ehesten passen könnte... Bubblesort z.B. scheint mir noch sinnig zu sein. Aber das Horner-Schema in Java zu programmieren ist evtl. etwas müssig, wenn ich 50% der Leute erst erklären müsste, was ein Polynom ist, was Nullstellen sind und wie das Horner-Schema dann funnzt ;) Ich glaub eher, ich denk mir selber nen paar Sachen aus... vielleicht kann hier auch der ein oder andere erfahrenere Programmierer auch Anregungen geben? ;)

- Zusammenfassendes, Beispiele, Standard-Funktionen, Javadoc und so...
Ich glaub an der Stelle ist dafür mal Zeit. Evtl. nen paar Ergänzungen noch und dann geits so richtig los ;)
An dieser Stelle werd ich glaub ich mal eine kleine Tool-Klassensammlung anbieten, damit man die schonmal kennt, wenn man damit später programmieren will. Das Ding umfasst vor allem Dateneingaben in der Konsole, damit man das nicht selbst programmieren muss. Die Hausaufgaben verlangen dies manchmal - bzw. zum Testen der eigenen Klassen und Methoden ist sowas immer ganz praktisch, damit man nicht immer wieder im Code rumpfuschen muss.
Außerdem kleiner Einschub: "Javadoc" - was das ist, wofür man es braucht und wie's geht ;)

- Objektorientierung!
Das wird mit Sicherheit das coolste Kapitel *g* ... alle die schon a bissel Programmieren können, werden die ersten paar Sachen nur überfliegen müssen, um zu gucken wie das ein oder andere denn in Java funnzt.
Das Kapitel umfasst also alles was in Java OOP ausmacht: Klassen, Objekte und Methoden, Vererbung, Polymorphie, Modifikatoren, Interfaces, abstrakte Klassen, UML (nur ein kleiner Ausblick und natürlich Klassendiagramme, andere Diagrammtypen werd ich höchstens anreißen). Natürlich hier mit vielen Beispielen - teils abstrakt, teils als Programmierbeispiele...

- Rekursionen
Was ist denn das zum Geier ;) - wird mancher sich hier wohl fragen. Zu Recht... Rekursionen sind manchmal ziemlich interessant und vor allem code-technisch sehr schön - wenn auch sehr häufig ziemlich unübersichtlich! Das Gehirn muss da desöfteren ziemlich Schmalz loslassen. Allerdings - wenn man das Prinzip letztlich einmal verstanden hat, wird man einige Programmieraufgaben sehr viel eleganter lösen kann - oder überhaupt erst! Die andere Alternative Schleifen zu verwenden, ist bei vielen Aufgaben wesentlich schwieriger und umständlicher zu gestalten...
Das Thema selbst ist evtl. etwas "reingeklatscht" nach der OOP, ist aber an dieser Stelle vermutlich schon verständlicher als am Anfang...

- Exceptions - Ausnahmebedingungen
Ein weiteres recht praktisches Merkmal von Java sind die Exceptions oder auch Ausnahmen. Sprich, was soll passieren, wenn in der Programmlogik ein Fehler auftaucht, weil z.B. eine Datei nicht gefunden wurde oder aus irgendwelchen Ursachen heraus eine Rechenoperation ein Ergebnis liefert, was nicht so erwünscht war. Häufig sind Exceptions gar nichts schlimmes - man muss sie nur abfangen und wissen damit umzugehen. Bei einer fehlenden Datei, sollte z.B. eine Dialogbox kommen und entsprechendes ankündigen... wenn diese Exception nicht abgefangen werden würde, würde sich das Programm an dieser Stelle verabschieden und eine Fehlermeldung auf der Konsole ausgeben...
Das Kapitel beinhaltet am Ende eine kleine Auflistung sehr häufiger Exceptions die von Java bereits definiert wurden und was da der typische Fehler ist...

- Input und Output
Hier sollen einige Klassen und Methoden vorgestellt werden, mit denen sich z.B. Daten speichern, auslesen und ausgeben lassen. Das typische IO (Input/Output) also... wirkt bei Java mit all den BufferdReader-, Streamgeschichten manchmal etwas unübersichtlich. Hier soll ein wenig Licht ins dunkle gebracht werden... by the way: der Autor muss auch heute noch bei so mancher Ein- und Ausgabe ins Büchlein schauen. Wenn man sich die ganze Geschichte also partout nicht merken kann... macht offenbar nix ;)

- Wiederholungen (Wrapper-Klassen, String)
An dieser Stelle wird es endlich Zeit die Dinge vom Anfang mal ein wenig genauer unter die Lupe zu nehmen. Ich will hier kurz erklären was Wrapper-Klassen sind - warum es überhaupt primitive Datentypen noch gibt, was das besondere eigentlich an "String" ist und einiges mehr, was am Anfang nicht erklärt wurde...

- Strukturierung und Test-Konzepte
Hier soll kurz erläutert werden, wie man Java-Programme typischerweise strukturiert. Hier helfen mal wieder UML-Klassendiagramme und das Konzept der sog. Packages. Auch der CLASSPATH wird an dieser Stelle angesprochen (der ein oder andere wird evtl. schonmal über eine Fehlermeldung diesbezüglich gestolpert sein).
Ebenfalls soll hier das Testen von Programmen angesprochen werden... ein Ausblick auf die JUnit-Klassen wird gewagt (evtl. zu früh - wir werden sehen!) und wie man Programmcode hinreichend vor Fehlern absichert (nochmal Exceptions und auch assert [erst ab Java 1.4]), aber halt vor allem, wie man richtig testet (Überdeckungstests).

- Datenstrukturen (Collections), Arrays
An dieser Stelle wird ein Ausblick in die Welt der Datenstrukturen gewagt die beim vernünftigen Programmieren unerlässlich sind. Als erstes werden die Arrays nochmal rausgepakt und gegenüber den dynamischen Speichermethoden gestellt. Behandelt werden: Listen (Vektoren), Stacks und Queues (Keller und Schlangen), Trees (Bäume) und Hash-Tabellen (hashmap). Zu diesem Thema werden imho auch viele Hausaufgaben stattfinden und gleichzeitig eignet sich das Thema auch ganz hervorragend zum Java-Lernen... Rekursionen, Objekte ... alles dabei ;) und am Ende hat man genügend Code und nen funktionierende Datenstruktur die man für weitere Programme verwenden könnte. Ist also wirklich praktisch!
Gleichzeitig zu selbst programmierten Datenstrukturen sollen natürlich auch die vorhandenen sog. Collections in Java vorgestellt werden, wie z.B. Vector und Interfaces wie Set und List. Auch die überaus wichtigen Interface-Methoden iterator() und enumeration() werden vorgestellt. Wie überhaupt die Interfaces Iterator, Enumeration... und vor allem was man davon hat, bzw. was man damit macht.

- Threads, Synchronisationsprobleme
Nur relativ kurz möchte ich eigentlich das Thema der parallen Programmierung anreißen. Am Beispiel einer GUI (Graphical User Interface == Grafische Benutzeroberfläche) im nächsten Kapitel wird der Sinn noch intensiver verdeutlicht. Ein kleiner Ausflug in die Welt von Edsger Dijkstra und seinen Semaphoren und Mutexen soll hier auch erlaubt sein (immerhin war Dijkstra einer der herausragenden Persönlichkeiten der Informatik). Diese Konzepte sind in Java mithilfe des Monitor-Prinzips natürlich eingebaut worden.

- Grafikprogrammierung
Dieses Kapitel kann ich wirklich nur in groben Zügen behandeln. Sinn soll sein am Ende alles Wesentliche der GUI-Programmierung in Java verstanden zu haben, sodass man dann autodidaktisch weiterlernen kann. Bestandteil sollen sein:
- Container-Prinzip
- Die Klasse AWT (grafisches Grundwerkzeug - paint(), update()... Canvas)
- Swing (it baby)
- bestimmte Klassen für die einzelnen Bedienelemente (JButton, JFrame...)
- Layoutmanager
- Interaktion (Listener)
- Ereignisse
- Applets
- Tools zur Oberflächenerstellung
- Beispiel GUI mit Animation mithilfe von Threads (ich hoffe ich finde mein Programm von damals wieder - eine rotierende Tortengrafik mit Änderungsmöglichkeit der Anzahl Tortenstücke während der Animation...)

- Ausblick
Da das Script dies tut - mach ich das auch mal... das Script verweist hier auf Design-Patterns (Entwurfsmuster) und diverse andere schönen Dinge. Ich glaub ich werd mich wohl auf die erstgenannten beschränken, da das auch ne Sache ist, die ich persönlich sehr interessant finde. Ich werde aber nur sehr wenige Patterns wirklich nur anreißen und evtl. an einem Beispiel theoretisch erklären ... ich hatte da an das Observer-Pattern und das Strategy-Pattern gedacht. Das sog. Singleton und die Factory sollen auch behandelt werden... dann reicht das aber auch ;)

- Abschließendes ... offener Thread für Kommentare, Anmerkungen, Wiederholungsanregungen etc...

------------------------------------</content>




Soweit erstmal zum Inhalt, so wie ich mir das Ganze vorgestellt hab. Der Ablauf sollte in etwa so sein, dass ich heute noch das 0. Kapitel reinpacke und pinne. Jedes Kapitel bekommt seinen eigenen Thread sofern das Forum das mitmacht (?). Die Threads selbst wollte ich geschlossen halten und den jeweils aktuellen pinnen. Gleichzeitig wollte ich parallel einen Thread mit Fragen zum jeweiligen Kapitel aufmachen der dann zugepostet werden kann... und wenn später die Vorlesung anfängt (Mitte Oktober) werde ich zu jeder Hausaufgabe auch einen Thread aufmachen und solange die HA aktuell ist ebenfalls als "Wichtig" markieren. Nach Ablauf der Frist werd ich dann die Lösung posten... und ich bitte auch jeden anderen diese Frist einzuhalten, damit jeder die Chance bekommt wirklich alleine hinterzukommen. Anregungen etc. können zwischendurch gerne gemacht werden (imho).

Einwände zum organisatorischen Ablauf können jetzt gemacht werden ... insb. die Board-Leitung ist hier angesprochen ;) (ich wollte das zunächst intern posten - allerdings halte ich das ganze für nicht sooo relevant, sodass ich jedweden Vorschlag akzeptieren werde).

Außerdem würde ich mich freuen, wenn der ein oder andere erfahrenere Programmierer oder !(Java-Neuling) jetzt mit Vorschlägen und Ergänzungen zum Inhalt kommen würde! ;) ... (ich hab mich da von der Gliederung etwas an unserem Script langgehangelt und a bissel was geändert). Das kann natürlich auch immer nach einer Kapitel-Einheit passieren - wenn dann noch Unklarheiten vorhanden sein sollten - und ehrlich gesagt geh ich davon aus ;).

Die Java-Neulinge sind natürlich auch herzlich eingeladen Anmerkungen zu machen :D



So long...
Signatur von »Snoop« The use of COBOL cripples the mind; its teaching should, therefore, be
regarded as a criminal offence.
-- Edsger W. Dijkstra, SIGPLAN Notices, Volume 17, Number 5 (11.05.1930 - 07.08.2002)

2

Mittwoch, 17. September 2003, 18:57

Zitat

vielleicht kann hier auch der ein oder andere erfahrenere Programmierer auch Anregungen geben?
In Pascal hatten wir anfangs u. A. folgende Aufgaben:
1. Im Jahr 1987 hatte Indien 700 Mio. Ew., China dagegen 990 Mio. Die Wachstumsrate beträgt in Indien 2,1%, in China 1,4%. Wann hat Indiens Einwohnerzahl die Chinas überholt (bei konstanter Wachstumsrate)?
2. In einem Teich leben X=50 Forellen. Es ist ausreichend Futter für K=350 Forellen vorhanden. Die Forellen vermehren sich mit einer Jahresrate von 6% der Differenz zwischen Höchststand K und dem aktuellen Stand X. Wie entwickelt sich die Population in den nächsten 20 Jahren?

In wieweit diese Aufgaben zu leicht sind, weiß ich nicht, aber du musst nicht so schwierige mathematische Sachen reinbringen... das Horner-Schema kennt doch kein Schw... ;)
Um eine Programmiersprache zu lernen, braucht man keine schwierigen Matheaufgaben, da reicht das einfachste vom einfachen, Hauptsache die wichtigen Befehle werden gebraucht...
Signatur von »Alex« Man muss nichts sehen, um zu sehen, dass man nichts sieht, aber man muss etwas sehen, um zu sehen, was man nicht sieht.

3

Mittwoch, 17. September 2003, 19:56

Das wollte ich mit meinem Gesagten auch nahebringen... die Aufgaben die in den Hausaufgaben gestellt werden, sind allerdings manchmal glaub ich etwas mathematisch. Aber es geht eigentlich. Der Algorithmus von Euklid ist auch nichts wirklich schwieriges, wenn man's verstanden hat. Ist ja doch eher immer schematischer Natur. Man muss ja nicht in allen Einzelheiten verstehen warum irgendetwas nu wirklich so funktioniert. Hauptsache es funktioniert ;) und man kann den Algorithmus nachvollziehn.

Aber es wird genügend nicht-mathematische Aufgabenstellungen geben ;) - keine Sorge...

deine genannten Beispiele haben natürlich auch nen leicht mathematischen Touch *g* - aber die kann man natürlich einfach mal Lösen, wenn's an das Kapitel "Schleifen" geht. Ist ja nicht so furchtbar schwierig ;)

Mein 0. Kapitel muss leider bis morgen warten - hab für heute doch keine Lust mehr...
Signatur von »Snoop« The use of COBOL cripples the mind; its teaching should, therefore, be
regarded as a criminal offence.
-- Edsger W. Dijkstra, SIGPLAN Notices, Volume 17, Number 5 (11.05.1930 - 07.08.2002)

4

Donnerstag, 18. September 2003, 17:30

Ich bin nach wie vor der Meinung, daß die Lösungen gesondert gepostet wederen, damit auch Leute die Change das mit zu machen, die erst später dazu kommen!

5

Donnerstag, 18. September 2003, 19:08

Kurze Info: Snoop wird voraussichtlich erst nächste Woche wieder anBoard sein können. Sein Vorhaben wird sich folglich um ein paar Tage verschieben. Wir bitten um Nachsicht. :)

PS: Ich schlage vor, das Tutorium mit allem drum und dran in ein eigens dafür angelegtes Unterforum zu packen; so bleibt alles übersichtlich ...
Namensvorschlag: WSB Java-Workshop :)

6

Donnerstag, 25. September 2003, 14:40

Hey-die-ho... das ganze Vorhaben wird sich erneut a bissel verschieben - mal gucken wann ich da mal wieder zu komme... muss noch nen paar Seiten schreiben und momentan bin ich etwas belastet.

* Das mit dem Unterforum ist eigentlich eine gute Idee... TNS, lässt sich das machen? ;)

* Auch die Lösungen separat zu posten ist durchaus eine sinnvolle Idee - hatte aber das sowieso geplant. Da die Lösungen meist aus mehreren Java-Klassen zusammengesetzt sein werden, sind die vermutlich in nem .zip File oder ähnlich auf irgendnem Rechner zu finden... das Javadoc (was das ist, wird man später wissen *g*) wird online verfügbar sein...

Erklärungen zur Lösung werd ich dann gesondert posten - und aber auch per Kommentar in den Code selbst schreiben...

weitere Anregungen, Wünsche, Vorstellungen, Einwände?
Signatur von »Snoop« The use of COBOL cripples the mind; its teaching should, therefore, be
regarded as a criminal offence.
-- Edsger W. Dijkstra, SIGPLAN Notices, Volume 17, Number 5 (11.05.1930 - 07.08.2002)