Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.

Hasonló előadás


Az előadások a következő témára: "1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat."— Előadás másolata:

1 1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat

2 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor2Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Tömbök Egynél több érték tárolására vannak kitalálva, de az elemek száma rögzített. Adott számú, azonos típust tartalmazó adattípus Az indexelés 0-val kezdődik Tömböket dinamikusan, a new operátorral lehet létrehozni, mérete a length adatmezővel lekérdezhető A Java teljes körű indexhatár-ellenőrzést végez, kivétellel jelzi, ha alul- vagy túlindexelés történik Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor2

3 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor3Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Egydimenziós tömbök Az egyetlen kiterjedéssel rendelkező tömböket szokás vektornak is nevezni Definíció: –típus tömbnév[ ]; –típus[ ] tömbnév; A tömböt futás során a new operátorral hozzuk létre –new típus[ méret ]; –a méret egy nemnegatív egész szám, értéke nem lehet nagyobb, mint az Integer.MAX_VALUE –pl.: int[ ] x = new int[5]; elemei: x[0], x[1], x[2], x[3], x[4]

4 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Egydimenziós tömbök A Java lehetővé teszi, hogy a tömböket a definiálás során konstans értékekkel töltsük fel. Ilyenkor a tömböt a fordító hozza létre –típus[ ] tömbnév = { konstans1, konstans2 } –int[ ] arr = { 1, 2, 3, 4, 5 };

5 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Többdimenziós tömbök Tömbhivatkozás definíciója: –típus[ ] [ ]... [ ] tömbnév; –típus tömbnév[ ][ ]... [ ]; 2D-s tömb létrehozása: –new típus[ méret1 ][ méret2 ] Inicializálás konstans értékekkel: –int[ ][ ] matrix = { { 1, 2 }, { 3, 4 } }; Dinamikusan: –int[ ][ ] matrix = new int[ 2 ][ 2 ];

6 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Tömbök másolása System.arraycopy() metódussal –public static void arraycopy(Object forrás, int forrásKezdetiElem, Object cél, int kezdetiPozíció, int hossz) char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' }; char[] copyTo = new char[7]; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo)); Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6

7 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor7Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Feladat Hozzunk létre egy 7*10-es int-eket tartalmazó tömböt, töltsük fel őket: –tömb[x][y] = x*y; (pl.: tömb[5][8] = 40;) Hozzunk létre egy karakter tömböt ‘t’ ‘e’ ‘l’ ‘e’ ‘f’ ‘o’ ‘n’ karakterekkel Másoljuk egy új tömbbe a ‘l’ ‘e’ karaktereket!

8 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Osztály Az objektumok formai leírása, melyek azonos tulajdonságokkal és operációkkal rendelkeznek Osztályokból objektumokat készítünk Ezt példányosításnak nevezzük Minden objektum pontosan egy osztály példánya Egy osztályból több objektumpéldány is létrehozható

9 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Osztály Egy osztálynak lehetnek: –adattagjai –metódusai Adattagok megadása: –[láthatóság] [static] [final] [transient] [volatile] típus változóNév; Metódusok megadása: –[láthatóság] [static] [abstract] [final] [native] [synchronized] visszatérésiTípus metódusNév ([paraméterek]) [throws kivételLista]

