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 Programozási nyelvek és paradigmák összehasonlítása II. GY. 2014 tavasz Összeállította: Ilyés Enikő 1.

Hasonló előadás


Az előadások a következő témára: "Smalltalk programozási nyelv Programozási nyelvek és paradigmák összehasonlítása II. GY. 2014 tavasz Összeállította: Ilyés Enikő 1."— Előadás másolata:

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

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 2

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?) 3

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 4

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 5

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. 6

7 Legobjektumorientáltabb nyelv  Az objektumok kezelésén kívül kevés szolgáltatást nyújt.  Az objektum képességei: 1. Állapot tárolása 2. Üzenet fogadása önmagától vagy más objektumtól 3. Ü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. 7

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

9 Szám literál Általános alak: [-][ r] [. ][e[+|-] ]  Számliterálok megadása implementációfüggő  Típusuk autómatikusan döl el PéldaTípusDecimális értéke 42SmallInteger42 -42SmallInteger-42 2r SmallInteger293 36rSMALLTALKLargePositiveInteger r23.45e-3Float

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ésJelentésLiterál típus Osztály $AAKarakterCharacter ‘Helló világ!’Helló világ!StringByteString ‘Azt mondtam: ‘‘Helló világ” !’ Azt mondtam: ‘Helló világ’ !StringByteString #SzamlaOsztalySzamlaOsztaly [egyedi módon használható] SzimbólumByteSymbol 10

11 Tömbök Jelölés: #(... ) 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ömbElső elem Második elem Második elem- literál tipusa Harmadik elem #( )12szám3 #( $A $B $C )ABkarakterC #( 2 'Szamla tipus' $A )2Szamla tipus stringA #( 1 (1 2) 31#(1 2)tömb3 #( 1, 2 )1,szimbólum2 11

12 Változók  Változónév szintaxis: betű[betű|szám]*  Deklarálás: | > >… > |  Értékadás: > := >  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űveletVar változó típusa | var | UndefinedObject var := ‘aeiou’ByteString var := ‘’ByteString var := trueTrue var := #( 1 3)Array 12

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. 13

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ódFogadó (objektum) SzelektorArgu- mentum (objektum) Eredmény 5 factorial5factorial raisedTo: 42raisedTo416 ‘Panna' indexOf: $a startingAt: 3 ‘Panna’indexOf: startingAt: $a és 35 Üzenet 14

15 Üzenetek típusai TípusPrecedenciaPéldaArgumentum Unáris1.5 factorialnincs BinárisII.3 + 4van KulcsszavasIII.2 raisedTo: 4van 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*42020 Transcript show: 2+(3*4)14 3 factorial + 4 factorial between: 10 and: 100true (3 factorial + 4) factorial between: 10 and: 100false 15

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 | ] - Kiértékelése: a value üzenet küldésével PéldaEredmény [:x | x + 1] value: 34 16

17 Vezérlési szerkezetek Elágazás - Boolean típusú obijektumnak küldött üzenetnek tekinthető - Felépítése: > ifTrue: [ > ] ifFalse: [ > ] PéldaEredmé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’ 17

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

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 >to: > by: > do: [: > | > ] PéldaEredmé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 19

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. 20

21 Saját osztály létrehozása Példa-kódMagyarázat Object subclass: #SzamlaA “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. 21

22 Saját osztály létrehozása Példa-kódMagyará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. 22

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ásaHiba 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’ ] 23

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 24

25 Összefoglaló táblázat Osztályadatvan Osztálymetódusvan privateInplicit attri.-ra publicInplicit met.-ra protectednincs Többszörös öröklődésnincs interfacenincs Közös ősObject Öröklődési módnincs Operátor átdefiniálásvan Metódusnevek túlterhelésevan 25

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?) 26

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    27


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

Hasonló előadás


Google Hirdetések