Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Modula 2-Sprache Proseminar : Vergleichen Programmiersprache zhao,ning.

Ähnliche Präsentationen


Präsentation zum Thema: "Modula 2-Sprache Proseminar : Vergleichen Programmiersprache zhao,ning."—  Präsentation transkript:

1 Modula 2-Sprache Proseminar : Vergleichen Programmiersprache zhao,ning

2 Gliederung Einleitung Module Typkonzepte Prozedurkonzepte, Anweisungen Exception Prozess, Multiprozess Mergesort OOM2 Literatur

3 Geschichte > 1984 Turing Preis Algo W,PL 360 in Amerika Univerität Pascal 1971 in Schweiz Strukturiert Programmierung 1976 wieder nach Amerika, in Firma Xerox, Alto Computer zu entwerfen in ETH um mit Lilith PC zusammenzuarbeiten,Modula Modula-2 veröffentlichen EBNF(Extended BNF), Syntax Diagramm Oberon,Oberon-2

4 Anwendungsgebiete Unsiverselle Sprache Datenstrukturen, Software Engineering,Koncurrent Programmierung Wissenschaftliche Anwendung,Diskrete Simulation Bio-Informatik LifeLab (Labor für zellulare 2D Automaten) Große Projekte und Echtzeitsysteme Entwicklung großer System 1985.MicroPro Easy orientiert sich an Benutzer,die Computer hassen

5 25 Seiten Beschreibung, leicht erlernbar Module werden getrennt kompiliert, dadurch weniger Fehlermöglichkeit und leichtere Änderbarkeit Geschwindigkeit, leicht portierbar auf ein anderes Betriebssystem Fehler werden frühzeitig erkannt (vollständige Typprüfung, Schnittstellenprüfung schon beim Kompilieren). Modula-2-Programme haben dadurch 3 Mal weniger Fehler als C- Programme Einfache Implementierung paraleller Prozesse Vorteile

6 Daten kapseln für zuverlässig Softwaresystem ADT Konzept wird unterstützt eine strenge Typbindung. Qualifizierte Zugriffe Pointer Neuheit

7 Module Programm Module Lokale Module Globale Module Bibliotheks- module Grundbibliotheks- module Basis Module Benutzer- module Modulhierarchie

8 Module Internationaler Standard definiert 5 System Module: SYSTEM, COROUTINES, TERMINATION, EXCEPTIONS und M2EXCEPTION. Keine Übersetzung der SYSTEM Module notwendig. Durch die Systemmodule werden bereitgestellt: rechnerspezifischer Datentypen und Prozeduren, Typtransfer-Funktionen und die Möglichkeit der Deklaration von Variablen mit festen Adressen. Durch SYSTEM-Modul bereitgestellte Datentypen: WORD, ADDRESS, PROCESS. Durch SYSTEM-Modul bereitgestellte Prozeduren: ADR, SIZE, TSIZE, NEWPROCESS, TRANSFER sowie weitere Objekte, abhängig von verwendeten Compiler.

9 HELLOWORLD Qualifizierter Import MODULE hello; IMPORT InOut; BEGIN InOut.WriteString("Hello, world!"); InOut.WriteLn; END hello. Nicht qualifizierter Import MODULE hello; FROM InOut IMPORT WriteString, WriteLn; BEGIN WriteString("Hello, world!"); WriteLn; END hello.

10 Schachtelung von Modulen Lokale Module können überall definiert werden, wo auch lokale Variablen definiert werden dürfen. Innere Module sehen nicht die Deklarationen des umschließenden Moduls Ein umschließender Modul sieht nur die exportierten Bezeichner Module auf gleicher Ebene dürfen gegenseitig importieren und exportieren

11 Sichtbarkeit/Initialisierungsreihenfolge PROCEDURE P;..... MODULE M; MODULE M1 MODULE M3 BEGIN Anweisung; END M MODULE M2

12 Innere Module Qualifizierter Export MODULE hello; IMPORT InOut; MODULE inner; EXPORT QUALIFIED a; VAR a : INTEGER; BEGIN a := 1; END inner; VAR a :INTEGER; BEGIN a := 0; InOut.WriteInt(a,3); InOut.WriteInt(inner.a,3); END hello. Unqualifizierter Export MODULE hello; IMPORT InOut; MODULE inner; EXPORT a; VAR a : INTEGER; BEGIN a := 1; END inner; VAR a :INTEGER; BEGIN a := 0; InOut.WriteInt(a,3); InOut.WriteInt(inner.a,3); END hello.

13 Externe Module DEFINITION MODULE item; TYPE index = INTEGER; item = RECORD key: index END; PROCEDURE ReadItem(): item; END item. (*Schnittstellen in def Datei speichern*) IMPLEMENTATION MODULE item; FROM InOut IMPORT WriteLn, WriteString, ReadInt, WriteInt; PROCEDURE ReadItem(): item;... BEGIN … END ReadItem; END item.

