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

Programozás I. 4. gyakorlat.

Hasonló előadás


Az előadások a következő témára: "Programozás I. 4. gyakorlat."— Előadás másolata:

1 Programozás I. 4. gyakorlat

2 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 Kar Antal Gábor

3 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 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 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 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 Kar Antal Gábor

7 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 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 Osztály Egy osztálynak lehetnek: Adattagok megadása:
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 Példa public class Ember { private String nev; private int kor;
public void beszel(){ System.out.println(nev + ” beszel!”); }

11 Példányosítás public class Program{
public static void main(String[] args){ Ember jozsi = new Ember(); // példány jozsi.beszel(); }

12 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 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 Láthatóság osztály csomag leszármazott összes private I N nincs
protected public Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor

15 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 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 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 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 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 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 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 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 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 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 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 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 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 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();

29 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 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 Kar Antal Gábor


Letölteni ppt "Programozás I. 4. gyakorlat."

Hasonló előadás


Google Hirdetések