Simula

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
Simula
llenguatge de programació
Simula - logo.svg
Autor Ole-Johan Dahl ,
Kristen Nygaard
Data d’origen 1960 - 1967
Última versió Simula I (maig de 1962) i Simula 67 (1967)
Ús Propòsit general
Paradigmes Orientat a objectes
Escrivint Fort
Especificacions d'idioma [1]
Influenciat per ALGOL 60
Va influir Ada , C ++ , C # , Eiffel , Java

Simula va ser el primer llenguatge de programació orientat a objectes (OOP) . Smalltalk i C ++ se’n deriven; tanmateix, el llenguatge de programació orientat a objectes més proper a Simula és Java .

Va ser desenvolupat a partir dels anys seixanta al Norwegian Computing Center d’Oslo, principalment per Ole-Johan Dahl i Kristen Nygaard.

Descripció

La primera versió del llenguatge, concebuda com a superconjunt d’ Algol 60 , és del 1962. No es va produir un compilador específic del llenguatge, però Sperry Rand (o més aviat la seva divisió UNIVAC ) va modificar el seu compilador ALGOL per als sistemes UNIVAC 1100 per poder compileu també les extensions Simula.

El 1967 va veure la llum l’autèntic Simula, que va prendre el nom de Simula 67: un llenguatge per si mateix, que introdueix moltes de les característiques d’un llenguatge modern orientat a objectes, com ara: objectes , classes , subclasses , herència , virtual mètodes (que a Simula, però, s'anomenen "procediments virtuals"), rutines, esdeveniments i la gestió i alliberament automàtic de memòria mitjançant la recollida d' escombraries .

Més tard, el Simula 67 es va canviar el nom amb el nom del seu predecessor Simula, que al seu torn es va canviar el nom de Simula I.

"Simula sempre ha estat un llenguatge de programació de propòsit general , ja que s'ha originat com un superconjunt d'Algol. Malauradament, el seu nom reductor ha estat la principal font de malentesos per part dels usuaris potencials." [1] Tot i que, precisament per aquest motiu, s'ha utilitzat principalment per a simulacions (per exemple: VLSI, modelització de processos, protocols, algorismes, sistemes quasi paral·lels), el Simula també ha trobat aplicació en altres camps, com ara la composició tipografia i gràfics per ordinador. A més, no s’ha d’oblidar que els compiladors Simula s’escriuen en Simula com a prova del fet que es tracta d’un llenguatge d’ús general.

Per les seves característiques, Simula ha proporcionat el paradigma de la majoria dels llenguatges orientats a objectes actuals i fins i tot si les classes i objectes definits per Simula són adquirits per altres llenguatges com C ++, C # , Eiffel i Java, la seva influència encara se subestima sovint. Tanmateix, Bjarne Stroustrup va reconèixer que Simula era el llenguatge que més el va influir quan va desenvolupar C ++ amb l'objectiu d'afegir a la velocitat computacional que ofereixen els llenguatges de baix nivell com BCPL la millora de la productivitat que permet Simula.

Simula encara s’ensenya, encara que d’una manera limitada, en diversos cursos universitaris: per exemple, Jarek Sklenar [2] ensenya Simula als estudiants de la Universitat de Malta . A més de l’àmbit acadèmic, el Simula encara s’utilitza al Laboratori de Recerca Simula . [3]

BETA es va derivar de Simula, però ha tingut una difusió limitada.

Història

El següent es basa en un assaig històric de Jan Rune Holmevik. [4]

Kristen Nygaard va començar a escriure programes de simulació per ordinador el 1957. Va argumentar que calia trobar una manera millor de descriure l'heterogeneïtat i el funcionament d'un sistema. Es va adonar, però, que per fer un pas cap a un llenguatge de programació formal capaç de descriure un sistema, necessitava algú més expert en programació que ell. Al gener de 1962, Ole-Johan Dahl es va unir a l'equip i gairebé immediatament els dos van decidir donar suport al nou llenguatge a Algol 60. El maig de 1962 es van establir les bases del llenguatge de simulació: va néixer Simula, un llenguatge de programació capaç de simular esdeveniments discrets.

A finals de maig, Kristen Nygaard va ser convidada per UNIVAC amb motiu de la comercialització del nou ordinador UNIVAC 1107. Durant la visita, Kristen Nygaard va parlar de les seves idees sobre Simula a Robert Bemer, el director de programació de sistemes d'UNIVAC. Bemer era fan d’Algol i va trobar convincent el projecte Simula. Bemer també va ser president d'una sessió a la segona conferència internacional sobre processament d'informació , organitzada per l'IFIP. Així doncs, va convidar Nygaard a la conferència, que va presentar la ponència "SIMULA - An Extension of ALGOL to the Description of Discrete-Event Networks".

L'agost de 1963 el Norwegian Computing Center va comprar, amb un descompte considerable, un UNIVAC 1107, en el qual Dahl va desenvolupar el SIMULA, precisament com a extensió del compilador Algol 60, sota contracte amb UNIVAC. UNIVAC també volia crear un compilador Simula basat en Fortran, però el projecte va ser abandonat perquè Dahl i Nygaard consideraven que l’estructura de blocs del nou llenguatge era essencial, cosa que hauria estat incompatible amb Fortan. [5]

El gener de 1965, el Simula és plenament operatiu. Durant els propers dos anys, Dahl i Nygaard dediquen gran part del seu temps a ensenyar Simula. El llenguatge s’estén a molts països i els compiladors estan fets per a altres màquines, com ara el Burroughs B5500 i el rus URAL-16.

El 1966 Tony Hoare introdueix la classe discogràfica , que Dahl i Nygaard amplien amb el concepte de prefix i altres característiques.

El maig de 1967, Dahl i Nygaard van presentar la seva ponència sobre classes i subclasses a la "Conferència de treball de l'IFIP sobre idiomes de simulació" a Oslo. Aquest document es converteix en la primera definició formal de Simula 67. El juny de 1967 es va celebrar una conferència per estandarditzar el llenguatge i iniciar diverses implementacions. Dahl va proposar unificar els conceptes de tipus i classe . La proposta va provocar un acurat debat i va ser rebutjada. El Simula 67 es va normalitzar formalment durant la primera reunió del SIMULA Standards Group (SSG) el febrer de 1968.

Simula va influir en el desenvolupament de Smalltalk i, posteriorment, d'altres llenguatges de programació orientats a objectes, com C ++, Eiffel i Java. També va inspirar el model per a la informàtica competitiva, tot i que, en realitat, només admet les rutines i no la competència real.

A finals dels anys seixanta i principis dels setanta, els quatre compiladors principals es van construir sobre sistemes:

L'últim estàndard de Simula, Simula 87, inclou els conceptes de públic, segur i privat manllevats del sistema operatiu TOPS-10 . Els tres compiladors principals que compleixen aquest estàndard són:

  • Simula AS
  • Simula Lund
  • GNU Cim

Al novembre del 2001, l' Institut d'Enginyers Elèctrics i Electrònics (IEEE) va atorgar a Dahl i Nygaard la medalla IEEE John von Neumann , amb la motivació: "Per introduir els conceptes bàsics de programació orientada a objectes mitjançant el disseny i la realització del Simula 67".

El febrer de 2002 van rebre el premi Turing 2001, considerat el premi Nobel d’informàtica, de l’ Associació per a la maquinària d’informàtica (ACM) , amb la motivació: "Per les idees fonamentals per al naixement de la programació orientada a objectes a través del disseny de Simula I i programació Simula 67 ”. Malauradament, ni Dahl ni Nygaard van poder assistir a la conferència ACM Touring Award [6] , prevista per a la conferència OOPSLA de novembre de 2002 a Seattle, ja que tots dos ja havien mort, a dos mesos l'un de l'altre. (Nygaard) del 2002.

El Simula Research Laboratory és un institut de recerca que porta el nom de Simula. Nygaard hi treballa a temps parcial des que es va fundar el 2001. Avui en dia les activitats de recerca de l'institut es duen a terme en diversos camps, com ara enginyeria de programari, informàtica científica, xarxes i sistemes distribuïts.

Exemples de codi

Programa mínim

El fitxer buit és el programa de simulació més petit, mesurat per la mida del codi font. Consisteix en una cosa, una instrucció fictícia. No obstant això, el programa mínim es representa més convenientment mitjançant un bloc buit que comença l'execució i finalitza immediatament.

 Comença
Fi ;

Hola món

Nota. El Simula no distingeix entre majúscules i minúscules .

Un exemple de hola world a Simula

 Comença
   OutText ("Hola món!");
   Outimage ;
Fi ;

Classes virtuals, subclases, mètodes i mètodes

Un exemple més realista de l’ús de classes, subclasses, mètodes i mètodes virtuals.

L'exemple mostra com algunes de les principals característiques de l'OOP d'avui ja eren presents a Simula, com ara la capacitat de crear mètodes virtuals. Aquests mètodes es declaren inicialment en una superclasse, sense necessàriament donar-los una implementació (només s'escriu la capçalera); més tard, amb la declaració de les subclasses, aquests mètodes es poden implementar de manera diferent en funció de la subclasse (aquesta és una de les característiques del polimorfisme )

 Comença
   Glif de classe ;
      Virtual : Procediment d' impressió És procediment d' impressió ;;
   Comença
   Fi ;

   glifus Caràcter de classe (c);
      Caràcter c;
   Comença
      Impressió de procediments ;
        OutChar (c);
   Fi ;

   línia de classe de glifos (elements);
      Ref (glif) Elements de la matriu ;
   Comença
      Impressió de procediments ;
      Comença
         Enter i;
         Per a i: = 1 Pas 1 fins a UpperBound (elements, 1) Feu
            elements (i) .print;
         Imatge Out;
      Fi ;
   Fi ;

   ! Programa principal;
   Ref (glif) rg;
   Ref (glif) Matriu rgs (1: 4);
   rgs (1): - Caràcter nou ('M');
   rgs (2): - Caràcter nou ('i');
   rgs (3): - Caràcter nou ('n');
   rgs (4): - Caràcter nou ('a');
   rg: - Nova línia (rgs);
   OutText ("El meu cantant favorit:");
   rg.print;