10 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor10Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Példa public class Ember { private String nev; private int kor; public void beszel(){ System.out.println(nev + ” beszel!”); }

11 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Példányosítás public class Program{ public static void main(String[] args){ Ember jozsi = new Ember(); // példány jozsi.beszel(); }

12 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor12Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Láthatóság elérés vezérlése (külső osztályok) az adattagok és metódusok láthatóságát korlátozni kell –az OO fontos eleme az implementáció elrejtése: a felhasználó használhatja anélkül, hogy pontosan ismerné a működését (kevesebb programhiba) a láthatóság beállításával módosíthatjuk, hogy ki mit érhet el ha nincs megadva láthatóság, akkor package- private lesz („friendly”) (nincs kulcsszava!) –csomagon belül public, csomagon kívül private

13 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor13Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Láthatóság A láthatóság ezen kívül lehet: –public: minden külső osztály számára látható, szabadon használható –protected: az adott osztály és a gyerekosztályai használhatják –private: az osztályon kívül nem érhető el, csak az adott osztályon belül, ahol létrehozták az adattagok általában private láthatóságúak a main függvény mindig public láthatóságú –különben a futtatókörnyezet nem férne hozzá

14 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor14Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Láthatóság Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor14

15 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor15Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Konstruktor különleges metódus neve meg kell egyezzen az osztály nevével visszatérési értéke/típusa nincs (nem lehet!) új objektum létrejöttekor fut le –adattagok inicializálására használjuk leggyakrabban általában public láthatóságú

16 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor16Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Default konstruktor ha egy konstruktornak nincsenek paraméterei, akkor default konstruktornak, ellenkező esetben paraméteres konstruktornak nevezzük –alapértelmezett beállításokkal rendelkező objektumok létrehozására használjuk ha nem készítünk semmilyen konstruktort a fordító létrehoz egy default konstruktort –ha legalább egy konstruktort készítettünk, akkor nem jön létre default konstruktor

17 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor17Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Konstruktor példa public class Pont { private int x; private int y; public Pont() { //default konstruktor x = 0; y = 0; } public Pont(int xErtek, int yErtek) { //parameteres konstruktor x = xErtek; y = yErtek; }

18 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Overloading operáció kiterjesztése (overloading): Ugyanaz a függvénynév, de más a paraméterlista Láttuk a konstruktoroknál, de egyéb metódusokra is működik, pl.: –void osszeAd(int a, int b); –void osszeAd(int a, int b, int c); –void osszeAd(int a, double b);

19 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor19Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Static kulcsszó Adattag esetén: ugyanazon a helyen tárolódik az összes példány  ugyanaz lesz az értéke bármely objektumpéldány esetén Alma osztály adattagja legyen: tomeg –public static int tomeg; –minden Alma típusú objektum tömege ugyanannyi lesz statikus adattag objektumpéldány nélkül is létezik –Az Alma osztály tömeg adattagjára hivatkozás –Alma.tomeg; (HA publikus az adattag!)

20 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor20Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Static kulcsszó Metódus esetén: Objektum létrehozása nélkül is meghívható –pl.: public static void main(), Integer.parseInt() –nem lehet felüldefiniálni statikus metódusban csak statikus adattagok használhatóak

21 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor21Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Final kulcsszó Adattag esetén: az adattag kezdeti értékét nem változtathatjuk meg (adni kell kezdőértéket!) –pl.: private final int tomeg = 10; –tomeg=20; // Fordítási hiba!! Metódus esetén: a gyerekosztályban nem lehet felüldefiniálni –Pl.: public final leesik(){...} –minden private metódus impiciten final

22 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor22Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Final kulcsszó Osztály esetén: nem lehet gyerekosztálya –pl.: final class Alma{} –minden metódusa impliciten final Nem primitív típusokra használva nem az osztály final, hanem a referencia

23 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor23Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Konstans Valódi konstans létrehozása a static és final kulcsszavakkal –kezdőértékük nem változtatható meg –nevüket csupa nagybetűvel szoktuk írni –szóhatárnál aláhúzást teszünk –pl.: public class Alma { public static final int ALMA_TOMEG = 10; } Ezek elérése kívülről: –int a_tom = Alma.ALMA_TOMEG;

24 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor24Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Getter/Setter Az adattagok értékeinek lekérésére (getter), valamint inicializálás utáni módosítására (setter) használjuk. Elnevezési szabály: –Getter: getAdattagNeve() visszatérési típusa: az adattag típusa ha az adattag boolean, akkor get helyett is-t használunk, pl.: boolean ferfi;  isFerfi() –Setter: setAdattagNeve() Visszatérési típusa void

25 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor25Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Getter/Setter Példa getter metódusokra: public class Alma{ private int tomeg; private boolean ferges; public int getTomeg() { return tomeg; } public boolean isFerges() { return ferges; }

26 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor26Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Getter/Setter Példa setter metódusokra: public class Alma{ private int tomeg; private boolean ferges; public void setTomeg(int t) { tomeg = t; } public void setFerges(boolean f) { ferges = f; }

27 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor27Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor This kulcsszó Hivatkozás az aktuális objektumra Akkor használjuk, ha egy metódus formális paraméterének neve megegyezik az egyik adattag nevével, például: public Pont(int x, int y) { this.x = x; this.y = y; }

28 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor28Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Garbage collection Objektumok élettartama Java-ban: –élettartam: objektum létrejöttétől a felszabadításig –létrejöttekor (new kulcsszóval) a heapen keletkezik (ellentétben a primitív típusokkal) –felszabadítás: automatikus, a garbage collector („Szemétgyűjtő”) végzi null kulcsszó: Azt jelöli, hogy az adott referencia nem hivatkozik egyetlen objektumra sem (pl. jozsi = null; ) Garbage collector hívása manuálisan (nem biztos hogy lefut): –System.gc(); http://en.wikipedia.org/wiki/Object_lifetime#Java

29 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor29Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Feladatok Írj egy osztály, amely téglalapot reprezentál,annak oldalhosszait tárolja. Írj az osztálynak egy default konstruktor. Írj az osztálynak egy konstruktort, amely egy paramétert vár és amellyel négyzet hozható létre. Írj az osztálynak metódusokat a kerület és a terület kiszámítására. Írj egy futtatható osztályt, amely parancssori paraméterek alapján létrehoz objektumokat a Téglalap osztályból, majd kiszámolja azok területeinek kerületeinek átlagát.

30 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor30Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kisdolgozat Jövő héten kisdolgozat –gyakorlat helyén, idején –téma: bármi, ami volt a gyakorlaton, pl.: Mire jó a garbage collector? Hogy jelölünk..-t UML-ben? Írj meg egy osztályt, ami egy embert reprezentál. Legyen neki neve, tömege, kedve, és hogy férfi-e (ez csak igaz/hamis értéket vehessen fel). Írj hozzájük getter/setter metódust, valamint default és paraméteres konstruktort is! Ábrázolj valamit UML-ben! Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor30


Letölteni ppt "1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat."

Hasonló előadás


Google Hirdetések