grundlagen des internets - · pdf fileleitidee • probleme beim einstieg in die...
TRANSCRIPT
Einführung in die Programmierungmit Delphi
23.04.2009Helmut Paulus Max-Planck-Gymnasium
Trier
Leitidee
• Probleme beim Einstieg in die Programmierung mit Delphi
– Auch einfachste Programme sind zunächst schwer zu durchschauen.
– Das Zusammenspiel zwischen GUI-Objekten und algorithmischen Elementen ist unklar.
• Vorschlag: Didaktisches Konzept
– Von Anfang an objektbasierte Erklärungsmodelle benutzen, um das Verständnis der recht komplexen Delphi-Programme zu erleichtern.
• Vorteile
– Die "Logik der Programme" wird vereinfacht dargestellt und somit der Quelltext strukturell geordnet.
– Vorbereitung wichtiger Konzepte der objektorientierten Modellierung und Programmierung, die später vertieft werden.
2
Die Grundideen und die Terminologie der Objektorientierung von Anfang an korrekt und konsistent verwendet werden.
Einstieg in die Programmierung
• Motivation
– Vergleich statische Webseiten mit Schülern bekannter Programmen
– Webseiten sind statisch
– Programme haben ein dynamisches Verhalten, das durch das Grundschema"Eingabe - Verarbeitung - Ausgabe “
• Schwerpunkte EVA-Grundschema Objekt-Terminologie Ereignisverarbeitung Aufbau eines Programms
• Unterrichtsziele
Aufbau von (Delphi-) Programme verstehen
Systematische Programmentwicklung
3
Experimente mit vorgegebenen Programmen
• Beispiele Tag-Nacht-Programm
(siehe auch: Damann, Wemßen: Objektorientierte Programmierung mit Delphi, Band 1. Klett Verlag 2001.) …
• Erkundung der Entwicklungsumgebung (Delphi-IDE)– Laden und Starten eines Programms,– Änderungen am Formular
Verschieben von Button-Komponenten und Image-Komponenten, Veränderungen mit dem Objektinspektor (z. B. Farbeinstellungen).
• Einführung geeigneter Sprechweisen– Graphische Benutzungsoberflächen (GUI)– Objekt-Terminologie (Objekt, Klasse, Attribut, Attributwert) zu benutzen
Vergleiche: Materialien zur Weiterbildung
– evtl. Programmverhalten mit Konzepten der zustandsbasierten Modellierung beschreiben: Zustände (Tag / Nacht) - Attributwerte von Objekten Zustandsänderungen durch Ereignisse (Button ... Drücken)
• Analyse des Quelltextes– Identifizierung der Bereiche, die für das beobachtete Verhalten verantwortlich sind – Experimente mit kleineren Veränderungen belegen diese Vermutungen
(z. B. Attributwerte). Deklarationsteil vorerst unverändert
Analyse eines einfachen vorgegebenen Delphi-Programms
4
Graphische Benutzungsoberfläche
5
Das Anwendungsfenster enthält eine Vielzahl von Objekten.(Schaltflächen, Bilder, Eingabefelder …)
Tag/Nacht
GUI-Objekte
Aufbau einer Benutzungsoberfläche mit Hilfe von so genannten GUI-ObjektenGUI : Graphical User Interface
6
GUI-Objekt
GUI-Objekt
GUI-Objekt
GUI-Objekt
GUI-Objekt
Mit Hilfe des Objektinspektors kann man die Eigenschaften der Objekte einsehen und verändern.
GUI-Objekte
GUI-Objekte haben einen Namen und werden einer Klasse zugeordnet. Die Klasse legt dabei den Typ des Objekts fest.
7
Der Objektinspektor zeigt Name und Klasse des ausgewählten Objekts an.
PAnzeige : TPanel
BtTag : TButton
ImRudi: TImage
BtHeiss : TButton
GUI : TGUI
Anwendungs-fenster
Zustand eines Objektes
Objekte bestehen aus einer Vielzahl von Attributen (Eigenschaften). Ihre Werte beschreiben den aktuellen Zustand des Objekt.
8
Name
Attributwerte
Klasse
Attribut
Objekthierarchie
Das Formular (Fenster) GUI verwaltet alle anderen GUI-Objekte.
9
Die Formulardatei uGUI.dfm speichert die Attributwerte der Objekte.
object GUI: TGUI
Left = 476
Top = 417
Width = 396
Height = 237
Caption = 'Rudi läuft'
…
object Btlauf: TButton
Left = 96
Top = 160
Width = 75
Height = 25
Caption = 'laufe‘
OnClick = BtlaufClick
end
object ImRudi: TImage
Left = 24
Top = 72
Width = 41
Height = 41
Picture.Data = {…}
end
…
end
Das Formular GUI enthält alle anderen Objekte als
Unterobjekte
Objektzustände verändern
10
PAnzeige.Caption := 'Mir ist heiß!!!';
Wertzuweisung:
Attributwerte können mit Hilfe von Wertzuweisungen verändert werden.
PAnzeige : TPanel
Caption = ‘Rudi läuft‘
PAnzeige : TPanel
Caption = ‘Mir ist heiß‘
Objektzustand vorher: Objektzustand nachher:
Ereignisgesteuerte Veränderung
Ein Ereignis ist eine Zustandsänderung in einem Objekt, die von Interesse ist und daher mit einer Prozedur zur Ereignisverarbeitung verknüpft werden kann. (K. Merkert)
Klick auf den Button mit der Aufschrift "Tag" löst das Ereignis „BtTag.onClick" aus
procedure TGUI.BtTagClick(Sender: TObject);
begin
GUI.Color := clWhite;
PAnzeige.Caption := ‘Rudi läuft';
end;
EreignisverarbeitungEreignis
Delphi-Quelltext
type
TGUI = class(TForm)
ImRudi: TImage;
Btlauf: TButton;
Bterhitzt: TButton;
P_Anzeige: TPanel;
BtTag: TButton;
BtNacht: TButton;
procedure BtlaufClick(Sender: TObject);
procedure BterhitztClick(Sender: TObject);
procedure BtTagClick(Sender: TObject);
procedure BtNachtClick(Sender: TObject);
private { Private-Deklarationen}
public { Public-Deklarationen}
end;
var GUI: TGUI;
Analyse eines einfachen vorgegebenen Delphi-Programms
11
Deklaration eines Formulars
mit all seinen GUI-Objekten
Delphi-Quelltext
implementation
{$R *.DFM}
procedure TGUI.Bt_erhitztClick(Sender: TObject);
begin
Im_Rudi.Picture.LoadFromFile(‘Laeufer3.ico');
PAnzeige.Caption := 'Mir ist heiß!';
end;
procedure TGUI.Bt_TagClick(Sender: TObject);
begin
GUI.Color := clWhite;
end;
procedure TGUI.Bt_NachtClick(Sender: TObject);
begin
GUI.Color := clBlack;
end;
12
Implementierungder Ereignis-verarbeitung
Analyse eines einfachen vorgegebenen Delphi-Programms
Ein erstes Programmierprojekt
• Anwendung der zuvor gewonnenen Erkenntnisse in einem neuen Kontext
• Bedienung der Entwicklungsumgebung
– Neues Projekt erstellen, Abspeichern in einem neuen Ordner, ...
– Dateien eines Delphi-Projekts (Kurze Betrachtung)
Delphi-Projekte haben an eine komplexe Struktur.
13
Von Beginn an Regeln beachten, um Probleme mit dieser Komplexität zu vermeiden.
• Für jedes Projekt einen eigenen Projektordner anlegen!
• Projektdatei und Formularunit sofort mit geeigneten Namen speichern!
• Namenskonvention für GUI-Objekte verbindlich vereinbaren!
• Vereinbarungen zur Strukturierung des Quelltextes treffen! Z. B. Styleguides. (http://www.delphi-treff.de/delphi-styleguide/)
Nützliche Konventionen:
Beispiel: Simulation einer Ampel
Projekt: Simulation einer Ampel
14
Zur Darstellung der Ampeln stehen Bilder zur Verfügung.
In jeder Ampelphase wird nur ein Bild angezeigt , die anderen sind nicht sichtbar.
Mit Hilfe von Schaltflächen können die Phasen gewechselt werden.
procedure TGUI.Bt_RotClick(Sender: TObject);
begin
ImRot.Visible := true;
ImRotGelb.Visible := false;
ImGruen.Visible := false;
ImGelb.Visible := false;
end;
Ereignisbearbeitung:Ereignis:
Schaltfläche BtRot wird gedrückt
GUI-Objekte:GUI : TGUIImRot : TImage…BtRot : TButton…
Dateien:uGUI.pas – FormularunitAmpel.dpr – ProjektdateiAmpel.exe – Ausführbares
Programm
Einführung des Variablenkonzepts
• Einführung eines einfaches Verarbeitungsmodells (EVA) Lokale Variablen als Zwischenspeicher:
– Eingabe: der Variable wird der aktuelle Attributwert zugewiesen
– Verarbeitung: Änderung des Variablenwerts
– Ausgabe: dem Attribut wird der neue Variablenwert zugewiesen
• Zur Implementierung müssen folgende Punkte geklärt werden: – Wo und wie wird die Variable deklariert?
– Was sind Datentypen? Wozu dienen sie? Welche gibt es?
– Wie erfolgen die Typumwandlung?• Zeichenkette Zahlentyp
• Zahlentyp Zeichenkette
15
Weitere einfache Projektbeispiele:
Einfache Ein- / Ausgabe-Situationen wie
Body-Mass-Index, Währungsumrechner, Maßeinheiten-Umrechner, Promille-Rechner, einfacher Rechner …
Erweiterung des Programms Tag/Nacht: Rudi läuft über den Bildschirm
EVA-Prinzip
• GUI-Objekte sind dazu da um Daten anzuzeigen bzw. zu kontrollieren. Dazu speichern sie sie natürlich auch. Die doppelte Buchführung erscheint zunächst wenig sinnvoll. Im Hinblick auf spätere Vertiefungen sollten von Anfang an eine GUI-Objekte und Datenmodell getrennt werden.
16
procedure TGUI.BtlaufeClick(Sender: TObject);
var
xPos : integer;
begin
//Eingabe - Übernahme der Anzeige
xPos := ImRudi.left;
//Verarbeitung der Daten
xPos := xPos + 5;
//Ausgabe – Aktualisierung der Anzeige
ImRudi.left := xPos;
end;
Viele Eingabe – Verarbeitung – Ausgabe-Systemekönnen auf diese Weise mit Hilfe von lokalen Variablen realisiert werden.
Rudi läuft über den Bildschirm:
Mögl. Erweiterungen:• Mehrere Läufer• Wettrennen ( Schrittweite zufallsgesteuert, Ablauf Timergesteuert)
Die lokale Variable xPos als Zwischenspeicher der aktuellen Position.Sie existiert nur während der Ausführung der Prozedur.
Entwicklung eines einfachen Programms
17
BMI berechnen
procedure TGUI.BtberechnenClick(Sender:
TObject);
var
Gewicht, Groesse, BMI : real;
begin
//Eingabe
Gewicht := StrToFloat(EdGewicht.Text);
Groesse := StrToFloat(EdGroesse.Text);
//Verarbeitung
BMI := Gewicht/Groesse/Groesse;
//Ausgabe
PAnzeige.Caption := FloatToStr(BMI);
end;
Anmerkungen:
procedure TGUI.BtloeschenClick(Sender:
TObject);
begin
EdGewicht.Clear;
EdGroesse.Clear;
PAnzeige.Caption := '';
end;
Eingabefelder zurücksetzen
Objektmethode
• Zahlentypen• Typumwandungsfunktion• GUI-Objekte haben auch Fähigkeiten
(Methoden)?
Einführung der Kontrollstruktur "Fallunterscheidung"
• Logik mit Hilfe eines Struktogramms erarbeiten
• Ablauf mit Flussdiagrammveranschaulichen
• Syntaktische Details und Implementierung klären
18
Beim Tag-Nacht-Programm sollen die Tage gezählt werden, wenn ein Übergang von Nacht auf Tag erfolgt. Die Tageszahl soll in einem Hinweis-Panel angezeigt werden.
Erarbeitungsschritte:
Werkzeuge:Structorizer: http://structorizer.fisch.lu/index.php
StruktEd:
PAPDesigner: http://www.gso-koeln.de/papdesigner/Hauptseite.html
Implementierung
Erweiterung:
• zweiseitige Fallunterscheidung
• Schachtelung von Fallunterscheidungen
Beispiele:
• Rudi läuft nur tagsüber
• BMI-Erweiterung (geschlechts- und altersabhängige Rückmeldung)
• Ampelschaltung mit nur einem Schalter / Ampel mit Shapes
• Schaltjahresprüfung
19
procedure TGUI.BtTagClick(Sender: TObject);
var
TagZahl : integer;
begin
if GUI.Color = clBlack then
begin
TagZahl := StrToInt(PTagAnzeige.Caption);
TagZahl := TagZahl + 1;
PTagAnzeige.Caption := IntToStr(tagzahl);
GUI.Color := clWhite;
Caption := 'Tag';
end;
end;
Startwert für die Tageszahl im Objektinspektor einstellen
Ein erstes Programmierprojekt
Durchführung:
• Anforderungen in einem Pflichtenheft genau spezifizieren
• Ergebnisse werden parallel zur Erstellung dokumentieren
– Kommentierte Diagramme (NSD / PAP)
– Beschreibung der Algorithmen
Gütekriterien
• Benutzerfreundlichkeit achten
• Verständlichkeit des Quelltextes
20
Entwicklung eines interaktives Spiels
Ziele:
• Anwendung des bisher Gelernten im größeren Zusammenhang
• Erste Erfahrungen mit systematischer Softwareentwicklung
(vgl. etwa Einführung in die Software-Entwicklung mit Delphi - Teil 1)
Projekt 17 und 4
21
Aufgabe:
Es ist ein Programm zu entwickeln, das das bekannte Kartenspiel simuliert.
Anforderungen1. Spielkarten werden durch einen Würfel ersetzt
(Wertbereich [1;...;6]).
2. Es werden Zahlen gewürfelt und aufsummiert. Der Spieler kann nach jedem Spielzug entscheiden, ob er aufhört oder weiter spielen will.
3. Ist die Summe größer als 21, so hat der Spieler verloren. Hört der Spieler bei einer Summe kleiner oder gleich 21 auf, wird noch eine Zahl gewürfelt.Ist die neue Summe immer noch kleiner oder gleich 21, so hat der Spieler verloren, andernfalls gewonnen.
4. Alle Ausgaben werden gelöscht, wenn ein neues Spiel
begonnen wird. (Benutzerfreundlichkeit)
Prototyp:
Problem:Eingabe der Spieldaten in lokale Variablen aus den GUI-Objekten ist ineffektiv!!!
Lokale und globale Variablen
• Realisierung eines "internen Datenmodell“ mit globalen Variablen (als private Attribute des Formulars)
• Es stellt die Vorstufe zu eigenständig agierenden Objekten dar.
• Weitere Übungen ergeben sich im Kontext zustandsbasierter Modellierung, z. B. durch Einführung einer Zustandsvariablen für die einzelnen Spielphasen.
22
Bei komplexeren Systemen ist es günstig, ein von der GUI getrenntes Datenmodell zu entwickeln.
typeTGUI = class(TForm)
{Steuerelemente} procedure BtNeuClick(Sender: TObject);procedure BtZahlClick(Sender: TObject);procedure BtSpielbeendenClick(Sender: TObject);
private{ Private-Deklarationen}Punkte : integer; Ergebnis : string; public{ Public-Deklarationen}
end;
Internes Datenmodell
procedure TGUI.BtZahlClick (Sender: TObject);var
Zufall : integer;begin
//Eingabe Zufall := random(6) + 1;//Verarbeitung Punkte := Punkte + Zufall;…
end;
Lokale Variablen (temporäre Daten)
Quelltext
Projekt Zahlenraten
Aufgabe:
Es ist ein Programm zu entwickeln, das ein Zahlenratespiel simuliert.
Anforderungen:
1. Der Computer bestimmt eine Zufallszahl (1..100), die der Spieler zu erraten hat.
2. Der Spieler hat er beliebig viele Versuche.
3. Nach jeder Zahleneingabe wird angegeben, ob die Zahl zu groß oder zu klein ist.
4. Hat der Spieler die Zahl erraten, so wird die Anzahl der Versuche und eine Bewertung ausgegeben.
5. Alle Ausgaben werden gelöscht, wenn ein neues Spiel begonnen wird. (Benutzerfreundlichkeit)
23
Prototyp:
Implementierung
24
typeTGUI = class(TForm)
… BtEingabe : TButton;BtNeu : TButton;
…procedure TGUI.BtEingabeClick(Sender: TObject);
private{ Private-Deklarationen}RateZahl : integer; Versuchszahl : integer;
public{ Public-Deklarationen}
end;
Auswertung einer ZahleneingabeInternes Spieldatenmodell
Zahlen raten
Testzahl überprüfen
{ Eingabe: testzahl aus 1..100 }
Versuchzahl Versuchszahl + 1
testzahl = ratezahl?
ja nein
kommentar "richtig"
testzahl > ratezahl?
ja nein
kommentar "zu groß" kommentar "zu klein"
{ Ausgabe: Kommentar, Versuchszahl }
1. Baue eine Sicherheitsprüfung ein, dass die Eingabe einer Rate-Zahl nicht über der Feldgröße und nicht unter 0 liegen darf.
2. Erweitere das Programm so, dass die Feldgröße über ein Edit-Feld eingelesen wird.
Erweiterungen
Einführung der Kontrollstruktur "Wiederholung"
Schwerpunkte
• solange-Schleife
• Darstellung der Semantik mit einem Flussdiagramm
• Darstellung der Struktur mit einem Struktogramm
• Syntax einer while-Anweisung
• verschiedene Schleifentypen für spezielle Situationen
25
Einstiegsbeispiel:Wann werde ich Millionär? (Kapitalentwicklung)
Anfordungen:Nach Eingabe von Anfangskapitals und Zinssatzes wird berechnet, nach wie viel Jahren das Kapital einen bestimmten Endbetrag erreicht hat. Die Zinsen werden jährlich gutgeschrieben (Zinseszins).
Projekt: Wann werden ich Millionär
26
PAP Struktogramm Delphi-Syntax
while Kapital < Zielkapital dobegin… Wiederholungsblockend;
ImplementierungAlgorithmus
Kontrollstrukturen
27
• Es folgen weitere Beispiele zur Übung der while-Schleife.
• Vertiefende Übungen (je nach Interesse):
Entwicklung von Populationen
Math. Algorithmen: Teilermengen, Primzahlentest, Heron, 3n+1 Problem…
Links und Literator
• E. Modrow: Informatik mit Delphi, Band 1/2, Dümmler-Stam 1998-2000.
• P. Damann, J. Wemßen: Objektorientierte Programmierung mit Delphi, Band 1. Klett-Verlag 2001.
• U. Bänisch: Praktische Informatik mit Delphi, Band 1/2. Cornelsen 2001.
• Frischalowski: Delphi 5.0, Band 1/2, Herdt-Verlag 1999.
• Pohl: Schülerübungen / Klausuren in Delphi, Heft 1/2, Verlag J. Pohl 1997-2001.
• K. Merkert:http://hsg.region-kaiserslautern.de/faecher/inf/material/delphi/index.php
• R. Mechling:http://www.gk-informatik.de/
• K. Heidler:http://www.friedrich.fr.schule-bw.de/delphi/delphi.htm
• Hessischer Bildungsserver:http://lernen.bildung.hessen.de/informatik/
• S. Spolwig: http://oszhdl.be.schule.de/gymnasium/faecher/informatik/delphi/index.htm
• Weitere Hinweise unter:
• http://www.delphi-source.de
• Einsteiger-Tutorial
• http://www.delphi-treff.de/content/tutorials/einsteigerkurs/
28