Fi ;

A l'exemple anterior, la superclasse de glifos té dues subclasses: caràcter i línia . L’execució comença amb el programa principal que, com podeu veure, a més de crear diversos objectes, utilitza el procediment d’ impressió definit a la subclasse de files ( rg és de fet un objecte de la subclasse de fila ). Tingueu en compte que la impressió també es defineix a la subclasse de caràcters , però no s’utilitza aquesta versió del procediment.

La sortida del programa és:

 La meva cantant preferida: Mina

A Simula no hi ha classes abstractes, ja que fins i tot es poden instanciar classes amb mètodes virtuals purs (encara no implementats). Això significa que en l'exemple anterior es poden crear totes les classes (inclòs el glif ); en aquest cas, la crida a un mètode virtual pur (per tant, encara no implementat) produeix un error en temps d'execució.

Passant paràmetres per nom

A Simular, el pas de paràmetres es fa normalment per valor (en el cas de paràmetres simples: enter , real , caràcter , booleà , incloses les variants curtes i llargues ) o per referència (en la resta de casos). Tot i això, podeu indicar al compilador que el canvi s’ha de fer per nom , mitjançant la paraula clau Nom . Això fa que una expressió passada com a paràmetre real a un procediment es revalori cada vegada que es demana el valor del paràmetre formal corresponent. A l'exemple següent, el procediment de suma utilitza aquesta característica per calcular la suma següent:

 Procediment de suma real (i, inf, sup, element);
   Nom i, element;
   Enter i, inf, sup;
   Element real ;
