View
105
Download
1
Category
Preview:
Citation preview
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Agenda für heute, 19. Mai, 2005
• ProgrammierparadigmenProgrammierparadigmen
• Imperatives vs. objektorientiertes Programmieren
• Ereignisse und Objekte
• Delphi
• Strukturierung von Programmen: Units
• Datentypen: Aufzählungstypen
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Programmierparadigmen
Imperative ProgrammiersprachenIn Prozeduren zusammengefasste, sequentiell ausgeführte
Anweisungen.
Die Prozeduren werden ausgeführt, wenn sie als Teil des Programmablaufs aufgerufen werden.
Objektorientierte Programmiersprachen
Imperative Prozeduren, die ausgeführt werden, wenn ein bestimmtes Ereignis eintritt.
Die Prozeduren sind Bestandteil von sog. Objekten.
2/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Programmierparadigmen
2/24
Regelbasierte SprachenKommen in wissensbasierten Systemen (Expertensysteme) zur Anwendung.
Logikorientierte SprachenOrientieren sich in der Beschreibung der Programme an der Prädikatenlogik.
Funktionale SprachenBerechnungen werden als Auswertung mathematischer Funktionen verstanden.
• Programmierparadigmen
• Imperatives vs. objektorientiertes ProgrammierenImperatives vs. objektorientiertes Programmieren• Ereignisse und Objekte
• Delphi
• Strukturierung von Programmen: Units
• Datentypen: Aufzählungstypen
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Objektorientiertes Programmieren (OOP)
Voraussetzungen für die objektorientierte Programmierung
Ereignisgesteuerte Programmierung
Ein Programm prüft ständig ob gewisse Ereignisse stattgefunden haben und reagiert darauf mit Nachrichten an Prozeduren.
Verwaltung von Objekten
Durch einen Datentyp, in dem sowohl Eigenschaften der Speicherung als auch Prozeduren deklariert sind.
3/24
Wir befassen uns mit konzeptionellen Aspekten der OOP weil diese notwendig sind um die technischen Grundlagen von Delphi zu verstehen.
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Imperatives vs. objektorientiertes Programmieren
Imperativ: Wiederholte, sequentielle Verarbeitung.
Objektorientiert: Ereignis-gesteuerte Verarbeitung
Menü
Auswahl
Aktion
Beispiel: zeilenweise Verarbeitung Beispiel: grafische Verarbeitung
Bei Mausklick dividiere
5/24
• Programmierparadigmen
• Imperatives vs. objektorientiertes Programmieren
• Ereignisse und ObjekteEreignisse und Objekte• Delphi
• Strukturierung von Programmen: Units
• Datentypen: Aufzählungstypen
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Typische Ereignisse bei Windows-Anwendungen
BefehlsereignisseStarten von Programmen, Speichern von Dateien, usw.
FensterereignisseÖffnen, Schliessen, eines Fensters, Grösse verändern, usw.
EingabeereignisseDrücken einer Tastaturtaste, Bewegen der Maus, usw.
6/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Typische Ereignisse bei Windows-Anwendungen
SystemereignisseNetzwerksteuerung, Interaktion mit Peripheriegeräten, usw.
Timer-EreignisseNachführen einer Uhr, Zeitpläne verwalten, usw.
7/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Typische Objekte bei Windows-Anwendungen
8/24
• Programmierparadigmen
• Imperatives vs. objektorientiertes Programmieren
• Ereignisse und Objekte
• DelphiDelphi• Strukturierung von Programmen: Units
• Datentypen: Aufzählungstypen
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Delphi
Grundlagen
Object-PascalErweiterung von Pascal durch Klassen und Objekte
Grafische Programmierumgebung"Drag-and-drop"-Entwurf von Programmoberflächen
"Visual Component Library" (VCL)
Integrierte Entwicklungsumgebung (IDE)Verwaltung von Projekten, insb. Abhängigkeiten zwischen Units
Regeln bez. Programmorganisation
9/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Sichtbare Objekte in Delphi
10/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Unsichtbare Objekte in Delphi
Dateiöffnungs-Dialog
HTTP-Transfer
FTP-Transfer
Timer
Speicherungs-Dialog
Drucker-Dialog
11/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Ereignisse in Delphi
Am Beispiel der Komponente "Button":
12/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Die Projektverwaltung in Delphi
In Delphi wird ein Programm Projekt genannt.
Ein Delphi-Projekt besteht aus mehreren Dateien von denen jede durch eine spezifische Erweiterung gekennzeichnet ist:
.dpr Die Projektverwaltungs-Datei (wird von Delphi automatisch erzeugt und nachgeführt.
.pas Quelltext-Datei (Objekt-Pascal-Code, in Units gegliedert).
.dfm Binäre Datei für den Aufbau eines Formulars.
.res Datei mit vom Projekt beanspruchten Ressourcen.
.dof Projektoptionsdatei (Einstellungen für Compiler und Linker).
.exe Ausführbares Programm.
Wichtiger Hinweis: Immer alle Dateien speichern!!
13/24
• Programmierparadigmen
• Imperatives vs. objektorientiertes Programmieren
• Ereignisse und Objekte
• Delphi
• Strukturierung von Programmen: UnitsStrukturierung von Programmen: Units• Datentypen: Aufzählungstypen
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Strukturierung von Programmen
1. Schritt: Gliederung des Quellcodes
Einem Programm können wir Struktur verleihen, indem wir es in
Prozeduren gliedern, von denen jede eine spezielle Aufgabe
innerhalb des Progamms übernimmt.
2. Schritt: Import von Objektcode
Die Struktur eines Programms können wir ergänzen, indem wir
bereits kompilierte Prozeduren in den Objektcode des
Programms importieren.
14/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Gliederung des Quellcodes
var a,b,i,p: integer;
begin. . .read(a,b);p:= a;for i:= 2 to b dop:= p * a;
write('a hoch b: ');writeln(p);. . .
end;
var x,y,p: integer;
procedure pot(a,b: integer);
var i: integer;
beginp:= a;for i:= 2 to b dop:= p * a
end; { pot }
begin { main }. . .read(x,y);pot(x,y);
15/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Import von Objektcode aus einer "Unit"
program xyz;
uses math;
var alpha: integer; sinalpha: real;
begin { main }. . .read(alpha);sinalpha:= sin(alpha);write('Sinus von ',alpha,': ';. . .
Diese Anweisung sagtdem Compiler, dass allein der Unit "Math" dekla-rierten Prozeduren demProgramm zur Verfügungstehen sollen.
16/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Getrennte Kompilation von Programmen und Units
Programm
Quellcode
Unit A
Quellcode
Compiler
Unit A
Objektcode
Programm
Objektcode
Muss neu kompiliert werden,wenn das Programm oder eine der Units geändert wird.
Unit B
Quellcode
Unit B
Objektcode
Muss neu kompiliert werden,wenn die Unit geändert wird.
Üb
ers
chau
bar
keit
dur
ch M
odu
lari
sie
rung
(Pro
gram
mie
ren
im G
ross
en)
17/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Sichtbarkeit bei Units
program X;uses A;
var R, S: integer;
begin R:= S + 1;
p1;
p2;
end.
unit A;
interfaceprocedure p1; procedure p2;
implementation
var j: real;
procedure p1;begin . . .end;
procedure p2;var k: real;begin k := k*j; . . .end;
end.18/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Sichtbarkeit bei Units
program X;uses A;
var R, S: integer;
begin R:= S + 1; j:= R - S; p2;
q3;
end.
unit A;
interfaceuses B; var j: real;procedure p2;
implementation
procedure p2;var k: real;begin
k := k*j; q1; . . .
end;end.
unit B;
interfaceprocedure q1procedure q2procedure q3;
implementation
procedure q1;begin
. . .end;
. . .
end.
kann via Unit A auch dieBezeichner im Interfacevon Unit B verwenden
19/24
• Programmierparadigmen
• Imperatives vs. objektorientiertes Programmieren
• Ereignisse und Objekte
• Delphi
• Strukturierung von Programmen: Units
• Datentypen: AufzählungstypenDatentypen: Aufzählungstypen
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Aufzählungstypen
Ein Aufzählungstyp wird durch eine Liste von Werten definiert. Aufzählungstypen gehören zur Klasse der Ordinaltypen.
Einer Variablen von diesem Typ können diese und nur diese Werte zugewiesen werden.
Beispieletype Tag = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag,
Samstag, Sonntag);
Beziehung = (Eltern, Geschwister, Nachkomme, Cousine);
Operator = (plus, minus, multipl, div);
Trigfunktion = (sinus, kosinus, tangens, kotangens);
Farbe = (braun, rot, orange, gelb, gruen);
20/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Aufzählungstypen
Den Variablen, die als vom Typ Aufzählung deklariert sind, können die entsprechenden Werte wie Konstanten zugewiesen werden.
Beispiele
var Feiertag, Werktag: Tag; Verwandter: Beziehung; Laubfarbe: Farbe;
Die folgenden Anweisungen sind möglich:Feiertag:= Sonntag;Verwandter:= Nachkomme;
Laubfarbe:= gelb;
Diese jedoch nicht:Feiertag:= blau;Verwandter:= Freitag;
21/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Aufzählungstypen: Einschränkungen
Im selben Gültigkeitsbereich darf ein Wert nicht zu mehr als einem Aufzählungstyp gehören:
type Frucht = (Apfel, Orange, Zitrone, Tomate); Gemuese = (Kartoffel, Wirz, Tomate, Bohne);
var Karte1: (Eichel, Schelle, Rose, Schilte);var Karte2: (Eichel, Schelle, Rose, Schilte);
Dagegen werden die folgenden Zeilen fehlerfrei compiliert:
var Karte1, Karte2: (Eichel, Schelle, Rose, Schilte);
type Farbe = (Eichel, Schelle, Rose, Schilte);
var Karte1: Farbe; Karte2: Farbe;
22/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Aufzählungstypen: Operationen
Auf die Werte eines Aufzählungstyps können Vergleichsoperatoren und die Standardfunktionen ord, succ und pred angewandt werden:
Kartoffel < Bohne (= true)
ord(Orange) (= 1)
succ(Kartoffel) (= Wirz)
pred(Zitrone) (= Orange)
23/24
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich
Aufzählungstypen: Operationen
Variablen vom Typ Aufzählung können inkrementiert werden.
var
Wochentag: (Montag, Dienstag, Mittwoch, Donnerstag,
Freitag, Samstag, Sonntag);
Nach den Anweisungen:
Wochentag:= Dienstag;inc(Wochentag);
enthält Wochentag den Wert Mittwoch
Die for-Anweisung wird oft zusammen mit Aufzählungstypen benützt.
Beispiel
for Wochentag:= Montag to Freitag do . . .
24/24
Recommended