Soll und kann ich mit Java programmieren? Arbeitsthesen

Werbung
Arbeitsthesen, Preconditions
Kolloquium Informatik und Unterricht, Wintersemester 2007
Programmieren
• Gibt eine fundamentale Einsicht in die Kerninformatik
• Ist nicht ICT, Programmierkenntnisse sind für die
meisten Computerbenützer unnötig
• Ist für viele Webdesigner, Mathematiker, Naturwissenschafter und Ingenieure notwendig
• Entwickelt ganz allgemein die intellektuellen
Fähigkeiten und das Problemlösungsverhalten
• Fördert die Phantasie und macht Spass
• Gehört in den Unterricht, insbesondere im Gymnasium
(Ergänzungsfach, Grundlagenfach?)
Soll und kann ich mit Java
programmieren?
Aegidius Plüss, Bern
www.aplu.ch
Original: www.aplu.ch/kolloquium
Kolloquium Informatik und Unterricht
Wintersemester 2007
1
Kolloquium Informatik und Unterricht
Inhalt
Wintersemester 2007
2
Inhalt
1. Teil: Tabula rasa
•
•
4. Teil: Eignet sich Java als Unterrichts- und
Einsteigersprache?
Wir beginnen von ganz vorne, ohne Vorurteile
Wir sind "erblich" (von unseren eigenen Lehrpersonen) unbelastet
•
•
•
•
•
2. Teil: Programmier-Paradigmen
•
•
•
•
Was ist Programmieren?
Prozedurale Programmierung, Kapselung
Datentypen, streng typisierte Sprachen
Formularorientierte Programmierung
3. Teil: To OOP or not to OOP, that is the question
•
•
5. Teil: Einstiegsvarianten
Falls GUI, keine Alternative!
Optimales methodisches Vorgehen:
•
•
Wahl der IDE
Anatomie eines Java-Programms
OOP in fünf Minuten
Vermeidung von Vorwärtsbezügen
Didaktische Klassenbibliotheken
6. Teil: Sample Session: OOP mit Java
Zuerst ohne OOP, dann OOP hinzufügen
OOP von Anfang an
7. Teil: Diskussion (hoffentlich heftiger Protest)
Kolloquium Informatik und Unterricht
Wintersemester 2007
3
Kolloquium Informatik und Unterricht
Wintersemester 2007
4
1
1. Teil: Tabula rasa
Was ist Programmieren?
• Die Informatik hat zwar eine historische Dimension.
Lehrplan und Methodik eines Programmierkurses snd
nicht daran zu orientieren (Hinweise genügen)
• Programmieren bezeichnet die Tätigkeit, Computerprogramme (Software) zu erstellen (sehr pragmatisch,
was sind Computerprogramme?)
• Die meisten Lehrpersonen sind durch ihren eigenen
Wertegang, ihre Kenntnisse und ihre Vorlieben
vorbelastet (Hardware-Plattform, Einsatzgebiet, Betriebssystem, Entwicklungsumgebung, Programmiersprache). Junge Menschen sind unbelastet
• Programmieren ist die Umsetzung von Algorithmen in
eine computerlesbare Form (etwas vornehm, der meiste
Code besteht nicht aus Algorithmen, was sind
Algorithmen?)
• Programmieren ist eine Kunst...
• Computer sind ausschliesslich sequentielle Maschinen.
Diese Vorstellung ist falsch: Ereignisgesteuerte Programme, Threads, Client-Server-Systeme
Kolloquium Informatik und Unterricht
Wintersemester 2007
5
2. Teil: Programmier-Paradigmen
Kolloquium Informatik und Unterricht
Wintersemester 2007
6
Prozedurale Programmierung, Kapselung
Prozedurale Programmierung, Kapselung
• Programme sollten lediglich die drei Grundstrukturen
Sequenz, Selektion, Iteration aufweisen (Böhm, Jacopini,
Interface
(Loch in Schutzhülle)
Kapsel (Haut schützt)
1966)
• Programme sollten aus funktionalen Blöcken (klassisch:
Prozeduren, Funktionen, Methoden, Subroutinen;
modern: Module, Objekte) bestehen, deren Schnittstelle
klar beschrieben wird, und die interne Daten vor dem
Zugriff schützen (Geheimnisprinzip, Kapselung). Sie
sollten möglichst keine Veränderung an äusseren Daten
vornehmen (keine Seiteneffekte)
• Wichtige Begriffe: globale und lokale Variable, formale
und aktuelle Parameter, Werte- und Variablenparameter
Methoden (Würmer)
Daten (Fruchtfleisch, Kerne)
Dominiert das Programmieren seit 50 Jahren bis zum heutigen Tag!
Kolloquium Informatik und Unterricht
Wintersemester 2007
7
Kolloquium Informatik und Unterricht
Wintersemester 2007
8
2
Beispiel: PHP
PHP, einige Fragen...
<?php
function getMax($a, $b)
{
if ($a > $b)
return $a;
return $b;
}
• Ist PHP weit verbreitet? Brauchst Du es?
• Ist PHP einfach? (Ist Java, C++, usw. einfach?)
• Ist PHP wesentlich anders als andere prozedurale
Programmiersprachen (Syntax, Semantik)?
• Ist PHP eine universelle höhere Programmiersprache?
• Ist es gut, dass man erst dann mit dem Erlernen einer
Programmiersprache beginnt, wenn man für eine
Website PHP braucht?
• Wieviel Zeit verbratet man mit dummen Fehlern in PHP,
wenn man keine Ahnung vom Programmieren hat?
• Umgekehrt: Wie schnell hat man PHP im Griff, wenn
man vorher die Grundprinzipien des Programmierens
kennt?
"PHP ist ein performanter Hack!"
Anwendungslogik
if (isset($_GET["Submit"]))
{
$a = $_GET["ta"];
$b = $_GET["tb"];
$result = getMax($a, $b);
}
?>
<html><body>
Präsentationslogik
<form name = "form1" method = "get">
<p>1. Zahl: <input type="text" name = "ta" value = "<? echo $value1 ?>"></p>
<p>2. Zahl: <input type="text" name = "tb" value = "<? echo $value2 ?>"></p>
<p>Resultat: <input type="text" name = "tr" value = "<? echo $result ?>" ></p>
<p><input type="submit" name = "Submit" value = "Submit"> </p>
</form></body></html>
Kolloquium Informatik und Unterricht
Wintersemester 2007
9
Datentypen, streng typisierte Sprachen
Nicht typisierte Sprachen
Pascal (Familie)
C/C++
Java
VB.NET
PHP
Python
VBScript
Kolloquium Informatik und Unterricht
10
Vorteile
Typisierte Sprachen
Nicht typisierte Sprachen
•
•
•
•
Häufige Programmierfehler
werden zur Compilationszeit
angezeigt (sind Syntaxfehler)
Datentypen spielen
insbesondere in der OOP eine
fundamentale Rolle (Klassen
sind Datentypen)
Für robuste, fehlertolerante
System geeignet
•
•
Für den schnellen Einstieg und das
schnelles Prototyping gut geeignet
Meist Interpreter, einzelne
Anweisungen können als Test
ausgeführt werden
Als Zusatz zu bestehenden
Systemen geeignet:
Scriptsprachen, Websprachen
Nachteile
•
•
Wintersemester 2007
Wintersemester 2007
Typisierte versus nicht typisierte Sprachen
• Streng typisiert:
Eine Variable besitzt einen zur Compilationszeit
festgelegten Datentyp. Es können ihr nur Werte von
diesem Datentyp zugewiesen werden
• Nicht typisiert:
Eine Variable erhält zu Laufzeit den Datentyp des
zugewiesenen Werts
Streng typisierte Sprachen
Kolloquium Informatik und Unterricht
11
Aufwändiger, das Typcasting
(Umwandlung von Typen) ist
anspruchsvoll
Am Anfang etwas gewöhnungsbedürftig, da in der Mathematik
keine Typenbindung von Variablen
Kolloquium Informatik und Unterricht
•
•
Viele dumme, aber auch heikle
Programmierfehler werden erst zu
Laufzeit (oder nie) gemerkt
Der Datentyp ist zentraler Begriff
einer Programmiersprache. Er wird
als sekundär betrachtet
Wintersemester 2007
12
3
Formularorientierte Programmierung
Beispiel: VB.NET
= "neues" Paradigma?
Installation von Visual Studio Express gemäss Anhang.
VB Sample Session:
• Visual Basic verdankt seinen Erfolg:
Private Sub
Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim value1 As String
Dim value2 As String
Dim a As Integer
Dim b As Integer
value1 = TextBox1.Text
value2 = TextBox2.Text
a = CInt(value1)
b = CInt(value2)
TextBox3.Text = CStr(Ggt(a, b))
End Sub
• Nachfolger altgedienter Interpreter (Turbo Basic, QuickBasic,
Comodore Basic, usw.)
• Formularbasierte Entwicklungsumgebung zur schnellen
interaktiven Erstellung von GUI-Applikationen
• Integration in die .NET-Sprachen, zusammen mit C++ und C#
• Gratis-Version der Entwicklungsumgebung "Visual Studio
Express"
• Formularorientierte Programmierung ist
• eventgesteuert, d.h. gemäss der Programmstruktur:
"wann immer das Ereignis eintritt, dann tue..."
• objektorientiert: GUI-Elemente besitzen
Private Function Ggt(ByVal a As Integer, ByVal b As Integer) As Integer
If b = 0 Then
Return a
End If
Return Ggt(b, a Mod b)
End Function
• Eigenschaften (Attribute, Properties, Instanzvariablen)
• Verhalten (Subroutines, Methoden, Prozeduren, Funktionen, Operationen)
Kolloquium Informatik und Unterricht
Wintersemester 2007
13
Visual Basic, einige Fragen
Kolloquium Informatik und Unterricht
Wintersemester 2007
14
3. Teil: To OOP or not to OOP
Shakespeare's Hamlet:
•
•
•
•
•
Ist VB weit verbreitet? (MS-Windows only)
Ist VB einfach?
Ist die Syntax von VB modern?
Ist VB eine volle objektorientierte Programmiersprache?
Wie schnell kann man unter VB animierte Grafik machen
(z.B. Julia-Menge)?
• Ist in der Ausbildung die Ausrichtung auf formularorientierte Programmierung statthaft? Wo sind die
klassischen sequentiellen Abläufe?
To be, or not to be: that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles,
And by opposing end them? To die: to sleep;
No more
• OOP gehört zu den grundlegenden Informatikkenntnissen
• Falls GUI- und Fensterprogrammierung, ist OOP eine
Notwendigkeit!
• Hybride Sprache: zuerst ohne OOP/GUI, dann hinzufügen?
(Typisch C/C++)
• Zwei Sprachen: zuerst Pascal, LOGO, Scriptsprache, dann
OOP/GUI?
Dieselben Fragen könnte man bezüglich Delphi/Lazarus stellen...
(mit etwas unterschiedlichen Antworten)
Kolloquium Informatik und Unterricht
Wintersemester 2007
Sein oder Nichtsein; das ist hier die Frage:
Obs edler im Gemüt, die Pfeil und Schleudern
Des wütenden Geschicks erdulden oder,
Sich waffnend gegen eine See von Plagen,
Durch Widerstand sie enden? Sterben - schlafen
Nichts weiter!
15
Kolloquium Informatik und Unterricht
Wintersemester 2007
16
4
4. Teil: Eignet sich Java im Unterricht?
Wahl der Entwicklungsumgebung (IDE)
• Die IDE ist die erste und dann die tägliche Berührung
mit der Programmiersprache. Besonders geeignet:
These:
Java ist eine Programmiersprache, die den Ansprüchen
einer modernen Unterrichtssprache gerecht wird, und
dies aus folgenden Gründen:
•
•
•
•
• Setzt man didaktische Programmbibliotheken ein, so ist
der Einstieg sanft und motivierend (Turtle, Grafikfenster)
Ja, Sie können sich an Java heran wagen...
• Meine bevorzugte IDE: NetBeans
• Java ist die Programmiersprache mit der grössten Zahl
von Lehrbüchern und Online-Beiträgen
• Java wird weltweit an Lehrinstitutionen am häufigsten
eingesetzt
• Java ist auf alle üblichen Plattformen (Mac, Windows,
Linux) gleichartig einsetzbar (sogar gleiche IDE)
Kolloquium Informatik und Unterricht
Wintersemester 2007
•
•
•
•
•
•
17
kostenlos
mehrere Sprachversionen (auch Deutsch)
mehrere Plattformen (Linux, Mac, Windows)
intelligenter Editor (automatische Syntaxprüfung)
hervorragender GUI-Builder
Kurzanleitungen: www.netbeans.org, www.aplu.ch/forum
Kolloquium Informatik und Unterricht
Online-Editor (www.java-online.ch)
Wintersemester 2007
// MyTurtle.java
Kommentar
Bibliotheksimport
import ch.aplu.turtle.*;
Klassendeklaration
class MyTurtle
{
Turtle t = new Turtle();
Instanzierung der Turtle
MyTurtle()
{
• auch zum Selbststudium
• Quellcode kann im Editor
übernommen und ausgeführt werden
Konstruktor
Methodenblock
}
• Entwicklungsumgebung für Lego-Robotik
(Edit/Compile/Download)
• Entwicklungsumgebung für Handy-Programmierung
(J2ME)
Wintersemester 2007
18
Anatomie eines Java-Programms
• Praktisch kein Installationsaufwand (nur JRE)
• Basiert auf Applets und
WebStart
• Integrierte, im Unterricht erprobte Lernprogramme
Kolloquium Informatik und Unterricht
NetBeans (www.netbeans.org)
Eclipse (www.netbeans.org)
JCreator (www.jcreator.com)
Online-Editor PHBern (www.java-online.ch)
public static void main(String[] args)
{
new MyTurtle();
}
Entry point (main)
Erzeugung einer
Applikationsinstanz
}
19
Kolloquium Informatik und Unterricht
Wintersemester 2007
20
5
Paradigmenwechsel
Tue es nicht!
• Man kann zwar in Java auch (fast) prozedural (ohne
OOP) programmieren, indem man den Code in main()
schreibt und alle Methoden static macht:
Ein Programm ist nicht Aneinanderreihung von Code
10
20
30
40
50
60
INPUT A
INPUT B
IF A > B PRINT 'A IST GROESSER ALS B'
GOTO 60
PRINT ‘A IST KLEINER ALS B’
END
class TueEsNicht
{
static int ggt(int a, int b)
{
if (b == 0)
return a;
return ggt(b, a % b);
}
sondern:
Ein Programm ist ein Objekt! (Instanz der Applikationsklasse)
class MyProg
{
main()
{
new MyProg()
}
}
public static void main(String[] args)
{
System.out.println(ggt(15, 12));
}
}
Kolloquium Informatik und Unterricht
Wintersemester 2007
21
Kolloquium Informatik und Unterricht
Tue es so!
int ggt(int a, int b)
{
if (b == 0)
return a;
return ggt(b, a % b);
}
public static void main(String[] args)
{
new TueEsSo();
}
22
OOP in 5 Minuten: Kapselung in Klassen
import ch.aplu.util.*;
class TueEsSo
{
TueEsSo()
{
Console c = new Console();
c.print("a: "); int a = c.readInt();
c.print("b: "); int b = c.readInt();
c.print("Der Ggt ist " + ggt(a, b));
}
Wintersemester 2007
// ------------------------ Klasse Rechteck -----------------class Rechte
{
double l;
double b;
Konstruktor
Konstruktor
(Initialisierung)
public Rechteck(double laenge, double breite)
{
l = laenge;
b = breite;
}
Consolefenster
Methoden des
Consolefensters
Methode
(Verhalten)
public void zeige(GPanel p, double xMitte, double yMitte)
{
p.move(xMitte, yMitte);
p.rectangle(l, b);
}
Methode
(nicht statisch)
public void fuelle(GPanel p, double xMitte, double yMitte)
{
p.move(xMitte, yMitte);
p.color(Color.red);
p.fillRectangle(l, b);
}
Applikationsinstanz
erzeugen
Instanzvariablen
(Eigenschaften)
Methode
(Verhalten)
}
}
Kolloquium Informatik und Unterricht
Wintersemester 2007
23
Kolloquium Informatik und Unterricht
Wintersemester 2007
24
6
OOP in 5 Minuten: Vererbung
// ------------------------ Klasse Quadrat ------------------class Quadrat extends Rechteck
{
public Quadrat(double seitenlaenge)
{
super(seitenlaenge, seitenlaenge);
}
Klassendeklaration
(abgeleitete Klasse)
public void fuelle(GPanel p, double xMitte, double yMitte)
{
p.move(xMitte, yMitte);
p.color(Color.green);
UML-Diagramm:
p.fillRectangle(l, b);
}
Methode
(überschrieben)
public class App
{
public App()
{
GPanel p = new GPanel(0, 10, 0, 10);
Konstruktor
Initialisierung der
Basisklasse
Rechteck r1 = new Rechteck(4, 2);
Quadrat s1 = new Quadrat(3);
Rechteck r2 = new Rechteck(1, 8);
Vector<Rechteck> v = new Vector<Rechteck>();
v.add(r1);
v.add(s1);
v.add(r2);
Klassenhierarchie
}
OOP in fünf Minuten: Polymorphie
Basisklasse
(Mutter)
Ein Quadrat IST EIN Rechteck,
kennt daher zeige()
Abgeleitete Klasse
(Kind)
}
Applikationsklasse
Instanzierung GPanel
Instanzierung Objekte
Container-Klasse
Elemente hinzufügen
for (Rechteck re : v)
re.zeige(p, 2.5, 5);
Elemente durchlaufen
for (Rechteck re : v)
re.fuelle(p, 7.5, 5);
Elemente durchlaufen
Es wird das zum Datentyp gehörende fuelle() aufgerufen
public static void main(String[] args)
{
new App();
}
Instanzierung der
Applikationsklasse
}
Kolloquium Informatik und Unterricht
Wintersemester 2007
25
Ist der Mathematikunterricht einfacher?
Kolloquium Informatik und Unterricht
Wintersemester 2007
26
Vermeidung von Vorwärtsbezügen
• Die Kunst des Unterrichtens besteht darin, den Unterricht in angepasst kleine Lernschritte zu strukturieren,
dass der Lernende weder unter- noch überfordert wird.
• Neue Begriffe sollen unter Berücksichtigung des gegenwärtigen Wissensstandes und der Persönlichkeit des
Lernenden eingeführt werden und müssen von ihm logisch nachvollziehbar sein.
Nichts ist umsonst:
•
•
•
•
•
Kolloquium Informatik und Unterricht
Hochsprung
Geigenspiel
Elektrodynamik
...
Programmieren
• Zu einem systematisch aufgebauten Unterricht gehört
der weitgehende Verzicht auf Unerklärbares und auf
Hinweise, dass ein Verständnis erst später möglich sei.
Freude herrscht, wenn
Widerstand gebrochen!
Wintersemester 2007
27
Kolloquium Informatik und Unterricht
Wintersemester 2007
28
7
Java's Schwächen als Unterrichtssprache
Didaktische Klassenbibliotheken
• Ohne didaktische Klassenbibliotheken ist der Einstieg in
Java (zu?) schwierig
• Besonders geeignet:
• Das ominöse Main:
public static void main(String[] args)
• Variablenkonzept:
• Basistypen: int, double, usw. sind keine Objekte
• Referenztypen: Variablendeklaration erzeugt kein Objekt, sondern
nur eine Referenz auf ein Objekt. Diese werden ausschliesslich mit
new erzeugt:
Turtle t;
// Variablendeklartion
t = new Turtle(); // Objekterzeugung und Zuweisung
• Es gibt nur Werte- aber keine Variablenparameter
• Es gibt keine Zeiger, denn alle Referenzen sind bereits Zeiger
Kolloquium Informatik und Unterricht
Wintersemester 2007
29
–
–
–
–
Turtle (Mehrere Turtles im gleichen Fenster)
Grafikfenster mit Benützerkoordinaten (GPanel)
Konsolenfenster für Ein- und Ausgabe (Console)
Hilfsklassen: HiResTimer, SoundPlayer, JRunner
• Beim Einstieg kann weitgehend auf den OOPKlassenentwurf (Vererbung, Polymorphie) verzichtet
werden
• Für die Programmierung klassischer Algorithmen
geeignet. Beispielprogramme aus C/C++, Basic und
Pascal können in der Regel leicht übernommen werden
Kolloquium Informatik und Unterricht
Drei Arten der Komplexitätsreduktion
• "Hello World" ausschliesslich mit dem Java API
• konsolenorientiert
• formularorientiert (GUI-Builder)
• Applets
• Web-Programmierung (JSP)
• Java exemplarisch:
• C++/Champ (enthält Multiple Turtle, CPWindow)
• Logo (turtlebasiert!)
• Kara (turtlebasiert!)
•
•
•
•
•
• Lernsprachen sind eine alte Tradition der ETH Zürich,
gemäss der Lebensphilosophie von N. Wirth: "Gibt es
keine Programmiersprache, welche meinen Vorstellungen entspricht, so erfinde ich sie"
Wintersemester 2007
30
5. Teil: Java-Einstiegsvarianten
• Klassenbibliotheken verdecken zwar eine Menge an
kompliziertem Code, es werden aber nicht alle
Fallgruben entfernt, sondern der Lernende muss sich in
der harten Wirklichkeit zurechtfinden
• Glashaus-Systeme: der Lernende befindet sich in einer
"geschützten Umgebung". Beispiele:
Kolloquium Informatik und Unterricht
Wintersemester 2007
31
Turtle (Logo orientiert)
Console (traditionell)
GPanel ("ein Bild sagt mehr als tausend Worte")
Lejos (robotikorientiert, Java für Lego Mindstorm)
J2ME (handyorientiert)
Kolloquium Informatik und Unterricht
Wintersemester 2007
32
8
Sample Session: OOP mit Java
Weihnachtssterne
• Top-Down-Design
• Sterne sind Objekte mit
• Eigenschaften (Grösse, Farbe, usw.):
Instanzvariablen
• Verhalten ("erscheine an diesem Ort"):
Methoden
• Es lassen sich beliebig viele
Sterne (Objekte) erzeugen
• Zwei Programmkonzepte:
• sequentieller Code (klassisch)
• formularorientiert (eventgesteuert)
Let's do it (Learning by Doing)
Kolloquium Informatik und Unterricht
Wintersemester 2007
33
9
Herunterladen