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

(Java)
(LE 2: Methoden und Schleifen (RobertB und Sven): deadlink is dead)
 
(42 dazwischenliegende Versionen von 12 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
[[Benutzer:Martin_Häcker/Java_Kurs | <- Zurück zur Übersicht]]
 +
 
= LE 1: Hello, World! =
 
= LE 1: Hello, World! =
 +
'''Vortragende:''' Robert Lubkoll, Felix Schwarz
  
 
== Organisatorisches ==
 
== Organisatorisches ==
Zeile 10: Zeile 13:
 
* Ziel des Kurses
 
* Ziel des Kurses
 
* Was sie am Ende können sollen
 
* Was sie am Ende können sollen
* Gruppeneinteilung -> am Ende der ersten Vorlesung
+
* 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'''
 
'''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:
+
 
* 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)
 
* Zuweisung
 
* <, >, ==, <=, >=
 
* if
 
  
* Methoden vorgeben: Input, Output
+
* 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 passiert da, wieso erst Compilieren, dann ausführen
+
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,
  
==== Alter Plan ====
+
* Variablentyp (int) -> Syntax der Deklaration
'''Aufbau eines Java-Programms'''
+
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
 
* 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-4.html#%25_toc_%25_sec_Temp_41]
 
* Literale
 
* Datenstrukturen und Typen:
 
** Primitive
 
** String: einführen mit dem Hinweis, dass 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?)
 
** Arrays (?)
 
  
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) {
+
String deklarieren mit "bla" , kein Anführungszeichen im "..."
System.out.println("> " + aNumber);
+
 
}
+
verknüpfen von Strings (+)
   
+
 
public static void main(String [] arguments) {
+
komplizierteres Sysout an selbem Programm
print(3 * 4);
+
 
print(7 + 23 * 8 - 3);
+
* 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 (&&, ||, !)
  
* Zuweisung, einfache Operatoren (+, *, <=, %)
+
*(double) mit Punkt als Trennzeichen.
* ++ oder += (?)
 
* Kommentare
 
  
* if, else
+
*Division mit / und das bei int gerundet wird
  
* '''javac'''
+
*Kommentare
 
 
=== Methodik ===
 
  
 
'''Fehlermeldungen lesen und verstehen'''
 
'''Fehlermeldungen lesen und verstehen'''
Zeile 85: 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]
  
= LE 2: Standardkonstrukte in Java =
+
=== 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 ===
 
* '''Typen'''
 
* '''Typen'''
** boolean
+
** 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 114: 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
** Weitere Schleifenkonstrukte später - gar nicht?
 
*** for
 
*** continue
 
*** break
 
  
 
* Anwendung von Schleifen
 
* Anwendung von Schleifen
Zeile 131: 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 {
 
int n = 2, m = 2;
 
System.out.print("ackermann(" + n + ',' + m + ") = "
 
+ ackermann(n, m));
 
System.exit(1);
 
}
 
}//(C) Ulli
 
  
 +
* '''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
  
 
== Übungsaufgaben ==
 
== Übungsaufgaben ==
Zeile 177: Zeile 209:
 
* Beispiele dann Abtippen und ausprobieren
 
* Beispiele dann Abtippen und ausprobieren
 
* Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)
 
* Sie sollen Nachfragen, wenn sie was anderes hatten (oder sowas)
 +
* Verschiedene Eingabewerte
 +
* erste Endlosschleife
 +
* Fehler für die eingeführten elemente
 +
 +
[[Benutzer:Martin_Häcker/Java_Kurs | <- Zurück zur Übersicht]]

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