ANSI – Programming Languages - Smalltalk

  • 1. csak a standardot használva lehessen elkészíteni egy implementációt,
  • 2. azokat a Smalltalk programok, melyek alkalmazkodnak a standardhoz ugyanazzal a szemantikával legyenek kiértékelve, implementációtól függetlenül,
  • 3. a standard legyen elég teljes ahhoz, hogy használható Smalltalk programokat lehessen írni csak az ő elemeinek felhasználásával.
  • A standard nem tartalmaz minden osztálykönyvtárat, amit elvárnánk, hogy egy Smalltalk implementáció tartalmazzon, például nem specifikálja sem a user-interface sem pedig az adatbázis keretrendszereket, gondoskodik azonban arról, hogy legyen lehetőség létrehozni ilyen osztályokat.Vagyis a standard igyekszik a legkevésbé korlátozni az implementációkat .

    A standardnak megfelelő implementáció és program

    Egy Smalltalk implementáció akkor felel meg a strandardnak, ha minden, a standardban meghatározott tulajdonságot pontosan a standarnak megfelelően teljesít. Ugyanakkor, ha a standardban egy szolgáltatást az „undefined” megjegyzéssel illetnek, akkor az arra utal, hogy a standardot megvalósító implementáció a szolgáltatással élő program elfogadása esetén ennek mikéntjét dokumentálni kell. Az „implementation defined” és a „unspecified” megjegyzéssel ellátott szolgáltatások esetén a standard megvalósítása azt jelenti, hogy kötelező módon meg kell valósítani ezeket, az előbbi esetén dokumentálva, az utóbbi esetén viszont nem szükséges a dokumentáció, csak egy értelemszerű megvalósítás. „Unspecified” esetre a leggyakoribb példa a protokollok visszatérítési értéke.

    Egy Smalltalk program akkor felel meg a standarnak, ha csak és kizárólag a standardban meghatározott szolgáltatásokkal él, akár ha azok “undefined” vagy “implementation defined” típusúak. (Természetesen, az ilyen szolgáltatások használata csökkentheti a hordozhatóságot.) Ugyanakkor, léteznek “erroneous” megjegyzéssel ellátott szolgáltatások, ezek használatát el kell kerülje a program.

    A Smalltalk nyelv meghatározásának módszere

    Az ANSI Smalltalkot meghatározó dokumentum a Smalltalk programot úgy definiálja, mint egy dinamikus számítógépes eljárás leírása, a Smalltalk - mint nyelv, pedig egy jelölésrendszer, mellyel ilyen programokat definiálhatunk. A Smalltalk, mint nyelv, meghatározása két összetevőből áll: az első az abszrakt számítógépes modell, ez meghatározza a környezeti elemeket, melyek adottak a leendő program számára, a második pedig a konkrét jelölésrendszer. Ezek együttesen valóban meghatározzák a nyelvet, de különválasztásuk biztosítja, hogy az implementációs technikák minimálisan legyenek befolyásolva.

    Az ANSI Smalltalk és a Smalltalk-80 közötti legalapvetőbb különbség az, hogy az ANSI Smalltalk teljes mértékben deklaratív leírást ad a Smalltalk programról, implementációs függőségek, részrehajló elemek teljesen el lettek távolítva a nyelvből.

    A Smalltalkbeli kiérékelés komputacionális modellje

    Az ANSI standardot összefoglaló dokumentumban a következő környzeti egységeket tárgyalják ezen a témakörön belül:

    Változó (variable): olyan entitás, amely egyetlen referenciát tárol egy objektumhoz, ez a változó értéke.

    Az üzenet (message): egy kéres egy bizonyos művelet kivitelezésére. Az objektum egy olyan entitás, amely képes egy jól definiált üzenet halmazt értelmezni. Ugyanakkor bizonyos állapotok tárolására is képes.

    Az objektum úgy válaszol egy bizonyos üzenetre, hogy végrehajt egy metódust (method). A metódusok egy bizonyos metódus szelektorral vannak asszociálva. A viselkedés (behavior) az a metódushalmaz, melyet az objektum használ arra, hogy válaszoljon a neki küldött üzenetekre.

    A metódusok egy sor kifejezésből (expressions) állnak. A program futása a kifejezések egymásutáni kiértékeléséből áll, egy vagy több metóduson belül. Három típusú kifejezést ismerünk. Az értékadást (assignments), az üzenetküldést (message sends) és a visszatérítést (returns).

    Az értékadás megváltoztataja egy változó értékét.

    Az üzenetküldés felfüggeszti az éppen aktív metódus futását, és a következő metódus első kefejezésével folytatja. Az üzenet küldés címzettje egy objektum, ennek a neve a fogadó (receiver). Az üzenet egy metódus szelektorból és az argumentumokból áll. Minden argumentum ugyancsak egy objektum referenciaértéke.

    A visszatérítés befejezi a metódus kiértékelését és visszaadja a vezérlést. Soron következik tehát a metódust meghívó metódus következő kifejezésének kiértékelése, az üzenet küldő kifejezés rákövetkezője. A visszatérítés egy értéket ad vissza, ez lesz a metódus lefutását előidéző üzenetküldés értéke.

    A Smalltalk program szövegében vannak még azonosítók, változó nevek (variable names) amelyeket referenciaként használhatunk egy bizonyos változóra. Az egyedüli művelet mely engedélyezett egy program számára a változók kapcsán, hogy új értéket adjon egy változónak, illetve lekérje jelenlegi értékét.

    Az állapot, melyet egy objektum megjelenít, egy sor változó, melyek kezdetben általában üresek. Ezek a példányváltozók (instance variables), melyek normális esetben egy-egy változónévhez vannak rendelve. Ugyanakkor az objektum állapotához tartozhatnak olyan névtelen változók is, melyeket jelzőszámokkal tudunk elérni. Az objektum állapota implementációfüggően less tárolva. A példányváltozókon kívül beszélhetünk diszkrét változókról (discrete variables) és az objektumoktól függetlenül léteznek. Azok a változók, melyeknek hatásköre a teljes program a globális változók (global variable), de vannak még osztály változók (class variables), illetve időszakos változók (temporary variables).

    A program futása közben létező objektumok között vannak statikusan és dinamikusan létrehozottak. A statikusan létrehozott objektum egy egyedi objektum, melyet a Smalltalk program szövege pontosan meghatározott.Ilyenek például a literálok és az osztály objektumok.

    A dinamikusan létrehozott objektumok nem egyedien létrehozottak, tulajdonképpen a metódusok kiértékelésének mellékhatásaiként jönnek létre és nincsen nevük sem.

    A Smalltalk nem adja meg kifejezetten az objektumok megsemmisítésének módját. A koncepció szerint, ha egy objektum létre lett hozva, akkor a program futás ideje alatt mindvégig létezni fog. A gyakorlatban sok objektumot a programnak cask egy roved részében használnak, a többi részben pedig teljesen mellőzve van. A Smalltalk implementációk garbage collection technikákat alkalmaznak, hogy felismerjék és visszanyerjék azokat az erőforrásokat, melyek olyan objektumokhoz vannak csatolva, melyeket már nem használ a program.

    ANSI Standard jelölésrendszer

    A környezeti elemek ismertetését követően az ANSI Standard jelölésrendszert mutat be. A hagyomány szerint a Smalltalknak nem volt olyan jelölőrendszere meghatározva, amely a teljes programra vonatkozna. A standard nem kívánja a Smalltalk ezen hagyományát megbontani, ezért csak egy absztrakt szintaxist határoz meg a Smalltalk program számára. Ez tartalmaz minden elemet, ami egy programban szerepelhet, és annak a módját, ahogyan ezek logikusan összeköthetőek az őket tartalmazó elemekben.

    A jelölésrendszer bemutatását három fejezetre osztja. A lexikai nyelvtan (lexical grammar) az érnyényes önálló karaktersorokat specifikálja, igazából ezek a Smalltalk nyelv tokenjeit határozzák meg. Ezek a tokenek lesznek azok az atomok, melyekből felépül a program. A metódus nyelvtan (method grammar) konkrétan meghatározza a metódusok létrehozásának és inicializálásának módját. Az absztrakt program nyelvtan meghatározza a teljes Smalltalk program absztrakt szintaxisát.

    A Smalltalk absztrakt program nyelvtan

    A Smalltalk program meghatározása egy sor program-elem meghatározása. Magába foglalja a diszkrét változókat, statikailag létrehozott objektumokat, és az objektumok viselkedését. Ezen kívül meghatározza a definíciók sorrendjét is. Egy konkrét definíció implementációfüggő lesz.

    << Smalltalk program >> ::= << program element >>+ << initialization ordering >>

    << program element >> ::= << class definition >> |

    << global definition >> |

    << pool definition >> |

    << program initializer definition >>

    A << Program elemen t>> minden, a program által használt elem definiálását tartalmazza. Az << initialization ordering >> meghatározza az egyes program elemek inicializálásának sorrendjét. Értelemszerűen a program futása az első program elem inicializálásával kezdődik, majd sorrendben folytatódik.

    A folytatásban a ANSI standardot közlő dokumentum bemutatja minden programelemre az abszrakt szintaxist, illetve a metódus és a lexikai nyelvtant.

    ANSI standard programkönyvtárak

    A standard osztálykönyvtár tulajdonképpen a osztályok külsőleg észlelhető viselkedését specifikálja, az implementációs kérdéseket nem taglalva. Azt sem határozza meg, hogy milyen hierarchiában kell elhelyezkedjenek egymáshoz képest, még a példányváltozókat sem jelöli ki. Az általánosítás jegyében protokollokra támaszkodva határozza meg az egyes osztályok viselkedését. A protokoll egy szemantikus interfész, kifejezések és üzenet-meghatározások csoportja. Felvezetésükhöz külön jelölésrenszert vezet be az ANSI standardot összesítő dokumentum. Ezek után bemutatja az alap protokollokat, mint például , , protokollokat.

    Készitette : Ilyés Enikő