Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.