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

Összeállította: Ilyés Enikő

Hasonló előadás


Az előadások a következő témára: "Összeállította: Ilyés Enikő"— Előadás másolata:

1 Összeállította: Ilyés Enikő
Smalltalk programozási nyelv Programozási nyelvek és paradigmák összehasonlítása II. GY tavasz Összeállította: Ilyés Enikő

2 Tartalom Smalltalk felülnézetből
Smalltalk: legobjektumorintáltabb nyelv Objektumok felépítése Literálok és/vagy objektumok? Vezérlési szerkezet és/vagy üzenetek objektumoknak? Saját osztály, meta osztály, öröklődés

3 Teszt kérdések 1. Mivel indokolható, hogy a Smalltalk-ot nevezzük a legobjektumorientáltabb nyelvnek? 2. Miből épül fel a Smalltalk objektum? 3. Milyen működést fednek a Smalltalk-ban a kifejezések? (Segítség-pl: 3+4*5 – Mennyi az eredmény? Miért?)

4 Smalltalk felülnézetből
Létrehozás kezdete: 1970-es évek Létrehozók: Xerox Palo Alto Research Center kutatócsoport vezetők: Alan Kay, Daniel H. Ingalls és Adele Goldberg Létrehozás célja: számítógép könnyen-kezelhetősége A második legrégebbi objektumorientált nyelv (Tekinthető a C++, Java, C#, Objective-C stb. őseinek ) Az első nyelv, melyhez integrált fejlesztői környezetet terveztek

5 Smalltalk felülnézetből
Legobjektumorientáltabb programozási nyelv Egy fordító és egy interpreter keveréke A fordítás eredménye byte-kód, végrehajtója: SmallTalk Virtual Machine Nincs típusellenőrzése Legnagyobb előnyei: rugalmasság, platformfüggetlenség, gyors GUI készítés

6 Legobjektumorientáltabb nyelv
Minden objektum: a kódblokk objektum az osztály objektum az ablak objektum a program objektum A SmallTalk fordító objektum, stb. A vezérlési szerkezeteket az objektumoknak küldött üzenetek valósítják meg . Nincsen főprogram, nem támogatja a procedurális paradigmát.

7 Legobjektumorientáltabb nyelv
Az objektumok kezelésén kívül kevés szolgáltatást nyújt. Az objektum képességei: Állapot tárolása Üzenet fogadása önmagától vagy más objektumtól Üzenet küldése önmagának vagy más objektumnak Megjegyzés: Szinte az értékadás az egyetlen olyan művelet, melyet nem sikerült belepréselni az objektumokba.

8 Literálok Szintaxis Szintaxis. Literálok
A nyelv ASCII kódkészletet használ Kis és nagybetű érzékeny Literálok A literálok mind objektumokat takarnak

9 Szám literál Számliterálok megadása implementációfüggő
Általános alak: [-][<radix>r]<egészrész>[.<törtrész>][e[+|-]<kitevő>] Számliterálok megadása implementációfüggő Típusuk autómatikusan döl el Példa Típus Decimális értéke 42 SmallInteger -42 2r 293 36rSMALLTALK LargePositiveInteger 8r23.45e-3 Float

10 Karakterek, stringek, szimbólumok
Karakter: $ jel vezeti be String: ‘’ közé kell írni Szimbólumok: # jel vezeti be, stingliterál követi. Egyediek. Jelölés Jelentés Literál típus Osztály $A A Karakter Character ‘Helló világ!’ Helló világ! String ByteString ‘Azt mondtam: ‘‘Helló világ” !’ Azt mondtam: ‘Helló világ’ ! #SzamlaOsztaly SzamlaOsztaly [egyedi módon használható] Szimbólum ByteSymbol

11 Tömbök Jelölés: #( <elem1> <elem2> ... )
Nem lehet benne változó (kivéve: true, false, nil) Space az elválasztó jel az elemek között A tömb elemeinek egységes típusa: Object Tömb Első elem Második elem Második elem-literál tipusa Harmadik elem #( ) 1 2 szám 3 #( $A $B $C ) A B karakter C #( 2 'Szamla tipus' $A ) Szamla tipus string #( 1 (1 2) 3 #(1 2) tömb #( 1 , 2 ) , szimbólum

12 Változók Változónév szintaxis: betű[betű|szám]*
Deklarálás: | <<var1>> <<var2>>…<<varn>> | Értékadás: <<var1>> := <<value>> Minden változó Object-re mutató referencia A változók fajtái implementációfüggők (ált. van: példányváltozó, osztályszintű változó, globális változó) Művelet Var változó típusa | var | UndefinedObject var := ‘aeiou’ ByteString var := ‘’ var := true True var := #( 1 3) Array

13 Objektumok felépítés 1. Adatrész: objektum állapotát jellemzi.
Objektum saját adatai (rekordmezők &/ tömbök) Osztály összes ojektumai által elérhető adatok. Adatok, melyeken néhány osztály közösen osztozik. II. Műveletek: Üzenetek: ezeket fogadja („interfészek”).Fajtái: Osztály által definiált üzenetek (pl. konstruktor) Objektum által ismert üzenetek. Metódusok: kapott üzenetek hatására lefutó eljárások.

14 Ismert objektumok használata
A programozási nyelvekben primitívnek ismert típusok Smalltalk-ban objektumok, műveletek velük pedig a nekik küldött üzenetekkel végezhetünk. A felhasználó maga is felülírhatja, kiterjesztheti a primitív típusokon végezhető műveleteket. Kód Fogadó (objektum) Szelektor Argu-mentum (objektum) Eredmény 5 factorial 5 factorial 120 3 + 4 3 + 4 7 2 raisedTo: 4 2 raisedTo 16 ‘Panna' indexOf: $a startingAt: 3 ‘Panna’ indexOf: startingAt: $a és 3 Üzenet

15 Üzenetek típusai Típus Precedencia Példa Argumentum Unáris 1. 5 factorial nincs Bináris II. 3 + 4 van Kulcsszavas III. 2 raisedTo: 4 Azonos precedencia esetén balról jobbra a kiértékelés sorrendje. A zárójelek közé csomagolt részek értékelődnek ki a leghamarabb. Példa-kód: Eredmény: Transcript show: 2+3*4 20 Transcript show: 2+(3*4) 14 3 factorial + 4 factorial between: 10 and: 100 true (3 factorial + 4) factorial between: 10 and: 100 false

16 Vezérlési szerkezetek
A vezérlési szerkezetek is obijektumoknak küldött üzenetekkel vannak megvalósítva. Kódblokk Objektumnak tekinthető Felépítése: [ :parméterek | <üzenetek-kifejezések> ] Kiértékelése: a value üzenet küldésével Példa Eredmény [:x | x + 1] value: 3 4

17 Vezérlési szerkezetek
Elágazás Boolean típusú obijektumnak küldött üzenetnek tekinthető Felépítése: <<feltétel_objektum>> ifTrue: [ <<üzenetek>> ] ifFalse: [ <<üzenetek>> ] Példa Eredmény a := 3. b :=2. result := a > b ifTrue:[ ‘a is greater then b' ] ifFalse:[ ‘a is less or equal then b' ] result = ‘a is greater then b’

18 Vezérlési szerkezetek
Feltételes ciklus Felépítése: [ <<feltétel>> ] whileTrue: [ <<ciklusmag>> ] [ <<feltétel>> ] whileFalse: [ <<ciklusmag>> ] Példa Eredmény | i sum | i := 1. sum := 0. [ i < 5 ] whileTrue: [ sum := sum + i. i := i + 1 ] sum : 10 i: 5

19 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>> ] Példa Eredmény | i sum | i=0. sum := 0. 1 to: 5 by: 1 do [sum := sum+i. i := i +1 ] sum : 10 i: 5 “ Triviális ciklus” i := 0 4 timesRepeat: [ i := i + 1 ]. i: 4

