|
|
Zeile 1: |
Zeile 1: |
− | = Javakurs= | + | = Javakurs - Organisation= |
− | [[Javakurs2006]]
| |
− | * Räume -> nicht so das problem
| |
− | * Beamer / VNC-Multicast?
| |
− | * Zedat (FU) hat spezielle Räume für sowas?
| |
− | * Anzahl der Leute: eher viel zu viele, ca. 100 Geht
| |
| | | |
− | = Beteiligte = | + | * Webseite zum Kurs: [[Javakurs2006]] |
| + | |
| + | |
| + | == Beteiligte == |
| Wer kennt noch jemanden der Mitmachen würde? '''Bitte ansprechen - immer Persönlich.''' | | Wer kennt noch jemanden der Mitmachen würde? '''Bitte ansprechen - immer Persönlich.''' |
| | | |
Zeile 17: |
Zeile 15: |
| Teilnehmer bitte mit e-mail-Adresse eintragen | | Teilnehmer bitte mit e-mail-Adresse eintragen |
| | | |
− | ==Tutoren == | + | === Organisation, VL und Rechnerbetreuung === |
| * Marcel | | * Marcel |
| * Martin | | * Martin |
Zeile 29: |
Zeile 27: |
| * Ellen | | * Ellen |
| | | |
− | == Rechnerbetreuer == | + | === Rechnerbetreuer oder VL === |
| * Jacob | | * Jacob |
| * Karl | | * Karl |
| * Andreas Janson (vielleicht) | | * Andreas Janson (vielleicht) |
− | * Björn Lohrmann | + | * Björn Lohrmann (vielleicht) |
| * Sven Schneider (Vielleicht) | | * Sven Schneider (Vielleicht) |
| * Alex Löwer | | * Alex Löwer |
Zeile 39: |
Zeile 37: |
| * Karsten Bsufka (Teilweise - vielleicht sogar Mitvortragender) | | * Karsten Bsufka (Teilweise - vielleicht sogar Mitvortragender) |
| | | |
− | == Teilnehmer == | + | === Teilnehmer === |
| * Max | | * Max |
| | | |
− | = Durchführung =
| |
− | == Ankündigung ==
| |
− | * In den Tutorien von Info 1
| |
− | * In den Newsgroups Informatik 1 + 2
| |
− | * In den Mailinglisten der Freitagsrunde
| |
− | * An alle Teilnehmer von Informatik 1 per mail
| |
− | * Während der Info 1 Klausureinsicht mit einem Plakat
| |
| | | |
− | = Stoffplan = | + | = Inhalt und Ablauf = |
− | * JAVA Grundlagen! | + | * '''Hinweis:''' Ich habe die Seite neu gestaltet, indem ich die Ablaufpläne zusammengeführt und Redundanzen entfernt habe. Außerdem habe ich die Seite aufgeteilt, sodass man direkt an Themenblöcken arbeiten kann und damit nicht die gesamte Übersichtsseite hier sprengt. Die alte Version findet sich z.B. [https://wiki.freitagsrunde.org/index.php?title=Benutzer:Martin_H%C3%A4cker/Java_Kurs&oldid=10292 hier]. Ich habe dabei nichts gelöscht, sondern nur Inhalte verschoben. Damit haben wir für morgen eine bessere Diskussionsgrundlage, hoffe ich. [[Benutzer:Buchholz|Robert Buchholz]] 18:17, 23. Feb 2006 (CET) |
− | * "Objekt" ist nicht bäh...
| |
| | | |
− | == Arthurs Zeitplan == | + | == Termin == |
− | erstmal der allgemeine Tagesablauf:
| + | * Mo, 03.04.2006 - Do, 06.04.2006 |
| + | == Tagesablauf == |
| + | * Für Tag 1 bis 3: |
| + | {| border="0" cellpadding="4" cellspacing="2" |
| + | |- bgcolor="#E0E0E0" |
| + | !von |
| + | !bis |
| + | !was? |
| + | |- bgcolor="#F0F0F0" |
| + | |9:15 |
| + | |10:15 |
| + | |Vorlesung |
| + | |- bgcolor="#F8F8F8" |
| + | |10:30 |
| + | |12:00/12:30 |
| + | |Übung |
| + | |- bgcolor="#F0F0F0" |
| + | |12:30 |
| + | |13:15 |
| + | |Mittagspause |
| + | |- bgcolor="#F8F8F8" |
| + | |13:15 |
| + | |14:00 |
| + | |Vorlesung |
| + | |- bgcolor="#F0F0F0" |
| + | |14:15 |
| + | |16:30 |
| + | |Übung |
| + | |} |
| | | |
− | * 1 h "Großgruppe"
| + | == Themen == |
− | * 2-3 h Kleingruppe
| + | {| border="0" cellpadding="4" cellspacing="2" |
− | * Pause (Essen)
| + | |- bgcolor="#E0E0E0" |
− | * 1 h "Großgruppe"
| + | !Tag Nr. |
− | * 2-3 h Kleingruppe
| + | !Vormittag |
− | * Hausaufgaben?
| + | !Nachmittag |
| + | |- bgcolor="#F0F0F0" |
| + | |[[{{PAGENAME}}/Tag 1|Tag 1]] |
| + | |Hello, World! |
| + | |Standardkonstrukte in Java |
| + | |- bgcolor="#F8F8F8" |
| + | |[[{{PAGENAME}}/Tag 2|Tag 2]] |
| + | |Verfeinerung Java und Klassenbibliothek |
| + | |Wir sind alle nur Objekte |
| + | |- bgcolor="#F0F0F0" |
| + | |[[{{PAGENAME}}/Tag 3|Tag 3]] |
| + | |Strukturiertes Programmieren |
| + | |Wir führen alles zusammen |
| + | |- bgcolor="#F8F8F8" |
| + | |[[{{PAGENAME}}/Tag 4|Tag 4]] |
| + | |Projektaufgabe |
| + | |Projektaufgabe |
| + | |} |
| | | |
− | daraus ergibt sich bei 4-5 Tagen 8-10 Lerneinheiten (LE).
| + | == Allgemeine Ziele, Überlegungen und Ideen == |
| + | * [[{{PAGENAME}}/Allgemeine Lernziele|Allgemeine Lernziele]] |
| | | |
− | ;LE1
| + | = TODOs = |
− | :Ziel eigenes "Hello World" in Java
| |
− | ;LE2
| |
− | :Ziel Bedingung benutzen
| |
− | ;LE3
| |
− | :Ziel Schleifen benutzen
| |
− | ;LE4
| |
− | :Ziel Methoden Aufruf (einfach)
| |
− | ;LE5
| |
− | :Ziel Parameter und Rückgabewerte bei Methoden
| |
− | ;LE6
| |
− | :Ziel Objekt als Sammlung von Daten (Struct)
| |
− | :Konstruktor?
| |
− | ;LE7
| |
− | :Ziel Objekt mit Methode(n) / Konstruktor
| |
− | ;LE8
| |
− | :Ziel Standardmethoden (toString?)
| |
− | ;LE9
| |
− | :Ziel Standardbibliothek (z.B. file IO)
| |
− | ;LE10
| |
− | :Ziel Standardbibliothek
| |
| | | |
| + | == Ankündigung == |
| + | * In den Tutorien von Info 1 (done) |
| + | * In den Newsgroups Informatik 1 + 2 (done) |
| + | * In den Mailinglisten der Freitagsrunde (done) |
| + | * An alle Teilnehmer von Informatik 1 per Mail |
| + | * Vor der Klausur |
| + | * Während der Info 1 Klausureinsicht mit einem Plakat |
| | | |
− | * Java
| + | == Unassigned == |
− | ** datentypen
| |
− | ** variablen
| |
− | ** zuweisung
| |
− | ** vergleich
| |
− | ** bedingungen if
| |
− | ** schleifen
| |
− | ** ein/ausgabe
| |
− | ** datei ein/ausgabe
| |
− | * Programmieren im allgemeinen / "prozedural" programmieren
| |
− | ** Zustandsmaschine
| |
− | * Problemlösungsstrategien
| |
− | ** Java
| |
− | *** Debugging
| |
− | *** kleine probleme
| |
− | *** testen
| |
− | ** idee
| |
− | *** kleine probleme
| |
| | | |
− | == Felixs Zeitplan ==
| + | * Eintrag in den [[Termine]]n aktuell halten |
− | == Martins Zeitplan ==
| |
− | 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.
| |
− | | |
− | === Tag 1 ===
| |
− | Einführung nach [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-9.html#%25_chap_1 SICP Kapitel 1] (bis "Programming in Lisp")
| |
− | | |
− | Drei Dinge die Wichtig sind für Programmierer:
| |
− | * Primitive Ausdrücke
| |
− | * Kombinationsmöglichkeiten
| |
− | * Abstraktionsmöglichkeiten
| |
− | | |
− | Java Stoff:
| |
− | Ein Beispiel bringen und daran erklären was primitive Ausdrücke, Kombinationen und Abstraktionsmöglichkeiten sind (evtl. langsam entwickeln):
| |
− | class Test {
| |
− | static void print(double aNumber) {
| |
− | System.out.println("> " + aNumber);
| |
− | }
| |
− |
| |
− | public static void main(String [] arguments) {
| |
− | print(3 * 4);
| |
− | print(7 + 23 * 8 - 3);
| |
− | // ....
| |
− | }
| |
− | }
| |
− | * Variablendeklaration - Namen vergeben für dinge die man berechnet hat!
| |
− | ** Lokale Namen und wieso: (vielleicht?) [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%25_toc_%25_sec_Temp_41]
| |
− | An dieser Stelle primitive Datentypen und String einführen, mit dem Hinweis das bei den Primitiven alles normal sei, während bei String "alles anders" ist. Dann später diesen Unterschied aufgreifen. (String ist ja nun "immutable", trotzdem?).
| |
− | * Zuweisung
| |
− | * if, else
| |
− | * methoden -> 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]
| |
− | * Return
| |
− | * System.out.println()
| |
− | * wie testet man ob und wie etwas geht? (Java Ausprobieren)
| |
− | | |
− | Abstrakter Gedanke: Für den Computer ists wurscht wie man das was man meint aufschreibt, wir Menschen dagegen sind von sowaas verwirrt:
| |
− | class _{static long _
| |
− | (long __,long ___) {
| |
− | return __==0 ?___+ 1:
| |
− | ___==0?_(__-1,1):_(__
| |
− | -1,_(__, ___-1)) ; }
| |
− | static {int _=2 ,___
| |
− | = 2;System.out.print(
| |
− | "a("+_+','+___+ ")="+
| |
− | _ (_, ___) ) ;System
| |
− | .exit(1);}}//(C) Ulli
| |
− | | |
− | Wir können uns aber helfen indem wir das so schreiben:
| |
− | /** @see: http://de.wikipedia.org/wiki/Ackermann-Funktion */
| |
− | class AckermannFunctionDemo {
| |
− | static long ackermann(long n, long m) {
| |
− | if (n == 0) {
| |
− | return m + 1;
| |
− | }
| |
− | else if (m == 0) {
| |
− | return ackermann(n - 1, 1)
| |
− | }
| |
− | else {
| |
− | return ackermann(n - 1, ackermann(n, m - 1));
| |
− | }
| |
− | }
| |
− | static {
| |
− | int n = 2, m = 2;
| |
− | System.out.print("ackermann(" + n + ',' + m + ") = "
| |
− | + ackermann(n, m));
| |
− | System.exit(1);
| |
− | }
| |
− | }//(C) Ulli
| |
− | | |
− | Beispiele + Übungen
| |
− | * Einige Expressions angeben und die Teilnehmer sollen feststellen was die ausgeben/berechnen würden
| |
− | * Das gleiche dann nochmal mit if/else
| |
− | * Einen mathematischen Ausdruck in Java übersetzen
| |
− | * methoden definieren die bestimmte eigenschaften haben
| |
− | Beispiele dann Abtippen und ausprobieren -> Sie sollen Nachfragen wenn sie was anderes hatten (oder sowas)
| |
− | // TODO: Reicht das, oder brauchts noch mehr?
| |
− | | |
− | === Tag 2 ===
| |
− | * Methoden als abstraktionsmöglichkeiten -> 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?
| |
− | * while, for
| |
− | ** Anwendung davon
| |
− | * Konzept Klassenbibliothek
| |
− | ** Javadocs finden, lesen, verwenden, schreiben -> http://www.javadocs.org
| |
− | ** List, ArrayList, InputReader, BufferedReader, Scanner
| |
− | * Wie entwickelt man Programme stück für stück? (Vorgehen + Testen)
| |
− | ** kleine stücke
| |
− | ** seperat testen (von main aus)
| |
− | ** ausblick automatisieren
| |
− | | |
− | === Tag 3 ===
| |
− | * Objekte als daten mit methoden ausssenherum
| |
− | ** um innendrinn auswechseln zu können
| |
− | * Objekte, 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]
| |
− | | |
− | === Tag 4 ===
| |
− | * vorgehen
| |
− | * debugging
| |
− | * testen?
| |
− | * Aufgaben
| |
− | ** Selber ein schlechtes Programm "fehlerbeseitigen lassen"
| |
− | ** schlechte Bezeichnungen durch bessere ersetzen lassen
| |
− | | |
− | | |
− | | |
− | == Roberts Ideen und Anmerkungen ==
| |
− | | |
− | === Vorstellung ===
| |
− | Um mir ein Bild der Situation zu machen und meine Ideen wirklich zusammenhängend aufschreiben zu können, habe ich in Zusammenarbeit mit Sebastian ein Alternativkonzept überlegt, das sich von den zwei vorgestellten (Arthur und Martin) abhebt, aber in dem es natürlich viele Überschneidungen gibt. Es ist also durchaus nicht unähnlich, d.h. ''merge''bar.
| |
− | | |
− | In diesem Abschnitt finden sich alle Kommentare, Meinungen und Ideen. Im nächsten Abschnitt dann stichwortartig ein Ablaufplan.
| |
− | | |
− | === Paradigmen der Entwicklung===
| |
− | Woran sich unser Konzept messen lassen sollte und worin es sich von den anderen Konzepten unterscheidet:
| |
− | * Zeitliche Kompaktifizierung
| |
− | * Inhaltliche und zeitliche Trennung zwischen Methodik und Java-Syntax
| |
− | | |
− | * Problem: Neben den inhaltlichen Aspekten sollen auch methodische vermittelt werden:
| |
− | ** Herangehensweise an Probleme
| |
− | ** Fehler finden/Fehlermeldungen lesen/Debuggen
| |
− | ** Gutes Softwaredesign (im Kleinen)
| |
− | | |
− | * Frage: Wie mischt man das?
| |
− | ** Man kann nicht erst 2 Tage programmieren, ohne dass die Leute wissen, wie sie Fehler in ihren Programmen finden.
| |
− | ** Es geht aber auch nicht, dass erste sinnvolle Programme (Schleifen, Methoden) erst am Ende des zweiten Tages laufen.
| |
− | ** Bei zuviel Mischung verlieren die Leute den Faden.
| |
− | | |
− | * Ziele:
| |
− | ** Praktische Orientierung, d.h. schnelle Erfolge, damit die Leute am Ball bleiben und sehen, was sie machen können.
| |
− | ** Eine Prise mehr Stoff, als jeder versteht -- das ist wichtiger als Langeweile!
| |
− | | |
− | * Ideen:
| |
− | ** In der ersten Vorlesung sollten mögliche Probleme angesprochen werden: Wie interpretiere ich die Fehlermeldungen richtig. Sonst haben 80% der Leute keine Ahnung, wie sie die Fehler in ihren ersten Hello-World's finden.
| |
− | ** Syntax+Konstrukte und Methodik trennen. In der ersten Vorlesung einen Misch fahren, danach trennen.
| |
− | ** Sprachkonstrukte schneller durchziehen.
| |
− | | |
− | === Begründung zur Zeiteinteilung ===
| |
− | Wieviel Zeit ist '''angemessen''' für so einen Einführungskurs?
| |
− | | |
− | Ich meine: 2-3 Tage. Warum?
| |
− | | |
− | * Bedenkt man, wieviel 5x8 Stunden sind, so sieht man: Das sind 4SWS! So viel wie eine gesamte Lehrveranstaltung mit Vorlesung und Tutorium (z.B. TheGI3).
| |
− | * Jeder der Veranstalter sollte sich fragen: Was würde ich von einem Seminar erwarten, in das ich als Teilnehmer 40 Stunden Zeitaufwand an Anwesenheit hereinstecke. Und das Ergebnis sollte dann damit verglichen werden, was in diesem Kurs 'rüber kommt.
| |
− | * Der Stoff ist einfach zu wenig, um damit auf einem gewissen Niveau mehr als 3 Tage zu füllen, das sind immerhin 24 Stunden. Das ist wirklich '''richtig viel Zeit'''.
| |
− | * Prinzipiell ist ein gestraffter Kurs auch nicht uninteressant für diejenigen, die schon Java-Erfahrung haben.
| |
− | * Man verschreckt sonst diejenigen, die Interesse an dem Kurs haben, aber ggf. auch nicht soviel Zeit investieren wollen, ebenso wie Helfer, die gern an einem 2-3-Tage-Projekt mitwirken würden.
| |
− | * Selbst für Java-Anfänger ist ein Kurs mit dem Zeitaufwand einer gesamten Woche abschreckend!
| |
− | * Der Kurs richtet sich an Teilnehmer, die noch keine Erfahrung in der imperativen Programmierung haben. Sicher sind darunter auch Lernschwache, aber man kann auch die Massen nicht langweilen. Wenn man sich nur am Leistungsminimum orientiert, dann leiden alle darunter. Wählt man einen Mittelweg, so langweilt sich keiner und die Schwächeren haben die Chance, etwas mitzunehmen, danach Fragen zu stellen und selbst Werkzeuge in der Hand zu haben, um nach Lösungen für ihre Probleme zu suchen (Buch-Referenz, Doku)
| |
− | | |
− | === Offene TODOs und Ideen ===
| |
| * Gute (Anfänger)-Literatur finden und nennen, vllt. deutsch und gedruckt? (nix gegen das vielfach verlinkte SICP) Was gibt es in der UB? | | * Gute (Anfänger)-Literatur finden und nennen, vllt. deutsch und gedruckt? (nix gegen das vielfach verlinkte SICP) Was gibt es in der UB? |
| * Ist auf der Konsole der CLASSPATH standardmäßig korrekt gesetzt? | | * Ist auf der Konsole der CLASSPATH standardmäßig korrekt gesetzt? |
− | * Ist der Kurs nicht auch geeignet für Leute mit Kenntnissen in imperativer Programmierung? (Falls der Ansturm doch nicht so groß sein sollte)
| |
− | * Dann: Trennung in "Leute ohne imperative-Kenntnisse" und "Leute mit imp. Kenntnissen, aber ohne Plan von Java"
| |
− | * Eclipse intro muss mit rein
| |
− | * Warum/wann Schleifen?
| |
− | ** als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)
| |
− | ** wenn die Anzahl der Durchläufe nicht konstant ist
| |
− | ** als Luxus - Bsp: for( int i = 0; i < 3; i++ )
| |
| | | |
− | === Anmerkungen === | + | == Arthur == |
− | * Nicht zuviel Raum für das Thema der Namen. Sprechende Bezeichner sind wichtig und das sollte angesprochen werden, jedoch sind die ''Best Practices'' hier etwas, was sie entweder | + | * Bei Moses (bzw. Veranstalter) |
− | ** schon in Info1 gelernt haben | + | * In Tutorien ankündigen |
− | ** noch selbst lernen werden (und nur selbst lernen können). Kann man guten Stil anerziehen? | + | * Ankündigung bei InfoA-Klausur? |
− | * Was bringt da eine Aufgabe a la "Findet bessere Namen"? Das Thema sollte explizit angesprochen, aber nur implizit geübt werden. | + | * Räume |
| | | |
− | * Keine Hardcore-Objektorientierung (run). Dies soll doch ein Anfängerkurs sein. | + | == Martin == |
| + | * Webseite bauen, dann rumschicken |
| + | <!--* Zedat (FU) hat spezielle Räume für sowas? |
| + | * Beamer / VNC-Multicast? --> |
| | | |
− | * Keine Hausaufgaben. Bei 8 Stunden Anwesenheit setzt sich niemnand um 22 Uhr noch hin und will die machen. | + | == Florian == |
| + | * Anmeldescript bauen |
| + | ** erste 100 adressen von csaccount anmelden |
| + | ** nur anmelden wenn anfänger (ausser opal noch nix) |
| + | ** andere sollen sich mit cs nochmal anmelden |
| + | ** danach Warteschlange |
| | | |
− | == Roberts Zeitplan == | + | == Felix == |
− | | + | * Welche Kontonummer können wir nutzen für die Überweisung |
− | === LE 1 - VL ===
| |
− | '''(lieber etwas länger, weil im TUT nicht so viel läuft: max. 90 Min)'''
| |
− | | |
− | Methoden:
| |
− | * Programmieren im Allgemeinen
| |
− | ** imperativ vs. funktionales Programmieren
| |
− | | |
− | Java:
| |
− | * Aufbau eines Java-Programms
| |
− | * Variablen und Identifier-Namen
| |
− | * Literale
| |
− | * Zuweisung, Operatoren (+, *, <=, %)
| |
− | * Datenstrukturen und Typen:
| |
− | ** Primitive
| |
− | ** String
| |
− | ** Arrays (?)
| |
− | * Kommentare
| |
− | | |
− | Beispiel:
| |
− | * Hello-World
| |
− | | |
− | * javac
| |
− | | |
− | Methodik:
| |
− | * Fehlermeldungen lesen und verstehen
| |
− | | |
− | | |
− | === LE 1 - TUT ===
| |
− | | |
− | * cd üben
| |
− | * Hello World eintippen (kate, gedit, nano, ..)
| |
− | * javac / java benutzen
| |
− | * Ergebnisse sehen
| |
− | * Fehler einbauen, Fehler finden (laufzeit/compilezeit) | |
| | | |
− | * Kurz-Einführung Eclipse | + | == Robert == |
| + | * Keine. Juchu! |
| | | |
− | ----
| |
− |
| |
− | === LE 2 - VL ===
| |
− | Java:
| |
− | * Methoden:
| |
− | ** Aufruf
| |
− | ** Parameter und Rückgabe
| |
− | ** main
| |
− | ** return
| |
− | ** Nachtrag Datenstrukturen: void
| |
− |
| |
− | * Blöcke
| |
− | ** if-else
| |
− | ** for
| |
− | ** while
| |
− | ** continue
| |
− | ** break
| |
− |
| |
− |
| |
− |
| |
− | === LE 2 - TUT ===
| |
− |
| |
− | * TODO
| |
− |
| |
− | ----
| |
− |
| |
− | === LE 3 - VL ===
| |
− |
| |
− | * Klassen und Objekte
| |
− | ** als Ansammlung von Daten mit Methoden dazu
| |
− | ** static
| |
− | ** final
| |
− | ** Konstruktoren
| |
− | ** null, new
| |
− | ** this
| |
− |
| |
− | * Methoden-Nachtrag
| |
− | ** Referenzen (Pointer)
| |
− | ** insb: Referenzen sind nicht Kopien
| |
− | ** Overloading
| |
− |
| |
− | * Type Casting
| |
− | * Java-API
| |
− | * JavaDoc
| |
− | * Input/Output (Streams, usw.) <-- großer Block
| |
− | * Collections, Enumerations
| |
− |
| |
− |
| |
− |
| |
− | === LE 3 - TUT ===
| |
− |
| |
− | * Selbst Klassen schreiben
| |
− | * Klassen benutzen:
| |
− | ** Input/Output üben
| |
− | ** Viele andere Klassen aus der Java-API finden und nutzen
| |
− | ** Praktische Vorgehensweise, Anleitung zum Selbstlernen, nicht so viel Vorlesung dazu
| |
− |
| |
− | ----
| |
− |
| |
− | === LE 4 - VL ===
| |
− | Methodik:
| |
− | ** Rekursion <-> Schleifen (Beispiel)
| |
− | ** Problemlösungsstrategien
| |
− |
| |
− | * Modularisierung und Strukturierung -- auf allen Ebenen
| |
− | ** Klassen (als Strukturen)
| |
− | ** Methoden-Kapselung
| |
− |
| |
− | * Java-Entwicklung
| |
− | ** Gefundene Fehler korrigieren
| |
− | ** Debugging
| |
− | ** Selber Fehler finden: Testen
| |
− | ** -> Laufend kompilieren, nicht erst am Ende!
| |
− | ** -> Laufend testen, nicht erst am Ende!
| |
− |
| |
− | * Tools
| |
− | ** Eclipse
| |
− | ** ?
| |
− |
| |
− |
| |
− | === Wichtig, aber außen vor ===
| |
− | * Vererbung
| |
− | * Interfaces
| |
− | * Exceptions
| |
− | * Packages
| |
− | * Zugriffskontrolle (public, private, ...)
| |
− | * switch
| |
− | * do-while
| |
− |
| |
− | (Ende der Einfügung)
| |
− |
| |
− |
| |
− | = Vorgehen =
| |
− | * Kochrezept....
| |
− | * Legen immer main -> instanz -> run an, ohne zu verstehen
| |
− | * Von Opal ausgehen -> bringt nichts weil Opal nicht verstanden?
| |
− | * Von woanders ausgehen? Von null -> normale Welt
| |
− | * Von vornherein Objektorientiert -> Langfristig besser? Auch kurzfristig besser?
| |
− | ** Test: Wird das zum Problem wenn wir das mit run() einführen?
| |
− | * '''Wir wollen das die Teilnehmer danach im Semester das den anderen Erklären, die nicht da waren.'''
| |
− |
| |
− | == Was können sie wenn wir fertig sind? ==
| |
− | * Utility Objekt: readFile(aFilename), getUserInput(aPrompt)
| |
− | ** JavaAPI lesen
| |
− | ** Streams verschachteln
| |
− | ** UtilityObjekt -> Reuse
| |
− | * Objekt / null / Initialisieren
| |
− | * main -> instanz -> run() (erklären wir später)?
| |
− | * Programm mit mehreren Dateien
| |
− | * sehen das das scheiße ist:
| |
− | class _{static long _
| |
− | (long __,long ___) {
| |
− | return __==0 ?___+ 1:
| |
− | ___==0?_(__-1,1):_(__
| |
− | -1,_(__, ___-1)) ; }
| |
− | static {int _=2 ,___
| |
− | = 2;System.out.print(
| |
− | "a("+_+','+___+ ")="+
| |
− | _ (_, ___) ) ;System
| |
− | .exit(1);}}//(C) Ulli
| |
− | * Lösungsstrategien Top->Down, Bottom->Up
| |
− | ** Aufgaben angehen
| |
− | ** Fehlerlösungsstrategien: NullPointerException, etc.
| |
− | *** Was sagt denn der Fehler genau? Wie finde ich das raus?
| |
− | *** Kaputter Code -> Der muss Korrigiert werden
| |
− | **** n-mal das gleiche -> schleife / methode
| |
− | ** Zu langer code -> kurz machen
| |
− | * Testen?: von main aufrufen, unittests, debuggen, printf-style
| |
− | * Was wissen die Leute am Schluss von Objekten?
| |
− | ** Collections, Exceptions, Streams kennen
| |
− | ** Konstruktoren, Instanzvariablen (vielleicht weglassen?)
| |
− | ** Daten mit Methoden aussen herum (vielleicht)
| |
− |
| |
− | == Sprachkonstrukte die wir Behandeln und deren Reihenfolge ==
| |
− | * if
| |
− | * while, for ( <- Bis hier tag eins)
| |
− | * methode
| |
− | * try - catch / throws??
| |
− | * ++ oder +=, was noch? Oder gar nichts?
| |
− | * NICHT MACHEN: try {} cach (Throwable e) {}
| |
− |
| |
− | === Was wir nicht machen ABSICHTLICH ===
| |
− | * :?, do{}while, ++i, switch,
| |
− |
| |
− | == Vielleicht haben wir noch Zeit hierfür? ==
| |
− | * SVN?
| |
− | * static / instanz -> Ebenen modell
| |
− |
| |
− | == Erklärungsansätze ==
| |
− | === Objektorientierung ===
| |
− | * Objekt, Klasse erklären als: "Klasse" Mensch
| |
− | ** davon dann klonen mit bestimmten Modifikationen (augenfarbe, größe, name....)
| |
− | ** das wäre dann klasse, objekte und konstruktoraufruf
| |
− | * Objekte / Klassen erklären als
| |
− | ** Platonische Ideen (Pferd)
| |
− | ** Tatsächliches Ding (Bruno auf dem ich jeden Dienstag in Hellersdorf reite)
| |
− | * Objekte als Daten mit ''Schutzschicht'' Methoden aussen herum
| |
− | ** Klassen als solches erst später (quasi erst prototyp und dann klassen erklären)
| |
− |
| |
− | * Ganz anderer Ansatz: Erklären über Einheiten die sich über Nachrichten gegenseitig verständigen
| |
− |
| |
− | === main ===
| |
− | * Sich selbst am Schopf aus dem Sumpf herausziehen -> Münchhausen
| |
− | ** Am anfang gibts keine Objekte, also brauchts mechanismus um das erste erstellen zu können
| |
− |
| |
− | == Mehrere Möglichkeiten ein Programm anzufangen ==
| |
− | * Eclipse Scrapbook Page (File>New>Other>Java>Java Run/Debug>Scrapbook Page)
| |
− | ** geeignet für: Primitive, Zusammengesetzte ausdrücke, variablen, methoden aufrufen
| |
− | ** evtl, sogar main motivieren, indem man erst keinen startpunkt hat und ihn dann von scrapbook nach main migriert
| |
− | * Static block in der Klassse ''System.exit(0)'' nicht vergessen!
| |
− | ** geeignet für gar nichts?
| |
− | * Code direkt in main
| |
− | ** startpunkt des programms
| |
− | * von main aus run() aufrufen
| |
− | ** so wie es in ernsthaften programmen gemacht wird.
| |
− |
| |
− | = Aufgaben die wir Stellen =
| |
− | * UtilityObjekt mit readFile(aFilename) und getUserInput(aPrompt) [http://www.cs.princeton.edu/introcs/22inout/In.java.html sowas sollte rauskommen!]
| |
− | * Menü Objekt, das sich leicht adaptieren lässt?
| |
− | * Apfelbaum
| |
− | while (hatApfelbaumNochÄpfel) {
| |
− | pflückEinenApfelUndEssIhn();
| |
− | }
| |
− | * Collections, Polymorphie (Apfel mit Wurm....)
| |
− | * [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben]
| |
| | | |
| = Treffen 6.2.06 = | | = Treffen 6.2.06 = |
| Bekanntmachung: | | Bekanntmachung: |
| Termin 3.4.-7.4. | | Termin 3.4.-7.4. |
− |
| |
− | == Anmeldung ==
| |
− | * Wie kriegen wir das verbindlich hin
| |
− | ** Details auf webseite
| |
− | ** mail an javakurs06@freitagsrunde.org
| |
− | ** dann gibts autoreply / manuelreply mit anmeldungsdetails
| |
− | *** 5 € überweisen
| |
− | *** Davon besorgen wir Getränke
| |
| | | |
| == Webseite == | | == Webseite == |
Zeile 522: |
Zeile 154: |
| * Anmeldung | | * Anmeldung |
| * Überweisung / Persönlich vorbeibringen | | * Überweisung / Persönlich vorbeibringen |
− |
| |
− | == Nächstes Treffen ==
| |
− | * Freitag 15:00 Uhr
| |
− | * Vermutlich nächste Woche nicht, weil da Neuhjahrsempfang ist
| |
− |
| |
− | == Todos ==
| |
− | @Arthur: Mittwoch 14:00 - Info A Leute
| |
− | * Bei Moses (bzw. Veranstalter) -> Arthur macht das
| |
− | * In Tutorien ankündigen -> Arthur macht das
| |
− |
| |
− | @Martin:
| |
− | * Webseite bauen, dann rumschicken
| |
− |
| |
− | @Florian:
| |
− | * Anmeldescript bauen
| |
− | ** erste 100 adressen von csaccount anmelden
| |
− | ** nur anmelden wenn anfänger (ausser opal noch nix)
| |
− | ** andere sollen sich mit cs nochmal anmelden
| |
− | ** danach Warteschlange
| |
− |
| |
− | @Felix:
| |
− | * Welche Kontonummer können wir nutzen für die Überweisung
| |
− |
| |
− | @Martin von Robert
| |
− | * Eintrag in den [[Termine]]n aktuell halten
| |