Simula

Origem: Wikipédia, a enciclopédia livre.
Simula
Paradigma Orientada a objetos
Surgido em 1967
Criado por Ole-Johan Dahl, Kristen Nygaard
Principais implementações GNU Cim
Influenciada por ALGOL 60
Influenciou Linguagens de programação orientadas a objetos

Simula é uma família de linguagens de programação, projetadas para apoiar a simulação de eventos discretos, criada entre 1962 e 1968 por Kristen Nygaard e Ole-Johan Dahl no Centro Norueguês de Computação em Oslo.

Sintaticamente, Simula é um super-conjunto de ALGOL 60.

História[editar | editar código-fonte]

Kristen Nygaard começou a escrever programas de simulação computacional em 1957. Nygaard viu a necessidade de uma melhor forma de descrever a heterogeneidade e o funcionamento de um sistema. Para ir mais longe com suas idéias em linguagem de computador formal para descrever um sistema, Nygaard percebeu que ele precisava de alguém com mais habilidades do que ele tinha em programação. Ole-Johan Dahl juntou-se ao seu trabalho em janeiro de 1962. A decisão de estabelecer uma relação entre a línguagem e o Algol 60 foi feita um pouco depois. Por Maio de 1962 os principais conceitos para uma linguagem simulação foram definidos. "Simula I" nasceu.

Kristen Nygaard foi convidado a Univac por Maio de 1962 em conexão com o marketing do seu novo computador UNIVAC 1107. Na visita que Nygaard apresentou as idéias do Simula para Robert Bemer, o diretor de sistemas de programação da Univac. Bemer era fã de Algol e achou o Projeto Simula atraente. Bemer também estava presidindo uma sessão na segunda conferência internacional sobre o tratamento de informações hospedado pelo IFIP. Ele convidou Nygaard, que apresentou o documento "SIMULA - An Extension of ALGOL to the Description of Discrete-Event Networks".

O Centro Norueguês de Computação obteve um UNIVAC 1107 em Agosto de 1963 a um desconto considerável, e Dahl implementou Simula I sob contrato com a Univac. A implementação foi baseada no compilador UNIVAC Algol 60. Simula I estava totalmente operacional no UNIVAC 1107 em janeiro de 1965. Nos dois anos seguintes Dahl e Nygaard gastaram muito tempo ensinando Simula. Simula foi ensinado a vários países espalhados por todo o mundo e Simula I foi posteriormente executado em computadores Burroughs B5500 e do computador russo URAL-16.

Em 1966 C. A. R. Hoare introduziu o conceito de registro classe construir, que Dahl e Nygaard estenderam com o conceito de prefixo e outros recursos para satisfazer as suas exigências de um processo generalizado conceito. Dahl e Nygaard apresentaram seus artigos em Declarações de classe e subclasses na Conferência IFIP Simulação de Linguagens em Oslo, em maio de 1967. Este trabalho se tornou a primeira definição formal de Simula 67. Em junho de 1967 uma conferência foi realizada para uniformizar a linguagem e iniciar uma série de implementações. Dahl fez a proposta de unificar o Tipo e concepção da classe. Isto levou a sérias discussões, e a proposta foi rejeitada pelo conselho de administração. Simula 67 foi formalmente padronizado sobre a primeira reunião de Simula Standards Group (SSG) em fevereiro de 1968.

Simula foi influente no desenvolvimento de Smalltalk e, mais tarde na programação orientada a objetos. Ele também ajudou a inspirar o modelo de computação concorrente, embora Simula apenas suporta co-rotinas e não verdadeiros concorrentes.

No fim da década de sessenta e início da década de setenta, houve quatro principais implementações do Simula:

Estas implementações foram portadas para uma série de plataformas. O TOPS-10 implementou o conceito de variáveis e métodos públicos, protegidos e privados, que mais tarde foram integrados no Simula-87.
Simula 87 é o último padrão e foi portado para diversas plataformas. As três principais implementações são:

Em novembro de 2001, Dahl e Nyggard foram premiados com a medalha IEEE John von Neumann do Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE), pela introdução dos conceitos fundamentais da programação orientada a objetos através do desenho e implementação do SIMULA 67. Em fevereiro de 2002, eles receberam o premio 2001 Turing A.M. pela Associação para Maquinaria da Computação. Infelizmente tanto Dahl como Nygaard não puderam presenciar a homenagem que foi agendada na conferência OOPSLA 2002 em Seattle, pois ambos faleceram respectivamente em Junho e Agosto daquele ano.

Exemplos de código[editar | editar código-fonte]

Hello world[editar | editar código-fonte]

BEGIN
  WHILE 1=1 DO
    BEGIN
      outtext("Hello World!");
      outimage;
    END;
END;

Ou também:

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

Classes, subclasses e métodos virtuais[editar | editar código-fonte]

Um exemplo com uso de classes, subclasses e métodos virtuais:

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;

O exemplo acima tem uma superclasse (Glyph) com duas subclasses (Char e Line). Há um método virtual com duas implementações. A execução se inicia no bloco Main program.

Simula não tem o conceito de classes abstratas, já que classes com métodos virtuais puros podem ser instanciadas. Isto significa que no exemplo acima, todas as classes podem ser instanciadas. No entanto, a chamada de um método virtual puro produzirá um erro em Run time.

Passagem de parâmetros por nome[editar | editar código-fonte]

Simula suporta passagem de parâmetros por nome, portando a técnica Aparelho de Jensen pode ser facilmente implementada. No entanto, a passagem de parâmetros padrão é por valor, diferentemente de ALGOL que usa por padrão a passagem de parâmetros por nome.

Ligações externas[editar | editar código-fonte]

Ver também[editar | editar código-fonte]