34
A Java és a C++ összehasonlítása Kozsik Tamás [email protected] http://kto.web.elte.hu/ Eötvös Loránd Tudományegyetem Programozási Nyelvek és Fordítóprogramok Tanszék 2008. Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 1 / 31

A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Embed Size (px)

Citation preview

Page 1: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

A Java és a C++ összehasonlítása

Kozsik Tamás

[email protected]://kto.web.elte.hu/

Eötvös Loránd TudományegyetemProgramozási Nyelvek és Fordítóprogramok Tanszék

2008.

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 1 / 31

Page 2: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Tartalom

1 Imperatív programozásTípusokVezérlési szerkezetekKifejezések

2 Programszerkezet

3 Objektumelvu programozás

4 Generikus programozás

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 2 / 31

Page 3: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Tartalom

1 Imperatív programozásTípusokVezérlési szerkezetekKifejezések

2 Programszerkezet

3 Objektumelvu programozás

4 Generikus programozás

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 2 / 31

Page 4: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Tartalom

1 Imperatív programozásTípusokVezérlési szerkezetekKifejezések

2 Programszerkezet

3 Objektumelvu programozás

4 Generikus programozás

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 2 / 31

Page 5: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Tartalom

1 Imperatív programozásTípusokVezérlési szerkezetekKifejezések

2 Programszerkezet

3 Objektumelvu programozás

4 Generikus programozás

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 2 / 31

Page 6: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Áttekintés

Olcsó programfejlesztésBiztonságra való törekvés

SafetySecurity

MemóriakezelésStatikus szabályokDinamikus szemantikai szabályokhttp://java.sun.com/

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 3 / 31

Page 7: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Típusok

Típusok

Primitív típusokReferencia típusok

Osztályok (konkrét és absztrakt)Tömb típusokFelsorolási típusok

InterfészekAnnotációk

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 4 / 31

Page 8: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Típusok

Primitív típusok

8 db beépített típusbooleancharbyte, short, int, longfloat, double

Rögzített ábrázolásNincs elojel nélküli egész típusA char típus 2 bájtos UnicodeA logikai típus önálló (vezérlési szerk., relációk)Altípusosság; konverzió: automatikusan csak bovíto (!)Osztályosítás: csomagoló osztályokkal

Auto-(un)boxing

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 5 / 31

Page 9: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Típusok

Referenciák

A vermen csak primitív típusú adatok és referenciákAz összetett adatok mindig dinamikusakFelszabadító utasítás nincsAutomatikus szemétgyujtésDestruktor – finalize

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 6 / 31

Page 10: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Típusok

Tömbök

ReferenciákNem lehet deklarációval létrehozniMinden tömb a heap-en van

Speciális osztályok, öröklodésBiztonságos használat

length attribútumFutási ideju indexellenorzés

Használatint[] t = new int[100];for( int i = 0; i<t.length; ++i ){ t[i] = i; }

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 7 / 31

Page 11: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Típusok

Szövegek

Nincs char*Elsodlegesen a String osztály

Pl. idézojelekKonkatenáció: túlterhelt +

Emellett StringBuffer és StringBuilderRitkán char[]

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 8 / 31

Page 12: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Típusok

Felsorolási típusok

A legegyszerubb esetenum Color { RED, GREEN, BLUE, YELLOW }

Nem int

Speciális osztályokDefiniálhatók hozzájuk mezok és muveletek

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 9 / 31

Page 13: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Vezérlési szerkezetek

Vezérlési szerkezetek

Elágazás: if és switch–caseCiklus: for, while és do–while

Iterálás adatszerkezeten: enhanced for-loop

Blokk utasításNem strukturált

Címkézheto break és continueNincs goto

Iterálás tömbönint[] t = new int[100]; ...int sum = 0;for( int elem: t ){ sum += elem; }

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 10 / 31

Page 14: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Vezérlési szerkezetek

Választás

if és while esetén: logikai típusú feltételswitch esetén diszkrét vagy felsorolási típusú diszkrimináns

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 11 / 31

Page 15: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Vezérlési szerkezetek

Deklaráció utasítások

Típus-, alprogram- és változódeklarációkKonvenció: azonosítók neveA léptetos ciklusnak lehet lokális változója, de a többi utasításnaknem!Konvenció: használjuk a kapcsos zárójeleket, tördelésTípuskifejezésekhez nem deklarálható név (nincs typedef)

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 12 / 31

Page 16: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Vezérlési szerkezetek

Blokkok

Egyszerusített hatóköri/láthatósági szabályokEgymásba ágyazott blokkok lokális változóiElfedés: csak tagok esetébenLokális változók inicializálása

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 13 / 31

Page 17: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Vezérlési szerkezetek

Megjegyzések

Egysoros és többsorosDokumentációs megjegyzés

/** és */ közöttKódegység elé írhatójavadocTipikusan HTML, de programozható (doclet)Kiegészíto információk (@return, @param, @see stb.)

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 14 / 31

Page 18: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Imperatív programozás Kifejezések

Kifejezések

A kiértékelési sorrend pontosan definiáltOperátorokat nem terhelhet túl a programozóLusta és mohó logikai operátorokNincsenek explicit mutatók (dereferencing, címképzés, aritmetika)

