Strukturierte Programmierung

Werbung
Strukturierte
Programmierung
Algol
Pascal
Modula-2
Vortrag: Frank Bauer
Betreuer: Andreas Rossberg
Lehrstuhl für Programmiersysteme
Prof. Gert Smolka
Strukturierte Programmierung
Situation vor der Entstehung der
„StrukturiertenProgrammierung“ ( FORTRAN)

Programm als bloße Folge von Anweisungen

Monolithische Programme

Globale Variablen

Keine Prozeduren

GoTo
Strukturierte Programmierung
Neue Konzepte, die zuvor unbekannt waren

(lexikalisches) Scoping

Einführung von Prozeduren

Strukturierung durch Module
Strukturierte Programmierung
Algol 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
Blockstruktur

Wesentlicher Beitrag zur Strukturierten
Programmierung durch Einführung der
Blockstruktur in Programmen
Enstehung von Kontrollstrukturen und Scoping,
wie etwa FOR- oder WHILE-Schleifen
Blockbeispiel:
begin
real e:=2.718;
...
end;
Algol 68



Produkt zweier WG und deren Kompromissen
 vgl. Entstehungsgeschichte um PASCAL
Systematisierung des Typsystems
Imperativ & expression-orientientiert:
x:= (real a= p*q; real b= p/q; if a>b then a else b fi)
+ (y:= 2*z);
 Betonung des Ausdruckbegriffs!

Versuch der exakten Definition der Semantik
Orthogonalitä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!
Typsystem
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
Coercions
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
und einige mehr...

Deproceduring
real x:= random
proc r:= random
Strukturierte Programmierung
Pascal

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
Innovationen & 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 a0=array[1..100] of real;
type a1=array[0..999] of real;
var x: a1;
procedure p(x:a0); begin ...end;
Dennoch nicht gelungene Datentypen: Variant Record
var r: record maxspeed: integer;
case v: Vehicle of
truck: (nowheels: integer);
vessel: (homeport: string)
end
Strukturierte Programmierung
Modula




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
Realisierung großer Projekte, Wiederverwendbarkeit und
Unabhängigkeit der Erstellung  Separate Kompilierung
Beispiel :
MODULE Beispiel;
FROM InOut IMPORT Read, Write;
Decs;
begin
Read(ch); Write(ch);
statements
end Beispiel.
Modulkonzept





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
Definition & Implementation

Definition part: Deklaration der Objekte

Beispiel:
definition module Points;
type Point = Array [1..2] of real;
procedure assign(x,y:real): Point;
procedure abs(p:Point): real;
end Points.
lokale Module möglich
implementation module Points;
procedure assign(x,y:real): Point;
begin..end assign;
procedure abs(p:Point): real;
begin..end abs;
end Points.
Typabstraktion
Transparent export

Opaque export
Implementation von opaken Typen nur durch Pointertypen!
definition module OpPoints;
implementation module OpPoints;
type Point;
type Point = pointer to PointData;
procedure assign(x,y:real; var p:Point);
PointData = Array[1..2] of real;
procedure abs(p:Point): real;
procedure assign(x,y:real; var p:Point);
end OpPoints.
begin..end assign;
procedure abs(p:Point): real;
begin..end abs;
end OpPoints.
Zusammenfassung
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

Referenzen





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
Herunterladen