Programozási nyelvek Java

Hasonló dokumentumok
Programozási nyelvek Java

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozási nyelvek Java

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

Osztályok. 4. gyakorlat

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

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

Java és web programozás

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

Programozási nyelvek Java

ISA szimulátor objektum-orientált modell (C++)

Objektumelvű programozás

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Memóriakezelés, dinamikus memóriakezelés

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Java és web programozás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

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

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

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

Programozás C++ -ban 2007/7

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

OOP #14 (referencia-elv)

Programozás alapjai. 10. előadás

Objektumorientált Programozás VI.

Java és web programozás

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?

Programozási nyelvek (ADA)

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

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

Bánsághi Anna

C++ programozási nyelv

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Objektum orientált kiterjesztés A+ programozási nyelvhez

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

8. gyakorlat Pointerek, dinamikus memóriakezelés

ELTE SAP Excellence Center Oktatóanyag 1

Bevezetés a Python programozási nyelvbe

és az instanceof operátor

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.

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

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

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Programozási nyelvek Java

Objektumorientált programozás C# nyelven

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Programozási nyelvek II.: JAVA, 3. gyakorlat

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

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Java IX. telkezelés a Java-ban

Alprogramok, paraméterátadás

Már megismert fogalmak áttekintése

Java és web programozás

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

Elemi adatszerkezetek

Globális operátor overloading

Szoftvertechnológia alapjai Java előadások

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Programozás I. Első ZH segédlet

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

C# osztályok. Krizsán Zoltán

C++ programozási nyelv

Java IX. telkezelés a Java-ban

Pénzügyi algoritmusok

Generikus Típusok, Kollekciók

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ás II. 4. Dr. Iványi Péter

3. Osztályok II. Programozás II

Programozási nyelvek (ADA)

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

Rekurzió. Dr. Iványi Péter

Mutatók és mutató-aritmetika C-ben március 19.

Programozási alapismeretek 4.

Programozás II gyakorlat. 6. Polimorfizmus

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

C++ programozási nyelv Konstruktorok-destruktorok

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

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

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

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

Programozási nyelvek II.: JAVA

Kivételkezelés a C++ nyelvben Bevezetés

OOP. #6 (VMT és DMT) v :33:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Bevezetés a programozásba. 9. Előadás: Rekordok

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Segédanyag: Java alkalmazások gyakorlat

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

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Programozási nyelvek II.: JAVA, 11. gyakorlat

Java programozási nyelv 9. rész Kivételkezelés

3. Gyakorlat Ismerkedés a Java nyelvvel

Szoftvertechnolo gia gyakorlat

Átírás:

statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály fordító program virtuális gép típus (javac) (java) mezők (attributumok) metódusok (lesznek majd) (lesznek majd) dinamikus szerkezet adatok műveletek (leképződnek) főprogram heap stack (általa meghívott) alprogram (egymást hívogatják) heap dinamikus memóriaterület stack végrehajtási verem (execution stack)

Execution stack (végrehajtási verem) activation record LIFO (Last in first out) verem-adatszerkezet Program futása közben: A főprogram (main) meghívja az alprogramot, az meghív egy második metódust, ez utóbbi pedig egy harmadikat. main alprogram 2. metódus 3.metódus Meghívunk valamit elvégezzük visszatérünk folytatjuk elven működik. Mindig az a folyamat fejeződik be előbb, amit utoljára hívtunk meg. A stack aktivációs bejegyzésekből (activation record) épül fel. (Alprogram hívások befejezése) Nem teljesen pontos leírás az aktivációs rekord tartarmáról (Fordítóprogramok kurzushoz tartozik): Tartalmazza, hogy hova kell visszatérnie a vezérlésnek (honnan kell folytatni a végrehajtást), továbbá tartalmazza az alprogramok paramétereit. Az első aktivációs rekord a main metódus paramétereit tartalmazza. Amennyiben befejeződik egy metódus feldolgozása, úgy törlődik az aktivációs rekordja. Akkor fut le a programunk / fejeződik be a teljes végrehajtás, ha a main metódus végrehajtását befejeztük, azaz megszűnik a főprogram aktivációs rekordja. Vegyük az alábbi kódot és illusztráljuk rajta a keletkezett stacket és heapet class Point{ int x,y; x += dx; y += dy; // Galád módon beépítjük a főprogramunkat is ebbe az osztályba csak // a példa kedvéért public static void main(string[] args){ Point p = new Point(); p.move(3,7);

1.) javac Point.java java Point (Absztrakt adatmodell) stack heap hivatkozás this 3 dx move x 7 dy y p referencia p adatai args parancssori argumentum tömb main aktivációs rekord formális paramétereket reprezentáló memóriaterületek bemásolódnak p rejtett paraméter, továbbá p a heap-ben lesz (this tárolja a referenciáját) Point objektum new hatására allokáció jön létre (memória terület foglalás) A végrehajtási verem hoz létre objektumot. Az objektum mindig a heapen tárolódik. Primitív adatok esetén, amennyibben objektum mezőjéről van szó, úgy ezen mezők a heapen tárolódnak. Amennyiben egyes metódusok lokális változóiról van szó, mint primitív adattagok, beleértve a formális paramétereket reprezentáló változókat is, úgy ezen adatok a stacken tárolódnak. A stacken a 8 primitív adattípuson kívül referencia is tárolódhat, melynek az a dolga, hogy mutason egy a heapen található objektumra. (Megjegyzés: Manapság már lehet, hogy nem minden adat a stacken tárolódik, előfordulhat, hogy egyes adatok registry-kben.)

