Smalltalk programozási nyelv, avagy a legobjektumorientáltabb nyelv

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
Programozás III STRING-XML.
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
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.
Összeállította: Ilyés Enikő
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
Fájlkezelés, IO Kivételkezelés Belső osztályok
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Vizuális modellezés Uml és osztálydiagram UML eszközök
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.
Parancssori argumentumok Primitív típusok Operátorok Vezérlési szerkezetek Tömbök Ürmös Beáta, 2011.
Mutatók, tömbök, függvények
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 3. rész – Osztályok I.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
C# tagfüggvények.
C# tagfüggvények.
PHP Webprogramozás alapjai
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
Szombathely Dinamikus WEB programozás: PHP és JSP.
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.
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.
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Programozás Az adatokról C# -ban.
Objektumorientált tervezés és programozás II. 3. előadás
A JavaScript bemutatása
Összetett adattípusok
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
Programozási nyelvek Páll Boglárka.
Szintaktikai, szemantikai szabályok
Operátorok Értékadások
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.
Hernyák Zoltán Programozási Nyelvek II.
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ú,
Objektumorientált programozás
Java programozási nyelv Metódusok
Objektum orientált programozás
Webprogramozó tanfolyam
Objektum orientált programozás
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
C Programozási alapok.
Gyurkó György. Az OO programozás és tervezés története 1960-as évek: SIMULA (véletlen folyamatokat szimuláló programok írása) az OO nyelvek őse 1970-es.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
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.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
Kifejezések C#-ban.
Gépészeti informatika (BMEGEMIBXGI)
Programozási nyelvek típusossága.
Programozás C# -ban Elágazások.
Programozási nyelvek alapfogalmai
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

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

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

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.

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

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

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.

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.

Dolphin Smalltalk

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

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

Dolphin Smalltalk

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

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ó

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.

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

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

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)

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)

Ü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 képzés: @, konkatenálás: , (vessző) Pl.: 3 + 4 == 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 -)

Ü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) == 3 1+1*2-3. == 1

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'].

Vezérlési szerkezetek – feltételes ciklus Szintaxisok: [ <<feltétel>> ] whileTrue: [ <<ciklusmag>> ] [ <<feltétel>> ] whileFalse: [ <<ciklusmag>> ] Pl.: | a b | a := 1456. 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!

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)

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.

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

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.

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

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.

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.

Köszönöm a figyelmet!