Programozás III KOLLEKCIÓK 2.
KONTÉNEREK – GYŰJTEMÉNYEK (ismétlés) A konténer olyan objektum, amely objektumokat tárol, és alkalmas különböző karbantartási, keresési és bejárási funkciók megvalósítására. Csomagja: java.util A konténerek általánosak, azokba bármilyen objektumot betehetünk. (De csak objektumot!) A gyűjtemények „változtatható méretű tömbök”, rendelkeznek karbantartási és keresési funkciókkal.
FELADATMEGOLDÁS (ismétlés) Gondoljuk végig egy klinika latogato() metódusát: A betegek listája tartalmazza a regisztrált betegek adatait, keresünk egy konkrét beteget. A programrészlet:
FELADATMEGOLDÁS (ismétlés)
FELADATMEGOLDÁS (ismétlés) Biztos, hogy megtalálja? Csak akkor, ha a Paciens osztályban van equals() és hashcode() metódus. És ezek a metódusok honnan tudják, hogy orvos vagy barát keresi az illetőt? Egyelőre sehonnan, fel kell rá készíteni őket.
FELADATMEGOLDÁS (ismétlés)
FELADATMEGOLDÁS (ismétlés) Mikor nem kell a kikommentezett rész?
FELADATMEGOLDÁS (ismétlés)
FELADATMEGOLDÁS (ismétlés) Mi történik, ha a Paciens osztálynak van egy utód osztálya, és az utódok „ugyanolyanságára” még egy további saját jogú feltétel is van? A név-re, tajszámra vonatkozó feltétel öröklődik a Paciens osztályból, a saját feltételre vonatkozó megkötést viszont az utód osztályban kell generálni.
RENDEZÉS (ismétlés) A Collections osztály algoritmusai úgy működnek, hogy páronként összehasonlítják a gyűjtemény elemeit. Ezért ezek a metódusok megkövetelik, hogy a konténerbe betett objektumok összehasonlíthatóak legyenek, vagyis hogy a/ maguk implementálják a Comparable interfészt, vagy b/ létezzen hozzájuk a Compator interfészt implementáló hasonlító osztály.
RENDEZÉS (ismétlés) Mikor használható a Collections.sort(adatok) hívás? adatok: List<Adat> adatok; Adat: class Adat implements Comparable Adat-ban: compareTo() metódus
RENDEZÉS (ismétlés) Mikor használható a Collections.sort(adatok, new Hasonlitas()) hívás? adatok: List<Adat> adatok; Adat: class Adat Hasonlitas: class Hasonlitas implements Comparator Hasonlitas-ban: compare() metódus
RENDEZÉS (ismétlés) Rendezések: Mindegy, hogy melyik fajtát használják, de egy projekten belül lehetőleg csak egyfajta legyen. (Az AlapOsztaly implements Comparable megoldás esetén is lehet többféle szempontú rendezés – hogyan?)
„VÁLASZTHATÓ” RENDEZÉS ? Hogyan oldható meg, hogy választható szempont szerint rendezzünk?
„VÁLASZTHATÓ” RENDEZÉS
„VÁLASZTHATÓ” RENDEZÉS
RENDEZÉS AZ EDDIGIEKTŐL CSÖPPET ELTÉRŐ MÓDON Példa elsődleges – másodlagos rendezésre Ld. witch/… eloadas/peldak/Rendezos szerző: Pintér Tamás
MÚLT ÓRAI „MARADVÁNY” Mi ez?
JAVA – GENERIKUSOK A generikus lehetőséget ad osztályok más típussal való paraméterezésére. Pl.: A generikusan (általánosan) definiált List aktuális típus-paramétere az lehet, hogy a lista milyen konkrét típusú adatokat tartalmazzon – pl. List<Paros>
JAVA – GENERIKUS PÉLDA De sok más helyen is használhatjuk a generikust. Pl. készíthetünk olyan saját generikus (általános) számológép típust, amely ugyanúgy teszi a dolgát: összead, szoroz, de egyszer egészekkel, máskor törtekkel, attól függően, hogy az Integer vagy a Double típussal paraméterezve konkretizáltuk-e.
PÉLDA SAJÁT GENERIKUS OSZTÁLYRA
PÉLDA SAJÁT GENERIKUS OSZTÁLYRA
MÁSIK PÉLDA SAJÁT GENERIKUS OSZTÁLYRA
MÉG KÉT FOGALOM – 1. Iterátor: Egy iterátor segítségével végigmehetünk egy kollekción, sőt, elemet is törölhetünk belőle.
MÉG KÉT FOGALOM – 1. Iterátor példa
MÉG KÉT FOGALOM – 1. – idő teszt http://www.mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/
MÉG KÉT FOGALOM – 2. Enumerátor: Az enum fix konstans értékek létrehozására használható. Mivel típusos, így biztonságosabb mint egy int konstans. Pl: public static final int HETFO = 1 – nem tudjuk, hogy az 1-es mit takar, és kezelni kell az érvénytelen értéket public enum Nap { HETFO, KEDD,… – típusos, így nem kell foglalkozni az érvénytelen értékekkel Lehet konstruktora, és használhatunk benne final és nem final mezőket.
NÉHÁNY OSZTÁLY Enumerátor példa 1.
MÉG KÉT FOGALOM – 2.
MÉG KÉT FOGALOM – 2. Enumerátor példa 2.
MÉG KÉT FOGALOM – 2.
ADÓSSÁG: PROBLÉMAFELVETÉS Kívülről módosítható
ADÓSSÁG: MEGOLDÁSOK Egy lehetséges megoldás: Másik lehetőség: Mi a különbség?
ADÓSSÁG: MEGOLDÁSOK Első változat: A lista = getTantargyak() lista módosítható, de a getTantargyak() hívás eredménye mindig az eredeti lista. Második változat: A lista = getTantargyak() lista egyáltalán nem módosítható.
ÚJABB PROBLÉMAFELVETÉS Hogyan lehet megoldani azt, hogy minden példánynak egyedi sorszáma legyen? Még várom az önálló kísérletezést.