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