200 likes | 381 Views
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)
E N D
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 Pascal Modula-2 Algol
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
Widening realvar := intvar Dereferencing y: ref real x := y Deproceduring real x:= random proc r:= random Coercions Impl. Wechsel des Typs (a priori) eines Ausdrucks um den Typ (a posterio) der Umgebung zu entsprechen und einige mehr...
Strukturierte Programmierung Pascal Modula-2 Algol
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 Recordvar r: record maxspeed: integer; case v: Vehicle of truck: (nowheels: integer); vessel: (homeport: string) end p(x) nicht erlaubt!
Strukturierte Programmierung Pascal Modula-2 Algol
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. Modulhierarchie!
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. implementation module Points; procedure assign(x,y:real): Point; begin..end assign; procedure abs(p:Point): real; begin..end abs; end Points. lokale Module möglich
Typabstraktion Transparent export Opaque export • Implementation von opaken Typen nur durch Pointertypen! definition module OpPoints; type Point; procedure assign(x,y:real; var p:Point); procedure abs(p:Point): real; end OpPoints. implementation module OpPoints; type Point = pointer to PointData; PointData = Array[1..2] of real; procedure assign(x,y:real; var p:Point); 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