JAVA PROGRAMOZÁS 2.ELŐADÁS



Hasonló dokumentumok
JAVA PROGRAMOZÁS 3.ELŐADÁS

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

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

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

és az instanceof operátor

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

Programozási nyelvek Java

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

Osztályok. 4. gyakorlat

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. 3. gyakorlat Objektum Orientáltság C++-ban

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

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

Bevezetés a Python programozási nyelvbe

III. OOP (objektumok, osztályok)

Objektumorientált programozás C# nyelven

Interfészek. PPT 2007/2008 tavasz.

Programozási nyelvek Java

Már megismert fogalmak áttekintése

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

Öröklés és Polimorfizmus

Programozási nyelvek Java

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

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

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

Programozás módszertan p.1/46

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 Programozás 3. Ea: Java osztályok. OOP alapalapok

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

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.

C++ programozási nyelv Konstruktorok-destruktorok

OOP #14 (referencia-elv)

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

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

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

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

Programozási nyelvek Java

Programozási nyelvek Java

Java II. I A Java programozási nyelv alapelemei

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

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

Programozás I. Első ZH segédlet

ELTE SAP Excellence Center Oktatóanyag 1

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

Objektumorientált programozás C# nyelven

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

Java VII. Polimorfizmus a Java nyelvben

Java II. I A Java programozási nyelv alapelemei

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

Programozás módszertan

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

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

C#, OOP. Osztályok tervezése C#-ban

Java VII. Polimorfizmus a Java nyelvben

Osztályok, objektumok

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

Globális operátor overloading

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

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

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

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

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

Java és web programozás

3. gyakorlat. Objektumorientált programozás

Objektumok inicializálása

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

Web-technológia PHP-vel

Java és web programozás

Programozási nyelvek II.: JAVA

Objektumorientált szoftverfejlesztés alapjai

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

Interfészek. Programozás II. előadás. Szénási Sándor.

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

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

Abstract osztályok és interface-ek. 7-dik gyakorlat

C++ programozási nyelv

Objektumorientált Programozás VI.

C++ programozási nyelv

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

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

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

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

C++ programozási nyelv

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

Programozási nyelvek Java

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

Java és web programozás

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

JAVA PROGRAMOZÁS 5.ELŐADÁS

Bevezetés a C++ programozási nyelvbe

Programozási nyelvek II.: JAVA

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

Objektumelvű programozás

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

C++ programozási nyelv Struktúrák a C++ nyelvben

ELTE SAP EXCELLENCE CENTER Oktatóanyag. Sas László: ABAP Objects Objektumorientált ABAP

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

Átírás:

Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok

Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály, tömb Deklarálás <elemtípus>[] <tömbazonosító>; vagy <elemtípus> <tömbazonosító>[]; Létrehozás: new <elemtípus> [<elemszám>] Indexelés <tömbazonosító> [index] Tömb hossza <tömbazonosító>.length

Tömbök - Példák 3 0. 1. 2. 3. 4. tomb1 0 10 20 30 40

Tömbök inicializálása 4 Inicializáló blokk: <elemtípus>[] <tömbazonosító> = {<érték1>, <érték2>,...} Példa: int[] iarray = {0,10,20,30,40}; char[] maganhangzok = {'a','e','i','o','u'}; boolean[] szep = {true,false}; Alapértelmezett kezdeti érték: Nullaszerű elemek

Tömbök értékadása 5 A t1=t2 értékadás megengedett, ha: Primitív elemtípus esetén t1 és t2 elemtípusa azonos Referencia elemtípus esetén t2 elemtípusa t1 elemtípusával azonos, vagy annak leszármazottja Példa: int[] iarray1 = {1,3,5,7}, iarray2 = {10,20}; Object[] oarray = null; String[] sarray = {"Get Back","Let It Be"}; Szintaktikailag helyes iarray1 = iarray2; oarray = sarray; Szintaktikailag helytelen sarray = iarray; sarray = oarray;

