29
Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 Programmierparadigmen Programmierparadigmen 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 Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

Embed Size (px)

Citation preview

Page 1: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 2: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 3: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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.

Page 4: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

• Programmierparadigmen

• Imperatives vs. objektorientiertes ProgrammierenImperatives vs. objektorientiertes Programmieren• Ereignisse und Objekte

• Delphi

• Strukturierung von Programmen: Units

• Datentypen: Aufzählungstypen

Page 5: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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.

Page 6: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 7: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

• Programmierparadigmen

• Imperatives vs. objektorientiertes Programmieren

• Ereignisse und ObjekteEreignisse und Objekte• Delphi

• Strukturierung von Programmen: Units

• Datentypen: Aufzählungstypen

Page 8: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 9: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 10: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Typische Objekte bei Windows-Anwendungen

8/24

Page 11: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

• Programmierparadigmen

• Imperatives vs. objektorientiertes Programmieren

• Ereignisse und Objekte

• DelphiDelphi• Strukturierung von Programmen: Units

• Datentypen: Aufzählungstypen

Page 12: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 13: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Sichtbare Objekte in Delphi

10/24

Page 14: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 15: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Ereignisse in Delphi

Am Beispiel der Komponente "Button":

12/24

Page 16: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 17: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

• Programmierparadigmen

• Imperatives vs. objektorientiertes Programmieren

• Ereignisse und Objekte

• Delphi

• Strukturierung von Programmen: UnitsStrukturierung von Programmen: Units• Datentypen: Aufzählungstypen

Page 18: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 19: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 20: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 21: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 22: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 23: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 24: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

• Programmierparadigmen

• Imperatives vs. objektorientiertes Programmieren

• Ereignisse und Objekte

• Delphi

• Strukturierung von Programmen: Units

• Datentypen: AufzählungstypenDatentypen: Aufzählungstypen

Page 25: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 26: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 27: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 28: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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

Page 29: Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Agenda für heute, 19. Mai, 2005 ProgrammierparadigmenProgrammierparadigmen

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