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

Hasonló dokumentumok
Imperatív és procedurális programozás a Javában

JAVA PROGRAMOZÁS 2.ELŐADÁS

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Java programozási nyelv 4. rész Osztályok II.

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Programozási nyelvek Java

Programozási nyelvek Java

Java II. I A Java programozási nyelv alapelemei

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Java programozási nyelv 5. rész Osztályok III.

Programozási nyelvek Java

Szoftvertechnológia alapjai Java előadások

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

és az instanceof operátor

Interfészek. PPT 2007/2008 tavasz.

Programozási nyelvek Java

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Magas szintű programozási nyelvek 2 Előadás jegyzet

Programozási nyelvek (ADA)

A C programozási nyelv II. Utasítások. A függvény.

Programozási nyelv Java

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

1. Bevezetés A C++ nem objektumorientált újdonságai 3

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Programozás I. Első ZH segédlet

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

OOP #14 (referencia-elv)

Már megismert fogalmak áttekintése

Bevezetés, a C++ osztályok. Pere László

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Programozási technológia I.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

A C# programozási nyelv alapjai

Java programozási nyelv

Java programozási nyelv

Informatika terméktervezőknek

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

OOP: Java 8.Gy: Abstract osztályok, interfészek

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Mintavételes szabályozás mikrovezérlő segítségével

Osztályok. 4. gyakorlat

Alprogramok, paraméterátadás

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Objektumok inicializálása

A Java nyelv. Bevezetés, alapok Elek Tibor

Adatszerkezetek és algoritmusok

Bevezetés a C++ programozási nyelvbe

Algoritmizálás + kódolás C++ nyelven és Pascalban

Programozás módszertan

Objektumorientált programozás C# nyelven

C++ programozási nyelv Konstruktorok-destruktorok

Újdonságok a Java nyelvben

A C programozási nyelv I. Bevezetés

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

A C programozási nyelv I. Bevezetés

Globális operátor overloading

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

JAVA PROGRAMOZÁS 3.ELŐADÁS

Web-technológia PHP-vel

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Programozási nyelvek Java

A C# PROGRAMOZÁSI NYELV

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Bevezetés a programozásba Előadás: A const

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Pénzügyi algoritmusok

Java III. I I. Osztálydefiníció (Bevezetés)

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

C++ programozási nyelv

Programozási nyelvek Java

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java programozási nyelv 6. rész Java a gyakorlatban

Átírás:

A Java és a C++ összehasonlítása Kozsik Tamás kto@elte.hu 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

Tartalom 1 Imperatív programozás Típusok Vezérlési szerkezetek Kifejezések 2 Programszerkezet 3 Objektumelvű 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ás Típusok Vezérlési szerkezetek Kifejezések 2 Programszerkezet 3 Objektumelvű 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ás Típusok Vezérlési szerkezetek Kifejezések 2 Programszerkezet 3 Objektumelvű 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ás Típusok Vezérlési szerkezetek Kifejezések 2 Programszerkezet 3 Objektumelvű 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és Biztonságra való törekvés Safety Security Memóriakezelés Statikus szabályok Dinamikus szemantikai szabályok http://java.sun.com/ Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 3 / 31

Típusok Imperatív programozás Típusok Primitív típusok Referencia típusok Osztályok (konkrét és absztrakt) Tömb típusok Felsorolási típusok Interfészek Annotá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ípus boolean char byte, short, int, long float, double Rögzített ábrázolás Nincs előjel nélküli egész típus A char típus 2 bájtos Unicode A logikai típus önálló (vezérlési szerk., relációk) Altípusosság; konverzió: automatikusan csak bővítő (!) 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ák Az összetett adatok mindig dinamikusak Felszabadító utasítás nincs Automatikus szemétgyűjtés Destruktor 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ák Nem lehet deklarációval létrehozni Minden tömb a heap-en van Speciális osztályok, öröklődés Biztonságos használat length attribútum Futási idejű indexellenőrzés Használat int[] 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* Elsődlegesen a String osztály Pl. idézőjelek Konkatenáció: túlterhelt + Emellett StringBuffer és StringBuilder Ritká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 legegyszerűbb eset enum Color { RED, GREEN, BLUE, YELLOW } Nem int Speciális osztályok Definiálhatók hozzájuk mezők és műveletek 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 case Ciklus: for, while és do while Iterálás adatszerkezeten: enhanced for-loop Blokk utasítás Nem strukturált Címkézhető break és continue Nincs goto Iterálás tömbön int[] 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étel switch 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ók Konvenció: azonosítók neve A léptetős ciklusnak lehet lokális változója, de a többi utasításnak nem! Konvenció: használjuk a kapcsos zárójeleket, tördelés Tí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 Egyszerűsített hatóköri/láthatósági szabályok Egymásba ágyazott blokkok lokális változói Elfedés: csak tagok esetében Lokális változók inicializálása Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 13 / 31

