Simula

S Vikipedije, slobodne enciklopedije
Simula
Originalni nazivengl. Simula
Izgovara sesimula
Modelobjektno-orijentisani
Pojavio se1962.
Autor(i)Kristen Najgard i Ole-Johan Dal
UticajiAlgol
Uticao naC++, Java


Simula (engl. Simula; izgovor: simula) je naziv za dva simulaciona programska jezika, Simula I i Simula 67, koji su razvijeni 60-ih godina 20. veka u Norveškom kompjuterskom centru u Oslu, od strane Ole-Johana Dala i Kristena Najgarda. Sintaksički to je verni naslednik Algola 60.[1]:1.3.1

Simula 67 je uveo objekte[1]:2, 5.3, klase[1]:1.3.3, 2, nasleđivanje, potklase[1]:2.2.1, virtualne procedure[1]:2.2.3, simulacije diskretnih događaja i sakupljanje otpadaka.[1]:9.1

Može se reći da je Simula prvi objektno-orijentisani jezik. Kao što mu i samo ime kaže, dizajniran je za simulacije i potrebe tog domena su obezbedile okvir za mnoge karakteristike današnjih objektno-orijentisanih jezika.

Simula se koristi za simulaciju VLSI dizajna, modeliranje procesa, protokola, algoritama, ali i u drugim oblastima kao što su: računarska grafika, podešavanje tipova i edukacija.

Uticaj Simule je često podređen, a Simulini tipovi objekata su često implementirani od strane drugih programskih jezika među kojima su: C++, C#, Java, Object Pascal.

Računarski naučnici, kao što su Bjarne Stravstrup[2], tvorac C++, i Džejms Gosling[3], tvorac Jave, su priznali da je Simula imala glavni uticaj na njih i njihove jezike.[4]


Istorijat[uredi | uredi izvor]

Kristen Najgard je počeo da piše računarske programe za simulacije 1957. godine. On je uočio potrebu za boljim načinom da se opišu heterogenost i operacije sistema. Da bi nastavio dalje sa svojim idejama, Najgard je shvatio da mu je potreban neko sa boljim veštinama u programiranju. Ole-Johan Dal mu se pridružio u januaru 1962. god. Nedugo nakon toga odlučeno je da jezik bude povezan sa jezikom Algol 60. Do maja iste godine glavni koncepti za simulacioni jezik su bili postavljeni. Nastao je jezik SIMULA I, programski jezik specijalne namene za simulaciju diskretnih događaja.

Kristen Najgard je pozvan u UNIVAC krajem maja 1962. godine u vezi sa reklamiranjem njihovog novog UNIVAC 1107 računara. U toj poseti Najgard je predstavio ideje Simule Roberty Bernery, direktoru sistemskog programiranja UNIVAC-a. Berner je bio veliki obožavalac Algola i dopala mu se ideja o projektu Simula. On je pozvao Najgarda na drugu internacionalnu konferenciju za procesiranje informacija koja je bila organizovana od strane IFIP-a[5], gde je Najgard je prestavio svoj članak o simuli.

Norveški računarski centar je dobio UNIVAC 1107 u avgustu 1963. godine sa velikim popustom na kojem je Dal implementirao Simulu I pod ugovorom sa UNIVAC-om. Implementacija je bazirana na "UNIVAC ALGOL 60" kompajleru. Simula I je bila potpuno osposobljena na UNIVAC 1107 do januara 1965. godine. U narednih nekoliko godina, Dal i Najgard su proveli puno vremena predajući Simulu. Simula se ubrzo proširila u nekoliko zemalja širom sveta.

Dal i Najgard su izneli svoj članak o klasnim i potklasnim deklaracijama na IFIP konferenciji za simulacione jezike u Oslu, maja 1967. godine. Taj članak je postao prva formalna definicija SIMULE 67. Simula je imala dosta uticaja na razvoj Smoltok-a[6] i kasnije objektno-orijentisane programske jezike.

Kasnih 60-ih i ranih 70-ih postojale su 4 glavne implementacije Simule:

  • UNIVAC 1100
  • System/360 i System/370 od strane Norveškog računarskog centra
  • CDC 3000
  • TOPS-10

Ove implementacije su ugrađene na mnogim platformama. TOPS-10 je implementirao koncept javnih, zaštićenih i privatnih promenljivih i procedura, koji je kasnije implementiran u Simulu 87. Simula 87 je najnoviji standard i rasprostranjen je na više platformi. Postoje 3 glavne implementacije:

  • Simula AS
  • Lund Simula
  • GNU Cim[7]

