Simula 67
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. Jazyk Java byl sice odvozen z jazyka C++, nicméně v některých rysech se blíží Simule.[1] 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<20);
Ří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řístup k parametrům procedury
Hodnotou
Implicitní pro jednoduché typy, možné pro texty a pole.
! toto je komentář procedure X(Param); value Param; text Param; ! text předávaný hodnotou
Procedura pracuje s kopií proměnné.
Referencí
Implicitní pro nejednoduché typy.
procedure X(Param); text Param; ! text předávaný referencí
Procedura pracuje přímo s proměnnou, předává se jí reference na proměnnou. Pokud je proměnná v proceduře změněna, projeví se změna i v původní proměnné.
Jménem
Povolené pro všechny typy.
procedure X(Param); name Param; text Param; ! text předávaný jménem
Podobné jako předávání referencí, ale proměnná se při každém použití znovu vyhodnotí.
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; ! 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 !kod 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; !kod 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
- ↑ Garbage Collection, Simula 67, Java. www.cs.uiowa.edu [online]. [cit. 2007-02-20]. Dostupné v archivu pořízeném dne 2007-02-08.
Externí odkazy
- Obrázky, zvuky či videa k tématu Simula 67 na Wikimedia Commons
- http://www.sweb.cz/oopsimula/ Archivováno 31. 8. 2006 na Wayback Machine.
Programovací jazyky | |
---|---|
abecední seznam programovacích jazyků | |
multiparadigmatické | |
strukturované (procedurální) | |
objektové | BETA • Boo • C# • Eiffel • Java (Groovy, Kotlin) • JavaScript • Object Pascal • Objective-C • Smalltalk • VB.NET |
funkcionální | Clean • Ceylon • Erlang • Haskell • J • Lisp • Wolfram Language / Mathematica • Miranda • OCaml • Scheme |
dotazovací | |
logické | Gödel • Prolog |
výukové | |
ezoterické | |
historické | |
další | ABAP • AppleScript • ColdFusion • JSA • Julia • MATLAB • R • Visual Basic (VBScript) • Vimscript • Visual FoxPro |
skriptovací/strojový kód • kompilované/interpretované • interaktivní/dávkové • WYSIWYG |
Tento článek je příliš stručný nebo postrádá důležité informace. Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty. |