Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Smalltalk programozási nyelv, avagy a legobjektumorientáltabb nyelv Készítette: Kőszegi Balázs, 2010.

Hasonló előadás


Az előadások a következő témára: "Smalltalk programozási nyelv, avagy a legobjektumorientáltabb nyelv Készítette: Kőszegi Balázs, 2010."— Előadás másolata:

1 Smalltalk programozási nyelv, avagy a legobjektumorientáltabb nyelv Készítette: Kőszegi Balázs, 2010

2 Bevezetés Objektumorientált programozási nyelv (második legrégebbi) Minden objektum Implementációs stratégia: interpreter Nincs típusellenőrzés Alkalmazás: prototípus készítése (gyorsan, egyszerűen elkészíthető GUI), illetve oktatási célok

3 A nyelv céljai Programozási felület egysége -> fejlesztői környezet Nagy rendszerek hatékony, egyszerű kezelése Strukturáltság, újrafelhasználhatóság Bővíthető, könnyen fejleszthető (nincs különbség a predefinit és felhasználó által definiált osztály között) Egy rugalmas, platform független nyelvet kaptunk.

4 Történet 1970-es évek: Silicon Valley-nél a PARC (Xerox Palo Alto Research Center Learning Research Group) nevű csoport kezdi fejleszteni Létrehozok: Alan Kay, Daniel H. Ingalls és Adele Goldberg – ACM Software System Award (1987) Verziók: Smalltalk 70 Smalltalk 80 (ma ezt használjuk) Ősei: Simula-67 és a LISP

5 Történet Első grafikus OO nyelv, saját fejlesztői környezettel -> kezdeti sikertelenségek, az akkori számítógépek fejletlensége miatt Az OO programozási nyelvek ősének tekinthető (C++, Java, C#, Obejctive-C) Az első Virtual Machine a byte-kód feldolgozására, utóbbi gépfüggetlen, ez teszi lehetővé a platformfüggetlenséget

6 Fejlesztői környezetek Követelmények: Egységes a különböző platformokon Interaktív Könnyen kezelhető, tanulható (ablakok, menük) Grafikus képernyőt használjon Grafikus eszköz használata: egér, grafikus ceruza A követelmények a nyelvre is jellemzőek, ezért Smalltalkban készített fejlesztői környezetek.

7 Fejlesztői környezetek: Squeak Smalltalk Smalltalk-80 implementáció. Szabad szoftver Macintoshra, Windowsra, Unixokra. GNU Smalltalk Smalltalk-80 implementáció. Szabad szoftver Unixokra és NT-re. Little Smalltalk Minimális Smalltalk-fordító, szabad szoftver. VisualAge Smalltalk Kereskedelmi szoftver. OS/2, Windows, AIX, HP-UX, Sun. Cincom Smalltalk Három különböző Smalltalk-verzió. Kereskedelmi program. Windows, Linux, Power Mac. QKS Smalltalk Kereskedelmi szoftver. Windows, Macintosh. Smalltalk/X Kereskedelmi program. Linuxra, Windowsra, számos Unixra. Dolphin Smalltalk Kereskedelmi program. Windows.

8 Dolphin Smalltalk

9 Class Browser: osztályok és hierarchikus szerkezetük megjelenítése ◦Object allSubinstances size. ==

10 Dolphin Smalltalk Workspace: „Kódszerkesztő” Display It – végrehajtás, utolsó eredmény megjelenítése Evaluate It – végrehajtás Debug It – végrehajtás a hibakereső ablakban Browse It - végrehajtás, majd a Class Browser- ben a végrehajtás eredményeként kapott objektum osztályához ugrik Inspect It - végrehajtás, majd Inspector ablak- ban (objektumok tulajdonságainak megjelenítése) a végrehajtás eredményeként kapott objektumot jeleníti meg Transcript: Rendszertől származó szöveges üzenetek megjelenítése, de a felhasználói objektumok is írhatnak ide

11 Dolphin Smalltalk

12 Szintaxis ASCII karakterek Case-sensitive Osztályok, globális változók: csupa nagybetű Lokális változó, osztály-,objektum metódus: kisbetűk, több szó esetén a további szavak kezdőbetűje nagy

13 Szám literálok Általános alak: [-][ r] [. ][e[+|-] ] ◦Radix: a számrendszer alapszáma 2 és 36 között (A=10..Z=36) ◦A kitevő mindig 10-es számrendszerbeli ◦Pl.: 12, 2r111e5 Típus: automatikusan dől el ◦Float (lebegőpontos), ha van benne., függetlenül attól, hogy esetleg éppen egy egész számot ábrázol ◦Fraction (hányados), ha a negatív kitevő miatt nem lehet egész az értéke ◦SmallInteger, ha elfér az egész szám a gépi szóban (2 byte) ◦LargeInteger, különben, tetszőlegesen nagy szám ábrázolható

14 Karakterek, stringek, szimbólumok Karakterek: $ >, tehát a $ jellel kezdődnek ◦Pl.: $a == ‘a’, $ == Character space == „szóköz”, $$ == ‘$’ Stringek: aposztrófok közötti szövegrészek a String osztály példányai (karakter tömbök) A String osztály nem leszármazottja az Array-nek csak „testvére”, mindkettő az ArrayCollection-ből származik ◦Pl.: ‘Joe’’s Pub’ Szimbólumok: A rendszerben definiált azonosítók (osztályok, változók…) nevei. #-vel kezdődnek, a Symbol osztály példányai, ami a String osztály leszármazottja ◦Pl.: #GREEN, #Object A szimbólumok mindig egyediek.

15 Tömbök Literálok tömbje: #(... ) Nem lehet benne változó (kivéve: true, false, nil) Space az elválasztó jel az elemek között Nincs a tömb elemeinek egységes típusa: egy elem lehet szám, karakter, string a többit szimbólumnak értelmezi, vagy egy elem lehet egy tömb is (egymásba ágyazás) ◦Pl.: #(1 2 3) #(1,2,3) == #(1 #, 2 #, 3) #($ (1, true) ‘Alma’ var) == #($ (1 #, true) ‘Alma’ #var) Létezik asszociatív tömb, halmaz és zsák típus is

16 Változók Szintaxis: betű[betű|szám]* Minden változó referencia Típus nélküliek, pontosabban a típusuk az Object-re mutató referencia Alapértelmezésben a változók UndefinedObject osztály (singleton) nil nevezetű példányára mutatnak Deklarálás: | > >… > |

17 Változók fajtái Példányváltozó: objektumok részei; élettartam az objektum élettartama Időszakos változó: művelet, blokk lokális változói, argumentumai; élettartam a művelet, blokk végrehajtása (blokknál érték szerinti paraméterátadás történik) Osztott változó: több objektum is hozzáfér (pl.: globális változók, osztályváltozók); explicit felszabadítás Pszeudováltozó: előre definiált egyke objektumok (true, false, nil) és az aktuális objektum hivatkozásai (self, super)

18 Egyéb nyelvi elemek Blokk: maga is egy objektum [(: >…: >|)? >] ◦Pl.: | block | block := [:a :b |a**2 + b]. block value: 2 value: 1 Értékadás :=, ez egy kifejezés, ezért láncolható ◦a:=b:=c Megjegyzés: „Ez egy komment” A kifejezések elválasztása.-tal, nem zárja le az utasítást Visszatérési érték: ^ >, a program futása félbeszakad (alapértelmezett visszatérési érték a self)

19 Üzenet küldés Objektumok és osztályok üzenetekkel (Message osztály példányaival) kommunikálnak Unáris üzenet: > > ◦Pl.: 4 odd. Bináris üzenet: > > > Aritmetikai: +, -, *, /, **…. Összehasonlító:,=,~=,== (ugyanaz az objektum)… Logikai: &, | Egyéb: pont konkatenálás:, (vessző) ◦Pl.: == a + üzenet a 3 objektumnak a 4 paraméterrel Az operátorok túlterhelhetők, de nevük csak a + - * / \ | ~ % &, ? jelekből állhat (utolsó karakter nem lehet -)

20 Üzenet küldés Kulcsszavas üzenetek: > >: >... >: > ◦Pl.:(1 to: 3) asArray at: 2 put: ('uj elem'); yourself == (1 'uj elem' 3) Ekkor az üzenet a #at:put: lesz, a yourself azért kell, hogy magát a tömböt kapjuk vissza Üzenet precedencia: unáris > bináris > kulcsszavas; azonos precedencia estén: balról-jobbra ◦Pl.: (5 + 2 negated) == 3 1+1*2-3. == 1

21 Vezérlési szerkezetek - Elágazás Elágazás: nem más, mint Boolean típusú objektumnak küldött üzenet > ifTrue: [ > ] ifFalse: [ > ] ◦Pl.: a:=3.b:=4. a < b ifTrue: ['Az a kisebb'] ifFalse: ['Az a nagyobb egyenlo'].

22 Vezérlési szerkezetek – feltételes ciklus Szintaxisok: [ > ] whileTrue: [ > ] [ > ] whileFalse: [ > ] ◦Pl.: | a b | a := b := 240. [ a ~= b ] whileTrue: [ a < b ifTrue: [ b := b - a ] ifFalse: [ a := a - b ] ]. ^a == 16 Hátul tesztelős ciklus is készíthető: [ >] whileTrue Sőt „középen” tesztelős ciklus is!

23 Vezérlési szerkezetek – for ciklus Number osztály metódusa, így valós számokon is értelmezett Szintaxis: a lépésköz elhagyható, alapértelmezetten 1 >to: > by: > do: [: > | > ] ◦Pl.: ar:= Array new: 3. 3 to: 1 by: -1 do: [:i |ar at: (4-i) put: i.]. ^ar == (3 2 1)

24 Vezérlési szerkezetek – Triviális ciklusok Fix lépésszámú ciklus: >timesRepeat:[ >]. ◦Pl.: 4 timesRepeat: [ i := i * 2 ]. Végtelen ciklus: [ >] repeat. ◦Pl.: [i := i+1] repeat.

25 Iterátorok do: [ : | ] : végrehajtja az utasításokat a tömb elemeivel (nem a tömb elemein!) select: [ : | ] : visszaad egy olyan tömböt, melynek elemei az eredeti tömb azon elemei, melyekre igaz a feltétel reject: [ : | ] : select ellentéte collect: [ : | ] : végrehajtja az utasításokat a tömb elemein

26 Osztályok, objektumok A smalltalkban minden objektum (kivéve az értékadást) Osztály létrehozása: ◦ > subcalss: # > instanceVariableNames: ‘ >…’ ”példányvált.” classVariableNames: ‘ >…’ ”oszt.vált.” poolDictionaries: ‘ >…’ Váltózók felsorolását típus nélkül kell megadni Igazából ez egy üzenet az ősosztálynak, ebből is látszik, hogy az ősosztály is egy objektum. A nyelv csak az egyszeres öröklődést támogatja az viszont mindenképp szükséges! Vannak viszont protokollok. Automatikus szemétgyűjtés miatt, nincs szükség felszabadításra.

27 Metódusok Metódusok létrehozása: ◦ > (class)* methods > > A class kulcsszó akkor kell, ha a metódust az osztályhoz szeretnénk definiálni és nem a példányokhoz Absztrakt metódus csak részben lehetséges: az ősosztály absztrakt metódusának egy speciális metódust (subclassResponsibility) kell meghívni, ami egy hiba üzenettel jelzi, hogy az adott metódusnak absztraktnak kéne lennie

28 Láthatóság, kulcsszavak A példányváltozókat az osztály minden objektuma és leszármazottja számára látható, kívülről nem. A metódusok viszont bárhonnan elérhetők. Self és super kulcsszó használható: ezek az aktuális objektumra mutatnak, annyi különbséggel, hogy super hivatkozásnál az ősosztályban történik először a keresés. A super nem az aktuális objektumra hivatkozik, hanem az aktuálisan futó metódushoz tartozó objektum ősosztályára.

29 Self, super példa Object subclass: #Test1 … test ^1. proba1 ^self test. Test1 subclass: #Test2 … test ^2. proba2 ^super test. Test2 subclass: #Test3 … test ^3. Worksapce: t1 := Test1 new. t2 := Test2 new. t3 := Test3 new. t1 proba1. == 1 t2 proba2. == 1 t2 proba1. == 2 t3 proba2. == 1 Magyarázat: A t2-nek nincs proba1 metódusa, így az ősosztály proba1 metódusa fut le, ami a self-re hivatkozik, ez pedig a t2. A t3-nak nincs proba2 metódusa, így az ősosztály proba2 metódusa fut le, ami a super-re hivatkozik. Ez az aktuális metódus osztályának ősosztálya. Az aktuális metódus a proba2, ennek osztály Test2, ősosztálya Test3.

30 Köszönöm a figyelmet!


Letölteni ppt "Smalltalk programozási nyelv, avagy a legobjektumorientáltabb nyelv Készítette: Kőszegi Balázs, 2010."

Hasonló előadás


Google Hirdetések