Simula
Főnév
Simula (tsz. Simulas)
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.