Симула

С Википедије, слободне енциклопедије
Симула
Оригинални називенгл. Simula
Изговара сесимула
Моделобјектно-оријентисани
Појавио се1962.
Аутор(и)Кристен Најгард и Оле-Јохан Дал
УтицајиАлгол
Утицао наC++, Јава


Симула (енгл. Simula; изговор: симула) је назив за два симулациона програмска језика, Симула I и Симула 67, који су развијени 60-их година 20. века у Норвешком компјутерском центру у Ослу, од стране Оле-Јохана Дала и Кристена Најгарда. Синтаксички то је верни наследник Алгола 60.[1]:1.3.1

Симула 67 је увео објекте[1]:2, 5.3, класе[1]:1.3.3, 2, наслеђивање, поткласе[1]:2.2.1, виртуалне процедуре[1]:2.2.3, симулације дискретних догађаја и сакупљање отпадака.[1]:9.1

Може се рећи да је Симула први објектно-оријентисани језик. Као што му и само име каже, дизајниран је за симулације и потребе тог домена су обезбедиле оквир за многе карактеристике данашњих објектно-оријентисаних језика.

Симула се користи за симулацију ВЛСИ дизајна, моделирање процеса, протокола, алгоритама, али и у другим областима као што су: рачунарска графика, подешавање типова и едукација.

Утицај Симуле је често подређен, а Симулини типови објеката су често имплементирани од стране других програмских језика међу којима су: C++, C#, Java, Object Pascal.

Рачунарски научници, као што су Бјарне Стравструп[2], творац C++, и Џејмс Гослинг[3], творац Јаве, су признали да је Симула имала главни утицај на њих и њихове језике.[4]


Историјат[уреди | уреди извор]

Кристен Најгард је почео да пише рачунарске програме за симулације 1957. године. Он је уочио потребу за бољим начином да се опишу хетерогеност и операције система. Да би наставио даље са својим идејама, Најгард је схватио да му је потребан неко са бољим вештинама у програмирању. Оле-Јохан Дал му се придружио у јануару 1962. год. Недуго након тога одлучено је да језик буде повезан са језиком Алгол 60. До маја исте године главни концепти за симулациони језик су били постављени. Настао је језик СИМУЛА I, програмски језик специјалне намене за симулацију дискретних догађаја.

Кристен Најгард је позван у UNIVAC крајем маја 1962. године у вези са рекламирањем њиховог новог UNIVAC 1107 рачунара. У тој посети Најгард је представио идеје Симуле Робертy Бернерy, директору системског програмирања UNIVAC-а. Бернер је био велики обожавалац Алгола и допала му се идеја о пројекту Симула. Он је позвао Најгарда на другу интернационалну конференцију за процесирање информација која је била организована од стране ИФИП-a[5], где је Најгард је преставио свој чланак о симули.

Норвешки рачунарски центар је добио UNIVAC 1107 у августу 1963. године са великим попустом на којем је Дал имплементирао Симулу I под уговором са UNIVAC-ом. Имплементација је базирана на "UNIVAC ALGOL 60" компајлеру. Симула I је била потпуно оспособљена на UNIVAC 1107 до јануара 1965. године. У наредних неколико година, Дал и Најгард су провели пуно времена предајући Симулу. Симула се убрзо проширила у неколико земаља широм света.

Дал и Најгард су изнели свој чланак о класним и поткласним декларацијама на ИФИП конференцији за симулационе језике у Ослу, маја 1967. године. Тај чланак је постао прва формална дефиниција СИМУЛЕ 67. Симула је имала доста утицаја на развој Смолток[6] и касније објектно-оријентисане програмске језике.

Касних 60-их и раних 70-их постојале су 4 главне имплементације Симуле:

  • UNIVAC 1100
  • System/360 и System/370 од стране Норвешког рачунарског центра
  • CDC 3000
  • TOPS-10

Ове имплементације су уграђене на многим платформама. TOPS-10 је имплементирао концепт јавних, заштићених и приватних променљивих и процедура, који је касније имплементиран у Симулу 87. Симула 87 је најновији стандард и распрострањен је на више платформи. Постоје 3 главне имплементације:

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

У новембру 2001. године, Дал и Најгард су добили Џон фон Нојманову медаљу од стране ИЕЕЕ[8], за увођење концепата објектно-оријентисаног програмирања кроз дизајн и имплементацију Симуле 67. У априлу 2002. године су добили Тјурингову награду од стране АЦМ[9], због идеја неопходних за настанак објектно-оријентисаног програмирања, кроз дизајн програмских језика Симула I и Симула 67.

Нажалост, ни Дал ни Најгард нису могли да присуствују додели награда, јер су преминули у јуну и августу исте године.[10]

Симула се и дан данас предаје на многим курсевима и универзитетима.[11]

Неке од карактеристика Симуле 67[уреди | уреди извор]

Подршка за алгоритме[уреди | уреди извор]

