Professional Documents
Culture Documents
Pachete
7. Pachete
2
7. Pachete: noţiuni generale
• Pachet: mecanism de modularizare a programelor situat deasupra
claselor
• Conţine, de regulă, un grup de clase înrudite; mai poate avea:
interfeţe, subpachete, fişiere
• Se pot distribui independent şi joacă rol similar bibliotecilor din
limbajele ne-obiectuale
• Alt rol important: constituie spaţii de nume
• Sunt şi mecanism pentru controlul accesului la clase şi la membrii
claselor
• Apartenenţa codului dintr-un fişier sursă la un pachet se indică prin:
package numepachet;
• Declaraţia de pachet poate apare doar la începutul fişierului, o
singură dată
• Numele pachetului prefixează implicit numele oricărui tip conţinut în
acel pachet
• Dacă declaraţia package nu apare într-un fişier sursă, tipurile din
fişier fac parte din pachetul anonim.
3
4
7.2. Importarea tipurilor (1)
• Numele de tip în care apare şi • Import de tip singular:
numele pachetului: nume import
complet calificat numepachet.NumeClasa;
• În cod din afara pachetului se • Toate tipurile din acelaşi
folosesc nume complet pachet sunt importate implicit
calificate sau se importă • Pachetul java.lang este
complet sau parţial pachetul importat implicit în orice cod
• Importul se face plasarea Java
declaraţiei import la • Mecanismul de import din Java
începutul unui fişier sursă,
după o eventuală declaraţie este pasiv: informaţiile despre
package un pachet se citesc la
compilare doar când se
• Import la cerere (toate tipurile foloseşte un tip
din pachet se pot folosi cu • Există un set de reguli pentru a
nume simple:
determina numele complet
import numepachet.*; calificat al tipului unei referinţe
6
7.3. Controlul accesului prin
pachete
• Subpachetele sunt doar o modalitate de a organiza pachete
înrudite, nu se creează relaţie de moştenire
• Ex.: java.lang, java.io, java.net sunt subpachete pentru
java, iar java.util.concurrent este subpachet al lui
java.util
• Din java.util.concurrent nu sunt direct accesibile tipurile
declarate în java.util
• Dar: în cadrul unui pachet orice clasă poate accesa orice membri
din alte clase ale pachetului, care nu sunt declaraţi private în
acele clase
• Tipurile pot defini pentru membrii ne-privaţi 3 contracte diferite:
– Contractul public: principala funcţionalitate a tipului (interfeţele au numai
acest contract)
– Contractul protejat cu funcţionalitate disponibilă numai subtipurilor
– Contractul de pachet: funcţionalitate disponibilă în cadrul pachetului
8
7.3.1. Precizări asupra înlocuirii
metodelor (2)
• Într-un alt pachet se importă clasa public void publica () {
P1.Superclasa şi se defineşte System.out.println("Subc
Subclasa1 ca subclasă a acesteia: lasa1.publica()");
package P2; }
import P1.Superclasa;
public static void
public class Subclasa1 main(String[] args){
extends Superclasa { new Subclasa1().apeluri();
public void privata () { }
System.out.println("Subc
lasa1.privata()"); }
}
• Rezultatul execuţiei:
public void pachet () {
System.out.println("Subc Superclasa.privata()
lasa1.pachet()"); Superclasa.pachet()
} Subclasa1.protejata()
Subclasa1.publica()
public void protejata () {
System.out.println("Subc
lasa1.protejata()");
}
10
7.3.1. Precizări asupra înlocuirii
metodelor (4)
• Subclasa2 plasată într-un alt pachet: public void publica ()
package P3; { System.out.println("Subclas
import P1.Subclasa2; a 3.publica()");
}
public class Subclasa3
extends Subclasa2 { public static void
public void privata () { main(String[] args){
System.out.println("Subc new Subclasa3().apeluri();
lasa3.privata()"); }
}
}
public void pachet () { • Rezultatul execuţiei:
System.out.println("Subc Superclasa.privata()
lasa3.pachet()"); Subclasa3.pachet()
} Subclasa3.protejata()
Subclasa3.publica()
public void protejata () {
System.out.println("Subc • Aparent a fost înlocuită metoda
lasa3.protejata()"); pachet()din Superclasa,
} inaccesibilă în alt pachet. În realitate a
fost înlocuită metoda publică
pachet() din Subclasa2
11
12
7.3.2. Compilarea şi execuţia
claselor din pachete (2)
• Se sugerează în definiţia limbajului folosirea facilităţilor sistemului de fişiere
al platformei de implementare pentru memorarea fişierelor cu surse Java
• În practică: director separat pentru fiecare pachet, conţine toate fişierele
sursă ale pachetului (Obs.: un fişier poate conţine o singură clasă public)
• Pentru subpachete se creează subdirectoare ale directorului pentru
pachetul de rang superior
• Se mai recomandă ca toate directoarele de pachete să fie subdirectoare ale
unui director de rang superior (src)
• Organizare asemănătoare se recomandă pentru fişierele .class
• Ţinând cont de organizarea fişierelor se precizează cum se poate realiza
compilarea fişierelor sursă asftel încât fişierele .class să ajungă la
destinaţia dorită
• Se consideră că programul sursă este memorat în fişierul Tip1.java şi că
clasa Tip1 are o metodă main
• Fişierul Tip1.java trebuie să aibă la începutul său linia:
package pachet.subpachet;
13
14