Comença
   Suma real ;
   i: = inf;
   Mentre jo <= sup Fes
      Comença
         suma: = suma + element;
         i: = i + 1;
      Fi ;
   suma: = suma;
Fi ;

Si, per exemple, voleu calcular la suma:

amb a = 6, un codi possible podria ser:

 Comença
   Procediment de suma real (i, inf, sup, element);
      Nom i element;
      Enter i, inf, sup;
      Element real ;
   Comença
      Suma real ;
      i: = inf;
      Mentre jo <= sup Fes
         Comença
            suma: = suma + element;
            i: = i + 1;
         Fi ;
      suma: = suma;
   Fi ;

   ! Programa principal;
   Enter i, a;
   Z real ;

   a: = 6;
   z: = suma (i, 1, 100, 1 / (i + a) ** 2);
   irreal (z, 5.12);
   imatge externa;
Fi ;

i produiria el resultat següent:

 1,4416 i -001

El següent exemple senzill mostra el comportament diferent del paràmetre vName , passat per nom, en comparació amb vValo , passat per valor.

 Comença
   Procediments valoNome (vValo, vNome);
      Nom v Nom ;
      Enter vValo, vName;
      Comença
         OutText ("Procediment valoNome"); Imatge Out;

         OutText ("vGlob val:"); Outint (vGlob, 4); Imatge Out;
         OutText ("vValo és vàlid:"); OutInt (vValo, 4); Imatge Out;
         OutText ("vName val:"); OutInt (vName, 4); Imatge Out;

         vGlob: = 1;

         OutText ("vGlob val:"); Outint (vGlob, 4); Imatge Out;
         OutText ("vValo és vàlid:"); OutInt (vValo, 4); Imatge Out;
         OutText ("vName val:"); OutInt (vName, 4); Imatge Out;
      Fi ;

   ! Programa principal;
   VGlob sencer ;

   OutText ("Programa principal abans de trucar a valName"); Imatge Out;

   vGlob: = 6;
   OutText ("vGlob val:"); Outint (vGlob, 4); Imatge Out;

   valorNom (vGlob + 4, vGlob + 4);

   OutText ("Programa principal després de trucar a valNome"); Imatge Out;
   OutText ("vGlob val:"); Outint (vGlob, 4); Imatge Out;
