<?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=130.149.5.137</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=130.149.5.137"/>
	<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//Spezial:Beitr%C3%A4ge/130.149.5.137"/>
	<updated>2026-10-30T11:36:48Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Benutzer:Martin_H%C3%A4cker/Java_Kurs&amp;diff=6427</id>
		<title>Benutzer:Martin Häcker/Java Kurs</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Benutzer:Martin_H%C3%A4cker/Java_Kurs&amp;diff=6427"/>
		<updated>2006-02-06T12:30:46Z</updated>

		<summary type="html">&lt;p&gt;130.149.5.137: /* Tag 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Javakurs=&lt;br /&gt;
* Räume -&amp;gt; nicht so das problem&lt;br /&gt;
* Beamer / VNC-Multicast?&lt;br /&gt;
* Zedat (FU) hat spezielle Räume für sowas?&lt;br /&gt;
* Anzahl der Leute: eher viel zu viele, ca. 100 Geht&lt;br /&gt;
&lt;br /&gt;
= Beteiligte =&lt;br /&gt;
Wer kennt noch jemanden der Mitmachen würde? &#039;&#039;&#039;Bitte ansprechen - immer Persönlich.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wir suchen Helfer die:&lt;br /&gt;
* den Teilnehmern bei den Java-Programmen zu helfen (wie geht das mit dem &amp;quot;if-then-else&amp;quot;, der &amp;quot;for&amp;quot;-Schleife, wie schreibt man das &amp;quot;try-catch&amp;quot;, ...)&lt;br /&gt;
* die 10 Leuten erklären wie man mit mit Java im Detail umgeht und Fragen beantworten&lt;br /&gt;
* die vor 100 Leuten einen Vortrag halten und Java erklären&lt;br /&gt;
* die helfen diese Vorträge inhaltlich Vorzubereiten&lt;br /&gt;
&lt;br /&gt;
Teilnehmer bitte mit e-mail-Adresse eintragen&lt;br /&gt;
&lt;br /&gt;
==Tutoren ==&lt;br /&gt;
* Marcel&lt;br /&gt;
* Martin&lt;br /&gt;
* Arthur&lt;br /&gt;
* Florian&lt;br /&gt;
* Thomas&lt;br /&gt;
* Felix&lt;br /&gt;
&lt;br /&gt;
== Rechnerbetreuer ==&lt;br /&gt;
* Jacob&lt;br /&gt;
* Karl &lt;br /&gt;
* Andreas Janson (vielleicht)&lt;br /&gt;
&lt;br /&gt;
== Teilnehmer ==&lt;br /&gt;
* Max&lt;br /&gt;
&lt;br /&gt;
= Durchführung =&lt;br /&gt;
* JAVA Grundlagen!&lt;br /&gt;
* &amp;quot;Objekt&amp;quot; ist nicht bäh...&lt;br /&gt;
&lt;br /&gt;
== Arthurs Zeitplan ==&lt;br /&gt;
erstmal der allgemeine Tagesablauf:&lt;br /&gt;
&lt;br /&gt;
* 1 h &amp;quot;Großgruppe&amp;quot;&lt;br /&gt;
* 2-3 h Kleingruppe&lt;br /&gt;
* Pause (Essen)&lt;br /&gt;
* 1 h &amp;quot;Großgruppe&amp;quot;&lt;br /&gt;
* 2-3 h Kleingruppe&lt;br /&gt;
* Hausaufgaben?&lt;br /&gt;
&lt;br /&gt;
daraus ergibt sich bei 4-5 Tagen 8-10 Lerneinheiten (LE).&lt;br /&gt;
&lt;br /&gt;
;LE1&lt;br /&gt;
:Ziel eigenes &amp;quot;Hello World&amp;quot; in Java&lt;br /&gt;
;LE2&lt;br /&gt;
:Ziel Bedingung benutzen &lt;br /&gt;
;LE3&lt;br /&gt;
:Ziel Schleifen benutzen&lt;br /&gt;
;LE4&lt;br /&gt;
:Ziel Methoden Aufruf (einfach)&lt;br /&gt;
;LE5&lt;br /&gt;
:Ziel Parameter und Rückgabewerte bei Methoden&lt;br /&gt;
;LE6&lt;br /&gt;
:Ziel Objekt als Sammlung von Daten (Struct)&lt;br /&gt;
:Konstruktor?&lt;br /&gt;
;LE7&lt;br /&gt;
:Ziel Objekt mit Methode(n) / Konstruktor &lt;br /&gt;
;LE8&lt;br /&gt;
:Ziel Standardmethoden (toString?)&lt;br /&gt;
;LE9&lt;br /&gt;
:Ziel Standardbibliothek (z.B. file IO)&lt;br /&gt;
;LE10&lt;br /&gt;
:Ziel Standardbibliothek&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Java&lt;br /&gt;
** datentypen&lt;br /&gt;
** variablen&lt;br /&gt;
** zuweisung&lt;br /&gt;
** vergleich&lt;br /&gt;
** bedingungen if&lt;br /&gt;
** schleifen&lt;br /&gt;
** ein/ausgabe&lt;br /&gt;
** datei ein/ausgabe&lt;br /&gt;
* Programmieren im allgemeinen / &amp;quot;prozedural&amp;quot; programmieren&lt;br /&gt;
** Zustandsmaschine&lt;br /&gt;
* Problemlösungsstrategien&lt;br /&gt;
** Java&lt;br /&gt;
*** Debugging&lt;br /&gt;
*** kleine probleme&lt;br /&gt;
*** testen&lt;br /&gt;
** idee&lt;br /&gt;
*** kleine probleme&lt;br /&gt;
&lt;br /&gt;
== Felixs Zeitplan ==&lt;br /&gt;
== Martins Zeitplan ==&lt;br /&gt;
Vorgehen nach Ausdrucksmodell? Also Sprachfeatures so einführen wie man sie braucht um Probleme ausdrücken zu können? -- Schwierig, behalte ich aber mal im Hinterkopf.&lt;br /&gt;
&lt;br /&gt;
=== Tag 1 ===&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;
&lt;br /&gt;
Drei Dinge die Wichtig sind für Programmierer:&lt;br /&gt;
* Primitive Ausdrücke&lt;br /&gt;
* Kombinationsmöglichkeiten&lt;br /&gt;
* Abstraktionsmöglichkeiten&lt;br /&gt;
&lt;br /&gt;
Java Stoff:&lt;br /&gt;
Ein Beispiel bringen und daran erklären was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind (evtl. langsam entwickeln):&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;
* 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-4.html#%25_toc_%25_sec_Temp_41]&lt;br /&gt;
An dieser Stelle primitive Datentypen und String einführen, mit dem Hinweis das bei den Primitiven alles normal sei, während bei String &amp;quot;alles anders&amp;quot; ist. Dann später diesen Unterschied aufgreifen. (String ist ja nun &amp;quot;immutable&amp;quot;, trotzdem?). &lt;br /&gt;
* Zuweisung&lt;br /&gt;
* if, else&lt;br /&gt;
* methoden -&amp;gt; Wichtigkeit das 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;
* Return&lt;br /&gt;
* System.out.println()&lt;br /&gt;
* wie testet man ob und wie etwas geht? (Java Ausprobieren)&lt;br /&gt;
&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 {&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&lt;br /&gt;
&lt;br /&gt;
Beispiele + Übungen&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;
* methoden definieren die bestimmte eigenschaften haben&lt;br /&gt;
Beispiele dann Abtippen und ausprobieren -&amp;gt; Sie sollen Nachfragen wenn sie was anderes hatten (oder sowas)&lt;br /&gt;
// TODO: Reicht das, oder brauchts noch mehr?&lt;br /&gt;
&lt;br /&gt;
=== Tag 2 ===&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;
* while, for&lt;br /&gt;
** Anwendung davon&lt;br /&gt;
* Konzept Klassenbibliothek&lt;br /&gt;
** Javadocs finden, lesen, verwenden, schreiben -&amp;gt; http://www.javadocs.org&lt;br /&gt;
** List, ArrayList, InputReader, BufferedReader, Scanner&lt;br /&gt;
* Wie entwickelt man Programme stück für stück? (Vorgehen + Testen)&lt;br /&gt;
** kleine stücke&lt;br /&gt;
** seperat testen (von main aus)&lt;br /&gt;
** ausblick automatisieren&lt;br /&gt;
&lt;br /&gt;
=== Tag 3 ===&lt;br /&gt;
* Objekte als daten mit methoden ausssenherum&lt;br /&gt;
** um innendrinn auswechseln zu können&lt;br /&gt;
* Objekte, Static nicht static&lt;br /&gt;
** [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;
&lt;br /&gt;
=== Tag 4 ===&lt;br /&gt;
* vorgehen&lt;br /&gt;
* debugging&lt;br /&gt;
* testen?&lt;br /&gt;
* Aufgaben&lt;br /&gt;
** Selber ein schlechtes Programm &amp;quot;fehlerbeseitigen lassen&amp;quot;&lt;br /&gt;
** schlechte Bezeichnungen durch bessere ersetzen lassen&lt;br /&gt;
&lt;br /&gt;
= Vorgehen =&lt;br /&gt;
* Kochrezept....&lt;br /&gt;
* Legen immer main -&amp;gt; instanz -&amp;gt; run an, ohne zu verstehen&lt;br /&gt;
* Von Opal ausgehen -&amp;gt; bringt nichts weil Opal nicht verstanden?&lt;br /&gt;
* Von woanders ausgehen? Von null -&amp;gt; normale Welt&lt;br /&gt;
* Von vornherein Objektorientiert -&amp;gt; Langfristig besser? Auch kurzfristig besser?&lt;br /&gt;
** Test: Wird das zum Problem wenn wir das mit run() einführen?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Was können sie wenn wir fertig sind? ==&lt;br /&gt;
* Utility Objekt: readFile(aFilename), getUserInput(aPrompt)&lt;br /&gt;
** JavaAPI lesen&lt;br /&gt;
** Streams verschachteln&lt;br /&gt;
** UtilityObjekt -&amp;gt; Reuse&lt;br /&gt;
* Objekt / null / Initialisieren&lt;br /&gt;
* main -&amp;gt; instanz -&amp;gt; run() (erklären wir später)?&lt;br /&gt;
* Programm mit mehreren Dateien&lt;br /&gt;
* sehen das das scheiße ist:&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;
* Lösungsstrategien Top-&amp;gt;Down, Bottom-&amp;gt;Up&lt;br /&gt;
** Aufgaben angehen&lt;br /&gt;
** Fehlerlösungsstrategien: NullPointerException, etc.&lt;br /&gt;
*** Was sagt denn der Fehler genau? Wie finde ich das raus?&lt;br /&gt;
*** Kaputter Code -&amp;gt; Der muss Korrigiert werden&lt;br /&gt;
**** n-mal das gleiche -&amp;gt; schleife / methode&lt;br /&gt;
** Zu langer code -&amp;gt; kurz machen&lt;br /&gt;
* Testen?: von main aufrufen, unittests, debuggen, printf-style&lt;br /&gt;
* Was wissen die Leute am Schluss von Objekten?&lt;br /&gt;
** Collections, Exceptions, Streams kennen&lt;br /&gt;
** Konstruktoren, Instanzvariablen (vielleicht weglassen?)&lt;br /&gt;
** Daten mit Methoden aussen herum (vielleicht)&lt;br /&gt;
&lt;br /&gt;
== Sprachkonstrukte die wir Behandeln und deren Reihenfolge ==&lt;br /&gt;
* if&lt;br /&gt;
* while, for ( &amp;lt;- Bis hier tag eins)&lt;br /&gt;
* methode&lt;br /&gt;
* try - catch / throws??&lt;br /&gt;
* ++ oder +=, was noch? Oder gar nichts?&lt;br /&gt;
* NICHT MACHEN: try {} cach (Throwable e) {}&lt;br /&gt;
&lt;br /&gt;
=== Was wir nicht machen ABSICHTLICH ===&lt;br /&gt;
* :?, do{}while, ++i, switch, &lt;br /&gt;
&lt;br /&gt;
== Vielleicht haben wir noch Zeit hierfür? ==&lt;br /&gt;
* SVN?&lt;br /&gt;
* static / instanz -&amp;gt; Ebenen modell&lt;br /&gt;
&lt;br /&gt;
== Erklärungsansätze ==&lt;br /&gt;
=== Objektorientierung ===&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;
&lt;br /&gt;
* Ganz anderer Ansatz: Erklären über Einheiten die sich über Nachrichten gegenseitig verständigen&lt;br /&gt;
&lt;br /&gt;
=== main ===&lt;br /&gt;
* Sich selbst am Schopf aus dem Sumpf herausziehen -&amp;gt; Münchhausen&lt;br /&gt;
** Am anfang gibts keine Objekte, also brauchts mechanismus um das erste erstellen zu können&lt;br /&gt;
&lt;br /&gt;
== Mehrere Möglichkeiten ein Programm anzufangen ==&lt;br /&gt;
* Eclipse Scrapbook Page (File&amp;gt;New&amp;gt;Other&amp;gt;Java&amp;gt;Java Run/Debug&amp;gt;Scrapbook Page)&lt;br /&gt;
** geeignet für: Primitive, Zusammengesetzte ausdrücke, variablen, methoden aufrufen&lt;br /&gt;
** evtl, sogar main motivieren, indem man erst keinen startpunkt hat und ihn dann von scrapbook nach main migriert&lt;br /&gt;
* Static block in der Klassse &#039;&#039;System.exit(0)&#039;&#039; nicht vergessen!&lt;br /&gt;
** geeignet für gar nichts?&lt;br /&gt;
* Code direkt in main&lt;br /&gt;
** startpunkt des programms&lt;br /&gt;
* von main aus run() aufrufen&lt;br /&gt;
** so wie es in ernsthaften programmen gemacht wird.&lt;br /&gt;
&lt;br /&gt;
= Aufgaben die wir Stellen =&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;
* Menü Objekt, das sich leicht adaptieren lässt?&lt;br /&gt;
* Apfelbaum&lt;br /&gt;
 while (apfelbaumHatNochÄpfel) {&lt;br /&gt;
 	pflückEinenApfelUndEssIhn();&lt;br /&gt;
 }&lt;br /&gt;
*  Collections, Polymorphie (Apfel mit Wurm....)&lt;br /&gt;
* [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben]&lt;/div&gt;</summary>
		<author><name>130.149.5.137</name></author>
	</entry>
</feed>