Megjegyzések Imperatív programozás Vezérlési szerkezetek Egysoros és többsoros Dokumentációs megjegyzés /** és */ között Kódegység elé írható javadoc Tipikusan HTML, de programozható (doclet) Kiegészítő 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ált Operátorokat nem terhelhet túl a programozó Lusta és mohó logikai operátorok Nincsenek explicit mutatók (dereferencing, címképzés, aritmetika) Hivatkozás tagokra:. Konstansok nincsenek final van Üres konstans Fordítási idejű konstans Feltételes fordítás Az operátorok picit mások Nincs sizeof és typeid Van instanceof, valamint >>> és >>>= Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 15 / 31

Programszerkezet Programegységek Típusdefiníciók Metódusok és mezők Deklarációk sorrendje Nincsenek globális alprogramok Példány- vagy osztálymetódusok Procedurális programozás imitálása Nincsenek globális változók sem! Csomagok Tí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ás Nem adható formális paraméternek alapértelmezett érték Túlterhelés Inline-osítás Felüldefiniálás Hívási lehetőség: invokevirtual, invokestatic, invokespecial Vá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ált try catch finally szerkezet Nincs automatikus ábrázolású objektum A Throwable leszármazottai Ellenőrzött kivételek, throws kulcsszó Altípusosság, kovariancia Előfeltételek, assert Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 18 / 31

Programszerkezet Forrásszöveg Forrásfájl Karakterkódolás Fordítási egységek Csomagok import utasítás Nincs előfordí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

Fordítás és futtatás Programszerkezet Fordítók jellemzően JVM bájtkódot csinálnak Esetleg platformfüggő kódot: gcj Nem csak Java forrás fordítható JVM-re Dinamikus szerkesztés Bájtkód interpretálása JIT-compilation Futtatás Betöltés Programozható Dinamikus/mobil kód Ellenőrzés Inicializáció Megszűnés Kódtranszformáció Futási idejű információk Önelemzés Visszafejtés Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 20 / 31

Programkönyvtárak Programszerkezet Szabványos könyvtárak Változatok Standard Edition Enterprise Edition Micro Edition Csomagok: java.*, javax.* stb. Legalapvetőbb: java.lang Saját könyvtárak Csomagolási konvenciók Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 21 / 31

Objektumelvű programozás Referencia típusok definiálhatók Osztályok (konkrét és absztrakt) Felsorolási típusok Interfészek Annotációk Definíció Egy egység, nincs szétbontva Nincs pontosvessző extends Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 22 / 31

Objektumelvű programozás Öröklődés Osztályok: egyszeres kódöröklés Minden osztály őse: java.lang.object Felüldefiniálás Dinamikus kötés Megvalósítás Interfészek: többszörös Absztrakt osztályra hasonlít Csak absztrakt metódusok és végleges értékű osztálymezők Minden tagja publikus Osztály megvalósíthat interfészeket Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 23 / 31

Objektumelvű programozás Objektumok élettartama Dinamikus ábrázolás Allokációtól szemétgyűjtésig Inicializáció menete Alapértékek Inicializáló kifejezések és blokkok Konstruktorok végrehajtása Megszűnés menete Szemétgyűjtés, erőltetése Gyenge referenciák finalize Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 24 / 31

Objektumelvű programozás Metódusok túlterhelése Ugyanolyan névvel, különböző szignatúrával Örökölt metódus is túlterhelhető Túlterhelés és altípusosság Statikus és dinamikus kötés, pl. equals Példa class 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

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

Objektumelvű programozás Beágyazott típusdefiníciók Nem csak statikus tagosztályok Belső osztályok is vannak Példányszintű tagosztályok Lokális osztályok Névtelen osztályok Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 27 / 31

Objektumelvű programozás Objektumok összehasonlítása és másolása Az == referenciát hasonlít public boolean Object.equals(Object) Nem copy-konstruktorral és értékadó operátorral másolunk protected Object Object.clone() throws CloneNotSupportedException Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 28 / 31

Funktorok Objektumelvű programozás Alprogramok átadása paraméterként Nincs függvényre mutató pointer Objektumosítás Interfész és megvalósítása Nincs függvényhívás operátor Pl. apply vagy execute nevű 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, sablonok Parametrikus polimorfizmus Megkötések a típusparaméterről Adatszerkezetek java.util Collection 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és Aspektus-elvű programozás, AspectJ Annotációk Kozsik Tamás (ELTE) A Java és a C++ összehasonlítása 2008. 31 / 31