Hivatkozás tagokra: .Konstansok nincsenek

final vanÜres konstansFordítási ideju konstansFeltételes fordítás

Az operátorok picit másokNincs sizeof és typeidVan instanceof, valamint >>> és >>>=

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 15 / 31

Page 19: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Programszerkezet

Programegységek

TípusdefiníciókMetódusok és mezokDeklarációk sorrendje

Nincsenek globális alprogramokPéldány- vagy osztálymetódusokProcedurális programozás imitálása

Nincsenek globális változók sem!CsomagokTípusdefiníciók egymásba ágyazása

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 16 / 31

Page 20: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Programszerkezet

Alprogramok

ParaméterátadásNem adható formális paraméternek alapértelmezett értékTúlterhelésInline-osításFelüldefiniálásHívási lehetoség: invokevirtual, invokestatic, invokespecialVáltozó hosszúságú paraméterlista

printf

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 17 / 31

Page 21: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Programszerkezet

Kivételek

Sokkal intenzívebben használttry–catch–finally szerkezet

Nincs automatikus ábrázolású objektum

A Throwable leszármazottaiEllenorzött kivételek, throws kulcsszóAltípusosság, kovarianciaElofeltételek, assert

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 18 / 31

Page 22: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Programszerkezet

Forrásszöveg

ForrásfájlKarakterkódolás

Fordítási egységekCsomagokimport utasítás

Nincs elofordítóNincs szükség fejállományokra

Kompatíbilitási kérdések

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 19 / 31

Page 23: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Programszerkezet

Fordítás és futtatás

Fordítók jellemzoen JVM bájtkódot csinálnakEsetleg platformfüggo kódot: gcjNem csak Java forrás fordítható JVM-re

Dinamikus szerkesztésBájtkód interpretálásaJIT-compilationFuttatás

BetöltésProgramozhatóDinamikus/mobil kód

EllenorzésInicializációMegszunés

KódtranszformációFutási ideju információk

ÖnelemzésVisszafejtés

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 20 / 31

Page 24: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Programszerkezet

Programkönyvtárak

Szabványos könyvtárakVáltozatok

Standard EditionEnterprise EditionMicro Edition

Csomagok: java.*, javax.* stb.Legalapvetobb: java.lang

Saját könyvtárakCsomagolási konvenciók

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 21 / 31

Page 25: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Objektumelvu programozás

Referencia típusok definiálhatók

Osztályok (konkrét és absztrakt)Felsorolási típusok

InterfészekAnnotációk

DefinícióEgy egység, nincs szétbontvaNincs pontosvesszoextends

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 22 / 31

Page 26: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Objektumelvu programozás

Öröklodés

Osztályok: egyszeres kódöröklésMinden osztály ose: java.lang.ObjectFelüldefiniálásDinamikus kötésMegvalósítás

Interfészek: többszörösAbsztrakt osztályra hasonlítCsak absztrakt metódusok és végleges értéku osztálymezokMinden tagja publikus

Osztály megvalósíthat interfészeket

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 23 / 31

Page 27: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Objektumelvu programozás

Objektumok élettartama

Dinamikus ábrázolásAllokációtól szemétgyujtésigInicializáció menete

AlapértékekInicializáló kifejezések és blokkokKonstruktorok végrehajtása

Megszunés meneteSzemétgyujtés, eroltetéseGyenge referenciákfinalize

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 24 / 31

Page 28: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Objektumelvu programozás

Metódusok túlterhelése

Ugyanolyan névvel, különbözo szignatúrávalÖrökölt metódus is túlterhelhetoTúlterhelés és altípusosságStatikus és dinamikus kötés, pl. equals

Példaclass A { void m(){} }class B extends A { void m(int i){} }

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 25 / 31

Page 29: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Objektumelvu programozás

Láthatósági kategóriák

Publikus (public)protected

Félnyilvános (package-private)private

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 26 / 31

Page 30: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Objektumelvu programozás

Beágyazott típusdefiníciók

Nem csak statikus tagosztályokBelso osztályok is vannak

Példányszintu tagosztályokLokális osztályokNévtelen osztályok

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 27 / 31

Page 31: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Objektumelvu programozás

Objektumok összehasonlítása és másolása

Az == referenciát hasonlítpublic boolean Object.equals(Object)

Nem copy-konstruktorral és értékadó operátorral másolunkprotected Object Object.clone()throws CloneNotSupportedException

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 28 / 31

Page 32: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Objektumelvu programozás

Funktorok

Alprogramok átadása paraméterkéntNincs függvényre mutató pointerObjektumosítás

Interfész és megvalósításaNincs függvényhívás operátorPl. apply vagy execute nevu metódus

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 29 / 31

Page 33: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Generikus programozás

Generikus programozás

Típussal való paraméterezés, sablonokParametrikus polimorfizmusMegkötések a típusparaméterrolAdatszerkezetek

java.utilCollection Framework

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 30 / 31

Page 34: A Java és a C++ összehasonlítása - aszt.inf.elte.huaszt.inf.elte.hu/~kto/teaching/java/material/javacpp.pdf · 4 Generikus programozás Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása

Generikus programozás

Generatív programozás?

Nincs template metaprogrammingÖnelemzésAspektus-elvu programozás, AspectJAnnotációk

Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 31 / 31