20 Saját osztály létrehozása
Saját osztályt úgy hozhatunk létre, hogy az Object ősosztálynak a „subclass” üzenetet küldjük. Az objektumok belsejében tárolt adatok védettek – csak üzeneteken keresztül érhetőek el. Rejtett műveletek definiálására nincsen lehetőség. Adott osztályból újabb példányt a new metódussal hozhatunk létre. Adott objektum oszályát az objektumnak küldött class üzenettel kaphatjuk meg.

21 Saját osztály létrehozása
Példa-kód Magyarázat Object subclass: #Szamla A “Szamla” nevű osztályt hozzuk létre. instanceVariableNames: ‘egyenleg’ classVariableNames: ‘’ Az osztálynak egy példányszintű adattagja van: „egyenleg”. !Szamla class methodsFor: ‘instance creation’ ! new | r | r = super new. r init. ^ r !! A new metódus az osztályhoz tartozik, a konstrukor, mely létrehoz egy új példányt. !Szamla methodsFor: ‘instance initialization’ ! init egyenleg := 0 Az init metódus a Szamla objektumaihoz tartozik és az objektum addatagjainak kezdeti értékét állítja be.

22 Saját osztály létrehozása
Példa-kód Magyarázat egyenleg ^ egyenleg. “Get metódus” az egyenleg adattaghoz. egyenleg : e egyenleg := e. “Set metódus” az egyenleg adattaghoz. Szamla subclass: #EuSzamla instanceVariableNames: “eukod” ... Az EuSzamla osztály-t a Szamla osztályból származtatjuk. Figyelem: csak egyszeres származtatás megengedett! Automatikus szemétgyűjtés miatt, nincs szükség felszabadításra.

23 Kivételkezelés A program nem fagy le, csak hibaüzenetet küld
A különböző error-oknak egy Signal típusú objektum felel meg, mely jelzést kap, ha a hiba bekövetkezett. Hiba kiváltása Hiba kezelése FileStream>>named: nameString filename := nameString asFilename. filename exists ifFalse: [FileNotFound new fileName: nameString; signal]. FileStream withDescriptor: filename openDescriptor [fileStream := FileStream named: nameString] on: FileNotFound do: [:ex | Transcript show: 'File not found’ ]

24 Metaosztályok Az osztályok is objektumok, egy-egy osztály egyetlen példányai: ezek a Metaosztályok. A metaosztályok mint obijektumok: MetaClass előfordulásai A metaosztályok mint osztályok: a Class alosztályai Érdekesség: subA osztály az A osztály leszármazottja subA metaosztálya őse az A metaosztálya

25 Összefoglaló táblázat
Osztályadat van Osztálymetódus private Inplicit attri.-ra public Inplicit met.-ra protected nincs Többszörös öröklődés interface Közös ős Object Öröklődési mód Operátor átdefiniálás Metódusnevek túlterhelése

26 Teszt kérdések 1. Mivel indokolható, hogy a Smalltalk-ot nevezzük a legobjektumorientáltabb nyelvnek? 2. Miből épül fel a Smalltalk objektum? 3. Milyen működést fednek a Smalltalk-ban a kifejezések? (Segítség-pl: 3+4*5 – Mennyi az eredmény? Miért?)

27 Ajánlott irodalom Programozási nyelvek
- szerkesztette: Nyékyné Gaizler Judit Programozási nyelvek összehasonlító elemzés - szerző:Kovács D. Lehel István


Letölteni ppt "Összeállította: Ilyés Enikő"

Hasonló előadás


Google Hirdetések