U novembru 2001. godine, Dal i Najgard su dobili Džon fon Nojmanovu medalju od strane IEEE[8], za uvođenje koncepata objektno-orijentisanog programiranja kroz dizajn i implementaciju Simule 67. U aprilu 2002. godine su dobili Tjuringovu nagradu od strane ACM-a[9], zbog ideja neophodnih za nastanak objektno-orijentisanog programiranja, kroz dizajn programskih jezika Simula I i Simula 67.

Nažalost, ni Dal ni Najgard nisu mogli da prisustvuju dodeli nagrada, jer su preminuli u junu i avgustu iste godine.[10]

Simula se i dan danas predaje na mnogim kursevima i univerzitetima.[11]

Neke od karakteristika Simule 67[uredi | uredi izvor]

Podrška za algoritme[uredi | uredi izvor]

Simula 67 sadrži mnoge pogodnosti Algola 60, kojeg su tvorci Simule iskoristili kao temelj jer je Algol bio izuzetno popularan u Evropi 60-ih godina.

Dekompozicija[uredi | uredi izvor]

U cilju rešavanja nekih velikih problema pristupa se razbijanju tog problema na manje zasebne celine koje se dalje mogu rešavati pojedinačno. Dekompozicija je posebno važna ukoliko se rešavanjem problema bavi više od jednog programera.

Klase[uredi | uredi izvor]

Centralni koncept Simule 67 je objekat. Objekat je instanca klase koji sadrži svoje promenljive i ponašanja koja se definišu putem klasne deklaracije. Pristupanje određenim poljima datog objekta vrši se tačka notacijom.

Funkcije i procedure za manipulaciju teksta[uredi | uredi izvor]

Simula 67 je uvela karakter (engl. Character) i tekst (engl. Text ) kao nove tipove podataka.

Standardni ulaz/izlaz[uredi | uredi izvor]

Algolu 60 je često zamerano to što nije imao procedure za ulaz/izlaz. Pošto je Simula pre svega zamišljena da bude jezik opšte namene njeni tvorci su smatrali da će ovim procedurama jezik dobiti na fleksibilnosti.

Minimalni program[uredi | uredi izvor]

Prazan fajl je minimalni program u Simuli, a meri se veličinom izvornog koda. Međutim, minimalni program se uglavnom predstavlja kao prazan blok:

Begin
End;

On počinje sa izvršavanjem i odmah se zaustavlja.

Program u Simuli nema sopstvenu povratnu vrednost.

"Zdravo svete!" program[uredi | uredi izvor]

Primer "Zdravo svete!" programa u Simuli:

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

Simula nije osetljiv na velika i mala slova.

Klase, potklase i virtualne procedure[uredi | uredi izvor]

Primer korišćenja klasa, potklasa i virtualnih procedura

Begin
   Class Glyph;
      Virtual: Procedure print Is Procedure print;
   Begin
   End;

   Glyph Class Char (c);
      Character c;
   Begin
      Procedure print;
        OutChar(c);
   End;

   Glyph Class Line (elements);
      Ref (Glyph) Array elements;
   Begin
      Procedure print;
      Begin
         Integer i;
         For i:= 1 Step 1 Until UpperBound (elements, 1) Do
            elements (i).print;
         OutImage;
      End;
   End;

   Ref (Glyph) rg;
   Ref (Glyph) Array rgs (1 : 4);

   ! Main program;
   rgs (1):- New Char ('A');
   rgs (2):- New Char ('b');
   rgs (3):- New Char ('b');
   rgs (4):- New Char ('a');
   rg:- New Line (rgs);
   rg.print;
End;

U gorenavedenom primeru imamo jednu superklasu("Glyph"), dve potklase("Char" i "Line") i jednu virtualnu proceduru sa dve implementacije.

Izvršavanje počinje od "main" programa. Simula ne podržava koncept apstraktnih klasa.

Poziv funkcije po imenu[uredi | uredi izvor]

Simula podržava poziv funkcije po imenu. Jednostavan primer jeste funkcija za sumiranje, koja je implementirana na sledeći način:

Real Procedure Sigma (k, m, n, u);
   Name k, u;
   Integer k, m, n; Real u;
Begin
   Real s;
   k:= m;
   While k <= n Do Begin s:= s + u; k:= k + 1; End;
   Sigma:= s;
