Upload
doanminh
View
243
Download
3
Embed Size (px)
Citation preview
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
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
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
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
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
Á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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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