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

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

Programozás III STRING-XML.
C++ programozási nyelv Gyakorlat hét
Programozás III OOP ALAPOK.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Objective- C Bereczki Gréta Tamara
Öröklődés 2..
JavaScript.
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Programozás alapjai.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Fájlkezelés, IO Kivételkezelés Belső osztályok
Vizuális modellezés Uml és osztálydiagram UML eszközök
Mérés és adatgyűjtés laboratóriumi gyakorlat Makan Gergely, Mingesz Róbert, Nagy Tamás 2. óra szeptember 9., 10. v
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 5. rész – Osztályok III.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Smalltalk programozási nyelv, avagy a legobjektumorientáltabb nyelv
Vizuális és web programozás II.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Az UML kiterjesztési lehetőségei
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Programozás Az adatokról C# -ban.
szakmérnök hallgatók számára
Összetett adattípusok
Típusok Kiegészítések és megjegyzések Nyékyné G. Judit: Programozási nyelvek c. könyvének hasonló címû fejezetéhez.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Egydimenziós tömbök (Vektorok)
Operátorok Értékadások
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
Objektum orientált programozás a gyakorlatban
Készítette: Csíki Gyula
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Java programozási nyelv Vezérlési szerkezetek
Java programozási nyelv Metódusok
Webprogramozó tanfolyam
Objektum orientált programozás
Programozás III OOP ALAPOK.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Adatszerkezetek és algoritmusok 2008/ Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Windows Forms alkalmazás készítése Czigléczky Gábor 2009.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Script nyelvek előadás
Script nyelvek előadás
Kifejezések C#-ban.
Script nyelvek előadás
Programozási nyelvek alapfogalmai
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

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

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

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

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

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

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.

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.

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

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 2r100100101 293 36rSMALLTALK LargePositiveInteger 80738163270632 8r23.45e-3 Float 0.038238525390625

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

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

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

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.

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

Ü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

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

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’

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

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

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.

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.

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.

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’ ]

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

Ö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

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

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 http://www.smalltalk.org/ http://www.squeak.org/ http://en.wikipedia.org/wiki/Smalltalk