Chiar şi în cadrul proiectelor de dimensiune medie, numărul claselor definite poate creşte considerabil. Astfel, devine aparentă necesitatea unei organizări a fişierelor sursă, pe baza funcţiei îndeplinite şi relaţiilor dintre acestea. În plus, această organizare permite şi utilizarea unor mecanisme de control al accesului.
Spre exemplu, în cadrul unei aplicaţii de transfer de fişiere, se pot distinge mai multe module, precum cel de interfaţă cu utilizatorul, cel de reţea, cel de configurare etc. În acest caz, este utilă gruparea claselor aferente fiecărui modul în propriul pachet.
Astfel, definiţia clasei MainClass din pachetul principal myapp ar începe prin cuvântul cheie package
:
package myapp; import java.util.*; public class MainClass { ... }
Organizarea în pachete adoptă o formă ierarhică, naturală, de altfel, în condiţiile în care proiectele ajung să aibă rapid module şi submodule pe măsură ce se dezvoltă. De asemenenea, această organizare se reflectă şi în structura de directoare a proiectelor. De exemplu, presupunand că directorul ce conţine sursele este src, fişierul Main.java se va găsi în directorul src/myapp.
În continuare, pentru implementarea modulului de reţea în cadrul proiectului myapp de mai sus, se poate defini pachetul network, care va fi ierarhic inferior pachetului myapp. În astfel de situaţii numele de pachete se separă prin ”.”, ca în exemplul următor:
package myapp.network; public class NetworkConnection { ... }
Fişierul NetworkConnection.java se va găsi în directorul src/myapp/network.
O documentaţie detaliată legată de oraganizarea în pachete poate fi accesată de aici.
Clasele şi funcţiile menţionate până acum au fost declarate utilizând un specificator special: public
. În limbajul Java (şi în majoritatea limbajelor de programare de tipul OOP), orice clasă, atribut sau metodă posedă un specificator de acces, al cărui rol este de a restricţiona accesul la entitatea respectivă, din perspectiva altor clase. Există specificatorii:
public
- permite acces complet din exteriorul clasei curenteprivate
- limitează accesul doar în cadrul clasei curenteprotected
- limitează accesul doar în cadrul clasei curente şi al tuturor descendenţilor ei (conceptul de descendenţă sau de moştenire va fi explicat mai târziu)protected
!