End;

Simulin standard određuje ograničenja za promenljivu kontrole toka(k) u "for" petlji. Stoga, gorenavedeni kod koristi "while" petlju zbog portabilnosti.

Suma:

se može implementirati na sledeći način:

Z:= Sigma (i, 1, 100, 1 / (i + a) ** 2);

Simulacija[uredi | uredi izvor]

Simula sadrži paket za simulaciju, preciznije za simulaciju diskretnih događaja. Taj paket je zasnovan na Simulinim objektno-orijentisanim karakteristikama. Sledeći primer pokazuje kako se Simula koristi za simulacije:

Mika, Žika i Pera kupuju odeću. Oni moraju da dele jednu kabinu. Svako od njih razgleda u butiku oko 12 minuta i onda koristi kabinu oko 3 minuta. Simulacija korišćenja kabine se implementira na sledeći način:

Simulation Begin
   Class Kabina; Begin
      Ref (Head) vrata;
      Boolean u_upotrebi;
      Procedure zahtev; Begin
         If u_upotrebi Then Begin
             Wait (vrata);
             vrata.First.Out;
         End;
         u_upotrebi:= True;
      End;
      Procedure napusti; Begin
         u_upotrebi:= False;
         Activate vrata.First;
      End;
      vrata:- New Head;
   End;
  
   Procedure ispisi (poruka); Text poruka; Begin
      OutFix (Time, 2, 0); OutText (": " & poruka); OutImage;
   End;

   Proces Class Osoba (ime); Text ime; Begin
      While True Do Begin
         Cekaj (Normal (12, 4, u));
         ispisi  (ime & " zahteva kabinu");
         kabina1.zahtev;
         ispisi (ime & " je usao u kabinu");
         Cekaj (Normal (3, 1, u));
         kabina1.napusti;
         ispisi (ime & " je izasao iz kabine");
      End;
   End;

   Integer u;
   Ref (Kabina) kabina1;

   kabina1:- New Kabina;
   Activate New Osoba ("Mika");
   Activate New Osoba ("Zika");
   Activate New Osoba ("Pera");
   Hold (100);
End;

Glavni blok počinje ključnom rečju "Simulation", da bi se omogućila simulacija. Paket za simulaciju se može koristiti na bilo kom bloku i simulacije mogu biti ugnježdene.

Objekat kabina koristi red "vrata" za pristup kabini. Kad neko zahteva kabinu, a ona se koristi, onda on mora da čeka u redu. Kad neko napusti kabinu, prvi iz reda napušta red.

Osoba je potklasa klase Proces i njeno ponašanje je opisano funkcijom čekaj.

"Main program" kreira sve objekte i smešta osobe u red. "Main program" čeka 100 minuta, nakon čega se program terminira.

Reference[uredi | uredi izvor]

  1. ^ a b v g d đ Dal, Ole-Johan; Mirhog, Bjorn & Najgard, Kristen (1970). „Common Base Language, Norwegian Computing Center”. Arhivirano iz originala 12. 07. 2017. g. Pristupljeno 28. 11. 2017. 
  2. ^ Stravstrup, Bjarne. „Zvanična veb strana”. Pristupljeno 26. 11. 2017. 
  3. ^ Gozling, Džejms. Linkedin profil Džejmsa Gozlinga”. Pristupljeno 26. 11. 2017. 
  4. ^ Vong, Vilijam. „Before C, What Did You Use?”. Electronic Design. Pristupljeno 26. 11. 2017. 
  5. ^ „Internacionalna Federacija za Procesiranje Informacija”. Arhivirano iz originala 15. 03. 2015. g. Pristupljeno 28. 11. 2017. 
  6. ^ Smalltalk. Pristupljeno 26. 11. 2017. 
  7. ^ „GNU Cim”. 
  8. ^ „Institut inženjera elektrotehnike i elektronike”. Arhivirano iz originala 15. 5. 2015. g. Pristupljeno 28. 11. 2017. 
  9. ^ „Zvanični sajt ACM-a”. Pristupljeno 28. 11. 2017. 
  10. ^ „ACM Ole-Johan Dal i Kristen Najgard - Čitulja”. Acm.org. Arhivirano iz originala 19. 7. 2011. g. Pristupljeno 26. 11. 2017. 
  11. ^ „Jarek Sklenar Web Page”. Pristupljeno 26. 11. 2017. 

Spoljašnje veze[uredi | uredi izvor]