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

Hasonló előadás


Az előadások a következő témára: "Smalltalk programozási nyelv, avagy a legobjektumorientáltabb nyelv"— 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 Dolphin Smalltalk 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: [-][<radix>r]<egészrész> [.<törtrész>][e[+|-]<kitevő>] 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 .<törtrész>, 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: $<<karakter>>, 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: #( <elem1> <elem2> ... )
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: | <<var1>> <<var2>>…<<varn>> |

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
[(:<<param1>>…:<<paramn>>|)?<üzenetek>>] 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: ^<<kifejezés>>, 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: <<objektum>> <<üzenet>> Pl.: 4 odd. Bináris üzenet: <<objektum>> <<bináris operátor>> <<argumentum>> 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: <<objektum>> <<kulcsszó_1>>: <<arg_1>> ... <kulcsszó_n>>: <<arg_n>> 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) == *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 <<feltétel_objektum>> ifTrue: [ <<üzenetek>> ] ifFalse: [ <<üzenetek>> ] 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: [ <<feltétel>> ] whileTrue: [ <<ciklusmag>> ] [ <<feltétel>> ] whileFalse: [ <<ciklusmag>> ] 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ő: [<<ciklusmag + felt>>] 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 <<kezdőérték>>to:<<végérték>> by:<<lépésköz>> do: [:<<ciklusváltozó>> | <<ciklusmag>> ] 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: <<hányszor>>timesRepeat:[<<ciklusmag>>]. Pl.: 4 timesRepeat: [ i := i * 2 ]. Végtelen ciklus: [<<ciklusmag>>] repeat. Pl.: [i := i+1] repeat.

25 Iterátorok <tömb vagy stream> do: [ :<ciklusváltozó> | <utasítások> ] : végrehajtja az utasításokat a tömb elemeivel (nem a tömb elemein!) <tömb> select: [ :<select változó> | <select feltétel> ] : visszaad egy olyan tömböt, melynek elemei az eredeti tömb azon elemei, melyekre igaz a feltétel <tömb> reject: [ :<reject változó> | <reject feltétel> ] : select ellentéte <tömb> collect: [ :<collect változó> | <collect utasítások> ] : 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: <<ősosztály>> subcalss: #<<származtatott oszt>> instanceVariableNames: ‘<<valt1>>…’ ”példányvált.” classVariableNames: ‘<<valt1>>…’ ”oszt.vált.” poolDictionaries: ‘<<szótár1>>…’ 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:
<<osztály>> (class)* methods <<mnév>> <<mtörzs>> 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 … ^2. proba2 ^super test . Test2 subclass: #Test3 … ^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"

Hasonló előadás


Google Hirdetések