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.

Slides:



Advertisements
Hasonló előadás
Koordináták, függvények
Advertisements

C++ programozási nyelv Gyakorlat hét
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Programozás III KOLLEKCIÓK 2..
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.
Turbo Pascal Változók.
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
1 Programozás alapjai GEIAL312B (ANSI C) BSc (Bachelor of Science) / Alap képzés 2005/2006. őszi félév Miskolci Egyetem Általános Informatikai Tanszék.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
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 CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Ruby nyelv. Története Yukihiro Matsumoto (szül ápr. 4.) alkotta meg, az ideális script nyelv hosszú eredménytelen keresése után. A lehetséges jelöltek.
Java programozási nyelv 2. rész – Vezérlő szerkezetek
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
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.
ISZAM III.évf. részére Bunkóczi László
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
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:
C nyelv utasításai.
Összetett adattípusok
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
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.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Készítette: Lipp Marcell
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ú,
Készítette: Száraz Richárd. - Yukihiro Matsumoto tervezte meg 1995-ben - Célja egy emberközpontú OOP programozási nyelv megalkotása volt, amely egyszerű.
Készítette Enyedi Tamás
Karakter kódolás Összeállította: Kovács Nándor Felhasznált irodalom:
Visual Basic 2008 Express Edition
Java programozási nyelv Metódusok
Webprogramozó tanfolyam
Objektum orientált programozás
A Visual Basic nyelvi elemei
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
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.
Excel programozás (makró)
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
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.
Script nyelvek előadás
Script nyelvek előadás
Script nyelvek előadás
Kifejezések C#-ban.
Programozási nyelvek típusossága.
Script nyelvek előadás
Excel programozás (makró)
A C++ programozási nyelv
A CLIPS keretrendszer
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Script nyelvek előadás
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

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

Tartalom ● Dinamikus és statikus típusrendszerek ● Skalár típusok ● Nagy egész számok kezelése ● Logikai kifejezések ● Szemétgyûjtés ● Referenciák

Dinamikus és statikus típusrendszerek ● értelmezett nyelvek ● korlátozott deklaráció ● gyors indulás ● nem, vagy gyengén típusos nyelvek ● gyorsabb alkalmazásfejlesztés ● automatikus memóriakezelés ● fordított nyelvek ● deklaráció fontos ● lassú fordítás ● általában erõsen típusos nyelvek ● biztonságosság a típusellenõrzés által ● manuális vagy automatikus memóriakezelés

Dinamikus és statikus típusrendszerek ● alapfilozófia: bízzunk a programozóban, tudja, hogy mit akar ● az erõforrások jelentõsége kisebb (memória, CPU-idõ) ● Perl, Python, Ruby, Smalltalk ● alapfilozófia: a programozó hibát hibára halmozhat ● esetleg fontos az optimális erõforráshasználat ● C++, Ada, Java, Eiffel

Skalár típusokról ● Milyen különbséget tesz a nyelv a skalár típusok és az összetett típusok, osztályok között? ● Általában máshogy kezelik õket (gépi reprezentáció optimális volta miatt) ● Van aki rosszul csinálja... ● Bizonyos nyelvek homogén módon kezelik ezeket a típusokat is: Smalltalk, Ruby

Skalár típusokról: Smalltalk, Ruby ● Smalltalk példa: ● Ruby nyelven a skalár típusok is objektumként kezeltek: 2.to_s 3.times { puts “Hello world!” } # operátor túlterhelés ● mégis van különbség: a skalárok immediate típusok: értékadáskor és paraméterátvételkor az objektum érték adódik át, nem referencia

Skalár típusokról: Python ● Hasonló különbségtétel van Pythonban: mutable és immutable típusok ● immutable: skalárok, tuple, sztring ● mutable: tömbök, szótárak ● érdekesség: Pythonban van Complex típus, és a szintaxis része complex literálok megadása a + bj alakban, ahol b valamilyen számliterál

Skalár típusokról: Perl ● a Perl mást ért skalár típus alatt: a Perl skalár típusai rendelkeznek belsõ szerkezettel ● skalárok a számok, a szövegek és a referenciák ● nem skalárok az összetett típusok: listák és asszociatív tömbök ● egy számot számként és szövegként is tárol

Nagy számok kezelése: Python ● 2.1 verzióig: – OverflowError ha a plain int intervallumából kilépett az érték – long integer literálok megadása az l módosítóval 1000l (nincs deklaráció!) ● 2.2 verziótól automatikus konverzió long integer- re, sõt a változó típusa eredetileg is long

Nagy számok kezelése: Ruby ● minden egész számot reprezentáló objektum alapesetben (ha nem túl nagy az érték) a Fixnum osztály egy példánya lesz ● amikor kinövi az értékhatárokat, akkor automatikusan 'konvertálódik' Bignum típusúra ● a 'konverzió' visszafele is mûködik, ha csökken a változó értéke (következik abból, hogy az egészek immediate típusok)

Nagy számok kezelése: Perl ● ha egy skalár értéke túl nagy lesz, akkor az értéke 'inf'-re változik ● nagy számok kezelése a Math::BigInt és Math::BigFloat osztályok segítségével lehetséges

Logikai kifejezések ● scriptnyelvekben általában nincs külön logikai típus ● tetszõleges kifejezésnek van igazságértéke

Logikai kifejezések: Perl ● nincs logikai típus ● kifejezés pontosan akkor hamis, ha az értéke 0, vagy az üres sztring ● hamis: 0, 0.0, '0', '', undef, () ● igaz: '00', '0.0', '0E0', {}, [] ● értékadás szerepelhet logikai kifejezésben

Logikai kifejezések: Python ● nincs logikai típus ● hamis minden, ami None, False, minden numerikus típusú 0 (egész, lebegõpontos, komplex), minden üres sorozat ('', [], ()), illetve mapping ({}) ● továbbá hamis minden objektum, melynek __nonzero__ metódusa 0-t ad vissza (ha van) ● továbbá hamis, ha nincs __nonzero__, de van __len__, és az 0-t ad vissza ● értékadás nem szerepelhet logikai kifejezésben

Logikai kifejezések: Ruby ● nincs logikai típus ● FalseClass: egyetlen példánya a false ● TrueClass: egyetlen példánya a true ● minden igaz, ami nem nil, vagy false ● igaz: 0, '', stb.

Lusta kiértékelés C++-ban ● érdekesség: ha C++-ban felüldefiniáljuk a || vagy az && operátort, akkor már paraméterátadás fog történni, ezért mindkét operandus kiértékelõdik, a lusta kiértékelés nem teljesül már ● Scott Meyers ezért nem javasolja, hogy ezt felüldefiniáljuk

Valós típusok ● semmi izgalom... ● Perl kezeli õket: native floating point (dupla pontosságú) ● Python dupla pontosságú valósakat kezel ● Ruby dupla pontosságú valósakat kezel

Szemétgyûjtés ● fõbb típusok: – hivatkozásszámlálás (reference counting) – mark-and-sweep: az elérhetetlen objektumok megjelölése, késõbb a jelöltek felszabadítása – másolás (copying): a teljes memóriaterület felszabadítása, majd az elérhetõk visszamásolása

Szemétgyûjtés: Perl ● referenciaszámlálást alkalmaz ● az önhivatkozó objektumok nem szabadulnak fel ● ezért kétszintû a szemétgyûjtés: a szál befejezõdésekor egy mark-and-sweep szemétgyûjtés során felszabadul minden elérhetetlen objektum is ● ez szükséges azért, hogy az interpreter beágyazható és többszálú legyen

Szemétgyûjtés: Python ● a specifikáció nem köti meg a szemétgyûjtés fajtáját ● a jelenlegi implementáció hivatkozásokat számlál, egy késleltetett lefutású ciklikus- hivatkozás vizsgálóval ● azonnal felszabaduló objektumok ● nem garantált a ciklikusan hivatkozott objektumok felszabadítása

