Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Vergleichen Programmiersprache

Ähnliche Präsentationen


Präsentation zum Thema: "Vergleichen Programmiersprache"—  Präsentation transkript:

1 Vergleichen Programmiersprache
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. 1966 Algo W,PL 360 in Amerika Univerität
<<Algorithms+Data Structures=Programs>> 1984 Turing Preis. 1966 Algo W,PL 360 in Amerika Univerität Pascal in Schweiz Strukturiert Programmierung 1976 wieder nach Amerika, in Firma Xerox, Alto Computer zu entwerfen. 1977 in ETH um mit Lilith PC zusammenzuarbeiten,Modula-2 1978 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 Vorteile 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

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

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

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 MODULE hello; IMPORT InOut; BEGIN
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
MODULE M; PROCEDURE P; ..... MODULE M1 MODULE M2 MODULE M3 BEGIN Anweisung; END M

12 Innere Module Qualifizierter Export Unqualifizierter Export
MODULE hello; IMPORT InOut; MODULE inner; EXPORT QUALIFIED a; VAR a : INTEGER; BEGIN a := 1; END inner; a :INTEGER; 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; a :INTEGER; a := 0; InOut.WriteInt(a,3); InOut.WriteInt(inner.a,3); END hello.

13 Externe Module DEFINITION MODULE item; IMPLEMENTATION 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;

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 C]; [FALSE .. TRUE]; INTEGER[ ]; [ ]; [ ] Ungültig: [ „A“ .. „9“] [ ]

17 Strukturierte Datentypen
Array, Record, Pointer, SET-Typen, Prozedur-Typ TYPE Name = ARRAY[ ],[ ] 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 |
ELSE Fehler := TRUE END; ……………………

23 WHILE FOR WHILE a<b DO a:=a+1; b=b-1; END
FOR TestTeiler := 2 TO Zahl-1 BY 1 DO IF Zahl MOD TestTeiler = 0 THEN Primzahl := FALSE; WriteCard(TestTeiler, 1); WriteLn

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 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 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 <= right) AND (temp > source [countS2]) DO source [countS2 - 1] := source [countS2]; INC (countS2); END; source [countS2 - 1] := temp; INC (countS1); 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); 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 inf.ethz.ch

35 Danke für Ihre Aufmersamkeit.
END Danke für Ihre Aufmersamkeit.


Herunterladen ppt "Vergleichen Programmiersprache"

Ähnliche Präsentationen


Google-Anzeigen