Kétdimenziós tömb 6 Deklarálás <elemtípus>[][] <tömbazonosító>; vagy <elemtípus> <tömbazonosító>[][]; Létrehozás: Indexelés new <elemtípus> [<méret1>][<méret2>] <tömbazonosító> [index1] [index1]

Kétdimenziós tömb - Példa 7 int[][] szamok = new int[3][5];

Kétdimenziós tömb - Példa 8 Ember[][] versenyzok = new Ember[4][3];

Osztályok 9 Osztály definíció: A módosítókkal (modifier) az osztály hozzáférhetőségét, leszármaztathatóságát szabályozhatjuk Módosítók: public, protected, private, final, static

A tagok módosítói 10 Hozzáférési módosítók: Félnyilvános (~): csak az azonos csomagban levő osztályok érhetik el Public (+): bármely csomagban levő bármely osztályból elérhető Protected (#): leszármazottban elérhető Private (-): más osztályból nem elérhető Megjegyzés: Az osztály csak nyilvános vagy félnyilvános lehet Legfeljebb egy publikus osztály lehet egy fordítási egységben

A tagok módosítói 11 Egyéb módosítók: final: ha egy osztály final (végleges), akkor azt nem lehet örökíteni abstract: egy absztrakt osztályt nem lehet példányosítani

Osztály tagok 12 Az osztály tagjai következők lehetnek konstruktorok inicializálók metódusok mezők osztályok, interfészek A konstruktorok kivételével minden tag lehet: Példányhoz tartozó (példány- ), vagy Osztályhoz tartozó(osztály-, statikus ). A konstruktorok mindig az osztályhoz tartoznak

13 Osztály deklarációi

Osztálytag, példánytag 14 Osztálytag vagy statikus tag az osztályhoz tartozik, és az osztály minden objektumára egyformán érvényes Osztályváltozó vagy statikus változó Osztálymetódus vagy statikus metódus Példánytag: Példányváltozó: minden példányban külön szerepel Példánymetódus: a megszólított példányon dolgozik

15 Osztály - Példa

16 Osztály - Példa

A this objektumreferencia 17 Példánymetódusok utolsó, rejtett paramétere A megszólított objektum referenciája Példa:

Konstruktorok 18 Beállítja az objektum kezdeti állapotát Adatok, kapcsolatok Hasonlít a metódushoz, de nincs visszatérési értéke Neve megegyezik az osztály nevével Csak a new operátorral hívható Csak a hozzáférési módosítók használhatók Túlterhelhető Nem öröklődik

Alapértelmezés szerinti konstruktor 19 Nincs (explicit) konstruktor egy alapértelmezés szerinti (implicit) konstruktor fut le paraméter nélküli adatok, kapcsolatok alapértelmezések nullaszerű kezdőértékek: false, \u0000, 0, null Van legalább 1 (explicit) konstruktor nincs alapértelmezés szerinti konstruktor

Konstruktorok - Példa 20 Alapértelmezett konstruktor:

Konstruktorok - Példa 21 Alapértelmezett konstruktor:

Konstruktorok túlterhelése 22 Konstruktorok ugyanúgy túlterhelhetők, mint más metódusok Példa:

Konstruktorok túlterhelése 23 Ha egy osztály több konstruktort definiál, akkor az egyikből meghívható egy másik konstruktor a this referencia segítségével. A this ekkor eljárásként hajtódik végre: this(paraméterek) Példa:

Túlterhelés vs. felüldefiniálás 24 A felüldefiniálás (overriding) során elfedjük a leszármazott osztályban az ősosztály azonos nevű metódusát, melynek azonos a paraméter-típuslistája és azonos a visszatérési értéke is. Ha ez a három kritérium egyszerre nem teljesül, akkor csupán bővítjük az ős osztályt egy újabb (túlterhelt (overloading)) metódussal.

Inicializáló blokk 25 Osztálydefiníción belül elhelyezett kódblokk Lehet statikus (osztály inicializátor), amely az osztályszintű konstruktort pótolja, és lehet példányszintű, amely példányosításkor a konstruktor hívása előtt hajtódik végre Előbb az osztálytagok aztán a példánytagok inicializáló blokkjai kerülnek végrehajtásra, a deklarálás sorrendjében

26 Inicializáló blokk - Példa

Objektum és memória modell 27 Heap: dinamikus memóriaterület Stack (verem): végrehajtási verem (execution stack) Amennyiben befejeződik egy metódus feldolgozása, úgy törlődik az aktivációs rekordja Mindig az a folyamat fejeződik be előbb, amit utoljára hívtunk meg

Objektum és memória modell 28 Az objektumok mindig a heap-ben tárolódnak Az objektum mezők is a heap-ben tárolódnak Metódusok lokális változói a veremben tárolódnak A veremben referencia is tárolódhat, amely a A veremben referencia is tárolódhat, amely a heap-ben található objektumra mutat

Objektum és memória modell 29 Példa:

Objektum és memória modell 30 Példa:

A static módosító 31 Statikus lehet változó metódus Példa:

A static módosító 32 Példa: System.gc(): explicit meghívja a garbage collector-t Ez hívja a finalize() metódust

A static módosító 33 Megszorítások: Statikus metódus nem használhat nem statikus adattagokat és nem hívhat nem statikus metódusokat this és super kulcsszavakat nem használhatják

A final módosító 34 Változó: nem adható új érték Metódus: nem definiálható felül Osztály: nem örökíthető Példa:

Öröklődés (Is-A kapcsolat) 35 Öröklődés(inheritance), kiterjesztés(extension) Egy meglévő osztály kiterjesztése, továbbfejlesztése Ősosztály, utódosztály Egyszeres / többszörös öröklés Az öröklés szabályai Egy osztályból több osztály is származtatható Az osztályhierarchia mélysége tetszőleges Az öröklés tranzitív A Javában minden osztály implicit őse az Object, és csak egyszeres öröklés van

36 Öröklődés - Példa

Öröklődés 37 Deklaráció: [módosítók] class <utódosztály_neve> extends <ısosztály_neve> [implements <interfészek_neve>]; Példa: public class Cylinder extends Circle{ } public class Point3D extends Point { }

38 Öröklődés - Példa

Metódusok felülírása 39 Ha egy leszármazott osztály metódusának ugyanaz a szignatúrája (azaz neve, paramétereinek száma és típusa), valamint visszatérési értéke, mint az ősosztály metódusának, akkor a leszármazott osztály felülírja (override) az ősosztály metódusát Ha egy leszármazott osztály egy osztálymetódust ugyanazzal az aláírással (szignatúrával) definiál, mint a felsőbb osztálybeli metódus, akkor a leszármazott osztály metódusa elrejti (elfedi) a szülőosztálybelit

Metódusok felülírása 40 Példa:

A super kulcsszó 41 Öröklődés során csak az adattagok és a metódusok kerülnek át a leszármazott osztályba, a konstruktorok nem A super kulcsszó lehetőséget ad a leszármazott osztály konstruktorából az ősosztály egy konstruktorát meghívni A super() egy hivatkozás az ősosztályra, működése hasonló a this() kulcsszóhoz Példa:

A super kulcsszó 42 Ha nem írunk konstruktort, akkor a fordító automatikusan beilleszt egy paraméter nélkülit, amelynek első sora a super() konstruktorhivatkozás Ezért ha az ősosztályunk nem rendelkezik paraméter nélküli konstruktorral, hibaüzenetet kapunk A super() utasítás mindig első utasítás, hiszen egyszer a szülőt kell létrehozni, majd csak utána leszármazottat

Az @override annotáció 43 A fordítót utasítja, hogy ellenőrizze létezik-e az ősosztályban hasonló nevű metódus Hasznos lehet elírások esetén Nem kötelező Példa:

Aggregáció( has-a kapcsolat ) 44 Osztályok felhasználásának egy másik módja Példa: A vonal két pontot összekötő szakasz

Aggregáció ( has-a kapcsolat ) 45 Példa:

46 Osztályok közötti kapcsolatok

Könyvészet 47 Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002. Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.