Amikor a fentebbi move metódus paraméter listáját megadtuk: void move(int dx, int dy), (dx-et és dy-t), fontos tudnunk, hogy nem csak a két megadott formális paraméterünk létezik az eljárás szempontjából, hanem egy implicit paraméterünk is van a this. A fentebbi eljárás, amit leírtunk valójában így néz ki: this.x += dx; this.y += dy; stack heap Point objektum 2. this 0 x 3 dx 0 y 7 dy p 1. args parancssori argumentum tömb move (2.) main (1.) (2.) 0 x 3 x 0 y 7 y (move-ból kilépve az adott aktivációs rekord a benne tárolt változókkal együtt megszűnik: stack heap Point objektum 3 x 7 y p args parancssori argumentum tömb main

A fentebbi esetben, amennyiben megtoldjuk a main fügvényünket a System.out.println(p.x); utasítással, úgy a 3 fog kiíródni. Nézzük a következő kódot: class Point{ int x,y; if(dx < 0) dx = 0; if(dy < 0) dy = 0; x += dx; y += dy; // Galád módon beépítjük a főprogramunkat is ebbe az osztályba csak // a példa kedvéért public static void main(string[] args){ Point p = new Point(); p.move(3,7); Ebben az esetben a fentebbi második lépés változik meg annyiban, hogy a move aktivációs rekordjában amennyiben negatív dx,dy-t adtunk meg például -3, -7, úgy bekerül az aktivációs rekordba, majd az if-ek miatt felülíródik 0, 0 ra és ez az eredmény lesz tovább küldve a Point objektum x,y értékének. A tovább küldés után a move aktivációs rekordja törlődik. Módosítsuk tovább a main metódust az alábbira: public static void main(string[] args){ Point p = new Point(); p.x = -3; p.y = -7; p.move(p.x,p.y); Ebben az esetben p.x és p.y bemásolódik a heapbe. (Kód 3. és 4. sora miatt) Továbbá a move metódusnak megadott aktuális paraméterek értéke bemásolódik az aktivációs rekordban a formális paraméterek reprezentálására létrejövő lokális változókba. Ezzel dolgozik az alprogram (metódus) és kilépéskor ezek megszünnek. Az imént említett folyamatot érték szerinti paraméter átadásnak nevezzük. (Pass by value) A Java nyelvben csak értékszerinti paraméter átadás történik (a referenciák értéke is másolódik)

A static kulcsszó Használatával eltüntetjük az adott metódusok, mezők implicit paraméterét. Nincs implicit paraméter nincs this A main metódusnak például tényleg csak 1 formális paramétere van az args tömb. Ellenben az előző példákban látott move függvénnyel. metódusok példányszintű OOP (Objektum-orientált programozás) (általában) Objektumon hívjuk, objektumok egymás példányait hívják implicit paraméter van this osztályszintű (ritka) Procedurális programozás programok, alprogramok egymás közötti hívása Nincs implicit paraméter- nincs this, objektum nélkül hívható Point.Main( aktuális paraméterek ); példányszintű mezők osztályszintű static A fentebbi példákban, amennyiben static int y;-t írunk, abban az esetbentöbb példány esetén minden példányban lesz x attributum, de y-ból csak egy darab fog létezni a programban. class Fura{ heap int x; static int y; x Fura.y x += dx; y += dy; x main static void move(int dx, int dy) (x és y példány mezők): Statikus metódusban nem lehetnek példány szintű mezők. Példányszintűben lehet mind a kettő (statikus is és példányszintű is).