Organizarea surselor și controlul accesului

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.

Specificatori de acces

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:

Important: utilizarea specificatorilor contribuie la realizarea încapsulării. Amintim, din primul laborator, că încapsularea se referă la acumularea atributelor şi metodelor caracteristice unei anumite categorii de obiecte într-o clasă. Pe de altă parte, acest concept denotă şi ascunderea informaţiei de stare internă a unui obiect, reprezentată de atributele acestuia, alături de valorile aferente, şi asigurarea comunicării strict prin intermediul metodelor (= interfata clasei). Acest lucru conduce la izolarea modului de implementare a unei clase (= atributele acesteia şi cum sunt manipulate) de utilizarea acesteia. Utilizatorii unei clase pot conta pe funcţionalitatea expusă de aceasta, indiferent de implementarea ei internă (chiar şi dacă se poate modifica în timp). Dacă utilizatorii ar avea acces la modul efectiv de implementare a unei clase, ar fi imposibilă modificarea implementării ei (necesitate care apare des în practică) fără un impact lateral asupra utilizatorului.