Ugrás a tartalomhoz

Simula

A Wikiszótárból, a nyitott szótárból


Főnév

Simula (tsz. Simulas)

  1. (informatika) Simula nyelv

Simula — A modern objektumorientált programozás bölcsője

1. Történeti háttér

Létrejötte

  • Kifejlesztők: Ole-Johan Dahl és Kristen Nygaard, norvég számítógéptudósok.
  • Fejlesztés helye: Norwegian Computing Center (Norsk Regnesentral), Oslo.
  • Első verzió: Simula I (1962).
  • Kiterjesztett verzió: Simula 67 (1967).

Motiváció

Nygaard és Dahl szimulációs programok írására kerestek jobb eszközt. A korabeli programozási nyelvek (pl. Fortran, ALGOL) nem tudták természetes módon modellezni a valós világ összetett rendszereit.

Példa:

  • tömegközlekedési rendszer szimuláció,
  • gyártósor,
  • banki sorban állás.

Probléma: ezekben a rendszerekben entitások (buszok, utasok, gépek) egymással interakcióban vannak, és állapotuk változik → ezt hagyományos nyelvvel nehéz volt modellezni.

Megoldás

Simula bevezette azt a szemléletet, hogy valós világ entitásait “objektumokként” lehet modellezni, amelyek:

  • adatokat tárolnak (attribútumok),
  • viselkedést írnak le (műveletek / metódusok),
  • kommunikálnak egymással.



2. Simula I → Simula 67

Simula I

  • ALGOL 60 alapjaira épült → szintaxis hasonló volt az ALGOL-hoz.
  • Elsősorban szimulációs feladatokhoz készült (eseményvezérelt szimuláció).

Simula 67

  • Jelentős általánosítás:
    • már nemcsak szimulációra, hanem általános célú programozásra is használhatóvá vált.
  • Újítások:
    • Osztályok (class)
    • Objektumok (object)
    • Öröklődés (inheritance)
    • Virtuális metódusok
    • Konstruktorok és destruktorok
    • Csomagolás (encapsulation)

Ezek mind alapkövei lettek az OOP-nek, amit később átvett a C++, Java stb.



3. Fő jellemzők

a) Osztályok és objektumok

Simulában egy class deklaráció definiál egy új adattípust, amely tartalmazhat:

  • adatmezőket (field),
  • metódusokat (procedure),
  • konstruktorokat.

Példa (szintaxis jellegű, leegyszerűsített):

Class Car;
Begin
    Integer speed;
    
    Procedure accelerate(increment);
    Integer increment;
    Begin
        speed := speed + increment;
    End;
    
End;

Objektum példányosítása:

Car myCar;
myCar :- New Car;
myCar.accelerate(10);

b) Öröklődés

Egy új osztály származtatható egy meglévőből, újrahasználva az ő tulajdonságait és viselkedését.

Példa:

Class ElectricCar Class Car;
Begin
    Real batteryLevel;
    
    Procedure recharge;
    Begin
        batteryLevel := 100.0;
    End;
    
End;

Itt az ElectricCar örökli a Car attribútumait és metódusait.

c) Virtuális metódusok

A Simula volt az első nyelv, amely bevezette a virtuális metódus fogalmát.

  • Lehetővé teszi, hogy egy metódust az alosztályok felüldefiniáljanak.
  • Dinamikus (futásidejű) metóduskiválasztást tesz lehetővé → polimorfizmus.



4. Hatás a programozás fejlődésére

a) OOP megteremtése

Szinte minden modern OOP-nyelv gyökerei a Simula 67-re vezethetők vissza:

  • C++ — közvetlen hatás (Bjarne Stroustrup C++-t fejlesztve Simulából merített).
  • Smalltalk — az első tiszta OOP nyelv, szintén a Simula ötleteit továbbvitte.
  • Java, C#, Python, Ruby — mind implementálják azokat az OOP-alapokat, amelyeket Simula vezetett be.

b) Szimulációs modellezés

A mai szimulációs rendszerek (pl. banki sorok, forgalmi rendszerek, gyártósorok modellezése) alapelvei Simula nyomán alakultak ki.

c) Tudományos hatás

A Simula bevezetett egy szemléletmódot, ami nemcsak programozási stílust, hanem:

  • szoftvertervezési mintákat,
  • modellezési technikákat,
  • tervezési elveket is megalapozott.



5. Miért volt forradalmi?

a) Gondolkodásmód váltás

Előtte:

  • Procedurális gondolkodás: “Mi történjen lépésről lépésre”.

Simula után:

  • Objektumorientált gondolkodás: “Kik a résztvevők? Mik az ő állapotaik és viselkedéseik? Hogyan interakcióznak?”

b) Absztrakció

Lehetővé tette, hogy a valós világot természetes módon leképezzük a programban:

  • Egy autó objektumként jelenik meg → autók közlekedhetnek, gyorsulhatnak, lassíthatnak.
  • Egy felhasználó objektumként jelenik meg → rendeléseket adhat le, regisztrálhat stb.



6. Nyelvi sajátosságok

a) Blokkstruktúra

Simula ALGOL-hagyományt követve blokkstruktúrált nyelv volt.

  • BEGIN … END blokkok határolták a kódot.

b) Eseményvezérelt szimuláció támogatása

Speciális konstrukciókat is tartalmazott idő-alapú szimulációkhoz:

  • Process konstrukció → párhuzamos események modellezése.
  • Hold, Wait, Resume műveletek → események időbeli ütemezése.



7. Mai helyzete

  • Simula ma már nem elterjedt a napi szoftverfejlesztésben.
  • Történeti, oktatási céllal néha még tanítják.
  • Hatása viszont mindenhol jelen van az OOP nyelvekben.

Példák:

Fogalom Simula C++, Java, C# stb.
Osztály Class Class
Objektum New instance New, new, new
Öröklés Class B Class A extends, : public A
Virtuális metódus Virtual procedure virtual, override



8. Összegzés

A Simula egy forradalmi nyelv volt:

  • Először alkalmazta az osztály, objektum, öröklődés, polimorfizmus fogalmait.
  • Megalapozta az objektumorientált programozás szemléletét.
  • Modern OOP-nyelvek (C++, Java, C#, Python, Swift, Kotlin stb.) mind építenek Simula örökségére.