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

Csomagok.

Hasonló előadás


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

1 Csomagok

2 A program tagolása Típusdefiníciók (osztályok, interfészek)‏ Metódusok
Blokk utasítások Csomagok Beágyazott osztályok

3 Alrendszerek kialakítása

4 Alrendszerek kialakítása

5 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

6 Ö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

7 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

8 Alrendszerek kialakítása

9 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 { ... }

10 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

11 Feladat A Pont osztály legyen a geo.alapok csomagban
Fordítsuk le külön a Pont osztályt

12 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

13 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(); }

14 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(); }

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

16 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

17 Beágyazott típusok is import java.util.Vector; import java.io.*;
import java.util.Map.Entry; import java.text.Format.*;

18 Statikus tagok importálása
A Java 5-től kezdve nem csak típusok, hanem statikus tagok is importálhatók Statikus metódusok Statikus attribútumok import static utasítás Importálható egy utasítással egy név, vagy egy típus összes statikus tagja

19 Példa import static java.util.Arrays.sort; class Sorting {
public static void main( String[] args ){ sort(args); for( String s: args ){ System.out.println(s); }

20 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?

21 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.

22 A fordítási egységek … több típusdefiníciót is tartalmazhatnak
Mindegyikhez keletkezik egy .class fájl Csavar.java package raktár.adatok; public class Csavar extends Anyag {...} class CsavarMenet {...} A fordítás során két fájl keletkezik: Csavar.class CsavarMenet.class

23 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

24 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...

25 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...

26 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!

27 A lefordított fájlok elhelyezése
Követni kell a csomag-hierarchiát különben a virtuális gép (java) tanácstalan lesz Alkönyvtárak létrehozása Például a raktar.adatok.Csavar osztály .class fájlját a raktár/adatok alkönyvtárba kell tenni raktár/adatok/Csavar.class

28 A -d kapcsoló Nem kell kézzel másolgatni: bízzuk rá a javac fordítóra
Megmondjuk, mi legyen a célkönyvtár Azon belül felépíti a szükséges könyvtárstruktúrát javac -d . Csavar.java javac -d ../classes Csavar.java

29 A források elhelyezése
Javaslat: ugyanolyan struktúrában, mint a .class fájloknál, azaz követve a csomaghierarchiát. Pl.: src raktar adatok gui web classes

30 Forrásfájlok elhelyezése (2)‏
Lehetnek egy könyvtárszerkezetben a .class fájlokkal Lehetnek két különböző, de azonos szerkezetű könyvtárstruktúrában a forrás és a .class fájlok Lehetnek egész máshogy is, pl. sok könyvtárban szétszórva

31 A -sourcepath kapcsoló
Ha sok könyvtárba vannak szétszórva a forrásfájlok, akkor használhatjuk a -sourcepath kapcsolót Megadható, hogy mely könyvtárakban kell keresni forrásfájlok után javac -sourcepath ~/src/java:~/projects/raktar DB.java

32 Hivatkozások a fordítási egységen kívülre
Ha egy fordítási egység hivatkozik egy másik fordítási egységben levő típusra, akkor a javac fordító: megpróbálja megtalálni a hozzá tartozó .class fájlt - ha egyáltalán le van már az a típus fordítva ha nincs lefordítva, akkor megkeresi a megfelelő .java fájlt, és rekurzívan azt is lefordítja

33 Rekurzív fordítás A neve alapján keresi meg a hivatkozott típust tartalmazó forrásfájlt a javac A fájlnévnek meg kell egyeznie a típusnévvel A -sourcepath kapcsoló szerepe...

34 Hol keresse a .class fájlokat?
Alapértelmezésben a szabványos könyvtárakban és az aktuális munkakönyvtárban A -classpath kapcsoló segítségével más is megadható javac -classpath ~/classes:. DB.java A szabványos könyvtárakban, a ~/classes könyvtárban és az aktuális munkakönyvtárban.

35 A -classpath kapcsoló Megadható több könyvtárnév, amelyekben a .class fájlokat keresheti a fordító a könyvtárnevek elválasztásához UNIX alatt a : Windows alatt a ; használandó Nem csak könyvtárnevek, hanem .zip és .jar fájlok is megadhatók, azokban is keres A kapcsoló rövidebb alakja: -cp

36 Hogyan történik a keresés?
javac -classpath ~/classes:. DB.java Tegyük fel, hogy hivatkozás történik a raktar.adatok.Csavar osztályra. A szabványos könyvtárakban nem találja. Ott java. és javax. kezdetű típusok vannak... Keresi a ~/classes/raktar/adatok/Csavar.class fájlt Ha az sincs, keresi a raktar/adatok/Csavar.class fájlt Ha az sincs, keresi a forrását, a raktar/adatok/Csavar.java fájlt, hogy lefordítsa a -sourcepath kapcsoló alapján ha nincs megadva, akkor az aktuális könyvtárban

37 Osztálykeresési útvonal hagyományos megadása
A CLASSPATH környezeti változó Manapság nem illendő használni könnyen összekavarodnak a dolgok, ha több projekten is dolgozunk Helyette a -classpath kapcsoló

38 A javac fordító egyéb kapcsolói
Szabványos kapcsolók, pl. -g nyomkövetési infók -O optimalizálás -target kód verziószám (1.1, 1.2, …)‏ -nowarn ne legyenek figyelmeztetések -deprecation … erről még lesz szó… Nem szabványos kapcsolók Későbbi/korábbi fordítók nem biztos, hogy ismerik Pl. heap méretének beállítása


Letölteni ppt "Csomagok."

Hasonló előadás


Google Hirdetések