6. fejezet gondolkodás a java negyedik kiadásában - az igazi programok helyszíne a java-ban
Az objektum-orientált fejlesztés legfontosabb tényezője a változó komponensek elválasztása a konstansoktól.
Ez különösen fontos a könyvtárak számára. használó
A kívánt cél bizonyos megállapodásokkal érhető el: Például a könyvtár programozó beleegyezik abba, hogy ne törölje az osztály meglévő módszereit, mert ez megzavarhatja az ügyfélprogramozó kódstruktúráját. Ugyanakkor a fordított probléma sokkal akutabb. Például, hogyan tudja a könyvtár létrehozója tudni, hogy melyik adatmezőt használja az ügyfélprogramozó? Ugyanez vonatkozik az olyan módszerekre is, amelyek csak az osztály megvalósításának egy részét képezik, azaz nem az ügyfélprogramozó közvetlen használatra szánják. És ha a könyvtár készítőjének törölnie kell a régi implementációt és kicserélnie egy újat? Az osztálymezők bármelyikének megváltoztatása megzavarhatja az ügyfélprogramozó kódját. Kiderül, hogy a könyvtár alkotója "kötődik", és nincs mit változtatni.
A probléma megoldásához a Java definiálja a hozzáférési specifikátorokat, amellyel a könyvtár létrehozója jelzi, hogy mi áll rendelkezésre az ügyfélprogramozó számára, és mi nem. A hozzáférési szinteket (a teljestől a minimálisig) a következő kulcsszavak határozzák meg: nyilvános, védett. Hozzáférés a csomagban (nincs kulcsszó) és privát. Az előző bekezdésből kiderülhet, hogy a könyvtár alkotója a lehető legjobban titokban tartható, és csak azokat a módszereket fedezheti fel, amelyeket a programozó-ügyfélnek használnia kell. És ez teljesen igaz, bár szokatlanul néz ki azok számára, akiknek más nyelveken (különösen a C) programjai "megszokták" a korlátozások hiányát. A fejezet végére egyértelműen látni fogja a Java-hozzáférés-ellenőrzési mechanizmus hasznosságát.
Az összetett könyvtár fogalma és az ezekhez az összetevőkhöz való hozzáférés ellenőrzése azonban nem minden. Továbbra is meg kell érteni, hogyan kapcsolódnak össze az összetevők egy egységes teljes könyvtárban. Java-ban ezt a feladatot a kulcsszócsomag (csomag) oldja meg, és a hozzáférési specifikátorok attól függenek, hogy az osztályok azonosak vagy különböző csomagokban vannak-e. Először kiderítjük, hogy a könyvtárak komponenseit csomagokba helyezzük. Ezután képes lesz teljes mértékben megérteni a hozzáférési specifikátorok jelentését.
A csomag könyvtári modulként
A csomag olyan osztályokat tartalmaz, amelyek azonos névtérben egyesülnek.
Például a szabványos Java csomag tartalmaz egy szolgáltatás könyvtárat, amelyet java.util névtérként terveztek. Az egyik osztály a java.util nevű ArrayList. A programban lévő osztály használatához használhatja a teljes java.util.ArrayList nevet. A teljes nevek azonban túl nehézkesek, ezért kényelmesebb a kulcsszó importálását a programban használni. Ha csak egy osztályt kíván használni, közvetlenül megadhatja az importálási irányelvben:
Mostantól elérheti az ArrayList osztályt anélkül, hogy megadná a teljes nevet, de a java.util csomag más osztályai nem érhetők el. Az összes osztály importálásához adja meg a * nevet az osztálynév helyett, ahogyan a könyv szinte minden példájában történik:
Az importálási mechanizmus lehetővé teszi a névterek kezelését. Az osztálytagok nevei el vannak különítve egymástól. Az A osztály f () módja nem ütközik a (B) osztályú definícióval (argumentumlista) rendelkező f () módszerrel. Mi a helyzet az osztálynevekkel? Tegyük fel, hogy a Stack osztály olyan számítógépen van létrehozva, ahol valaki más már meghatározta a Stack nevű osztályt. A potenciális névkonfliktusok a legfontosabb ok, amiért a Java-névterek kezelése annyira fontos, és képesek arra, hogy minden osztályhoz egyedi azonosítókat hozzanak létre.
Addig a könyvek legtöbb példányát külön fájlokba írták, és helyi felhasználásra szánták, így a csomagok nevét figyelmen kívül lehet hagyni. (Ebben az esetben az osztálynevek az "alapértelmezett csomagba" kerülnek.) Természetesen ez is megoldás, és ezt a megközelítést a könyvben lehetőség szerint alkalmazzák. De ha olyan könyvtárat vagy programot hoz létre, amely ugyanazon a gépen más Java programokat használ, akkor fontolja meg a névkonfliktusok megakadályozását.
A Java-forráskóddal rendelkező fájlt gyakran nevezik egy fordított modulnak. Az egyes lefordított modulok neve egy .java utótagdal végződik. és bent lehet nyitott (nyilvános) osztály, amelynek neve ugyanaz, mint a fájl (nagybetűvel, de .java kiterjesztés nélkül). Bármelyik fordított modul nem tartalmazhat legfeljebb egy nyílt osztályt, ellenkező esetben a fordító hibát jelez. A többi modul osztály, ha ott vannak, el vannak rejtve a külvilágtól - ők nem nyilvánosak (nyilvánosak), és a "nyílt" osztályba "segédnek" tekintendők.
A .java fájlban definiált osztályok összeállításának eredményeként. Ugyanaz a névvel rendelkező, de .class kiterjesztésű osztály jön létre. Így, ha összeállításához több .java fájlokat, akkor kap több olyan fájlokat a Ras-kiterjesztés .class. Ha programozott összeállított nyelvet, akkor valószínűleg hozzászokott ahhoz, hogy a fordító generál kimeneti fájlok (általában kiterjesztésű OBJ), melyet végül a linker, hogy készítsen egy futtatható fájl vagy könyvtár. A Java nem így működik. A munkaprogram homogén .class fájlok egy csoportja. amelyek egy csomagba vannak összeillesztve és JAR fájlba tömörítve (Javajar segédprogram). A Java-tolmács feladata ezeknek a fájloknak a keresése, betöltése és értelmezése.
A könyvtár az osztályokkal ellátott fájlok gyűjteménye is. Minden fájlban van egy publikációs osztály, amelynek bármely olyan osztálya van, amelyek nem rendelkeznek a nyilvános specifikátorral. Ha kijelenteni szeretné, hogy ezek az összetevők (különálló Java és .class fájlokban tárolva) egymáshoz kapcsolódnak, használja a kulcsszócsomagot.
azt jelenti, hogy ez a fordított modul a könyvtárban szerepel a névhez való hozzáféréssel. Más szóval, akkor azt jelzi, hogy a nyílt osztályban összeállításában egység tartozik mypackage és ha valaki meg akarja használni, akkor már teljesen égnek vagy osztály nevét, vagy import irányelv hozzáféréssel (tervezés, a fent említett). Ne feledje, hogy a Java szabályok szerint a csomagnevek csak kisbetűkkel íródnak.
Tegyük fel, hogy a fájl neve MyClass.java. Ez egy és csak egy nyilvános osztályt tartalmazhat, az utóbbit pedig MyClass (kis- és nagybetűk).
Ha most valaki a hozzáférési csomagból szeretné használni a MyClass-ot vagy bármely más nyilvános osztályt. akkor használni kell a kulcsszó importját. így elérhetővé válik a hozzáférési név. Lehetőség van a teljes osztálynév megadására: