<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Schneider</id>
	<title>FreitagsrundenWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Schneider"/>
	<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//Spezial:Beitr%C3%A4ge/Schneider"/>
	<updated>2026-11-02T00:36:12Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6722</id>
		<title>Martin Häcker/Java Kurs/Tag 1</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6722"/>
		<updated>2006-03-17T15:00:59Z</updated>

		<summary type="html">&lt;p&gt;Schneider: /* LE 2: Methoden und Schleifen (RobertB und Sven) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= LE 1: Hello, World! =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Robert Lubkoll, Felix Schwarz&lt;br /&gt;
&lt;br /&gt;
== Organisatorisches ==&lt;br /&gt;
* Was Passiert&lt;br /&gt;
* Wann passiert was&lt;br /&gt;
* Wie passierts&lt;br /&gt;
* Vorstellung&lt;br /&gt;
* Was ist das genau&lt;br /&gt;
* Wer sind wir: Freiwillig, Umsonst&lt;br /&gt;
* Ziel des Kurses&lt;br /&gt;
* Was sie am Ende können sollen&lt;br /&gt;
* Gruppeneinteilung&lt;br /&gt;
** am Ende der ersten Vorlesung&lt;br /&gt;
** Vorher per e-mail&lt;br /&gt;
&#039;&#039;&#039;Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Inhalt (Vorgehen, Beispiele, Ideen) ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
Was ist &#039;&#039;&#039;Programmieren?&#039;&#039;&#039;&lt;br /&gt;
* Lernende einbeziehen durch Befragung mit Zetteln, was sie sich vorstellen unter &amp;quot;Programmieren&amp;quot;&lt;br /&gt;
* (Ideen gesucht die nicht zu abstrakt sind) imperativ (prozedural) vs. funktionales Programmieren&lt;br /&gt;
** (Ideen gesucht die nicht zu abstrakt sind) relation problem &amp;lt;-&amp;gt; lösung / kochrezept&lt;br /&gt;
* Zustandsmaschine, (jede Befehlsausführung führt zu einem neuen Zustand)&lt;br /&gt;
&lt;br /&gt;
* Einführung nach [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-9.html#%25_chap_1 SICP Kapitel 1] (bis &amp;quot;Programming in Lisp&amp;quot;)&lt;br /&gt;
* TODO: zu etwas das wir einführend sagen können umformulieren.&lt;br /&gt;
** &#039;&#039;Damit ist die Philosophie von Programmieren gemeint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*eher später, wird vom Prinzip her aber in dieser Reihenfolge eingeführt:&lt;br /&gt;
Drei Dinge, die wichtig sind für Programmierer (Das soll sich durch den Kurs durchziehen als roter Faden für die Sprachfeatures die wir einführen):&lt;br /&gt;
* Primitive Ausdrücke&lt;br /&gt;
* Kombinationsmöglichkeiten&lt;br /&gt;
* Abstraktionsmöglichkeiten&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
==== Wie fangen wir Java an ====&lt;br /&gt;
* Live vorführen (Screenshots oder zur Console wechseln)&lt;br /&gt;
&lt;br /&gt;
* Kommentare //, /* */, /** */&lt;br /&gt;
* Hello world&lt;br /&gt;
grobe Struktur der &amp;quot;Umgebung&amp;quot;: keine .sig/.impl Datei sondern nur eine .java&lt;br /&gt;
&lt;br /&gt;
system.out.println();&lt;br /&gt;
&lt;br /&gt;
* compilieren:&lt;br /&gt;
Was passiert da, wieso erst Compilieren, dann ausführen?&lt;br /&gt;
javac&lt;br /&gt;
java&lt;br /&gt;
&lt;br /&gt;
was für Fehler können auftreten?&lt;br /&gt;
.class&lt;br /&gt;
Klasse heißt anders als Datei &lt;br /&gt;
Compiler falsch aufgerufen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Variablentyp (int) -&amp;gt; Syntax der Deklaration&lt;br /&gt;
Wie darf ein Variablenname aussehen? (Buchstaben,Zahlen, _ )&lt;br /&gt;
* Zuweisung -&amp;gt; Syntax&lt;br /&gt;
man kann Zahlen &amp;gt; 32 direkt eingeben !&lt;br /&gt;
&lt;br /&gt;
* Werte und operatoren +,*,- -&amp;gt; Syntax&lt;br /&gt;
 int zahl1 = 7;&lt;br /&gt;
 int zahl2 = 42;&lt;br /&gt;
 int ergebnis = zahl1 + zahl2;&lt;br /&gt;
 System.out.println(ergebnis);&lt;br /&gt;
&lt;br /&gt;
Zuweisung nach Deklaration.&lt;br /&gt;
Variableninhalte ändern sich durch Zuweisung. Zeigen mit sysout.&lt;br /&gt;
&lt;br /&gt;
Selbse GANZ kurz nochmal mit anderen Operatoren.&lt;br /&gt;
&lt;br /&gt;
* String: Vormerken, das man hier später klar macht das das auch Objekte und daher Referenzen &lt;br /&gt;
&lt;br /&gt;
sind - erstmal ists aber egal, da sie eh Immutable sind&lt;br /&gt;
&lt;br /&gt;
String deklarieren mit &amp;quot;bla&amp;quot; , kein Anführungszeichen im &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
verknüpfen von Strings (+)&lt;br /&gt;
&lt;br /&gt;
komplizierteres Sysout an selbem Programm&lt;br /&gt;
&lt;br /&gt;
* boolean (true/false)&lt;br /&gt;
&lt;br /&gt;
* if -&amp;gt; Syntax&lt;br /&gt;
Minniprogramm zur Fallunterscheidung&lt;br /&gt;
 boolean auwahl = true;&lt;br /&gt;
 if(auswahl) then {&lt;br /&gt;
  System.out.println(&amp;quot;auswahl war true&amp;quot;);&lt;br /&gt;
 else{&lt;br /&gt;
  System.out.println(&amp;quot;auswahl war false&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
erweitertes Minniprogramm zur Fallunterscheidung&lt;br /&gt;
* &amp;lt;, &amp;gt;, ==, &amp;lt;=, &amp;gt;= Operatoren die boolean zurückliefern&lt;br /&gt;
if mit Operatoren und anderen Variablen&lt;br /&gt;
* Kompliziertere Bedingungen (&amp;amp;&amp;amp;, ||, !)&lt;br /&gt;
&lt;br /&gt;
*(double) mit Punkt als Trennzeichen.&lt;br /&gt;
&lt;br /&gt;
*Division mit / und das bei int gerundet wird&lt;br /&gt;
&lt;br /&gt;
*Semikolons, Kommentare&lt;br /&gt;
&lt;br /&gt;
==== Vorführung ====&lt;br /&gt;
&#039;&#039;&#039;Aufbau eines Java-Programms&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel bringen und daran erklären, was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind. Das Programm dabei langsam entwickeln und dabei vorführen. Ziel ist, das am schluss ein komplettes Beispiel da steht - also alles verwendet wird was wir erklärt haben, es aber trotzdem so einfach bleibt das es ohne viel Fehlerpotenzial später nachgemacht werden kann.&lt;br /&gt;
 class Test {&lt;br /&gt;
 	static void print(double aNumber) {&lt;br /&gt;
 		System.out.println(&amp;quot;&amp;gt; &amp;quot; + aNumber);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public static void main(String [] arguments) {&lt;br /&gt;
 		print(3 * 4);&lt;br /&gt;
 		print(7 + 23 * 8 - 3);&lt;br /&gt;
 		// ....&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sauberes Programmieren&#039;&#039;&#039;&lt;br /&gt;
* Variablen und Identifier-Namen&lt;br /&gt;
** Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!&lt;br /&gt;
** Lokale Namen und wieso: (vielleicht?) [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 scrollen bis &#039;&#039;&#039;Local Names&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlermeldungen lesen und verstehen&#039;&#039;&#039;&lt;br /&gt;
* Klammer vergessen&lt;br /&gt;
* Semikolon vergessen&lt;br /&gt;
* Klasse heißt anders als Datei&lt;br /&gt;
* Compiler falsch aufgerufen&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;cd&#039;&#039; üben&lt;br /&gt;
* Hello World eintippen (kate, gedit, nano, ..)&lt;br /&gt;
* javac / java benutzen&lt;br /&gt;
* Ergebnisse sehen&lt;br /&gt;
* Fehler einbauen, Fehler finden (laufzeit/compilezeit)&lt;br /&gt;
* Einige Expressions angeben und die Teilnehmer sollen feststellen, was die ausgeben/berechnen würden&lt;br /&gt;
* Das gleiche dann nochmal mit if/else&lt;br /&gt;
* Einen mathematischen Ausdruck in Java übersetzen&lt;br /&gt;
* [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben]&lt;br /&gt;
&lt;br /&gt;
=== Zusätzliche Vorschläge ===&lt;br /&gt;
Folgendes sollte in der VL oder Übung angesprochen werden:&lt;br /&gt;
* [http://www.scit.wlv.ac.uk/cbook/chap5.dangling.else.html &amp;quot;Dangling else&amp;quot;-Problem]&lt;br /&gt;
* Semikolon hinter if (hab gelesen, dies sei ein häufiger Fehler bei Anfängern...)&lt;br /&gt;
-- [[Benutzer:Buchholz|Robert Buchholz]] 01:17, 17. Mär 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
= LE 2: Methoden und Schleifen (RobertB und Sven) =&lt;br /&gt;
LE2 Übung mit Zusatzaufgaben und Musterlösung und Vorlesungsfolien [http://user.cs.tu-berlin.de/~svens/files/le2.tar.gz link]&lt;br /&gt;
&lt;br /&gt;
letzte änderungen: folien version1 enthalten (freitag 2006-03-17 10:44)&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* LE1 aufgabe benutzen. (delayed)&lt;br /&gt;
* for schleife einbauen in die folien&lt;br /&gt;
* testen in die folien reinbauen&lt;br /&gt;
* for schleife in der musterlösung verwenden&lt;br /&gt;
&lt;br /&gt;
Benötigete Zeiten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noch niemand hats probiert?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
* Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt: &lt;br /&gt;
** dadurch verbesserte test-möglichkeiten (sprich methoden sind auch eine art von modul)&lt;br /&gt;
** verbesserte verständlichkeit([http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 Procedures as Black-Box Abstractions])&lt;br /&gt;
* Quelltextverkürzung durch schleifen&lt;br /&gt;
** nicht minimierung auf kosten der verständlichkeit&lt;br /&gt;
** was ist aufgabe des entwicklers?&lt;br /&gt;
** und was ist aufgabe des compilers? (vllt. auch nicht?)&lt;br /&gt;
** evtl. ist eine eigene methode sinnvoller/verständlicher?&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
* &#039;&#039;&#039;Typen&#039;&#039;&#039;&lt;br /&gt;
** Arrays&lt;br /&gt;
*** warum, wie und probleme&lt;br /&gt;
** void&lt;br /&gt;
** char?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Methoden&#039;&#039;&#039;:&lt;br /&gt;
** Namen&lt;br /&gt;
** Aufruf&lt;br /&gt;
** Parameter und Rückgabe -&amp;gt; Call by Value&lt;br /&gt;
** main&lt;br /&gt;
** return&lt;br /&gt;
** Nachtrag Datenstrukturen: void&lt;br /&gt;
** Beispiel: System.out.println()&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Schleifen&#039;&#039;&#039;&lt;br /&gt;
** Blöcke&lt;br /&gt;
** while&lt;br /&gt;
*** Formulieren von Bedingungen&lt;br /&gt;
*** Schleife als zweite Lösung für duplikation von Code&lt;br /&gt;
*** Diskussion Schleife &amp;lt;-&amp;gt; Rekursion&lt;br /&gt;
&lt;br /&gt;
* Anwendung von Schleifen&lt;br /&gt;
* Rekursion &amp;lt;-&amp;gt; Schleifen (Beispiel)&lt;br /&gt;
* Warum/wann Schleifen?&lt;br /&gt;
** als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)&lt;br /&gt;
** wenn die Anzahl der Durchläufe nicht konstant ist&lt;br /&gt;
** for schleife, wann und wozu, einfache beispiele: for(int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Gute Namen&#039;&#039;&#039;&lt;br /&gt;
** Abstrakter Gedanke: Für den Computer ists wurscht, wie man das was man meint aufschreibt. Wir Menschen dagegen lassen und leicht verwirren&lt;br /&gt;
** abwägen zwischen&lt;br /&gt;
*** aussagekraft des namens&lt;br /&gt;
*** häufigkeit im code&lt;br /&gt;
*** kommentar zu variable(nnamen)&lt;br /&gt;
*** länge des namens&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Testen&#039;&#039;&#039;&lt;br /&gt;
* was ist testen?&lt;br /&gt;
** überprüfung von einigen randwerten =&amp;gt; nachdenken ist erforderlich um interessante fälle zu finden&lt;br /&gt;
** testen ist nicht verifizieren&lt;br /&gt;
* wie in java?&lt;br /&gt;
** System.out.println(..);&lt;br /&gt;
** auskommentieren und schrittweises testen&lt;br /&gt;
* was wird getestet?&lt;br /&gt;
** ausgabe von arrays komplex&lt;br /&gt;
** ausgabe von werten mit text verknüpfen&lt;br /&gt;
** Variablen haben unterschiedliche Werte während das Program läuft!&lt;br /&gt;
&lt;br /&gt;
assert-Methode selber schreiben -&amp;gt; Später! (WANN?)&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* Methoden definieren, die bestimmte Eigenschaften haben&lt;br /&gt;
* Beispiele dann Abtippen und ausprobieren&lt;br /&gt;
* Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)&lt;br /&gt;
* Verschiedene Eingabewerte&lt;br /&gt;
* erste Endlosschleife&lt;br /&gt;
* Fehler für die eingeführten elemente&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_4&amp;diff=6815</id>
		<title>Martin Häcker/Java Kurs/Tag 4</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_4&amp;diff=6815"/>
		<updated>2006-03-17T14:00:06Z</updated>

		<summary type="html">&lt;p&gt;Schneider: /* Tag 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= Tag 4 =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komplexe Projektaufgabe als Gruppenarbeit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vorschlag A&#039;&#039;&#039;: Verschlüsselung:&lt;br /&gt;
** Häufigkeitsanalsyse -&amp;gt; dann entschlüsseln, doublettenhäufigkeit, triplettenhäufigkeit&lt;br /&gt;
** Caesar Chifre, entschlüsseln, verschlüssseln&lt;br /&gt;
** Gegenseitig Verschlüsselte Texte vorgeben&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vorschlag B&#039;&#039;&#039;: Terminplaner&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vorschlag C&#039;&#039;&#039;: Schiffe Versenken&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vorschlag D&#039;&#039;&#039;: Studentenverwaltung&lt;br /&gt;
** ein tool mit dem man&lt;br /&gt;
*** studenten in gruppen verwalten kann&lt;br /&gt;
*** den studenten gruppenweise noten geben kann&lt;br /&gt;
*** für jeden studenten eine statistik in eine datei schreiben kann&lt;br /&gt;
*** die daten in einer datei speichern und aus einer datei laden kann&lt;br /&gt;
*** = vorgabe GUI&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Vorschlag E&#039;&#039;&#039;: vier gewinnt&lt;br /&gt;
**ein spiel&lt;br /&gt;
*** vier gewinnt&lt;br /&gt;
*** highscores&lt;br /&gt;
*** andere scores&lt;br /&gt;
*** = vorgabe GUI&lt;br /&gt;
*** = vorgabe evtl. billige KI die man evtl. im netz findet?&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Vorschlag F&#039;&#039;&#039;: eine netzwerk simulation&lt;br /&gt;
** routing:&lt;br /&gt;
*** alle nodes broadcasten entlang ihrer links ins netz mit einer nachrichten-ID&lt;br /&gt;
*** die erste nachricht dieser node wird mit den entlang des pfades hinzugefügten nodes in einer routing tabelle statisch eingetragen&lt;br /&gt;
*** falls eine node ausfällt wird dies von einer node die dies feststellt ins gesamte netz gebroadcastet&lt;br /&gt;
*** wenn eine nodeA an eine nodeB etwas schicken will schickt sie dies an die node die in ihrer routing tabelle dieser node zugeordnet ist, diese schickt die daten dann weiter&lt;br /&gt;
** für jeden link wird eine fehlerwahrscheinlichkeit eingetragen&lt;br /&gt;
** die daten müssen geschützt werden..&lt;br /&gt;
** am besten mit CRC&lt;br /&gt;
** weiterhin könnte man die daten bitweise verschicken und eine weile im medium belassen und so eine propagation time ins spiel bringen&lt;br /&gt;
** damit würden die links verschiedene qualitäten aufweisen&lt;br /&gt;
** = vorgaben GUI zur anzeige des netzwerks&lt;br /&gt;
** = das ganze müsste ja leider threadbased sein..&lt;br /&gt;
** = vorgaben CRC?&lt;br /&gt;
** zu schwer vom verständnis?&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Vorschlag G&#039;&#039;&#039;: kratives zeichnen&lt;br /&gt;
** man gibt ihnen eine GUI auf der sie einfach pixel linien und kreise zeichnen können&lt;br /&gt;
** dann sollen sie möglichst kreativ irgendwelche styles darauf malen&lt;br /&gt;
** irgendwelche effects?&lt;br /&gt;
** für sowas braucht man schleifen evtl. arrays. da kann man ganz kreativ sein (was für einige leider nix ist)&lt;br /&gt;
** = vorgabe: GUI und interface zum malen&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Vorschlag H&#039;&#039;&#039;: eine fractal-application ähnlich der aus info1&lt;br /&gt;
**= vorgabe: GUI und so&lt;br /&gt;
**zu wenig für sie zu tun?&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Vorschlag I&#039;&#039;&#039;: auswerter aussagenlogischer formeln&lt;br /&gt;
** parsen einer DNF/KNF oder noch komplexerer logischer formeln und wahrheitswert bei (einer/allen) wahrheitsbelegung(en) untersuchen&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Vorschlag J&#039;&#039;&#039;: textadventure&lt;br /&gt;
**ein textadventure programmieren,&lt;br /&gt;
**das über schnittstellen funktioniert und&lt;br /&gt;
** wobei dann die ergebnisse aller gruppen die fertigwerden zusammengefügt werden können&lt;br /&gt;
&lt;br /&gt;
= Abschlussveranstaltung =&lt;br /&gt;
* Beste Lösung vorstellen&lt;br /&gt;
* Schaum-Schokoladen-Küsse austeilen....&lt;br /&gt;
* Abschließen&lt;br /&gt;
* Feedback einsammeln&lt;br /&gt;
* Ausblick&lt;br /&gt;
* Anbindung an die Veranstaltung Info 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vielleicht noch =&lt;br /&gt;
&lt;br /&gt;
= Robust Programmieren =&lt;br /&gt;
Vielleicht zu fortgeschritten.... Siehe auch [[Vortrag_Exceptions | unser alter Vortrag zu Exceptions]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Idee von Robuster Programmierung&#039;&#039;&#039;&lt;br /&gt;
* wie kann man mit fehlern umgehen&lt;br /&gt;
** fehler(un)freundliche systeme (Flugzeug, Auto)&lt;br /&gt;
** bandbreite der fehler von lethal bis nervig, bis &amp;quot;man kann daraus etwas lernen&amp;quot; (feedback?)&lt;br /&gt;
** Folgekosten abschätzen&lt;br /&gt;
* was will man eigentlich:&lt;br /&gt;
** etwas für die Benutzer tun&lt;br /&gt;
** diese in die Lage versetzen Selbst etwas zu tun&lt;br /&gt;
** Das ist eine Grundsätzliche Frage die man sich bei Software (und in der tat überall) stellen muss. Gleichzeitig ist das auch das Ziel einer persönlichen Weiterentwicklung, die sich eben auch (tja) in der Software die man schreibt wiederspiegelt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problemraum&#039;&#039;&#039;&lt;br /&gt;
* Welche Fehler behandelt man?&lt;br /&gt;
* welche gibt man an Benutzer weiter?&lt;br /&gt;
* wie macht man das? (Schöne Dialogtexte, Gute Klare Fehlermeldungen)&lt;br /&gt;
** Apple HIG schreibt: &amp;quot;Provide useful error messages to users when something does go wrong. An error message should clearly convey what happened, why it happened, and the options for proceeding. Offer a workaround if one is available and do whatever you can to prevent the user from losing any data. See &amp;quot;Alerts&amp;quot; for more information on how to provide useful error messages.&amp;quot; Siehe auch: [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGWindows/chapter_17_section_6.html#//apple_ref/doc/uid/20000961-TPXREF23 Writing good Alert messages]&lt;br /&gt;
*** In fast allen nichttrivialen fällen, kann man den Fehler nicht selber behandeln, sondern nur dem Benutzer die Information geben sie zu beheben. (ex. &amp;quot;FileNotFoundException&amp;quot; -&amp;gt; &amp;quot;Bitte legen sie den externen Datenträger &amp;quot;Blub&amp;quot; ein, auf dem sich die Datei &amp;quot;Bla&amp;quot; befindet&amp;quot;) Aufwendiger - ja, aber notwendig!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wo treten Fehler auf:&#039;&#039;&#039;&lt;br /&gt;
* Benutzereingaben die anders sind als Vorhergedacht&lt;br /&gt;
* Code, der mit externen Systemen (Netzwerk, Dateisystem, Geräte, Messfühler, Benutzer) kommuniziert &lt;br /&gt;
* Oder Code der Fehler / Bugs enthält&lt;br /&gt;
** Nicht oder falsch verstandene eingabewerte für Methoden&lt;br /&gt;
** dynamischer OO-Code, bei dem der Compiler nicht mehr alles prüfen kann&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
** Eclipse&lt;br /&gt;
** CVS/SVN?&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_2&amp;diff=6770</id>
		<title>Martin Häcker/Java Kurs/Tag 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_2&amp;diff=6770"/>
		<updated>2006-03-17T10:26:37Z</updated>

		<summary type="html">&lt;p&gt;Schneider: /* Übungsaufgaben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= LE 3: Modularisierung mit Klassen und Objekten =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Martin, Felix&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
&lt;br /&gt;
=== Java / Methodik ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Modularisierung und Strukturierung&#039;&#039;&#039; -- auf allen Ebenen&lt;br /&gt;
** Klassen (als Strukturen)&lt;br /&gt;
** Methoden-Kapselung: &#039;&#039;&#039;Methoden-Nachtrag&#039;&#039;&#039;&lt;br /&gt;
*** Methoden als Abstraktionsmöglichkeiten -&amp;gt; verstecken von methoden [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%25_toc_%25_sec_Temp_43] Bringts das an der stelle?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Testen&#039;&#039;&#039;&lt;br /&gt;
** eigene assert-Funktion&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objektorientierung&#039;&#039;&#039; (Erklärungsansatz)&lt;br /&gt;
* Objekt, Klasse erklären als: &amp;quot;Klasse&amp;quot; Mensch&lt;br /&gt;
** davon dann klonen mit bestimmten Modifikationen (augenfarbe, größe, name....)&lt;br /&gt;
** das wäre dann klasse, objekte und konstruktoraufruf&lt;br /&gt;
* Objekte / Klassen erklären als&lt;br /&gt;
** Platonische Ideen (Pferd)&lt;br /&gt;
** Tatsächliches Ding (Bruno auf dem ich jeden Dienstag in Hellersdorf reite)&lt;br /&gt;
* Objekte als Daten mit &#039;&#039;Schutzschicht&#039;&#039; Methoden aussen herum&lt;br /&gt;
** Klassen als solches erst später (quasi erst prototyp und dann klassen erklären)&lt;br /&gt;
* Ganz anderer Ansatz: Erklären über Einheiten die sich über Nachrichten gegenseitig verständigen&lt;br /&gt;
* Äquivalenz zu Funktionaler Programmierung aufmachen&lt;br /&gt;
** Constructor: Funktion die Parameter bekommt und eine Funktion zurückgibt die diese verkapselt&lt;br /&gt;
** Methoden: diese Funktion kann mit dem Namen verschiedener Methoden aufgerufen werden und wird, indem es diese ausführt, zum Objekt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Probleme beim Erklären&#039;&#039;&#039;&lt;br /&gt;
* this, woher kommt das und wie verwendet man es!&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
;Ziel&lt;br /&gt;
:Kleine Studentendatenbank in der Studenten eingefügt und gesucht werden können. &lt;br /&gt;
&lt;br /&gt;
;Advanced&lt;br /&gt;
:mit löschen&lt;br /&gt;
&lt;br /&gt;
;Idee&lt;br /&gt;
:&amp;quot;Statistik&amp;quot; : Anzahl der Studenten, durchschnittliches Alter, bla&lt;br /&gt;
&lt;br /&gt;
;Aufgaben&lt;br /&gt;
# Schreibe eine Klasse, die Informationen wie Name, Matrikelnummer etc. über einen Studenten speichert. Erzeuge ein Objekt dieser Klasse und belege die Objektvariablen mit Werten. Lese diese Werte aus den Objektvariablen wieder aus und gib sie auf dem Bildschirm aus.&lt;br /&gt;
# Schreibe einen Konstruktor für deine Klasse, der die Objektvariablen des erzeugten Objekts mit Werten füllt. Erzeuge mit Hilfe dieses Konsturktors ein Objekt, lies seine Werte aus und gib sie auf dem Bildschirm aus.&lt;br /&gt;
# Erweitere deine Klasse um eine Methode &amp;lt;code&amp;gt;public void printMe()&amp;lt;/code&amp;gt;, die die Daten des Studentenobjekts auf dem Bildschirm ausgibt. Test deine Methode!&lt;br /&gt;
# Lege eine Feld (Array) mit 100 Studentenobjekten an, die verschiedene Matrikelnummern haben und gib all auf dem Bildschirm aus.&lt;br /&gt;
# Diese Feld ist schon eine Art Studentendatenbank. Schreibe daher eine neue Klasse &amp;lt;code&amp;gt;StudentenDatenbank&amp;lt;/code&amp;gt;, die eine Feld von Studentenobjekten enthält. Die Klasse soll einen Konsturktor haben, dem die Größe des zu erzeugenden Feldes übergeben wird. Implementiere auch eine Methode &amp;lt;code&amp;gt;printMe&amp;lt;/code&amp;gt;, die alle Datensätze ausgeben soll, sowie eine Mehtode &amp;lt;code&amp;gt;studentHinzufuegen()&amp;lt;/code&amp;gt;, die einen Studentenobjekt mit den zu übergebenen Daten anlegen soll und dieses in die Datenbank einfügen soll.&lt;br /&gt;
# Erweitere die Studentendatenbank um eine Methode &amp;lt;code&amp;gt;studentEntfernen()&amp;lt;/code&amp;gt;, die das Studentenobjekt mit der übergebenen Matrikelnummer aus der Datenbank löschen soll. Funktionert nach dem Löschen einiger Objekte deine Ausgabemethode (&amp;lt;code&amp;gt;printMe()&amp;lt;/code&amp;gt;) noch?&lt;br /&gt;
# Erweitere die Studentendatenbank um eine Methode &amp;lt;code&amp;gt;studentenAnzahl()&amp;lt;/code&amp;gt;, die die Anzahl der in der Datenbank gespeicherten Studentenobjekte zurückliefert.&lt;br /&gt;
&lt;br /&gt;
;Zeitbedarf&lt;br /&gt;
: Arthur: Aufgaben 1-5 zusammen ca. 1h&lt;br /&gt;
: Sven  : Aufgaben 1-7 zusammen etwa 1h hätte ich kate+bash benutzt schätz ich mal (angenehme aufgabe)&lt;br /&gt;
&lt;br /&gt;
;Fragen&lt;br /&gt;
: soll private / public / default / protected thematisiert werden? (Arthur+Sven)&lt;br /&gt;
: soll sich deren array in der DB von sich aus vergrößern? (Sven)&lt;br /&gt;
: evtl. verwirrend das bei den methodenNamen hinten in der aufgabe ein &amp;quot;()&amp;quot; ist obwohl ja parameter übergeben werden? (Sven)&lt;br /&gt;
: gibt es eine musterlösung? wäre für die übungen denke ich sinnvoll damit dort alle tutoren auf die aufgabe klarkommen.. und am ende ähnliche ergebnisse haben ;) (Sven)&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Selbst Klassen schreiben:&lt;br /&gt;
&lt;br /&gt;
1.: &lt;br /&gt;
Schreibe eine Klasse die informationen über einen Studenten speichert (....)&lt;br /&gt;
Erzeuge ein Objekt dieser Klasse, schreibe einen Wert in eine ihrer Variablen, lese ihn anschließend wieder aus und gib ihn auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
2.: &lt;br /&gt;
schreibe einen Konstructor für die Klasse Student mit welchem die Variablen des erzeugten Objektes gleich mit Werten gefüllt werden. Erzeuge mit hilfe dieses Constructors ein Objekt, lies einen seiner Werte aus und gib ihn auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
3:&lt;br /&gt;
Schreibe eine Funktion &amp;quot;PrintMe&amp;quot; die die Daten des Studentenobkektes in der Console ausgibt und teste diese.&lt;br /&gt;
&lt;br /&gt;
4:&lt;br /&gt;
Lege ein Array mit 100 Studentenobjekten an welche verschiedene Matrikelnummern haben und gib alle auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
5:&lt;br /&gt;
Verlagere das Array in eine neue Klasse StudentenDatenbank und schreibe für diese die Methoden StudentHinzufuegen und PrintMe.&lt;br /&gt;
&lt;br /&gt;
6:&lt;br /&gt;
....&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= LE 4: OO-Vertiefung und Klassenbibliothek =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Arthur, Martin&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Modularisierung in Java: Klassen und Objekte&#039;&#039;&#039;&lt;br /&gt;
** Instanziierung (auch Erklärung Mehrdeutigkeit von &amp;quot;Objekt&amp;quot; für Klasse oder Instanz)&lt;br /&gt;
** Referenzen (Pointer)&lt;br /&gt;
** insb: Referenzen sind nicht Kopien&lt;br /&gt;
** Overloading  / Polymorphie&lt;br /&gt;
*** Standardmethoden: toString, equals, hash, compare&lt;br /&gt;
** Type Casting einfacher Basistypen?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Objekte vertieft&#039;&#039;&#039;: als Ansammlung von Daten mit Methoden dazu&lt;br /&gt;
** Konstruktoren&lt;br /&gt;
** um innendrinn auswechseln zu können&lt;br /&gt;
** &#039;&#039;static&#039;&#039;&lt;br /&gt;
** Static nicht static: [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%25_toc_%25_sec_3.1.2 Benefits of Local State]&lt;br /&gt;
** &#039;&#039;final&#039;&#039;&lt;br /&gt;
** &#039;&#039;null&#039;&#039;, &#039;&#039;new&#039;&#039;&lt;br /&gt;
** &#039;&#039;this&#039;&#039;&lt;br /&gt;
** static / instanz -&amp;gt; Ebenen modell (?)&lt;br /&gt;
&lt;br /&gt;
* Java-API: Konzept &#039;&#039;&#039;Klassenbibliothek&#039;&#039;&#039;&lt;br /&gt;
** Javadocs finden, lesen&lt;br /&gt;
* JavaDoc selber schreiben und verwenden -&amp;gt; http://www.javadocs.org&lt;br /&gt;
* Input/Output (Streams, usw.) &amp;lt;-- großer Block&lt;br /&gt;
** List, ArrayList, InputReader, BufferedReader, Scanner&lt;br /&gt;
** Collections&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
* meinPferd = deinPferd;&lt;br /&gt;
* Klassen benutzen:&lt;br /&gt;
** Input/Output üben&lt;br /&gt;
** Viele andere Klassen aus der Java-API finden und nutzen&lt;br /&gt;
** Praktische Vorgehensweise, Anleitung zum Selbstlernen, nicht so viel Vorlesung dazu&lt;br /&gt;
&lt;br /&gt;
* UtilityObjekt mit readFile(aFilename) und getUserInput(aPrompt) [http://www.cs.princeton.edu/introcs/22inout/In.java.html sowas sollte rauskommen!]&lt;br /&gt;
&lt;br /&gt;
* Menü Objekt, das sich leicht adaptieren lässt?&lt;br /&gt;
* Apfelbaum&lt;br /&gt;
 while (Apfelbaum.hatNochAepfel) {&lt;br /&gt;
        Apfel meinApfel = Apfelbaum.getApfel(); // Apfel pflücken&lt;br /&gt;
        ich.esse(meinApfel);&lt;br /&gt;
 }&lt;br /&gt;
*  Collections, Polymorphie (Apfel mit Wurm....)&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_2&amp;diff=6767</id>
		<title>Martin Häcker/Java Kurs/Tag 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_2&amp;diff=6767"/>
		<updated>2006-03-16T23:15:02Z</updated>

		<summary type="html">&lt;p&gt;Schneider: /* Übungsaufgaben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= LE 3: Verfeinerung Java und Klassenbibliothek =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Martin, Felix&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
&lt;br /&gt;
=== Java / Methodik ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Modularisierung und Strukturierung&#039;&#039;&#039; -- auf allen Ebenen&lt;br /&gt;
** Klassen (als Strukturen)&lt;br /&gt;
** Methoden-Kapselung: &#039;&#039;&#039;Methoden-Nachtrag&#039;&#039;&#039;&lt;br /&gt;
*** Methoden als Abstraktionsmöglichkeiten -&amp;gt; verstecken von methoden [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%25_toc_%25_sec_Temp_43] Bringts das an der stelle?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Testen&#039;&#039;&#039;&lt;br /&gt;
** eigene assert-Funktion&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objektorientierung&#039;&#039;&#039; (Erklärungsansatz)&lt;br /&gt;
* Objekt, Klasse erklären als: &amp;quot;Klasse&amp;quot; Mensch&lt;br /&gt;
** davon dann klonen mit bestimmten Modifikationen (augenfarbe, größe, name....)&lt;br /&gt;
** das wäre dann klasse, objekte und konstruktoraufruf&lt;br /&gt;
* Objekte / Klassen erklären als&lt;br /&gt;
** Platonische Ideen (Pferd)&lt;br /&gt;
** Tatsächliches Ding (Bruno auf dem ich jeden Dienstag in Hellersdorf reite)&lt;br /&gt;
* Objekte als Daten mit &#039;&#039;Schutzschicht&#039;&#039; Methoden aussen herum&lt;br /&gt;
** Klassen als solches erst später (quasi erst prototyp und dann klassen erklären)&lt;br /&gt;
* Ganz anderer Ansatz: Erklären über Einheiten die sich über Nachrichten gegenseitig verständigen&lt;br /&gt;
* Äquivalenz zu Funktionaler Programmierung aufmachen&lt;br /&gt;
** Constructor: Funktion die Parameter bekommt und eine Funktion zurückgibt die diese verkapselt&lt;br /&gt;
** Methoden: diese Funktion kann mit dem Namen verschiedener Methoden aufgerufen werden und wird, indem es diese ausführt, zum Objekt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Probleme beim Erklären&#039;&#039;&#039;&lt;br /&gt;
* this, woher kommt das und wie verwendet man es!&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
;Ziel&lt;br /&gt;
:Kleine Studentendatenbank in der Studenten eingefügt und gesucht werden können. &lt;br /&gt;
&lt;br /&gt;
;Advanced&lt;br /&gt;
:mit löschen&lt;br /&gt;
&lt;br /&gt;
;Idee&lt;br /&gt;
:&amp;quot;Statistik&amp;quot; : Anzahl der Studenten, durchschnittliches Alter, bla&lt;br /&gt;
&lt;br /&gt;
;Aufgaben&lt;br /&gt;
# Schreibe eine Klasse, die Informationen wie Name, Matrikelnummer etc. über einen Studenten speichert. Erzeuge ein Objekt dieser Klasse und belege die Objektvariablen mit Werten. Lese diese Werte aus den Objektvariablen wieder aus und gib sie auf dem Bildschirm aus.&lt;br /&gt;
# Schreibe einen Konstruktor für deine Klasse, der die Objektvariablen des erzeugten Objekts mit Werten füllt. Erzeuge mit Hilfe dieses Konsturktors ein Objekt, lies seine Werte aus und gib sie auf dem Bildschirm aus.&lt;br /&gt;
# Erweitere deine Klasse um eine Methode &amp;lt;code&amp;gt;public void printMe()&amp;lt;/code&amp;gt;, die die Daten des Studentenobjekts auf dem Bildschirm ausgibt. Test deine Methode!&lt;br /&gt;
# Lege eine Feld (Array) mit 100 Studentenobjekten an, die verschiedene Matrikelnummern haben und gib all auf dem Bildschirm aus.&lt;br /&gt;
# Diese Feld ist schon eine Art Studentendatenbank. Schreibe daher eine neue Klasse &amp;lt;code&amp;gt;StudentenDatenbank&amp;lt;/code&amp;gt;, die eine Feld von Studentenobjekten enthält. Die Klasse soll einen Konsturktor haben, dem die Größe des zu erzeugenden Feldes übergeben wird. Implementiere auch eine Methode &amp;lt;code&amp;gt;printMe&amp;lt;/code&amp;gt;, die alle Datensätze ausgeben soll, sowie eine Mehtode &amp;lt;code&amp;gt;studentHinzufuegen()&amp;lt;/code&amp;gt;, die einen Studentenobjekt mit den zu übergebenen Daten anlegen soll und dieses in die Datenbank einfügen soll.&lt;br /&gt;
# Erweitere die Studentendatenbank um eine Methode &amp;lt;code&amp;gt;studentEntfernen()&amp;lt;/code&amp;gt;, die das Studentenobjekt mit der übergebenen Matrikelnummer aus der Datenbank löschen soll. Funktionert nach dem Löschen einiger Objekte deine Ausgabemethode (&amp;lt;code&amp;gt;printMe()&amp;lt;/code&amp;gt;) noch?&lt;br /&gt;
# Erweitere die Studentendatenbank um eine Methode &amp;lt;code&amp;gt;studentenAnzahl()&amp;lt;/code&amp;gt;, die die Anzahl der in der Datenbank gespeicherten Studentenobjekte zurückliefert.&lt;br /&gt;
&lt;br /&gt;
;Zeitbedarf&lt;br /&gt;
: Arthur: Aufgaben 1-5 zusammen ca. 1h&lt;br /&gt;
: Sven  : Aufgaben 1-7 zusammen etwa 1h hätte ich kate+bash benutzt schätz ich mal (angenehme aufgabe)&lt;br /&gt;
&lt;br /&gt;
;Fragen&lt;br /&gt;
: soll private / public / default / protected thematisiert werden? (Arthur+Sven)&lt;br /&gt;
: soll sich deren array in der DB von sich aus vergrößern? (Sven)&lt;br /&gt;
: evtl. verwirrend das bei den methodenNamen hinten in der aufgabe ein &amp;quot;()&amp;quot; ist obwohl ja parameter übergeben werden? (Sven)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Selbst Klassen schreiben:&lt;br /&gt;
&lt;br /&gt;
1.: &lt;br /&gt;
Schreibe eine Klasse die informationen über einen Studenten speichert (....)&lt;br /&gt;
Erzeuge ein Objekt dieser Klasse, schreibe einen Wert in eine ihrer Variablen, lese ihn anschließend wieder aus und gib ihn auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
2.: &lt;br /&gt;
schreibe einen Konstructor für die Klasse Student mit welchem die Variablen des erzeugten Objektes gleich mit Werten gefüllt werden. Erzeuge mit hilfe dieses Constructors ein Objekt, lies einen seiner Werte aus und gib ihn auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
3:&lt;br /&gt;
Schreibe eine Funktion &amp;quot;PrintMe&amp;quot; die die Daten des Studentenobkektes in der Console ausgibt und teste diese.&lt;br /&gt;
&lt;br /&gt;
4:&lt;br /&gt;
Lege ein Array mit 100 Studentenobjekten an welche verschiedene Matrikelnummern haben und gib alle auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
5:&lt;br /&gt;
Verlagere das Array in eine neue Klasse StudentenDatenbank und schreibe für diese die Methoden StudentHinzufuegen und PrintMe.&lt;br /&gt;
&lt;br /&gt;
6:&lt;br /&gt;
....&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= LE 4: Wir sind alle nur Objekte =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Arthur, Martin&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Modularisierung in Java: Klassen und Objekte&#039;&#039;&#039;&lt;br /&gt;
** Instanziierung (auch Erklärung Mehrdeutigkeit von &amp;quot;Objekt&amp;quot; für Klasse oder Instanz)&lt;br /&gt;
** Referenzen (Pointer)&lt;br /&gt;
** insb: Referenzen sind nicht Kopien&lt;br /&gt;
** Overloading  / Polymorphie&lt;br /&gt;
*** Standardmethoden: toString, equals, hash, compare&lt;br /&gt;
** Type Casting einfacher Basistypen?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Objekte vertieft&#039;&#039;&#039;: als Ansammlung von Daten mit Methoden dazu&lt;br /&gt;
** Konstruktoren&lt;br /&gt;
** um innendrinn auswechseln zu können&lt;br /&gt;
** &#039;&#039;static&#039;&#039;&lt;br /&gt;
** Static nicht static: [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%25_toc_%25_sec_3.1.2 Benefits of Local State]&lt;br /&gt;
** &#039;&#039;final&#039;&#039;&lt;br /&gt;
** &#039;&#039;null&#039;&#039;, &#039;&#039;new&#039;&#039;&lt;br /&gt;
** &#039;&#039;this&#039;&#039;&lt;br /&gt;
** static / instanz -&amp;gt; Ebenen modell (?)&lt;br /&gt;
&lt;br /&gt;
* Java-API: Konzept &#039;&#039;&#039;Klassenbibliothek&#039;&#039;&#039;&lt;br /&gt;
** Javadocs finden, lesen&lt;br /&gt;
* JavaDoc selber schreiben und verwenden -&amp;gt; http://www.javadocs.org&lt;br /&gt;
* Input/Output (Streams, usw.) &amp;lt;-- großer Block&lt;br /&gt;
** List, ArrayList, InputReader, BufferedReader, Scanner&lt;br /&gt;
** Collections&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
* meinPferd = deinPferd;&lt;br /&gt;
* Klassen benutzen:&lt;br /&gt;
** Input/Output üben&lt;br /&gt;
** Viele andere Klassen aus der Java-API finden und nutzen&lt;br /&gt;
** Praktische Vorgehensweise, Anleitung zum Selbstlernen, nicht so viel Vorlesung dazu&lt;br /&gt;
&lt;br /&gt;
* UtilityObjekt mit readFile(aFilename) und getUserInput(aPrompt) [http://www.cs.princeton.edu/introcs/22inout/In.java.html sowas sollte rauskommen!]&lt;br /&gt;
&lt;br /&gt;
* Menü Objekt, das sich leicht adaptieren lässt?&lt;br /&gt;
* Apfelbaum&lt;br /&gt;
 while (Apfelbaum.hatNochAepfel) {&lt;br /&gt;
        Apfel meinApfel = Apfelbaum.getApfel(); // Apfel pflücken&lt;br /&gt;
        ich.esse(meinApfel);&lt;br /&gt;
 }&lt;br /&gt;
*  Collections, Polymorphie (Apfel mit Wurm....)&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_2&amp;diff=6766</id>
		<title>Martin Häcker/Java Kurs/Tag 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_2&amp;diff=6766"/>
		<updated>2006-03-16T23:04:01Z</updated>

		<summary type="html">&lt;p&gt;Schneider: /* Übungsaufgaben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= LE 3: Verfeinerung Java und Klassenbibliothek =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Martin, Felix&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
&lt;br /&gt;
=== Java / Methodik ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Modularisierung und Strukturierung&#039;&#039;&#039; -- auf allen Ebenen&lt;br /&gt;
** Klassen (als Strukturen)&lt;br /&gt;
** Methoden-Kapselung: &#039;&#039;&#039;Methoden-Nachtrag&#039;&#039;&#039;&lt;br /&gt;
*** Methoden als Abstraktionsmöglichkeiten -&amp;gt; verstecken von methoden [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%25_toc_%25_sec_Temp_43] Bringts das an der stelle?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Testen&#039;&#039;&#039;&lt;br /&gt;
** eigene assert-Funktion&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objektorientierung&#039;&#039;&#039; (Erklärungsansatz)&lt;br /&gt;
* Objekt, Klasse erklären als: &amp;quot;Klasse&amp;quot; Mensch&lt;br /&gt;
** davon dann klonen mit bestimmten Modifikationen (augenfarbe, größe, name....)&lt;br /&gt;
** das wäre dann klasse, objekte und konstruktoraufruf&lt;br /&gt;
* Objekte / Klassen erklären als&lt;br /&gt;
** Platonische Ideen (Pferd)&lt;br /&gt;
** Tatsächliches Ding (Bruno auf dem ich jeden Dienstag in Hellersdorf reite)&lt;br /&gt;
* Objekte als Daten mit &#039;&#039;Schutzschicht&#039;&#039; Methoden aussen herum&lt;br /&gt;
** Klassen als solches erst später (quasi erst prototyp und dann klassen erklären)&lt;br /&gt;
* Ganz anderer Ansatz: Erklären über Einheiten die sich über Nachrichten gegenseitig verständigen&lt;br /&gt;
* Äquivalenz zu Funktionaler Programmierung aufmachen&lt;br /&gt;
** Constructor: Funktion die Parameter bekommt und eine Funktion zurückgibt die diese verkapselt&lt;br /&gt;
** Methoden: diese Funktion kann mit dem Namen verschiedener Methoden aufgerufen werden und wird, indem es diese ausführt, zum Objekt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Probleme beim Erklären&#039;&#039;&#039;&lt;br /&gt;
* this, woher kommt das und wie verwendet man es!&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
;Ziel&lt;br /&gt;
:Kleine Studentendatenbank in der Studenten eingefügt und gesucht werden können. &lt;br /&gt;
&lt;br /&gt;
;Advanced&lt;br /&gt;
:mit löschen&lt;br /&gt;
&lt;br /&gt;
;Idee&lt;br /&gt;
:&amp;quot;Statistik&amp;quot; : Anzahl der Studenten, durchschnittliches Alter, bla&lt;br /&gt;
&lt;br /&gt;
;Aufgaben&lt;br /&gt;
# Schreibe eine Klasse, die Informationen wie Name, Matrikelnummer etc. über einen Studenten speichert. Erzeuge ein Objekt dieser Klasse und belege die Objektvariablen mit Werten. Lese diese Werte aus den Objektvariablen wieder aus und gib sie auf dem Bildschirm aus.&lt;br /&gt;
# Schreibe einen Konstruktor für deine Klasse, der die Objektvariablen des erzeugten Objekts mit Werten füllt. Erzeuge mit Hilfe dieses Konsturktors ein Objekt, lies seine Werte aus und gib sie auf dem Bildschirm aus.&lt;br /&gt;
# Erweitere deine Klasse um eine Methode &amp;lt;code&amp;gt;public void printMe()&amp;lt;/code&amp;gt;, die die Daten des Studentenobjekts auf dem Bildschirm ausgibt. Test deine Methode!&lt;br /&gt;
# Lege eine Feld (Array) mit 100 Studentenobjekten an, die verschiedene Matrikelnummern haben und gib all auf dem Bildschirm aus.&lt;br /&gt;
# Diese Feld ist schon eine Art Studentendatenbank. Schreibe daher eine neue Klasse &amp;lt;code&amp;gt;StudentenDatenbank&amp;lt;/code&amp;gt;, die eine Feld von Studentenobjekten enthält. Die Klasse soll einen Konsturktor haben, dem die Größe des zu erzeugenden Feldes übergeben wird. Implementiere auch eine Methode &amp;lt;code&amp;gt;printMe&amp;lt;/code&amp;gt;, die alle Datensätze ausgeben soll, sowie eine Mehtode &amp;lt;code&amp;gt;studentHinzufuegen()&amp;lt;/code&amp;gt;, die einen Studentenobjekt mit den zu übergebenen Daten anlegen soll und dieses in die Datenbank einfügen soll.&lt;br /&gt;
# Erweitere die Studentendatenbank um eine Methode &amp;lt;code&amp;gt;studentEntfernen()&amp;lt;/code&amp;gt;, die das Studentenobjekt mit der übergebenen Matrikelnummer aus der Datenbank löschen soll. Funktionert nach dem Löschen einiger Objekte deine Ausgabemethode (&amp;lt;code&amp;gt;printMe()&amp;lt;/code&amp;gt;) noch?&lt;br /&gt;
# Erweitere die Studentendatenbank um eine Methode &amp;lt;code&amp;gt;studentenAnzahl()&amp;lt;/code&amp;gt;, die die Anzahl der in der Datenbank gespeicherten Studentenobjekte zurückliefert.&lt;br /&gt;
&lt;br /&gt;
;Zeitbedarf&lt;br /&gt;
: Arthur: Aufgaben 1-5 zusammen ca. 1h&lt;br /&gt;
: Sven  : Aufgaben 1-5 zusammen 22min (eclipse) also mit kate+bash schätz ich mal ~1h&lt;br /&gt;
&lt;br /&gt;
;Fragen&lt;br /&gt;
: soll private / public / default / protected thematisiert werden? (Arthur+Sven)&lt;br /&gt;
: soll sich deren array in der DB von sich aus vergrößern? (Sven)&lt;br /&gt;
: evtl. verwirrend das bei den methodenNamen hinten in der aufgabe ein &amp;quot;()&amp;quot; ist obwohl ja parameter übergeben werden? (Sven)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Selbst Klassen schreiben:&lt;br /&gt;
&lt;br /&gt;
1.: &lt;br /&gt;
Schreibe eine Klasse die informationen über einen Studenten speichert (....)&lt;br /&gt;
Erzeuge ein Objekt dieser Klasse, schreibe einen Wert in eine ihrer Variablen, lese ihn anschließend wieder aus und gib ihn auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
2.: &lt;br /&gt;
schreibe einen Konstructor für die Klasse Student mit welchem die Variablen des erzeugten Objektes gleich mit Werten gefüllt werden. Erzeuge mit hilfe dieses Constructors ein Objekt, lies einen seiner Werte aus und gib ihn auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
3:&lt;br /&gt;
Schreibe eine Funktion &amp;quot;PrintMe&amp;quot; die die Daten des Studentenobkektes in der Console ausgibt und teste diese.&lt;br /&gt;
&lt;br /&gt;
4:&lt;br /&gt;
Lege ein Array mit 100 Studentenobjekten an welche verschiedene Matrikelnummern haben und gib alle auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
5:&lt;br /&gt;
Verlagere das Array in eine neue Klasse StudentenDatenbank und schreibe für diese die Methoden StudentHinzufuegen und PrintMe.&lt;br /&gt;
&lt;br /&gt;
6:&lt;br /&gt;
....&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= LE 4: Wir sind alle nur Objekte =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Arthur, Martin&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Modularisierung in Java: Klassen und Objekte&#039;&#039;&#039;&lt;br /&gt;
** Instanziierung (auch Erklärung Mehrdeutigkeit von &amp;quot;Objekt&amp;quot; für Klasse oder Instanz)&lt;br /&gt;
** Referenzen (Pointer)&lt;br /&gt;
** insb: Referenzen sind nicht Kopien&lt;br /&gt;
** Overloading  / Polymorphie&lt;br /&gt;
*** Standardmethoden: toString, equals, hash, compare&lt;br /&gt;
** Type Casting einfacher Basistypen?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Objekte vertieft&#039;&#039;&#039;: als Ansammlung von Daten mit Methoden dazu&lt;br /&gt;
** Konstruktoren&lt;br /&gt;
** um innendrinn auswechseln zu können&lt;br /&gt;
** &#039;&#039;static&#039;&#039;&lt;br /&gt;
** Static nicht static: [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%25_toc_%25_sec_3.1.2 Benefits of Local State]&lt;br /&gt;
** &#039;&#039;final&#039;&#039;&lt;br /&gt;
** &#039;&#039;null&#039;&#039;, &#039;&#039;new&#039;&#039;&lt;br /&gt;
** &#039;&#039;this&#039;&#039;&lt;br /&gt;
** static / instanz -&amp;gt; Ebenen modell (?)&lt;br /&gt;
&lt;br /&gt;
* Java-API: Konzept &#039;&#039;&#039;Klassenbibliothek&#039;&#039;&#039;&lt;br /&gt;
** Javadocs finden, lesen&lt;br /&gt;
* JavaDoc selber schreiben und verwenden -&amp;gt; http://www.javadocs.org&lt;br /&gt;
* Input/Output (Streams, usw.) &amp;lt;-- großer Block&lt;br /&gt;
** List, ArrayList, InputReader, BufferedReader, Scanner&lt;br /&gt;
** Collections&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
* meinPferd = deinPferd;&lt;br /&gt;
* Klassen benutzen:&lt;br /&gt;
** Input/Output üben&lt;br /&gt;
** Viele andere Klassen aus der Java-API finden und nutzen&lt;br /&gt;
** Praktische Vorgehensweise, Anleitung zum Selbstlernen, nicht so viel Vorlesung dazu&lt;br /&gt;
&lt;br /&gt;
* UtilityObjekt mit readFile(aFilename) und getUserInput(aPrompt) [http://www.cs.princeton.edu/introcs/22inout/In.java.html sowas sollte rauskommen!]&lt;br /&gt;
&lt;br /&gt;
* Menü Objekt, das sich leicht adaptieren lässt?&lt;br /&gt;
* Apfelbaum&lt;br /&gt;
 while (Apfelbaum.hatNochAepfel) {&lt;br /&gt;
        Apfel meinApfel = Apfelbaum.getApfel(); // Apfel pflücken&lt;br /&gt;
        ich.esse(meinApfel);&lt;br /&gt;
 }&lt;br /&gt;
*  Collections, Polymorphie (Apfel mit Wurm....)&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6711</id>
		<title>Martin Häcker/Java Kurs/Tag 1</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6711"/>
		<updated>2006-03-14T17:21:23Z</updated>

		<summary type="html">&lt;p&gt;Schneider: /* Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= LE 1: Hello, World! =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Robert Lubkoll, Felix Schwarz&lt;br /&gt;
&lt;br /&gt;
== Organisatorisches ==&lt;br /&gt;
* Was Passiert&lt;br /&gt;
* Wann passiert was&lt;br /&gt;
* Wie passierts&lt;br /&gt;
* Vorstellung&lt;br /&gt;
* Was ist das genau&lt;br /&gt;
* Wer sind wir: Freiwillig, Umsonst&lt;br /&gt;
* Ziel des Kurses&lt;br /&gt;
* Was sie am Ende können sollen&lt;br /&gt;
* Gruppeneinteilung&lt;br /&gt;
** am Ende der ersten Vorlesung&lt;br /&gt;
** Vorher per e-mail&lt;br /&gt;
&#039;&#039;&#039;Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Inhalt (Vorgehen, Beispiele, Ideen) ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
Was ist &#039;&#039;&#039;Programmieren?&#039;&#039;&#039;&lt;br /&gt;
* imperativ (prozedural) vs. funktionales Programmieren&lt;br /&gt;
** relation problem &amp;lt;-&amp;gt; lösung / kochrezept&lt;br /&gt;
* Zustandsmaschine&lt;br /&gt;
* Einführung nach [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-9.html#%25_chap_1 SICP Kapitel 1] (bis &amp;quot;Programming in Lisp&amp;quot;)&lt;br /&gt;
** &#039;&#039;Damit ist die Philosophie von Programmieren gemeint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Drei Dinge, die wichtig sind für Programmierer (Das soll sich durch den Kurs durchziehen als roter Faden für die Sprachfeatures die wir einführen):&lt;br /&gt;
* Primitive Ausdrücke&lt;br /&gt;
* Kombinationsmöglichkeiten&lt;br /&gt;
* Abstraktionsmöglichkeiten&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
==== Wie fangen wir Java an ====&lt;br /&gt;
* Werte und operatoren +,*,/,-, % (?)&lt;br /&gt;
* Wenige Variablentypen int, String, (double)&lt;br /&gt;
** String: Vormerken, das man hier später klar macht das das auch Objekte und daher Referenzen sind - erstmal ists aber egal, da sie eh Immutable sind&lt;br /&gt;
* Zuweisung&lt;br /&gt;
* &amp;lt;, &amp;gt;, ==, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* if-else&lt;br /&gt;
* hierfür auch boolean und die operatoren &amp;amp;&amp;amp; || ! != ==&lt;br /&gt;
&lt;br /&gt;
* Methoden vorgeben: Input, Output&lt;br /&gt;
&lt;br /&gt;
* Was passiert da, wieso erst Compilieren, dann ausführen&lt;br /&gt;
* Live vorführen&lt;br /&gt;
&lt;br /&gt;
==== Vorführung ====&lt;br /&gt;
&#039;&#039;&#039;Aufbau eines Java-Programms&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel bringen und daran erklären, was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind. Das Programm dabei langsam entwickeln und dabei vorführen. Ziel ist, das am schluss ein komplettes Beispiel da steht - also alles verwendet wird was wir erklärt haben, es aber trotzdem so einfach bleibt das es ohne viel Fehlerpotenzial später nachgemacht werden kann.&lt;br /&gt;
 class Test {&lt;br /&gt;
 	static void print(double aNumber) {&lt;br /&gt;
 		System.out.println(&amp;quot;&amp;gt; &amp;quot; + aNumber);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public static void main(String [] arguments) {&lt;br /&gt;
 		print(3 * 4);&lt;br /&gt;
 		print(7 + 23 * 8 - 3);&lt;br /&gt;
 		// ....&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sauberes Programmieren&#039;&#039;&#039;&lt;br /&gt;
* Variablen und Identifier-Namen&lt;br /&gt;
** Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!&lt;br /&gt;
** Lokale Namen und wieso: (vielleicht?) [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 scrollen bis &#039;&#039;&#039;Local Names&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlermeldungen lesen und verstehen&#039;&#039;&#039;&lt;br /&gt;
* Klammer vergessen&lt;br /&gt;
* Semikolon vergessen&lt;br /&gt;
* Klasse heißt anders als Datei&lt;br /&gt;
* Compiler falsch aufgerufen&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;cd&#039;&#039; üben&lt;br /&gt;
* Hello World eintippen (kate, gedit, nano, ..)&lt;br /&gt;
* javac / java benutzen&lt;br /&gt;
* Ergebnisse sehen&lt;br /&gt;
* Fehler einbauen, Fehler finden (laufzeit/compilezeit)&lt;br /&gt;
* Einige Expressions angeben und die Teilnehmer sollen feststellen, was die ausgeben/berechnen würden&lt;br /&gt;
* Das gleiche dann nochmal mit if/else&lt;br /&gt;
* Einen mathematischen Ausdruck in Java übersetzen&lt;br /&gt;
* [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben]&lt;br /&gt;
&lt;br /&gt;
= LE 2: Standardkonstrukte in Java (Robert und Sven) =&lt;br /&gt;
Übungs-Aufgaben inklusive Vorgaben und Musterlösung [http://user.cs.tu-berlin.de/~svens/files/le2_ue.tar.gz LE2UEB]&lt;br /&gt;
&lt;br /&gt;
updated: freitag 2006-03-10 19:05&lt;br /&gt;
&lt;br /&gt;
letzte änderungen: aufgabe 0 mit einigen methoden die sie fixen müssen, bzw. analyisieren sollen.&lt;br /&gt;
&lt;br /&gt;
TODO: LE1 aufgabe benutzen. (delayed)&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
* Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt: &lt;br /&gt;
** dadurch verbesserte test-möglichkeiten (sprich methoden sind auch eine art von modul)&lt;br /&gt;
** verbesserte verständlichkeit([http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 Procedures as Black-Box Abstractions])&lt;br /&gt;
* Quelltextverkürzung durch schleifen&lt;br /&gt;
** nicht minimierung auf kosten der verständlichkeit&lt;br /&gt;
** was ist aufgabe des entwicklers?&lt;br /&gt;
** und was ist aufgabe des compilers? (vllt. auch nicht?)&lt;br /&gt;
** evtl. ist eine eigene methode sinnvoller/verständlicher?&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
* &#039;&#039;&#039;Typen&#039;&#039;&#039;&lt;br /&gt;
** Arrays&lt;br /&gt;
*** warum, wie und probleme&lt;br /&gt;
** void&lt;br /&gt;
** char?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Methoden&#039;&#039;&#039;:&lt;br /&gt;
** Namend&lt;br /&gt;
** Aufruf&lt;br /&gt;
** Parameter und Rückgabe -&amp;gt; Call by Value&lt;br /&gt;
** main&lt;br /&gt;
** return&lt;br /&gt;
** Nachtrag Datenstrukturen: void&lt;br /&gt;
** Beispiel: System.out.println()&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Blöcke&#039;&#039;&#039;&lt;br /&gt;
** if-else (das ist doch schon in LE1 enthalten!)&lt;br /&gt;
** while&lt;br /&gt;
*** Formulieren von Bedingungen&lt;br /&gt;
*** Schleife als zweite Lösung für duplikation von Code&lt;br /&gt;
*** Diskussion Schleife &amp;lt;-&amp;gt; Rekursion&lt;br /&gt;
&lt;br /&gt;
* Anwendung von Schleifen&lt;br /&gt;
* Rekursion &amp;lt;-&amp;gt; Schleifen (Beispiel)&lt;br /&gt;
* Warum/wann Schleifen?&lt;br /&gt;
** als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)&lt;br /&gt;
** wenn die Anzahl der Durchläufe nicht konstant ist&lt;br /&gt;
** for schleife, wann und wozu, einfache beispiele: for(int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Gute Namen&#039;&#039;&#039;&lt;br /&gt;
** Abstrakter Gedanke: Für den Computer ists wurscht, wie man das was man meint aufschreibt. Wir Menschen dagegen lassen und leicht verwirren&lt;br /&gt;
** abwägen zwischen&lt;br /&gt;
*** aussagekraft des namens&lt;br /&gt;
*** häufigkeit im code&lt;br /&gt;
*** kommentar zu variable(nnamen)&lt;br /&gt;
*** länge des namens&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Testen&#039;&#039;&#039;&lt;br /&gt;
* was ist testen?&lt;br /&gt;
** überprüfung von einigen randwerten =&amp;gt; nachdenken ist erforderlich um interessante fälle zu finden&lt;br /&gt;
** testen ist nicht verifizieren&lt;br /&gt;
* wie in java?&lt;br /&gt;
** System.out.println(..);&lt;br /&gt;
** auskommentieren und schrittweises testen&lt;br /&gt;
* was wird getestet?&lt;br /&gt;
** ausgabe von arrays komplex&lt;br /&gt;
** ausgabe von werten mit text verknüpfen&lt;br /&gt;
** Variablen haben unterschiedliche Werte während das Program läuft!&lt;br /&gt;
&lt;br /&gt;
assert-Methode selber schreiben -&amp;gt; Später! (WANN?)&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* Methoden definieren, die bestimmte Eigenschaften haben&lt;br /&gt;
* Beispiele dann Abtippen und ausprobieren&lt;br /&gt;
* Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)&lt;br /&gt;
* Verschiedene Eingabewerte&lt;br /&gt;
* erste Endlosschleife&lt;br /&gt;
* Fehler für die eingeführten elemente&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6710</id>
		<title>Martin Häcker/Java Kurs/Tag 1</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6710"/>
		<updated>2006-03-14T17:19:35Z</updated>

		<summary type="html">&lt;p&gt;Schneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= LE 1: Hello, World! =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Robert Lubkoll, Felix Schwarz&lt;br /&gt;
&lt;br /&gt;
== Organisatorisches ==&lt;br /&gt;
* Was Passiert&lt;br /&gt;
* Wann passiert was&lt;br /&gt;
* Wie passierts&lt;br /&gt;
* Vorstellung&lt;br /&gt;
* Was ist das genau&lt;br /&gt;
* Wer sind wir: Freiwillig, Umsonst&lt;br /&gt;
* Ziel des Kurses&lt;br /&gt;
* Was sie am Ende können sollen&lt;br /&gt;
* Gruppeneinteilung&lt;br /&gt;
** am Ende der ersten Vorlesung&lt;br /&gt;
** Vorher per e-mail&lt;br /&gt;
&#039;&#039;&#039;Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Inhalt (Vorgehen, Beispiele, Ideen) ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
Was ist &#039;&#039;&#039;Programmieren?&#039;&#039;&#039;&lt;br /&gt;
* imperativ (prozedural) vs. funktionales Programmieren&lt;br /&gt;
** relation problem &amp;lt;-&amp;gt; lösung / kochrezept&lt;br /&gt;
* Zustandsmaschine&lt;br /&gt;
* Einführung nach [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-9.html#%25_chap_1 SICP Kapitel 1] (bis &amp;quot;Programming in Lisp&amp;quot;)&lt;br /&gt;
** &#039;&#039;Damit ist die Philosophie von Programmieren gemeint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Drei Dinge, die wichtig sind für Programmierer (Das soll sich durch den Kurs durchziehen als roter Faden für die Sprachfeatures die wir einführen):&lt;br /&gt;
* Primitive Ausdrücke&lt;br /&gt;
* Kombinationsmöglichkeiten&lt;br /&gt;
* Abstraktionsmöglichkeiten&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
==== Wie fangen wir Java an ====&lt;br /&gt;
* Werte und operatoren +,*,/,-, % (?)&lt;br /&gt;
* Wenige Variablentypen int, String, (double)&lt;br /&gt;
** String: Vormerken, das man hier später klar macht das das auch Objekte und daher Referenzen sind - erstmal ists aber egal, da sie eh Immutable sind&lt;br /&gt;
* Zuweisung&lt;br /&gt;
* &amp;lt;, &amp;gt;, ==, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* if-else&lt;br /&gt;
* hierfür auch boolean und die operatoren &amp;amp;&amp;amp; || ! != ==&lt;br /&gt;
&lt;br /&gt;
* Methoden vorgeben: Input, Output&lt;br /&gt;
&lt;br /&gt;
* Was passiert da, wieso erst Compilieren, dann ausführen&lt;br /&gt;
* Live vorführen&lt;br /&gt;
&lt;br /&gt;
==== Vorführung ====&lt;br /&gt;
&#039;&#039;&#039;Aufbau eines Java-Programms&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel bringen und daran erklären, was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind. Das Programm dabei langsam entwickeln und dabei vorführen. Ziel ist, das am schluss ein komplettes Beispiel da steht - also alles verwendet wird was wir erklärt haben, es aber trotzdem so einfach bleibt das es ohne viel Fehlerpotenzial später nachgemacht werden kann.&lt;br /&gt;
 class Test {&lt;br /&gt;
 	static void print(double aNumber) {&lt;br /&gt;
 		System.out.println(&amp;quot;&amp;gt; &amp;quot; + aNumber);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public static void main(String [] arguments) {&lt;br /&gt;
 		print(3 * 4);&lt;br /&gt;
 		print(7 + 23 * 8 - 3);&lt;br /&gt;
 		// ....&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sauberes Programmieren&#039;&#039;&#039;&lt;br /&gt;
* Variablen und Identifier-Namen&lt;br /&gt;
** Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!&lt;br /&gt;
** Lokale Namen und wieso: (vielleicht?) [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 scrollen bis &#039;&#039;&#039;Local Names&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlermeldungen lesen und verstehen&#039;&#039;&#039;&lt;br /&gt;
* Klammer vergessen&lt;br /&gt;
* Semikolon vergessen&lt;br /&gt;
* Klasse heißt anders als Datei&lt;br /&gt;
* Compiler falsch aufgerufen&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;cd&#039;&#039; üben&lt;br /&gt;
* Hello World eintippen (kate, gedit, nano, ..)&lt;br /&gt;
* javac / java benutzen&lt;br /&gt;
* Ergebnisse sehen&lt;br /&gt;
* Fehler einbauen, Fehler finden (laufzeit/compilezeit)&lt;br /&gt;
* Einige Expressions angeben und die Teilnehmer sollen feststellen, was die ausgeben/berechnen würden&lt;br /&gt;
* Das gleiche dann nochmal mit if/else&lt;br /&gt;
* Einen mathematischen Ausdruck in Java übersetzen&lt;br /&gt;
* [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben]&lt;br /&gt;
&lt;br /&gt;
= LE 2: Standardkonstrukte in Java (Robert und Sven) =&lt;br /&gt;
Übungs-Aufgaben inklusive Vorgaben und Musterlösung [http://user.cs.tu-berlin.de/~svens/files/le2_ue.tar.gz LE2UEB]&lt;br /&gt;
&lt;br /&gt;
updated: freitag 2006-03-10 19:05&lt;br /&gt;
&lt;br /&gt;
letzte änderungen: aufgabe 0 mit einigen methoden die sie fixen müssen, bzw. analyisieren sollen.&lt;br /&gt;
&lt;br /&gt;
TODO: LE1 aufgabe benutzen. (delayed)&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
* Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt: &lt;br /&gt;
** dadurch verbesserte test-möglichkeiten (sprich methoden sind auch eine art von modul)&lt;br /&gt;
** verbesserte verständlichkeit([http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 Procedures as Black-Box Abstractions])&lt;br /&gt;
* Quelltextverkürzung durch schleifen&lt;br /&gt;
** nicht minimierung auf kosten der verständlichkeit&lt;br /&gt;
** was ist aufgabe des entwicklers?&lt;br /&gt;
** und was ist aufgabe des compilers? (vllt. auch nicht?)&lt;br /&gt;
** evtl. ist eine eigene methode sinnvoller/verständlicher?&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
* &#039;&#039;&#039;Typen&#039;&#039;&#039;&lt;br /&gt;
** Arrays&lt;br /&gt;
*** warum, wie und probleme&lt;br /&gt;
** void&lt;br /&gt;
** char?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Methoden&#039;&#039;&#039;:&lt;br /&gt;
** Namend&lt;br /&gt;
** Aufruf&lt;br /&gt;
** Parameter und Rückgabe -&amp;gt; Call by Value&lt;br /&gt;
** main&lt;br /&gt;
** return&lt;br /&gt;
** Nachtrag Datenstrukturen: void&lt;br /&gt;
** Beispiel: System.out.println()&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Blöcke&#039;&#039;&#039;&lt;br /&gt;
** if-else&lt;br /&gt;
*** Formulieren von Bedingungen für if, while&lt;br /&gt;
** while&lt;br /&gt;
*** Schleife als zweite Lösung für duplikation von Code&lt;br /&gt;
*** Diskussion Schleife &amp;lt;-&amp;gt; Rekursion&lt;br /&gt;
&lt;br /&gt;
* Anwendung von Schleifen&lt;br /&gt;
* Rekursion &amp;lt;-&amp;gt; Schleifen (Beispiel)&lt;br /&gt;
* Warum/wann Schleifen?&lt;br /&gt;
** als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)&lt;br /&gt;
** wenn die Anzahl der Durchläufe nicht konstant ist&lt;br /&gt;
** for schleife, wann und wozu, einfache beispiele: for(int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Gute Namen&#039;&#039;&#039;&lt;br /&gt;
** Abstrakter Gedanke: Für den Computer ists wurscht, wie man das was man meint aufschreibt. Wir Menschen dagegen lassen und leicht verwirren&lt;br /&gt;
** abwägen zwischen&lt;br /&gt;
*** aussagekraft des namens&lt;br /&gt;
*** häufigkeit im code&lt;br /&gt;
*** kommentar zu variable(nnamen)&lt;br /&gt;
*** länge des namens&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Testen&#039;&#039;&#039;&lt;br /&gt;
* was ist testen?&lt;br /&gt;
** überprüfung von einigen randwerten =&amp;gt; nachdenken ist erforderlich um interessante fälle zu finden&lt;br /&gt;
** testen ist nicht verifizieren&lt;br /&gt;
* wie in java?&lt;br /&gt;
** System.out.println(..);&lt;br /&gt;
** auskommentieren und schrittweises testen&lt;br /&gt;
* was wird getestet?&lt;br /&gt;
** ausgabe von arrays komplex&lt;br /&gt;
** ausgabe von werten mit text verknüpfen&lt;br /&gt;
** Variablen haben unterschiedliche Werte während das Program läuft!&lt;br /&gt;
&lt;br /&gt;
assert-Methode selber schreiben -&amp;gt; Später! (WANN?)&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* Methoden definieren, die bestimmte Eigenschaften haben&lt;br /&gt;
* Beispiele dann Abtippen und ausprobieren&lt;br /&gt;
* Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)&lt;br /&gt;
* Verschiedene Eingabewerte&lt;br /&gt;
* erste Endlosschleife&lt;br /&gt;
* Fehler für die eingeführten elemente&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6709</id>
		<title>Martin Häcker/Java Kurs/Tag 1</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6709"/>
		<updated>2006-03-14T17:15:21Z</updated>

		<summary type="html">&lt;p&gt;Schneider: /* Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= LE 1: Hello, World! =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Robert Lubkoll, Felix Schwarz&lt;br /&gt;
&lt;br /&gt;
== Organisatorisches ==&lt;br /&gt;
* Was Passiert&lt;br /&gt;
* Wann passiert was&lt;br /&gt;
* Wie passierts&lt;br /&gt;
* Vorstellung&lt;br /&gt;
* Was ist das genau&lt;br /&gt;
* Wer sind wir: Freiwillig, Umsonst&lt;br /&gt;
* Ziel des Kurses&lt;br /&gt;
* Was sie am Ende können sollen&lt;br /&gt;
* Gruppeneinteilung&lt;br /&gt;
** am Ende der ersten Vorlesung&lt;br /&gt;
** Vorher per e-mail&lt;br /&gt;
&#039;&#039;&#039;Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Inhalt (Vorgehen, Beispiele, Ideen) ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
Was ist &#039;&#039;&#039;Programmieren?&#039;&#039;&#039;&lt;br /&gt;
* imperativ (prozedural) vs. funktionales Programmieren&lt;br /&gt;
** relation problem &amp;lt;-&amp;gt; lösung / kochrezept&lt;br /&gt;
* Zustandsmaschine&lt;br /&gt;
* Einführung nach [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-9.html#%25_chap_1 SICP Kapitel 1] (bis &amp;quot;Programming in Lisp&amp;quot;)&lt;br /&gt;
** &#039;&#039;Damit ist die Philosophie von Programmieren gemeint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Drei Dinge, die wichtig sind für Programmierer (Das soll sich durch den Kurs durchziehen als roter Faden für die Sprachfeatures die wir einführen):&lt;br /&gt;
* Primitive Ausdrücke&lt;br /&gt;
* Kombinationsmöglichkeiten&lt;br /&gt;
* Abstraktionsmöglichkeiten&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
==== Wie fangen wir Java an ====&lt;br /&gt;
* Werte und operatoren +,*,/,-, % (?)&lt;br /&gt;
* Wenige Variablentypen int, String, (double)&lt;br /&gt;
** String: Vormerken, das man hier später klar macht das das auch Objekte und daher Referenzen sind - erstmal ists aber egal, da sie eh Immutable sind&lt;br /&gt;
* Zuweisung&lt;br /&gt;
* &amp;lt;, &amp;gt;, ==, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* if-else&lt;br /&gt;
* hierfür auch boolean und die operatoren &amp;amp;&amp;amp; || ! != ==&lt;br /&gt;
&lt;br /&gt;
* Methoden vorgeben: Input, Output&lt;br /&gt;
&lt;br /&gt;
* Was passiert da, wieso erst Compilieren, dann ausführen&lt;br /&gt;
* Live vorführen&lt;br /&gt;
&lt;br /&gt;
==== Vorführung ====&lt;br /&gt;
&#039;&#039;&#039;Aufbau eines Java-Programms&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel bringen und daran erklären, was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind. Das Programm dabei langsam entwickeln und dabei vorführen. Ziel ist, das am schluss ein komplettes Beispiel da steht - also alles verwendet wird was wir erklärt haben, es aber trotzdem so einfach bleibt das es ohne viel Fehlerpotenzial später nachgemacht werden kann.&lt;br /&gt;
 class Test {&lt;br /&gt;
 	static void print(double aNumber) {&lt;br /&gt;
 		System.out.println(&amp;quot;&amp;gt; &amp;quot; + aNumber);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public static void main(String [] arguments) {&lt;br /&gt;
 		print(3 * 4);&lt;br /&gt;
 		print(7 + 23 * 8 - 3);&lt;br /&gt;
 		// ....&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sauberes Programmieren&#039;&#039;&#039;&lt;br /&gt;
* Variablen und Identifier-Namen&lt;br /&gt;
** Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!&lt;br /&gt;
** Lokale Namen und wieso: (vielleicht?) [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 scrollen bis &#039;&#039;&#039;Local Names&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlermeldungen lesen und verstehen&#039;&#039;&#039;&lt;br /&gt;
* Klammer vergessen&lt;br /&gt;
* Semikolon vergessen&lt;br /&gt;
* Klasse heißt anders als Datei&lt;br /&gt;
* Compiler falsch aufgerufen&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;cd&#039;&#039; üben&lt;br /&gt;
* Hello World eintippen (kate, gedit, nano, ..)&lt;br /&gt;
* javac / java benutzen&lt;br /&gt;
* Ergebnisse sehen&lt;br /&gt;
* Fehler einbauen, Fehler finden (laufzeit/compilezeit)&lt;br /&gt;
* Einige Expressions angeben und die Teilnehmer sollen feststellen, was die ausgeben/berechnen würden&lt;br /&gt;
* Das gleiche dann nochmal mit if/else&lt;br /&gt;
* Einen mathematischen Ausdruck in Java übersetzen&lt;br /&gt;
* [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben]&lt;br /&gt;
&lt;br /&gt;
= LE 2: Standardkonstrukte in Java (Robert und Sven) =&lt;br /&gt;
Übungs-Aufgaben inklusive Vorgaben und Musterlösung [http://user.cs.tu-berlin.de/~svens/files/le2_ue.tar.gz LE2UEB]&lt;br /&gt;
&lt;br /&gt;
updated: freitag 2006-03-10 19:05&lt;br /&gt;
&lt;br /&gt;
letzte änderungen: aufgabe 0 mit einigen methoden die sie fixen müssen, bzw. analyisieren sollen.&lt;br /&gt;
&lt;br /&gt;
TODO: LE1 aufgabe benutzen. (delayed)&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
* Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt: [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 Procedures as Black-Box Abstractions]&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
* &#039;&#039;&#039;Typen&#039;&#039;&#039;&lt;br /&gt;
** Arrays&lt;br /&gt;
*** warum, wie und probleme&lt;br /&gt;
** void&lt;br /&gt;
** char?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Methoden&#039;&#039;&#039;:&lt;br /&gt;
** Namend&lt;br /&gt;
** Aufruf&lt;br /&gt;
** Parameter und Rückgabe -&amp;gt; Call by Value&lt;br /&gt;
** main&lt;br /&gt;
** return&lt;br /&gt;
** Nachtrag Datenstrukturen: void&lt;br /&gt;
** Beispiel: System.out.println()&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Blöcke&#039;&#039;&#039;&lt;br /&gt;
** if-else&lt;br /&gt;
*** Formulieren von Bedingungen für if, while&lt;br /&gt;
** while&lt;br /&gt;
*** Schleife als zweite Lösung für duplikation von Code&lt;br /&gt;
*** Diskussion Schleife &amp;lt;-&amp;gt; Rekursion&lt;br /&gt;
&lt;br /&gt;
* Anwendung von Schleifen&lt;br /&gt;
* Rekursion &amp;lt;-&amp;gt; Schleifen (Beispiel)&lt;br /&gt;
* Warum/wann Schleifen?&lt;br /&gt;
** als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)&lt;br /&gt;
** wenn die Anzahl der Durchläufe nicht konstant ist&lt;br /&gt;
** for schleife, wann und wozu, einfache beispiele: for(int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Gute Namen&#039;&#039;&#039;&lt;br /&gt;
** Abstrakter Gedanke: Für den Computer ists wurscht, wie man das was man meint aufschreibt. Wir Menschen dagegen lassen und leicht verwirren&lt;br /&gt;
** abwägen zwischen&lt;br /&gt;
*** aussagekraft des namens&lt;br /&gt;
*** häufigkeit im code&lt;br /&gt;
*** kommentar zu variable(nnamen)&lt;br /&gt;
*** länge des namens&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Testen&#039;&#039;&#039;&lt;br /&gt;
* was ist testen?&lt;br /&gt;
** überprüfung von einigen randwerten =&amp;gt; nachdenken ist erforderlich um interessante fälle zu finden&lt;br /&gt;
** testen ist nicht verifizieren&lt;br /&gt;
* wie in java?&lt;br /&gt;
** System.out.println(..);&lt;br /&gt;
** auskommentieren und schrittweises testen&lt;br /&gt;
* was wird getestet?&lt;br /&gt;
** ausgabe von arrays komplex&lt;br /&gt;
** ausgabe von werten mit text verknüpfen&lt;br /&gt;
** Variablen haben unterschiedliche Werte während das Program läuft!&lt;br /&gt;
&lt;br /&gt;
assert-Methode selber schreiben -&amp;gt; Später! (WANN?)&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* Methoden definieren, die bestimmte Eigenschaften haben&lt;br /&gt;
* Beispiele dann Abtippen und ausprobieren&lt;br /&gt;
* Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)&lt;br /&gt;
* Verschiedene Eingabewerte&lt;br /&gt;
* erste Endlosschleife&lt;br /&gt;
* Fehler für die eingeführten elemente&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6708</id>
		<title>Martin Häcker/Java Kurs/Tag 1</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Martin_H%C3%A4cker/Java_Kurs/Tag_1&amp;diff=6708"/>
		<updated>2006-03-14T17:05:55Z</updated>

		<summary type="html">&lt;p&gt;Schneider: /* Wie fangen wir Java an */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= LE 1: Hello, World! =&lt;br /&gt;
&#039;&#039;&#039;Vortragende:&#039;&#039;&#039; Robert Lubkoll, Felix Schwarz&lt;br /&gt;
&lt;br /&gt;
== Organisatorisches ==&lt;br /&gt;
* Was Passiert&lt;br /&gt;
* Wann passiert was&lt;br /&gt;
* Wie passierts&lt;br /&gt;
* Vorstellung&lt;br /&gt;
* Was ist das genau&lt;br /&gt;
* Wer sind wir: Freiwillig, Umsonst&lt;br /&gt;
* Ziel des Kurses&lt;br /&gt;
* Was sie am Ende können sollen&lt;br /&gt;
* Gruppeneinteilung&lt;br /&gt;
** am Ende der ersten Vorlesung&lt;br /&gt;
** Vorher per e-mail&lt;br /&gt;
&#039;&#039;&#039;Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Inhalt (Vorgehen, Beispiele, Ideen) ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
Was ist &#039;&#039;&#039;Programmieren?&#039;&#039;&#039;&lt;br /&gt;
* imperativ (prozedural) vs. funktionales Programmieren&lt;br /&gt;
** relation problem &amp;lt;-&amp;gt; lösung / kochrezept&lt;br /&gt;
* Zustandsmaschine&lt;br /&gt;
* Einführung nach [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-9.html#%25_chap_1 SICP Kapitel 1] (bis &amp;quot;Programming in Lisp&amp;quot;)&lt;br /&gt;
** &#039;&#039;Damit ist die Philosophie von Programmieren gemeint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Drei Dinge, die wichtig sind für Programmierer (Das soll sich durch den Kurs durchziehen als roter Faden für die Sprachfeatures die wir einführen):&lt;br /&gt;
* Primitive Ausdrücke&lt;br /&gt;
* Kombinationsmöglichkeiten&lt;br /&gt;
* Abstraktionsmöglichkeiten&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
==== Wie fangen wir Java an ====&lt;br /&gt;
* Werte und operatoren +,*,/,-, % (?)&lt;br /&gt;
* Wenige Variablentypen int, String, (double)&lt;br /&gt;
** String: Vormerken, das man hier später klar macht das das auch Objekte und daher Referenzen sind - erstmal ists aber egal, da sie eh Immutable sind&lt;br /&gt;
* Zuweisung&lt;br /&gt;
* &amp;lt;, &amp;gt;, ==, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* if-else&lt;br /&gt;
* hierfür auch boolean und die operatoren &amp;amp;&amp;amp; || ! != ==&lt;br /&gt;
&lt;br /&gt;
* Methoden vorgeben: Input, Output&lt;br /&gt;
&lt;br /&gt;
* Was passiert da, wieso erst Compilieren, dann ausführen&lt;br /&gt;
* Live vorführen&lt;br /&gt;
&lt;br /&gt;
==== Vorführung ====&lt;br /&gt;
&#039;&#039;&#039;Aufbau eines Java-Programms&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel bringen und daran erklären, was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind. Das Programm dabei langsam entwickeln und dabei vorführen. Ziel ist, das am schluss ein komplettes Beispiel da steht - also alles verwendet wird was wir erklärt haben, es aber trotzdem so einfach bleibt das es ohne viel Fehlerpotenzial später nachgemacht werden kann.&lt;br /&gt;
 class Test {&lt;br /&gt;
 	static void print(double aNumber) {&lt;br /&gt;
 		System.out.println(&amp;quot;&amp;gt; &amp;quot; + aNumber);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public static void main(String [] arguments) {&lt;br /&gt;
 		print(3 * 4);&lt;br /&gt;
 		print(7 + 23 * 8 - 3);&lt;br /&gt;
 		// ....&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sauberes Programmieren&#039;&#039;&#039;&lt;br /&gt;
* Variablen und Identifier-Namen&lt;br /&gt;
** Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!&lt;br /&gt;
** Lokale Namen und wieso: (vielleicht?) [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 scrollen bis &#039;&#039;&#039;Local Names&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlermeldungen lesen und verstehen&#039;&#039;&#039;&lt;br /&gt;
* Klammer vergessen&lt;br /&gt;
* Semikolon vergessen&lt;br /&gt;
* Klasse heißt anders als Datei&lt;br /&gt;
* Compiler falsch aufgerufen&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;cd&#039;&#039; üben&lt;br /&gt;
* Hello World eintippen (kate, gedit, nano, ..)&lt;br /&gt;
* javac / java benutzen&lt;br /&gt;
* Ergebnisse sehen&lt;br /&gt;
* Fehler einbauen, Fehler finden (laufzeit/compilezeit)&lt;br /&gt;
* Einige Expressions angeben und die Teilnehmer sollen feststellen, was die ausgeben/berechnen würden&lt;br /&gt;
* Das gleiche dann nochmal mit if/else&lt;br /&gt;
* Einen mathematischen Ausdruck in Java übersetzen&lt;br /&gt;
* [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben]&lt;br /&gt;
&lt;br /&gt;
= LE 2: Standardkonstrukte in Java (Robert und Sven) =&lt;br /&gt;
Übungs-Aufgaben inklusive Vorgaben und Musterlösung [http://user.cs.tu-berlin.de/~svens/files/le2_ue.tar.gz LE2UEB]&lt;br /&gt;
&lt;br /&gt;
updated: freitag 2006-03-10 19:05&lt;br /&gt;
&lt;br /&gt;
letzte änderungen: aufgabe 0 mit einigen methoden die sie fixen müssen, bzw. analyisieren sollen.&lt;br /&gt;
&lt;br /&gt;
TODO: LE1 aufgabe benutzen. (delayed)&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
=== Methodik ===&lt;br /&gt;
* Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt: [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%25_sec_1.1.8 Procedures as Black-Box Abstractions]&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
* &#039;&#039;&#039;Typen&#039;&#039;&#039;&lt;br /&gt;
** boolean (in LE 1, weil if sonst keinen Sinn macht)&lt;br /&gt;
** Arrays&lt;br /&gt;
** was wir im ersten Teil weggelassen haben?&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Methoden&#039;&#039;&#039;:&lt;br /&gt;
** Namend&lt;br /&gt;
** Aufruf&lt;br /&gt;
** Parameter und Rückgabe -&amp;gt; Call by Value&lt;br /&gt;
** main&lt;br /&gt;
** return&lt;br /&gt;
** Nachtrag Datenstrukturen: void&lt;br /&gt;
** Beispiel: System.out.println()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Blöcke&#039;&#039;&#039;&lt;br /&gt;
** if-else&lt;br /&gt;
*** Formulieren von Bedingungen für if, while&lt;br /&gt;
** while&lt;br /&gt;
*** Schleife als zweite Lösung für duplikation von Code&lt;br /&gt;
*** Diskussion Schleife &amp;lt;-&amp;gt; Rekursion???&lt;br /&gt;
&lt;br /&gt;
* Anwendung von Schleifen&lt;br /&gt;
* Rekursion &amp;lt;-&amp;gt; Schleifen (Beispiel)&lt;br /&gt;
* Warum/wann Schleifen?&lt;br /&gt;
** als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)&lt;br /&gt;
** wenn die Anzahl der Durchläufe nicht konstant ist&lt;br /&gt;
** als Luxus - Bsp: for( int i = 0; i &amp;lt; 3; i++ )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Gute Namen&#039;&#039;&#039;&lt;br /&gt;
** Abstrakter Gedanke: Für den Computer ists wurscht, wie man das was man meint aufschreibt. Wir Menschen dagegen sind von sowaas verwirrt:&lt;br /&gt;
 class _{static long _&lt;br /&gt;
 (long __,long  ___) {&lt;br /&gt;
 return __==0 ?___+ 1:&lt;br /&gt;
 ___==0?_(__-1,1):_(__&lt;br /&gt;
 -1,_(__, ___-1)) ;  }&lt;br /&gt;
 static  {int _=2 ,___&lt;br /&gt;
 = 2;System.out.print(&lt;br /&gt;
 &amp;quot;a(&amp;quot;+_+&#039;,&#039;+___+ &amp;quot;)=&amp;quot;+&lt;br /&gt;
 _ (_,  ___) ) ;System&lt;br /&gt;
 .exit(1);}}//(C) Ulli&lt;br /&gt;
&lt;br /&gt;
Wir können uns aber helfen indem wir das so schreiben:&lt;br /&gt;
 /** @see: http://de.wikipedia.org/wiki/Ackermann-Funktion */&lt;br /&gt;
 class AckermannFunctionDemo {&lt;br /&gt;
 	static long ackermann(long n, long  m) {&lt;br /&gt;
 		if (n == 0) {&lt;br /&gt;
 			return m + 1;&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (m == 0) {&lt;br /&gt;
 			return ackermann(n - 1, 1)&lt;br /&gt;
 		}&lt;br /&gt;
 		else {&lt;br /&gt;
 			return ackermann(n - 1, ackermann(n, m - 1));&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	static void main {&lt;br /&gt;
 		int n = 2, m = 2;&lt;br /&gt;
 		System.out.print(&amp;quot;ackermann(&amp;quot; + n + &#039;,&#039; + m + &amp;quot;) = &amp;quot; &lt;br /&gt;
 			+ ackermann(n, m));&lt;br /&gt;
 		System.exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 }//(C) Ulli + Martin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Testen: wie testet man ob und wie etwas geht? (Java Ausprobieren)&lt;br /&gt;
** assert-Methode selber schreiben -&amp;gt; Später!&lt;br /&gt;
* Werte ausgeben! -&amp;gt; printf-Debugging&lt;br /&gt;
** Variablen haben unterschiedliche Werte während das Program läuft!&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
* Methoden definieren, die bestimmte Eigenschaften haben&lt;br /&gt;
* Beispiele dann Abtippen und ausprobieren&lt;br /&gt;
* Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)&lt;br /&gt;
* Verschiedene Eingabewerte&lt;br /&gt;
* erste Endlosschleife&lt;br /&gt;
* Fehler für die eingeführten elemente&lt;br /&gt;
&lt;br /&gt;
[[Benutzer:Martin_Häcker/Java_Kurs | &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Schneider</name></author>
	</entry>
</feed>