Martin Häcker/Java Kurs/Tag 1: Unterschied zwischen den Versionen
(→Java) |
(→LE 2: Methoden und Schleifen (RobertB und Sven): deadlink is dead) |
||
(21 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt) | |||
Zeile 18: | Zeile 18: | ||
'''Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können''' | '''Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können''' | ||
− | == | + | === weitere Ideen === |
− | + | * Lernende einbeziehen durch Befragung mit Zetteln, was sie sich vorstellen unter "Programmieren" | |
+ | |||
+ | * Kommentare //, /* */, /** */ | ||
+ | * 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 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | == Inhalt (Vorgehen, Beispiele, Ideen) == | |
− | |||
− | |||
− | |||
=== Java === | === Java === | ||
==== Wie fangen wir Java an ==== | ==== Wie fangen wir Java an ==== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | * Hello world |
+ | grobe Struktur der "Umgebung": keine .sign/.impl Datei sondern nur eine .java | ||
+ | |||
+ | Bildchen für Was ist Was? Syntax zerlegen. | ||
+ | system.out.println(); | ||
+ | |||
+ | * compilieren: | ||
+ | Was passiert da, wieso erst Compilieren, dann ausführen? | ||
+ | javac | ||
+ | java | ||
+ | |||
+ | was für Fehler können auftreten? | ||
+ | .class | ||
+ | Klasse heißt anders als Datei | ||
+ | Compiler falsch aufgerufen | ||
− | + | Entscheiden: Zuerst in println rechnen oder zuerst Variablen einführen. | |
− | + | Semikolons, | |
− | + | * Variablentyp (int) -> Syntax der Deklaration | |
− | + | Wie darf ein Variablenname aussehen? (Buchstaben,Zahlen, _ ) | |
+ | * Zuweisung -> Syntax | ||
+ | man kann Zahlen > 32 direkt eingeben ! | ||
− | + | * Werte und operatoren +,*,- -> Syntax | |
− | + | int zahl1 = 7; | |
− | + | int zahl2 = 42; | |
− | + | int ergebnis = zahl1 + zahl2; | |
− | + | System.out.println(ergebnis); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Zuweisung nach Deklaration. | ||
+ | Variableninhalte ändern sich durch Zuweisung. Zeigen mit sysout. | ||
− | + | Das selbe GANZ kurz nochmal mit anderen Operatoren. | |
'''Sauberes Programmieren''' | '''Sauberes Programmieren''' | ||
* Variablen und Identifier-Namen | * Variablen und Identifier-Namen | ||
** Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat! | ** Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat! | ||
− | ** | + | |
+ | |||
+ | |||
+ | String deklarieren mit "bla" , kein Anführungszeichen im "..." | ||
+ | |||
+ | verknüpfen von Strings (+) | ||
+ | |||
+ | komplizierteres Sysout an selbem Programm | ||
+ | |||
+ | * nicht explizit einführen, sondern nur im If mit Fallunterscheidung | ||
+ | erweitertes Miniprogramm zur Fallunterscheidung | ||
+ | * <, >, ==, <=, >= Operatoren | ||
+ | if mit Operatoren und anderen Variablen | ||
+ | |||
+ | * if -> Syntax | ||
+ | Minniprogramm zur Fallunterscheidung | ||
+ | boolean auwahl = true; | ||
+ | if(auswahl) then { | ||
+ | System.out.println("auswahl war true"); | ||
+ | else{ | ||
+ | System.out.println("auswahl war false"); | ||
+ | } | ||
+ | * Blöcke/Gültigkeit von Variablen | ||
+ | |||
+ | * Kompliziertere Bedingungen (&&, ||, !) | ||
+ | |||
+ | *(double) mit Punkt als Trennzeichen. | ||
+ | |||
+ | *Division mit / und das bei int gerundet wird | ||
+ | |||
+ | *Kommentare | ||
'''Fehlermeldungen lesen und verstehen''' | '''Fehlermeldungen lesen und verstehen''' | ||
Zeile 80: | Zeile 108: | ||
== Übungsaufgaben == | == Übungsaufgaben == | ||
− | * ''cd'' üben | + | [[Robert Lubkoll/Java Kurs/Tag1/Teil1/Aufgaben | Aufgaben]] |
− | * Hello World eintippen (kate, gedit, nano, ..) | + | |
− | * javac / java benutzen | + | [[Robert Lubkoll/Java Kurs/Tag1/Teil1/Kommandohilfe | Handout Kommandohilfe]] |
− | * Ergebnisse sehen | + | |
− | + | [[Robert Lubkoll/Java Kurs/Tag1/Teil1/Zusammenfassung | Zusammenfassung des Vortrages]] | |
+ | |||
+ | * ''cd'' üben (ist drin) | ||
+ | * Hello World eintippen (kate, gedit, nano, ..) (ist drin) | ||
+ | * javac / java benutzen (ist drin) | ||
+ | * Ergebnisse sehen (ist drin) | ||
+ | |||
* Einige Expressions angeben und die Teilnehmer sollen feststellen, was die ausgeben/berechnen würden | * Einige Expressions angeben und die Teilnehmer sollen feststellen, was die ausgeben/berechnen würden | ||
* Das gleiche dann nochmal mit if/else | * Das gleiche dann nochmal mit if/else | ||
* Einen mathematischen Ausdruck in Java übersetzen | * Einen mathematischen Ausdruck in Java übersetzen | ||
+ | * Fehler einbauen, Fehler finden (laufzeit/compilezeit) | ||
* [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben] | * [http://www.cs.princeton.edu/introcs/11hello/ Beispiele für Anfängeraufgaben] | ||
− | = | + | === Zusätzliche Vorschläge === |
− | + | Folgendes sollte in der VL oder Übung angesprochen werden: | |
+ | * [http://www.scit.wlv.ac.uk/cbook/chap5.dangling.else.html "Dangling else"-Problem] | ||
+ | * Semikolon hinter if (hab gelesen, dies sei ein häufiger Fehler bei Anfängern...) | ||
+ | -- [[Benutzer:Buchholz|Robert Buchholz]] 01:17, 17. Mär 2006 (CET) | ||
+ | |||
+ | = LE 2: Methoden und Schleifen (RobertB und Sven) = | ||
+ | LE2 Übung mit Zusatzaufgaben und Musterlösung sind leider nichtmehr verfuegbar. | ||
− | + | TODO: | |
+ | * LE1 aufgabe benutzen. (delayed) | ||
− | + | Benötigete Zeiten: | |
− | + | <noch niemand hats probiert?> | |
== Inhalt == | == Inhalt == | ||
=== Methodik === | === Methodik === | ||
− | * 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] | + | * Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt: |
+ | ** dadurch verbesserte test-möglichkeiten (sprich methoden sind auch eine art von modul) | ||
+ | ** 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]) | ||
+ | * Quelltextverkürzung durch schleifen | ||
+ | ** nicht minimierung auf kosten der verständlichkeit | ||
+ | ** was ist aufgabe des entwicklers? | ||
+ | ** und was ist aufgabe des compilers? (vllt. auch nicht?) | ||
+ | ** evtl. ist eine eigene methode sinnvoller/verständlicher? | ||
=== Java === | === Java === | ||
Zeile 111: | Zeile 160: | ||
* '''Methoden''': | * '''Methoden''': | ||
− | ** | + | ** Namen |
** Aufruf | ** Aufruf | ||
** Parameter und Rückgabe -> Call by Value | ** Parameter und Rückgabe -> Call by Value | ||
Zeile 119: | Zeile 168: | ||
** Beispiel: System.out.println() | ** Beispiel: System.out.println() | ||
− | * ''' | + | * '''Schleifen''' |
− | ** | + | ** Blöcke |
− | |||
** while | ** while | ||
+ | *** Formulieren von Bedingungen | ||
*** Schleife als zweite Lösung für duplikation von Code | *** Schleife als zweite Lösung für duplikation von Code | ||
*** Diskussion Schleife <-> Rekursion | *** Diskussion Schleife <-> Rekursion | ||
Zeile 153: | Zeile 202: | ||
** Variablen haben unterschiedliche Werte während das Program läuft! | ** Variablen haben unterschiedliche Werte während das Program läuft! | ||
− | + | assertTrue-Methode selber schreiben | |
== Übungsaufgaben == | == Übungsaufgaben == |
Aktuelle Version vom 26. März 2012, 21:57 Uhr
Inhaltsverzeichnis
LE 1: Hello, World!
Vortragende: Robert Lubkoll, Felix Schwarz
Organisatorisches
- Was Passiert
- Wann passiert was
- Wie passierts
- Vorstellung
- Was ist das genau
- Wer sind wir: Freiwillig, Umsonst
- Ziel des Kurses
- Was sie am Ende können sollen
- Gruppeneinteilung
- am Ende der ersten Vorlesung
- Vorher per e-mail
Jemand vom Rechnerbetrieb soll bitte da sein, damit wir Login-Probleme lösen können
weitere Ideen
- Lernende einbeziehen durch Befragung mit Zetteln, was sie sich vorstellen unter "Programmieren"
- Kommentare //, /* */, /** */
- 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
Inhalt (Vorgehen, Beispiele, Ideen)
Java
Wie fangen wir Java an
- Hello world
grobe Struktur der "Umgebung": keine .sign/.impl Datei sondern nur eine .java
Bildchen für Was ist Was? Syntax zerlegen. system.out.println();
- compilieren:
Was passiert da, wieso erst Compilieren, dann ausführen? javac java
was für Fehler können auftreten? .class Klasse heißt anders als Datei Compiler falsch aufgerufen
Entscheiden: Zuerst in println rechnen oder zuerst Variablen einführen. Semikolons,
- Variablentyp (int) -> Syntax der Deklaration
Wie darf ein Variablenname aussehen? (Buchstaben,Zahlen, _ )
- Zuweisung -> Syntax
man kann Zahlen > 32 direkt eingeben !
- Werte und operatoren +,*,- -> Syntax
int zahl1 = 7; int zahl2 = 42; int ergebnis = zahl1 + zahl2; System.out.println(ergebnis);
Zuweisung nach Deklaration. Variableninhalte ändern sich durch Zuweisung. Zeigen mit sysout.
Das selbe GANZ kurz nochmal mit anderen Operatoren.
Sauberes Programmieren
- Variablen und Identifier-Namen
- Variablendeklaration - Namen vergeben für Dinge, die man berechnet hat!
String deklarieren mit "bla" , kein Anführungszeichen im "..."
verknüpfen von Strings (+)
komplizierteres Sysout an selbem Programm
- nicht explizit einführen, sondern nur im If mit Fallunterscheidung
erweitertes Miniprogramm zur Fallunterscheidung
- <, >, ==, <=, >= Operatoren
if mit Operatoren und anderen Variablen
- if -> Syntax
Minniprogramm zur Fallunterscheidung
boolean auwahl = true; if(auswahl) then { System.out.println("auswahl war true"); else{ System.out.println("auswahl war false"); }
- Blöcke/Gültigkeit von Variablen
- Kompliziertere Bedingungen (&&, ||, !)
- (double) mit Punkt als Trennzeichen.
- Division mit / und das bei int gerundet wird
- Kommentare
Fehlermeldungen lesen und verstehen
- Klammer vergessen
- Semikolon vergessen
- Klasse heißt anders als Datei
- Compiler falsch aufgerufen
Übungsaufgaben
- cd üben (ist drin)
- Hello World eintippen (kate, gedit, nano, ..) (ist drin)
- javac / java benutzen (ist drin)
- Ergebnisse sehen (ist drin)
- 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
- Fehler einbauen, Fehler finden (laufzeit/compilezeit)
- Beispiele für Anfängeraufgaben
Zusätzliche Vorschläge
Folgendes sollte in der VL oder Übung angesprochen werden:
- "Dangling else"-Problem
- Semikolon hinter if (hab gelesen, dies sei ein häufiger Fehler bei Anfängern...)
-- Robert Buchholz 01:17, 17. Mär 2006 (CET)
LE 2: Methoden und Schleifen (RobertB und Sven)
LE2 Übung mit Zusatzaufgaben und Musterlösung sind leider nichtmehr verfuegbar.
TODO:
- LE1 aufgabe benutzen. (delayed)
Benötigete Zeiten:
<noch niemand hats probiert?>
Inhalt
Methodik
- Wichtigkeit, dass man Programme in verständliche und sinnvolle Teile unterteilt:
- dadurch verbesserte test-möglichkeiten (sprich methoden sind auch eine art von modul)
- verbesserte verständlichkeit(Procedures as Black-Box Abstractions)
- Quelltextverkürzung durch schleifen
- nicht minimierung auf kosten der verständlichkeit
- was ist aufgabe des entwicklers?
- und was ist aufgabe des compilers? (vllt. auch nicht?)
- evtl. ist eine eigene methode sinnvoller/verständlicher?
Java
- Typen
- Arrays
- warum, wie und probleme
- void
- char?
- Arrays
- Methoden:
- Namen
- Aufruf
- Parameter und Rückgabe -> Call by Value
- main
- return
- Nachtrag Datenstrukturen: void
- Beispiel: System.out.println()
- Schleifen
- Blöcke
- while
- Formulieren von Bedingungen
- Schleife als zweite Lösung für duplikation von Code
- Diskussion Schleife <-> Rekursion
- Anwendung von Schleifen
- Rekursion <-> Schleifen (Beispiel)
- Warum/wann Schleifen?
- als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)
- wenn die Anzahl der Durchläufe nicht konstant ist
- for schleife, wann und wozu, einfache beispiele: for(int i = 0; i < 3; i++)
- Gute Namen
- Abstrakter Gedanke: Für den Computer ists wurscht, wie man das was man meint aufschreibt. Wir Menschen dagegen lassen und leicht verwirren
- abwägen zwischen
- aussagekraft des namens
- häufigkeit im code
- kommentar zu variable(nnamen)
- länge des namens
- Testen
- was ist testen?
- überprüfung von einigen randwerten => nachdenken ist erforderlich um interessante fälle zu finden
- testen ist nicht verifizieren
- wie in java?
- System.out.println(..);
- auskommentieren und schrittweises testen
- was wird getestet?
- ausgabe von arrays komplex
- ausgabe von werten mit text verknüpfen
- Variablen haben unterschiedliche Werte während das Program läuft!
assertTrue-Methode selber schreiben
Übungsaufgaben
- Methoden definieren, die bestimmte Eigenschaften haben
- Beispiele dann Abtippen und ausprobieren
- Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)
- Verschiedene Eingabewerte
- erste Endlosschleife
- Fehler für die eingeführten elemente