Simula 67

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Simula 67 je nejspíš první funkční objektově orientovaný programovací jazyk, odvozený podobně jako Pascal z Algolu (kterému se syntaxí velmi podobá).

Jazyk byl navržen v roce 1967 speciálně pro simulování systémů hromadné obsluhy. Proto byl vybaven možností kvaziparalelního výpočtu a kalendářem událostí.

Jazyk se prakticky neuplatnil mimo akademické prostředí, ale měl významný vliv na další vývoj objektového programování. Mnoho rysů Simuly (speciálně celé pojetí tříd a dědičnosti) bylo totiž později převzato jazykem C++ nebo Java. +more Jazyk Java byl sice odvozen z jazyka C++, nicméně v některých rysech se blíží Simule. Simula, stejně jako Java a některé další jazyky, obsahuje garbage collector, což je mechanismus pro automatické uvolňování nepoužívaných objektů z paměti.

Charakteristika jazyka

Základní datové typy

Integer * Short Integer * Real * Long Real * Boolean Integer a; Real b; Boolean c; a:=25; b:=6.2; c:=True; a:=a+20; b:=b/2; c:=c and (a

Řídící struktury

Příkaz: je ukončen středníkem.

Přiřazení hodnot: A:=B převzaté z Algolu.

Přiřazení referencí: A:-B.

Blok: begin.....end.

Podmínka: if výraz then příkaz nebo blok (else příkaz nebo blok).

Cyklus while: while výraz do příkaz nebo blok.

Cyklus for: velmi obecný

Procedury

Příklad procedury

Procedure FormatujText(T, N, Ok); Text T; Integer N; . Vypíše text T zarovnaný zprava, N je maximální počet sloupců Name Ok; Boolean Ok; . +more Pomocí Ok se vrátí, jestli se text vešel do N sloupců Begin Integer I; Ok := N >= T. Length; . ověření, zda se text vejde do N sloupců For i:=1 step 1 until N-T. Length do . výpis mezer zleva Begin OutText(" "); End OutText(T); . výpis textu End of FormatujText;.

Funkce

Pro deklaraci funkce se před procedure napíše typ, který funkce vrací. Pro předávání parametrů platí totéž co pro procedury.

Příklad funkce

Integer Procedure Umocni(Zaklad, Exponent); Integer Zaklad; Integer Exponent; ! Umocni Zaklad na Exponent Begin Umocni:=Zaklad**Exponent; ! Operátor ** slouží k umocnění End

Třídy

Třída v Simule je tvořená čtyřmi částmi: parametry, atributy, metody a životní pravidla.

Deklarace

Class Obdelnik (Width, Height); Real Width, Height; ! třída se dvěma parametry Begin Real Obsah, Obvod; ! atrubuty;

Procedure Aktualizuj; ! metody Begin Obsah := Width * Height; Obvod := 2*(Width + Height) End of Aktualizuj;

Boolean Procedure JsemCtverec; Begin JsemCtverec := Width=Height; End of JsemCtverec; ! životní pravidla Aktualizuj; OutText("Vytvořen obdélník: "); OutFix(Width,2,6); OutFix(Height,2,6); OutImage End of Obdelnik;

Vytvoření objektu

Ref(Obdelnik) obd; obd:-New Rectangle(20, 30); Objektu se přiřadí paměť zkopírují se hodnoty parametrů a začnou se provádět životní pravidla.

Vytvoření podtřídy

Obdelnik Class GrafickyObdelnik(Viditelny); Boolean Viditelny; Begin If Viditelny Then OutText("Tento obdelnik je viditelný"); Else OutText("Tento obdelnik není viditelný"); OutImage; End of GrafickyObdelnik; Při vytvoření objektu se nejdříve provedou životní pravidla nadtřídy a potom podtřídy. Lze to změnit příkazem inner.

Vytvoření objektu podtřídy

Ref(GrafickyObdelnik) obdelnik; obdelnik:-New GrafickyObdelnik(40, 10, True);

Inner

Pokud do nadtřídy umístíme příkaz inner, budou se nejdříve provádět pravidla nadtřídy, ale až se narazí na inner, provedou se pravidla podtřídy a pak se bude pokračovat v příkazech nadtřídy za inner. Class A Begin . +morekod A1 Inner; . kod A2 End of A;.

A Class B Begin !kod B1 Inner; !kod B2 End of B;

B Class C Begin . kod C1 Inner; . +morekod C2 End of C; Provede se nejdříve kód A1, potom se narazí na inner a začnou se provádět pravidla B, provede se kód B1, až se narazí na inner provede se kód C1. Inner ve třídě C nemá žádný efekt, takže se provede kód C2. Pak program pokračuje zpět do třídy B a provede se B2 a nakonec se provede A2.

Ukázka kódu

Program Hello world vypadá takto:

Begin OutText("Hello World!"); OutImage; End;

Odkazy

Reference

Externí odkazy

http://www.sweb.cz/oopsimula/

Kategorie:Programovací jazyky

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top