14 Undurchsichtige Datentypen Definition eines Typnames in Definitonsmoduln ohne Bindung an einen konkreten Datentyp.realisieren ADT. Die konkrete Deklaration eines undurchsichtigen Datentyps ist auf POINTER-Typen beschränkt. DEFINITION MODULE Test; TYPE zahl; PROCEDURE Readnum(zahl); END test. IMPLEMENTATION MODULE Test; TYPE zahl =POINTER TO zahlfolge; zahlfolge=RECORD vor:CARDINAL; nach:REAL; END;

15 Symbol Name ident=letter{letter|digit} Zahlen (ganzen Zahlen,Gebrochene Zahlen) Zeichenketten oder Operatoren und Schlüsselwörter :=,=,#(ungleich),~, ^,IN FOR,FROM,IF,IMPLEMENTATION,IMPORT, ELSIF,OF,OR,WHILE,WITH,PRPZEDURE,POINTER, PROZESS,UNTIL,VAR,RECORD,SET,MODULE,MOD... Kommentare (* mmmmmmmmm*) dürfen geschachtelt sein (*ccc(aa)(*ss*)*)

16 Unstrukturierte Datentypen vordefinierte Datentypen : INTEGER, LONGINTEGER,CARDINAL, REAL, BOOLEAN, CHAR, BITSET. BITSET {2,4,6}, {}, {0..15} (bei 16-Bit Rechnern), {0..31} (bei 32-Bit Rechnern) CARDINAL: Alle positiven ganzen Zahlen (einschließlich Null). nicht vordefinierte Datentypen : Aufzählungstypen Material = (eisen, stahl, kupfer, glas, gummi) Unterbereichstypen, Minimal – und Maximalwert: [0.. 9]; [0.. 9]; [0C.. 177C]; [FALSE.. TRUE]; INTEGER[ ]; [ ]; [ ] Ungültig: [ A.. 9] [ ]

17 Strukturierte Datentypen Array, Record, Pointer, SET- Typen, Prozedur-Typ TYPE Name = ARRAY[1.. 20],[0.. 19] OF CHAR TYPE Name =ARRAY CHAR OF [0.. 9] Ungültig mit Index-Typ: ARRAY BITSET OF INTEGER, ARRAY CARDINAL OF INTEGER TYPE Datum = RECORD Tag :[1..31];Monat:[Jan.. Dez];Jahr :[ ] TYPE ptr = POINTER TO Datum; POINTER ist an einen bestimmten Datentyp (seinen Basistyp) gebunden. SET OF [3..5] SET OF [eisen.. kupfer] Ungülitge: SET OF [ ] SET OF CHAR nur Aufzählungs- und Unterbereichstypen erlaubt. TYPE winkelfunktion =PROCEDURE (REAL):REAL;

18 Zuweisung Designator := Expression. Beispiele: set:={1,2,3,4,5}; a[i] :=A; p^.t :=2;

19 Prozedurekonzepte PROCEDURE Vertauschen(VAR Var1, Var2: Art); VAR ZwischenVar: Art; BEGIN ZwischenVar := Var1; Var1 := Var2; Var2 := ZwischenVar END Vertauschen; PROCEDURE Maximum(Zahl1, Zahl2: INTEGER): INTEGER; TYPE F: PROCEDURE(VAR INTEGER, INTEGER): INTEGER; VAR funk: F; funk := Maximum;

20 Steuerstruktur Bedingte Anweisungen IF, CASE Wiederholungsanweisungen WHILE, FOR, REPEAT, LOOP Kein GOTO

21 IF THEN IF Betrag < 0 THEN AenderungKontostand := TRUE; Soll := Soll + (-Betrag) ELSIF Betrag > 0 THEN AenderungKontostand := TRUE; Haben := Haben + Betrag ELSE AenderungKontostand := FALSE END

22 CASE Beispiel: CASE Operator OF '+': Ergebnis := Zahl1 + Zahl2 | '-': Ergebnis := Zahl1 - Zahl2 | '*': Ergebnis := Zahl1 * Zahl2 | '/': Ergebnis := Zahl1 / Zahl2 | ELSE Fehler := TRUE END; ……………………

23 WHILE a

24 Loop LOOP WriteLn; ReadInt(Zahl); ………………. Read(Antwort); Read(Zeichen); IF NOT (Antwort = JaAntwort) AND (Zeichen = EOL) THEN EXIT END …………………….