Fi ;

Com podeu veure, tots dos paràmetres, en el procediment valueName , s’utilitzen cadascun dos cops i només a la instrucció d’ impressió OutInt . Com que el paràmetre vName , que es passa per nom, es torna a calcular cada vegada que s’utilitza, la segona vegada té un valor diferent del primer, fins i tot si el procediment no hi ha realitzat cap operació directa, sinó només a la variable global vGlob de que depèn. De fet, el resultat obtingut és:

 Programa principal abans de trucar a valName
vGlob és: 6
Procediment valoName
vGlob és: 6
vValo és vàlid: 10
v El nom és vàlid: 10
vGlob té: 1
vValo és vàlid: 10
v El nom és vàlid: 5
Programa principal després de trucar a valName
vGlob té: 1

La classe de simulació per defecte

El Simula proporciona (a més d'altres classes de sistemes) la classe de simulació predeterminada que, com el seu nom indica, proporciona eines (és a dir, atributs i mètodes ) per a la simulació d'esdeveniments discrets .

A l'exemple següent, Piero, Elda i Walter compren en una botiga de roba, que tanmateix només té un vestidor que s'ha d'utilitzar al seu torn. Cadascun dels tres clients examina els articles de la botiga durant una mitjana de 12 minuts (amb distribució normal , amb una desviació estàndard de 4, del temps d’examen) i després utilitza el vestidor durant una mitjana de 3 minuts (amb distribució normal, amb norma desviació d'1, del temps d'ús). El programa simula el que passa i, durant els primers 30 minuts, imprimeix quan cadascun dels tres clients està a punt per provar una peça de roba al vestidor, entra al vestidor i surt del vestidor.

 Comença la simulació
   Classe classeCamerino; Comença
      Port Ref (Head);
      Ocupat booleà ;
      Necessiten tràmits Comença
         Si està ocupat, llavors Comenceu
             Espera (port);
             porta.First.Out;
         Fi ;
         ocupat: = Cert ;
      Fi ;
      Procediments d’ abandonament; Comença
         ocupat: = Fals ;
         Activeu porta.First;
      Fi ;
      port: - Cap nou ;
   Fi ;
Procediments redactar informe (missatge); Missatge de text ; Comença
      OutFix (Temps, 2.0); OutText (":" & missatge); Imatge Out;
   Fi ;

   Persona de la classe de procés (nom); Nom del text ; Comença
      While True do begin
         Mantenir (Normal (12,4, vestit));
         escriviu Informe (nom i "necessita vestidor");
         vestidor. vestidor necessari;
         escriure Informe (nom & "entrar al vestidor");
         Mantenir (Normal (3.1, vestit));
         camerino.leave;
         escriure Informe (nom & "surt del vestidor");
      Fi ;
   Fi ;

   Llavor sencera ;
   Vestidor Ref (classeCamerino);

   llavor: = 4321;
   vestidor: - Nova classeCamerino;
   Activa Nova persona ("Piero");
   Activa Nova persona ("Elda");
   Activa Nova persona ("Walter");
   Mantenir (30);
Fi ;

El bloc principal del programa té el prefix de la classe Simulació .

L'objecte del vestidor utilitza una cua ( porta ) per permetre l'accés al vestidor. Quan un client necessiti el vestidor i ja estigui ocupat, ha d’esperar en aquesta cua ( Wait(porta) ). Quan un client surt del vestidor, el primer client de la cua (si n'hi ha almenys un) s'activa ( Activate porta.first ) i surt de la cua ( porta.First.Out ).

La classe persona és una subclasse de la classe Process (que és un atribut de la classe Simulation ) i, per tant, pot utilitzar els mètodes Process : per exemple, mantingueu premut per simular tant el temps que un client es queda a la botiga com el temps al vestidor. .

El programa principal crea els tres objectes de la classe de persona (és a dir, Piero , Elda i Walter ) i els col·loca a la cua d'esdeveniments. Després tot continua durant 30 minuts de temps simulat. A continuació es mostra el resultat produït pel programa, compilat amb el compilador PC-Simula per MS / DOS:

 10.67: Elda necessita el vestidor
10.67: Elda entra al vestidor
11.62: Piero necessita el vestidor
14.08: Piero entra al vestidor
14.08: Elda surt del vestidor
14.41: Walter necessita el vestidor
16.63: Walter entra al vestidor
16.63: Piero surt del vestidor
19.64: Walter surt del vestidor
26.38: Elda necessita el vestidor
26.38: Elda entra al vestidor
28.60: Piero necessita el vestidor
29.05: Piero entra al vestidor
29.05: Elda surt del vestidor

El mateix programa, compilat amb el compilador Cim per MS / DOS, produeix el resultat següent:

 6.92: Piero necessita el vestidor
6.92: Piero entra al vestidor
7.11: Walter necessita el vestidor
7.97: Elda necessita el vestidor
9.78: Walter entra al vestidor
9.78: Piero surt del vestidor
12.37: Elda entra al vestidor
12.37: Walter surt del vestidor
15.25: Elda surt del vestidor
21.48: Walter necessita el vestidor
21.48: Walter entra al vestidor
21.55: Piero necessita el vestidor
25.13: Piero entra al vestidor
25.13: Walter surt del vestidor
27.83: Piero surt del vestidor
28.30: Elda necessita el vestidor
28.30: Elda entra al vestidor

El fet que els dos resultats siguin diferents no és sorprenent, ja que el programa fa ús normal del procediment intrínsec que, fins i tot si s’inicialitza amb la mateixa llavor (en el nostre cas 4321 ), retorna valors que varien d’implementació a implementació. Com passa amb tots els procediments estadístics, de fet són les característiques estadístiques dels valors els que retornen els que importen; per a aquest procediment, en particular, els valors de retorn han de ser tals que, si el procediment es denomina un gran nombre de vegades, la seva distribució és de tipus normal, amb una mitjana determinada i una desviació estàndard determinada.

Nota

  1. ^ La frase entre cometes dobles està extreta de: GC Macchi. Llista de desitjos revisada. Butlletí ASU (Association of Simula Users) , vol. 19, n. 1, juliol de 1991, pàg. 9
  2. ^ Pàgina web de Jarek Sklenar
  3. Simula Research Laboratory - simula.no
  4. JR Holmevik. "Compilar Simula: Un estudi històric de la gènesi tecnològica". IEEE Annals in the History of Computing, 16 (4), 1994, pp. 25–37
  5. ^ OJ Dahl. "Les arrels de la programació orientada a objectes - Simula 67", a "Software Pioneers", Springer Verlag, 2002, pàg. 79
  6. ^ Conferències del Premi ACM Turing

Bibliografia

Altres projectes

Enllaços externs

Control de l'autoritat LCCN (EN) sh85122757 · GND (DE) 4191599-9
Informàtica Portal de TI : accediu a les entrades de Viquipèdia relacionades amb TI