Симула 67 садржи многе погодности Алгола 60, којег су творци Симуле искористили као темељ јер је Алгол био изузетно популаран у Европи 60-их година.

Декомпозиција[уреди | уреди извор]

У циљу решавања неких великих проблема приступа се разбијању тог проблема на мање засебне целине које се даље могу решавати појединачно. Декомпозиција је посебно важна уколико се решавањем проблема бави више од једног програмера.

Класе[уреди | уреди извор]

Централни концепт Симуле 67 је објекат. Објекат је инстанца класе који садржи своје променљиве и понашања која се дефинишу путем класне декларације. Приступање одређеним пољима датог објекта врши се тачка нотацијом.

Функције и процедуре за манипулацију текста[уреди | уреди извор]

Симула 67 је увела карактер (енгл. Character) и текст (енгл. Text ) као нове типове података.

Стандардни улаз/излаз[уреди | уреди извор]

Алголу 60 је често замерано то што није имао процедуре за улаз/излаз. Пошто је Симула пре свега замишљена да буде језик опште намене њени творци су сматрали да ће овим процедурама језик добити на флексибилности.

Минимални програм[уреди | уреди извор]

Празан фајл је минимални програм у Симули, а мери се величином изворног кода. Међутим, минимални програм се углавном представља као празан блок:

Begin
End;

Он почиње са извршавањем и одмах се зауставља.

Програм у Симули нема сопствену повратну вредност.

"Здраво свете!" програм[уреди | уреди извор]

Пример "Здраво свете!" програма у Симули:

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

Симула није осетљив на велика и мала слова.

Класе, поткласе и виртуалне процедуре[уреди | уреди извор]

Пример коришћења класа, поткласа и виртуалних процедура

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;

У горенаведеном примеру имамо једну суперкласу("Glyph"), две поткласе("Char" и "Line") и једну виртуалну процедуру са две имплементације.

Извршавање почиње од "main" програма. Симула не подржава концепт апстрактних класа.

Позив функције по имену[уреди | уреди извор]

Симула подржава позив функције по имену. Једноставан пример јесте функција за сумирање, која је имплементирана на следећи начин:

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;

Симулин стандард одређује ограничења за променљиву контроле тока(к) у "for" петљи. Стога, горенаведени код користи "while" петљу због портабилности.

Сума:

се може имплементирати на следећи начин:

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

Симулација[уреди | уреди извор]

Симула садржи пакет за симулацију, прецизније за симулацију дискретних догађаја. Тај пакет је заснован на Симулиним објектно-оријентисаним карактеристикама. Следећи пример показује како се Симула користи за симулације:

Мика, Жика и Пера купују одећу. Они морају да деле једну кабину. Свако од њих разгледа у бутику око 12 минута и онда користи кабину око 3 минута. Симулација коришћења кабине се имплементира на следећи начин:

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;

Главни блок почиње кључном речју "Simulation", да би се омогућила симулација. Пакет за симулацију се може користити на било ком блоку и симулације могу бити угњеждене.

Објекат кабина користи ред "vrata" за приступ кабини. Кад неко захтева кабину, а она се користи, онда он мора да чека у реду. Кад неко напусти кабину, први из реда напушта ред.

Особа је поткласа класе Процес и њено понашање је описано функцијом чекај.

"Main program" креира све објекте и смешта особе у ред. "Main program" чека 100 минута, након чега се програм терминира.

Референце[уреди | уреди извор]

  1. ^ а б в г д ђ Дал, Оле-Јохан; Мирхог, Бјорн & Најгард, Кристен (1970). „Common Base Language, Norwegian Computing Center”. Архивирано из оригинала 12. 07. 2017. г. Приступљено 28. 11. 2017. 
  2. ^ Стравструп, Бјарне. „Званична веб страна”. Приступљено 26. 11. 2017. 
  3. ^ Гозлинг, Џејмс. Linkedin профил Џејмса Гозлинга”. Приступљено 26. 11. 2017. 
  4. ^ Vong, Vilijam. „Before C, What Did You Use?”. Electronic Design. Приступљено 26. 11. 2017. 
  5. ^ „Интернационална Федерација за Процесирање Информација”. Архивирано из оригинала 15. 03. 2015. г. Приступљено 28. 11. 2017. 
  6. ^ Smalltalk. Приступљено 26. 11. 2017. 
  7. ^ „GNU Cim”. 
  8. ^ „Институт инжењера електротехнике и електронике”. Архивирано из оригинала 15. 5. 2015. г. Приступљено 28. 11. 2017. 
  9. ^ „Званични сајт АЦМ-а”. Приступљено 28. 11. 2017. 
  10. ^ „АЦМ Оле-Јохан Дал и Кристен Најгард - Читуља”. Acm.org. Архивирано из оригинала 19. 7. 2011. г. Приступљено 26. 11. 2017. 
  11. ^ „Jarek Sklenar Web Page”. Приступљено 26. 11. 2017. 

Спољашње везе[уреди | уреди извор]