25 Repeat Until REPEAT WriteString("Bitte eine ganze Zahl und Return eingeben: "); Read(Antwort); Read(Zeichen) UNTIL NOT (Antwort = JaAntwort) AND (Zeichen = EOL); WriteString("Ende!"); END; ………………………………

26 Prozess Niedrige Ebene, keine Prozeßsynchronisation und –kommunikation. Nur durch Implementierung höherer Konzepte realisiert. Bsp: Modulrumpf := p1. Consumer := c. MODULE test; VAR workspace[ ] OF CARDINAL; p1,c:PROCESS; PROCEDURE Consumer; BEGIN LOOP Write(char);TRANSFER (c,p1); END END Consumer; BEGIN NEWPROCESS(Consumer,ADR(workspace),SIZE(workspace),c); LOOP Read(char);(*LOOP ohne Exit,zeichnet p1 Prozess.*) TRANSFER(p1,c); END END test..

27 Prozess Unterbrechung und Prioritäten Prozess wird von außen zu unterbrochen. Auslöser meist ein Hardware-Signal, das einen Prozeduraufruf auslöst Interupt-Handler muss bereitgestellt werden. Priorität ist eine Konstante vom Datentyp CARDINAL. Module Clock[7]; Var timer,interrupted :PROCESS; workspace :ARRAY [ ] OF CARDINAL; PROCEDURE EverySecond; BEGIN LOOP IOTRANSFER(timer,interrupted,24);... END BEGIN NEWPROCESS(EverySecond,ADR(workspace),SIZE(workspace),timer); TRANSFER(interrupted,timer); END Clock;

28 Termination HALT: unnormale Termination,Ganz Programm wird abgebrochen. FINALLY: normale Termination, Mechanismus,Mühl zu aufräumen. MODULE DistinguishHalt; FROM TERMINATION IMPORT HasHalted; IMPORT STextIO; VAR ch : CHAR; BEGIN STextIO.WriteString ("Halt? Y/N => "); STextIO.ReadChar (ch); STextIO.SkipLine; IF CAP (ch) = "Y" THEN HALT END; FINALLY IF NOT HasHalted () THEN STextIO.WriteString ("Not "); END; STextIO.WriteString ("Halted"); STextIO.WriteLn; STextIO.WriteString ("Press a return to continue"); STextIO.SkipLine; END DistinguishHalt.

29 MergeSort PROCEDURE MergeSort (VAR source: ARRAY OF CARDINAL; lBound, uBound : CARDINAL); PROCEDURE Merge (VAR source: ARRAY OF CARDINAL; left, mid, right : CARDINAL); VAR countS1, countS2, temp : CARDINAL; BEGIN countS1 := left; WHILE countS1 <= mid DO IF source [countS1] > source [mid + 1] THEN temp := source [countS1]; source [countS1] := source [mid + 1];

30 MergeSort countS2 := mid + 2; WHILE (countS2 source [countS2]) DO source [countS2 - 1] := source [countS2]; INC (countS2); END; source [countS2 - 1] := temp; END; INC (countS1); END; END Merge;

31 MergeSort VAR middle : CARDINAL; BEGIN IF lBound >= uBound THEN RETURN END; middle := (lBound + uBound) DIV 2; MergeSort (source, lBound, middle); MergeSort (source, middle + 1, uBound); Merge (source, lBound, middle, uBound); END MergeSort;

32 OOM-2 MODULE TestRectangleClass1; IMPORT SWholeIO; TRACED CLASS rectangle; REVEAL SetDims, Area, sides; CONST sides = 4; VAR length, width : INTEGER; PROCEDURE SetDims (len, wid : INTEGER); END SetDims; … PROCEDURE Area () : INTEGER; END Area;… BEGIN (* initialization *) SetDims (0,0); END rectangle; VAR theRect : rectangle; BEGIN (* main *) CREATE (theRect); SWholeIO.WriteInt (theRect.Area(), 10); theRect.SetDims (4, 3); SWholeIO.WriteInt (theRect.Area(), 10); END TestRectangleClass1.

33 Kompilierung und Ausf ü hrung moorea: % gpmake prog11 ## compiling item.def... ## compiling item.mod... ## building prog11... moorea: % prog11 8 Sätze eingeben: moorea: % ** Sprache Version**: Volition Systems,Logitech(PC-DOS,CP/M), Modula Research Inititute

34 Literatur Modula-2 Quelle: Modula-2 (Springer): Rohlfing-Brosell,H(BDR) Algorithmen und Datenstrukturen mit Modula-2 :Niklaus Wirth Softwaretechnik und Modula-2 :Gustav Pomberger Kompiler(windows) Linux Niklaus inf.ethz.ch

35


Herunterladen ppt "Modula 2-Sprache Proseminar : Vergleichen Programmiersprache zhao,ning."

Ähnliche Präsentationen


Google-Anzeigen