A Smalltalk programozási nyelv

Smalltalk és a Desing patterns

Az objektumorientált programozás világába új lendületet hozott a Gang of Four (GoF) könyve, a Design Patterns. A könyv összegyűjt sok már működő rendszerből olyan közös megoldásokat, amik például szolgálhatnak objektumorientált program tervezésekor. Egy ilyen tervezési minta leírásához hozzátartozik egy motivációleírás, a nehézségek és követelmények felsorolása, a megoldás leírása UML jellegű ábrákkal és szöveggel, illetve forráskódrészletekkel, és egy összefoglalás a lehetőségekről, hatásokról. A könyvben a forráskódrészletek Smalltalk nyelven is megjelentek. Ennek a néhány bekezdésnek a célja, hogy körüljárjuk, mi indokolta, hogy a kilencvenes évek közepén kiadott könyvben nem csak az akkor leginkább elterjedt objektumokat támogató nyelv, a C++ szerepelt, hanem egy hetvenes években kifejlesztett, a nagy közönség számára némileg ismeretlen Smalltalk. Későbbi tervezési mintákkal foglalkozó könyvek között van olyan, ahol csak Smalltalk példaprogramokat használnak.
Az egyik ok kétségtelenül a négy szerző egyike, Ralph E. Johnson, aki már a nyolcvanas években tanítja az objektumorientált programozást, természetesen a Smalltalk nyelv segítségével. Mégis, a könyv további három szerzőjét valószínűleg meg kellett győznie kedvenc nyelve alkalmasságáról. Milyen érveket használhatott tehát?

Objektumorientált nyelv

A Smalltalk már tervezésekor objektumorientált nyelv volt, ellenben napjaink legtöbb objektumorientált programozást támogató nyelvével (C++, Object Pascal - Delphi). Ez tiszta elvi felépítést, és tiszta fogalmakat eredményezett. Ahogy Alan Kay, a Smalltalk fő fejlesztője mondta, "én találtam ki az >>objektumorientált<< kifejezést, és én mondom, nem a C++-ra gondoltam". Sőt, maga Bjarne Stroustrup, a C++ atyja mondja: "A C++ társadalom legfőbb problémája, hogy a C++-t nem úgy használja, ahogy ajánlatos volna, hanem mint mindentudó C-t, vagy mint butított Smalltalk-ot."

Egyszerűség

A Smalltalk felépítésekor elsőrendű szempont volt az egyszerűség. Ennek olyan következményei vannak, mint például a láthatósági szabályok drámai egyszerűsége a Java-hoz képest, amit sokan sokféleképpen értékelnek, de tény, hogy rövid példaprogramokhoz sokkal elegánsabb. (Mellesleg a láthatósági szabály védelmében igen sok cikk született a Smalltalk társadalmon belül a Java-val szemben.) A nyelv olyan, mint egy leegyszerűsített angol nyelv, erre egy jó példa a "Jack pass the ball to Jill" mondat, ami Smalltalkul "Jack passTheBallTo: Jill", vagy még inkább "Jack pass: theBall to: Jill"

Átfogó elv

A világ objektumorientált nyelvei általában megkülönböztetik az osztályokat és az elemi típusokat, például a számok közötti műveletek másképpen írandóak, mint az osztályokkal végzett műveletek. A Smalltalkban akkora a tervezési elv ereje, hogy a számok közötti műveletek precedenciájánál is erősebbnek bizonyult. Ennek az eredménye az a sokakat zavarba ejtő mód, ahogy az aritmetikai kifejezések kiértékelődnek Smalltalkban, de szintén ennek köszönhető a nyelv egyszerűsége és elvi tisztasága is.

Skálázhatóság

Sok egyszerű nyelv van a programozási nyelvek világában, ám nagy többségüknek ez korlátot is szab. Nehéz Basic nyelven nagy rendszert, például grafikus felületet kezelő programot írni. A Smalltalk jól skálázható, mert a sok apró alkotóelem együttes ereje jól kihasználható, és fejleszthető. Alan Kay a nyelv kifejlesztése előtt mikrobiológiával is foglalkozott, és egy olyan rendszer elkészítése volt a célja, ami hasonlít a sejtekre és a testre, sok alkotóelem egy konzisztens egész szolgálatában.

Nézzük most meg a kérdést a másik oldalról: mire van szükség egy tervezési minta leírásakor, milyen követelményeknek kell eleget tennie a nyelvnek. A fő követelmény, hogy a példaprogram jól adja vissza a lényeget, a megoldás ötletét. Ez minden esetben egy olyan rendszer, aminek osztályok illetve objektumok a részesei, és a köztük fennálló kapcsolatok játsszák a főszerepet. A példaprogramban tehát deklarálni kell osztályokat illetve objektumokat, és világossá tenni a köztük fennálló kapcsolatokat, mint öröklődés, aggregáció, műveleti paraméter, stb. Egy jól illusztráló nyelv tömör és érthető.

A Smalltalk valóban tömör, és az a tapasztalat, hogy a nyelven programozni nem tudók is értik a példaprogramokat. Ennek az oka valószínűleg az, hogy a Smalltalk szintaxis annyira egyszerű, hogy a program nem rendelkezik a programozási nyelvekre általában jellemző "hókuszpókusz" jelleggel, ami a nyelvet nem ismerőket sokkal inkább a nyelv szintaxisának megértésére késztet, mintsem a program lényegének megértésére.