© Kozsik Tamás Csomagok
© Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok Beágyazott osztályok
© Kozsik Tamás Alrendszerek kialakítása
© Kozsik Tamás Alrendszerek kialakítása
© Kozsik Tamás Csomag A típusainkat csomagokba soroljuk Összetartozás kifejezése A csomagok hierarchiába szervezhetők –Minősített hivatkozás pontokkal java.util Egy típus teljes neve tartalmazza az őt befoglaló csomag nevét is: java.util.Vector
© Kozsik Tamás Összetartozás A láthatósági módosítószavak: public, protected, private Ha nem írunk semmit, akkor „félnyilvános”, azaz csomagszintű Az azonos csomagban levő osztályok hozzáférnek egymás félnyilvános tagjaihoz A protected ennek a kiterjesztése
© Kozsik Tamás Csomagok hierarchiája? Igazándiból nem is a csomagok vannak hierarchiában... hanem a csomagnevek! A java csomagnak semmi köze a java.util csomaghoz - csak a nevük „hasonló” Nem tökéletes a támogatás Java-ban a programrendszerek hierarchikus tagolására
© Kozsik Tamás Alrendszerek kialakítása
© Kozsik Tamás Csomagok megadása A típusdefiníció elé egyszerűen beírjuk, hogy melyik csomagba tartozik A package kulcsszó package raktár.adatok; public class Csavar extends Anyag {... }
© Kozsik Tamás A csomagok összeállítása A csomagok nyitottak Bármikor hozzávehetek újabb osztályokat, interfészeket Egyszerűen elé írok egy package utasítást Egy típus pontosan egy csomagba tartozik –Csomagok metszete üres –Névtelen csomag: ha nincs package utasítás
© Kozsik Tamás Feladat A Pont osztály legyen a geo.alapok csomagban Fordítsuk le külön a Pont osztályt
© Kozsik Tamás Hivatkozás más csomagokra Ha egy forrásfájlban használni akarunk egy típust egy másik csomagból: –Írjuk ki a teljes nevét –Importáljuk import utasítással
© Kozsik Tamás Hivatkozás teljes névvel Például névtelen csomagban, az A osztályt definiáló fájlon belül… class A { void foo(){ java.util.Vector bar = new java.util.Vector(); }
© Kozsik Tamás Importálás + rövid név Például névtelen csomagban, az A osztályt definiáló fájlon belül… import java.util.Vector; class A { void foo(){ Vector bar = new Vector(); }
© Kozsik Tamás Importálás + rövid név Minden típust importálhatunk egyszerre a java.util csomagból: import java.util.*; class A { void foo(){ Vector bar = new Vector(); }
© Kozsik Tamás Az import utasítás Arra használható, hogy ne kelljen kiírni bizonyos típusok teljes nevét (pl. java.util.Vector), csak a rövid nevét (Vector). Nem elég, hogy import java.*; Nem használható „félig teljes” név, pl. util.Vector
© Kozsik Tamás Feladat A Kör osztály kerüljön a geo csomagba Használnia kell a geo.alapok.Pont osztályt Nem megy a fordítás, ugye?
© Kozsik Tamás Fordítási egység Az, amit oda lehet adni a fordítónak, hogy lefordítsa Java-ban egy fordítási egység tartalma: –package utasítás (opcionális) –import utasítások (opcionális) –típusdefiníciók (egy vagy több) A sorrend kötött A csomagdeklaráció és az importáló utasítások minden típusdefinícióra vonatkoznak.
© Kozsik Tamás A fordítási egységek elhelyezése Általában fájlokban, a fájlrendszerben Néhány fejlesztőeszköz ettől eltérően, valamilyen adatbázisban tárolja a forrásokat
© Kozsik Tamás Forrásfájlok Egy fájl pontosan egy fordítási egységet tartalmaz A fájl kiterjesztése.java Ha a fájlban van publikus típus, akkor a fájl neve meg kell, hogy egyezzen a típus nevével –Egy fájlban / fordítási egységben csak egy publikus típus lehet...
© Kozsik Tamás A forrásfájlok elhelyezése Hozzunk létre a csomagszerkezettel egyező könyvtárszerkezetet Abba tegyük a forrásfájlokat A főprogram egyelőre kerüljön a gyökérbe, a névtelen csomagba Fordítsunk a gyökérből Később beszélünk még a további trükkökről...
© Kozsik Tamás Feladat A Kör és Pont osztályok mellé írj egy főprogramot, és fordítsd össze őket Figyeld meg, hogy a Pont objektumok félnyilvános adattagjait nem tudod a Kör osztálydefinícióból vagy a főprogramból használni!