Szemétgyûjtés: Ruby ● mark-and-sweep algoritmust használ – conservative garbage collection: néhány objektum felszabadítatlan maradhat, de a performancia jó ● objektumon kívûl definiálható finalizer: – a felszabadítás után hívódik meg – ObjectSpace.define_finalizer(object, proc { |id| puts “Finalizing #{id}”}) ● GC.disable / GC.enable ● GC.start

Referenciák ● scriptnyelvekben nincsenek mutató típusok ● a referenciák kedveltek ● általában van inicializálatlán érték – Python: None – Ruby: nil

Referenciák: Perl ● Perl 5-ös verziótól tartalmaz referencia típust ● visszakompatibilitás miatt nem minden referencia – numerikus, szöveges értékek, file handle – listák – hash-ek – referenciák, melyek mutathatnak: ● skalárra (referenciára is!) ● listára, hash-re ● függvényre ● objektum-orientáltság referenciák segítségével ● nincs null-referencia ● $a==$b a referenciákat hasonlítja össze (kivéve...)

Referenciák: Python ● minden objektumot referenciákon keresztül kezel ● immutable objektumokból egy példány is lehet (implementációfüggõ) – a = 1 b=1: a és b ugyanarra az objektumra mutathatnak ● mutable objektumoknál ez nem igaz – a = [] b = []: két különbözõ listára hivatkoznak – a = b = []: ugyanarra az objektumra hivatkoznak ● a == b az objektumok értékét hasonlítja össze – más típusú értékek nem egyenlõek – más típusú értékek sorrendje konzisztens, de tetszõleges

Referenciák: Python ● mutathatunk függvényre, osztályra(!) referenciával class Test: pass def instantiate(Class): instance = Class() print instance instantiate(Test) ● az eredmény pedig:

Referenciák: Ruby ● minden objektumot referenciákon keresztül kezel ● immediate objektumokból egy példány van – a = 1 b=1: a és b ugyanarra az objektumra mutatnak ● egyéb objektumoknál ez nem igaz – a = [] b = []: két különbözõ listára hivatkoznak – a = b = []: ugyanarra az objektumra hivatkoznak ● a == b az objektumok értékét hasonlítja össze – más típusú értékek nem egyenlõek

Referenciák: Ruby (metódusok) ● blokkok és Proc objektumok használatosak ● Method osztály használható metódusok átadására def call_method(aMethod) puts aMethod.call() end def one() return 1 end call_method(method(:one)) # Symbol példány átadása call_method(method('one')) # metódusnév átadása (String példány) ● a kimenet: 1 1

Referenciák: Ruby (osztályok) ● osztályra is mutathat referencia class Test end def instantiate(aClass) instance = aClass.new p instance end instantiate(Test) ● a kimenet: #

Kifejezések: Ruby ● Ruby-ban az elágazások mind kifejezések: absval = if val >= 0 then val else -val end hex_digit_value = case digit when 'A' then 10 when 'B' then 11 when 'C' then 12 when 'D' then 13 when 'E' then 14 when 'F' then 15 else-1 end

Listák és hash-ek ● Perl, Python, Ruby nyelvek alaptípusai közé tartoznak ● nem típuskonstrukciók ● heterogén adatszerkezetek

Karakterkészletek ● ASCII (American Standard Code for Information Interchange): 7 bites karakterkészlet ● Extended ASCII: 8 bites, sok van belõle (ISO , ISO , stb.) (5.3.3) ● A Unicode egy karakterkészlet (is), melyet a Unicode Project dolgozott ki, és fejleszt ma is ● Az ISO szabvány definiálja az UCS (Universal Character Set) karakterkészletet, mely gyakorlatilag minden lehetséges karaktert tartalmaz (hieroglifák és Tolkien Tengwar-ja is)

Kódolások ● A Unicode 21, az UCS 32 bites ● UCS-2: 16 bites Unicode karakterek ábrázolására használják (pl. Java), eredetileg az ISO szabványban definiálták ● UTF-8: ASCII kompatibilis, könnyen kezelhetõ egyszerû és nagyszerû kódolás (teljes ISO-10646) ● tehát: 16 biten nem ábrázolható a teljes ISO karaketerkészlet (5.3.3) ● A Unicode karakterkészlet (és egyebek), de nem kódolás (5.4.3)

Linkek ● Unicode Home Page: ● ASCII table: ● UTF-8 and Unicode FAQ: