Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Martin Häcker/Java Kurs/Tag 1: Unterschied zwischen den Versionen

K (LE 2: Standardkonstrukte in Java (Robert und Sven): diesen freitag sind wir ja da .))
(LE 2: Methoden und Schleifen (RobertB und Sven): deadlink is dead)
 
(27 dazwischenliegende Versionen von 10 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'''
  
== Inhalt (Vorgehen, Beispiele, Ideen) ==
+
=== weitere Ideen ===
=== Methodik ===
+
* Lernende einbeziehen durch Befragung mit Zetteln, was sie sich vorstellen unter "Programmieren"
  
Was ist '''Programmieren?'''
+
* Kommentare //, /* */, /** */
* imperativ (prozedural) vs. funktionales Programmieren
+
* 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
** relation problem <-> lösung / kochrezept
 
* Zustandsmaschine
 
* 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")
 
** ''Damit ist die Philosophie von Programmieren gemeint''
 
  
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):
+
 
* Primitive Ausdrücke
+
== Inhalt (Vorgehen, Beispiele, Ideen) ==
* Kombinationsmöglichkeiten
 
* Abstraktionsmöglichkeiten
 
  
 
=== Java ===
 
=== Java ===
 
==== Wie fangen wir Java an ====
 
==== Wie fangen wir Java an ====
* Werte und operatoren +,*,/,-, % (?)
 
* Wenige Variablentypen int, String, (double)
 
** 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
 
* Zuweisung
 
* <, >, ==, <=, >=
 
* if
 
  
* Methoden vorgeben: Input, Output
+
* Hello world
 +
grobe Struktur der "Umgebung": keine .sign/.impl Datei sondern nur eine .java
  
* Was passiert da, wieso erst Compilieren, dann ausführen
+
Bildchen für Was ist Was? Syntax zerlegen.
* Live vorführen
+
system.out.println();
  
==== Vorführung ====
+
* compilieren:
'''Aufbau eines Java-Programms'''
+
Was passiert da, wieso erst Compilieren, dann ausführen?
 +
javac
 +
java
  
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.
+
was für Fehler können auftreten?
class Test {
+
.class
static void print(double aNumber) {
+
Klasse heißt anders als Datei
System.out.println("> " + aNumber);
+
Compiler falsch aufgerufen
}
+
 
+
Entscheiden: Zuerst in println rechnen oder zuerst Variablen einführen.
public static void main(String [] arguments) {
+
Semikolons,  
print(3 * 4);
+
 
print(7 + 23 * 8 - 3);
+
* 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.
  
=== Methodik ===
+
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!
** 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 '''Local Names''']
+
 
 +
 
 +
 
 +
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 79: 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
+
 
* Fehler einbauen, Fehler finden (laufzeit/compilezeit)
+
[[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]
  
= LE 2: Standardkonstrukte in Java (Robert und Sven) =
+
=== Zusätzliche Vorschläge ===
Übungs-Aufgaben inklusive Vorgaben und Musterlösung [http://user.cs.tu-berlin.de/~svens/files/le2_ue.tar.gz LE2UEB]
+
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 ===
 
* '''Typen'''
 
* '''Typen'''
** boolean
 
 
** Arrays
 
** Arrays
** was wir im ersten Teil weggelassen haben?
+
*** warum, wie und probleme
 +
** void
 +
** char?
  
 
* '''Methoden''':
 
* '''Methoden''':
** Namend
+
** Namen
 
** Aufruf
 
** Aufruf
 
** Parameter und Rückgabe -> Call by Value
 
** Parameter und Rückgabe -> Call by Value
Zeile 111: Zeile 168:
 
** Beispiel: System.out.println()
 
** Beispiel: System.out.println()
  
 
+
* '''Schleifen'''
* '''Blöcke'''
+
** Blöcke
** if-else
 
*** Formulieren von Bedingungen für if, while
 
 
** 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
  
 
* Anwendung von Schleifen
 
* Anwendung von Schleifen
Zeile 124: Zeile 180:
 
** als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)
 
** als Alternative zu Akkumulator Parametern (Vergleich zu OPAL)
 
** wenn die Anzahl der Durchläufe nicht konstant ist
 
** wenn die Anzahl der Durchläufe nicht konstant ist
** als Luxus - Bsp: for( int i = 0; i < 3; i++ )
+
** for schleife, wann und wozu, einfache beispiele: for(int i = 0; i < 3; i++)
 
 
  
 
* '''Gute Namen'''
 
* '''Gute Namen'''
** Abstrakter Gedanke: Für den Computer ists wurscht, wie man das was man meint aufschreibt. Wir Menschen dagegen sind von sowaas verwirrt:
+
** Abstrakter Gedanke: Für den Computer ists wurscht, wie man das was man meint aufschreibt. Wir Menschen dagegen lassen und leicht verwirren
class _{static long _
+
** abwägen zwischen
(long __,long  ___) {
+
*** aussagekraft des namens
return __==0 ?___+ 1:
+
*** häufigkeit im code
___==0?_(__-1,1):_(__
+
*** kommentar zu variable(nnamen)
-1,_(__, ___-1)) ;  }
+
*** länge des namens
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 void main {
 
int n = 2, m = 2;
 
System.out.print("ackermann(" + n + ',' + m + ") = "
 
+ ackermann(n, m));
 
System.exit(1);
 
}
 
}//(C) Ulli + Martin
 
  
 +
* '''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!
  
* Testen: wie testet man ob und wie etwas geht? (Java Ausprobieren)
+
assertTrue-Methode selber schreiben
** assert-Methode selber schreiben -> Später!
 
* Werte ausgeben! -> printf-Debugging
 
** Variablen haben unterschiedliche Werte während das Program läuft!
 
  
 
== Übungsaufgaben ==
 
== Übungsaufgaben ==

Aktuelle Version vom 26. März 2012, 21:57 Uhr

<- Zurück zur Übersicht

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

Aufgaben

Handout Kommandohilfe

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
  • 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:

-- 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:
  • 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?
  • 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

<- Zurück zur Übersicht