Title: Strukturierte Programmierung
1Strukturierte Programmierung
Lehrstuhl für Programmiersysteme Prof. Gert Smolka
Vortrag Frank Bauer Betreuer Andreas Rossberg
2Strukturierte Programmierung
- Situation vor der Entstehung der
StrukturiertenProgrammierung (? FORTRAN) - Programm als bloße Folge von Anweisungen
- Monolithische Programme
- Globale Variablen
- Keine Prozeduren
- GoTo
3Strukturierte Programmierung
- Neue Konzepte, die zuvor unbekannt waren
- (lexikalisches) Scoping
- Einführung von Prozeduren
- Strukturierung durch Module
4 - Strukturierte Programmierung
5Algol 60
- Erstes systematisches einfaches Typsystem
(statisch) - Erstmalig Rekursion als Konzept
- ? Eleganter Quicksort-Algorithmus durch Hoare
- Stack Allokation
- Call-by-name Call-by-value
- Erfindung der Backus-Normal-Form (BNF)
? Definition der Syntax der Sprache
6Blockstruktur
- Wesentlicher Beitrag zur Strukturierten
Programmierung durch Einführung der Blockstruktur
in Programmen - Enstehung von Kontrollstrukturen und Scoping,
- wie etwa FOR- oder WHILE-Schleifen
begin real e2.718 ... end
Blockbeispiel
7Algol 68
- Produkt zweier WG und deren Kompromissen
- ? vgl. Entstehungsgeschichte um PASCAL
- Systematisierung des Typsystems
- Imperativ expression-orientientiert
- x (real a pq real b p/q if agtb then a
else b fi) (y 2z) - ? ? Betonung des Ausdruckbegriffs!
- Versuch der exakten Definition der Semantik
8Orthogonalität
- Beliebige Komposition aus Referenzen, Records und
anderen Typen - 1. Records (structs) als Parameter, Variablen und
als Resultate - 2. Procs als Parameter (call-by-name), Variablen
und als Resultate - 3. Referenzen subsummieren Pointer, Variablen,
Call-by-name - ? wenn ref x ein Typ, dann auch ref ref x
- Variablen und Referenzen als synonyme Konzepte!
-
9Typsystem
- 1. Strukturelle Typäquivalenz mode
a struct(int val, ref a next) mode b
struct(int val, ref struct (int val, ref b next)
next) - 2. Procs werden als first-class-citizens
behandelt proc a (int n, proc (int)
real x) real begin ...x(i)..end - 3. Unions mode person union(man,
woman) case body (loc person) in (man)
... (woman) ... esac
10Coercions
Impl. Wechsel des Typs (a priori) eines
Ausdrucks um den Typ (a posterio) der Umgebung zu
entsprechen
- Widening ? realvar intvar
- Dereferencing ? y ref real x
y
- Deproceduring real x random proc
r random
und einige mehr...
11 - Strukturierte Programmierung
12Pascal
- Sprachdefinition 1970 (N. Wirth)
- Einsatzgebiet ausdruckskräftige, einfache
Sprache im Lehrbereich - ? Anschauung von Structured Programming
Stepwise Refinement - Versuch der Implementierung einer effizienten
Sprache Compiler - Probleme minimaler Sprachumfang der
Kompatibilitätsprobleme schuf, vergleichsweise
langsame Programme
13Innovationen Probleme
- Algol viele statement-Strukturen Pascal
viele (dynamische) Daten(typ)-Strukturen (C.
Hoare) ? expliziter Derefenzierungsop (?)
Pointertyp - (Über) Betonung der frühen Bindung und statischer
Eigenschaften type a0array1..100 of
real type a1array0..999 of real
var x a1 procedure p(xa0) begin
...end - Dennoch nicht gelungene Datentypen Variant
Record var r record maxspeed
integer case v Vehicle of truck
(nowheels integer) vessel (homeport
string) end
14 - Strukturierte Programmierung
15Modula
- Entwicklung durch N. Wirth in den späten 1970er
Jahren - Modul Zusammenfassung von Deklarationen
(Konstanten, Vars, Typen, Prozeduren) - Zweck Problemzerlegung in Teilfunktionen
Verfeinerung Main ? Module ? Prozeduren Reali
sierung großer Projekte, Wiederverwendbarkeit und
Unabhängigkeit der Erstellung ? Separate
Kompilierung - Beispiel MODULE Beispiel FROM InOut
IMPORT Read, Write Decs begin R
ead(ch) Write(ch) statements end
Beispiel.
16Modulkonzept
- Modul Abstraktion nach außen ?
Information Hiding - Damit Sicherung der korrekten Funktionsweise,
Fehlereindämmung, Ignorierung von
Implementationsdetails - Interface (definition module) Implementation
(implementation module) Sichbarkeit nach außen
beobachtbares Verhalten Unabhängige Änderung
eines importierten Moduls - Beide Parts werden unabhängig kompiliert ?
Compilation Units - Änderung der Implementierung ohne Mitteilung an
Client des definiton part
17Definition Implementation
- Definition part Deklaration der Objekte
- Beispiel
definition module Points type Point Array
1..2 of real procedure assign(x,yreal)
Point procedure abs(pPoint) real end Points.
implementation module Points procedure
assign(x,yreal) Point begin..end assign
procedure abs(pPoint) real begin..end
abs end Points.
lokale Module möglich
18Typabstraktion
Transparent export
Opaque export
- Implementation von opaken Typen nur durch
Pointertypen! -
definition module OpPoints type Point
procedure assign(x,yreal var pPoint)
procedure abs(pPoint) real end OpPoints.
implementation module OpPoints type Point
pointer to PointData PointData
Array1..2 of real procedure assign(x,yreal
var pPoint) begin..end assign procedure
abs(pPoint) real begin..end abs end
OpPoints.
19Zusammenfassung
- Algol
- ? Einführung wesentlicher Konzepte der
Strukturierten Programmierung - Pascal
- ? Sprache im Lehrbereich mit didaktisch einfacher
Syntax zur Vermittlung grundlegender
Programmierkonzepte - Modula-2
- ? Einführung des Modulkonzepts
-
20Referenzen
- Thomas Bergin, Richard Gibson, History of
Programming Languages, ACM Press 1996 - Andrew McGettrick, Algol 68 a first and second
course. Cambridge University Press 1978 - Edsger Dijkstra, Go To Statement Considered
Harmful. Communications of the ACM 11(3), ACM
Press 1968 - Niklaus Wirth, Programming in Modula 2. Springer
1982 - John C. Mitchell, Concepts in Programming
Languages, Cambridge University Press 2003