1 / 20

Strukturierte Programmierung

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)

mignon
Download Presentation

Strukturierte Programmierung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Strukturierte Programmierung Algol Pascal Modula-2 Vortrag: Frank Bauer Betreuer: Andreas Rossberg Lehrstuhl für Programmiersysteme Prof. Gert Smolka

  2. Strukturierte Programmierung Situation vor der Entstehung der „StrukturiertenProgrammierung“ ( FORTRAN) • Programm als bloße Folge von Anweisungen • Monolithische Programme • Globale Variablen • Keine Prozeduren • GoTo

  3. Strukturierte Programmierung Neue Konzepte, die zuvor unbekannt waren • (lexikalisches) Scoping • Einführung von Prozeduren • Strukturierung durch Module

  4. Strukturierte Programmierung Pascal Modula-2 Algol

  5. 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

  6. 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;

  7. 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

  8. 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!

  9. 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

  10. 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...

  11. Strukturierte Programmierung Pascal Modula-2 Algol

  12. 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

  13. 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!

  14. Strukturierte Programmierung Pascal Modula-2 Algol

  15. 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!

  16. 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

  17. 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

  18. 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.

  19. 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

  20. 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

More Related