1. Paketlər
Standart Java proqramlarında çox sayda sinif olur. Nə qədər? Minlərlə, on minlərlə. Əgər əlavə olaraq proqramın istifadə etdiyi müxtəlif kitabxanaları da hesablasaq, hansı ki, digər proqramçılar tərəfindən yazılmış sinifləri ehtiva edir, onda siniflərin sayı asanlıqla milyonlarla ölçülə bilər!
Bütün bu milyonlar və hətta minlərlə sinif üçün unikal adlar tapmaq mümkün deyil.
Yox, əlbəttə A123
, B345
kimi adlar tapmaq olar, amma əgər hər bir sinif üçün anlaşıqlı, bu sinifi başa düşməyi asanlaşdıran yaxşı ad seçməkdən danışırıqsa (məsələn, sətirlər üçün String
), onda hətta min unikal ad seçmək çox böyük işdir.
Odur ki, Java-da bütün siniflər paketlərə qruplaşdırılıb.
Java-da siniflər və onların paketləri öz mahiyyətində kompüterdəki fayllar və qovluqları çox xatırladır.
Məsələn, əgər kompüterdə 10 sənəd saxlamaq lazım olsa, böyük ehtimalla onları bir qovluqda saxlayacaqsınız. Amma sənədlər minlərlədirsə (məsələn, şirkətin bütün sənədləri)?
Əgər minlərlə sənəd saxlamaq lazım olsaydı, bir neçə səviyyəli qovluqlar hazırlamaq yaxşı həll olardı. Bu qovluqlara aid olan sənədləri ən son səviyyəli qovluqda saxlamaq lazımdır. Sənədlər üçün yaxşı adlar da kömək edərdi.
Əslində Java-da bu siniflər üçün belə bir sistem qurulub.
Siniflərin faylları müxtəlif direktoriyalarda (qovluqlarda) saxlanılır və sinif qovluğunun tam adı, bütün alt qovluqlarla birlikdə, sinifin paketi adlanır. Məsələn:
Faylın yolu | Paketin adı | Sinifin adı |
---|---|---|
|
|
|
|
|
|
|
|
|
Paketin adı, qovluğun adından fərqli olaraq, nöqtə ilə yazılır. Yəni, əgər qovluq \com\codegym\tasks\
idisə, ona uyğun paket com.codegym.tasks
olacaq.
2. src
qovluğu
Java-da adətən bir proqramın bütün siniflərini bir qovluqda (və onun alt qovluqlarında) saxlamaq qəbul edilir. Belə qovluğu adətən src
(ingiliscə source sözündən qısaltma) adlandırırlar.
Belə qovluq layihənin kökü (source root) adlanır və paketlər üçün bütün yollar ondan etibarən sayılır. Nümunələr:
Qovluqlar | Paketin adı |
---|---|
|
|
|
|
Proqramçılar belə vəziyyətdə təqribən belə deyər: «bizdə my
adlı layihə var, hansını ki c:\projects\data
qovluğunda saxlamışıq» və ya «bizdə project
adlı layihə var, hansını ki d:\files\git\data
qovluğunda saxlamışıq»
Həmişə sinifləri paketlərdə saxlamaq daha yaxşıdır, src
qovluğunun kökündə deyil. Əgər siniflər azdırsa bu problem olmayacaq, amma siniflər çox olduqda, asanlıqla qarışıq düşə bilər. Buna görə həmişə sinifləri yalnız paketlərdə yaradın.
Java-da siniflərə və paketlərə mənalı adlar vermək qəbul edilir. Bir çox şirkət öz kitabxanalarını (siniflər dəsti) buraxır və qarışıqlığın qarşısını almaq üçün bu siniflərin paketlərini şirkətin/saytın/layihənin adına görə adlandırırlar:
Paketin adı | Şirkət/Layihənin adı |
---|---|
|
«Apache» layihəsi |
|
«Oracle» şirkəti |
|
Oracle şirkəti, Java layihəsi |
|
«IBM» şirkəti, WebSphere layihəsi |
|
«Jboss» layihəsi |
3. Faylın Məzmunu
Java dilinin standartına görə, kod olan faylda class-ın adı və onun paketi haqqında məlumat olmalıdır. Standartın sxemi aşağıda göstərilib:
package paketin-adı;
public class Class-ın-adı
{
}
Paketin adı qovluğun adına uyğun olmalıdır, faylın adı isə public class-ın adına uyğun gəlməlidir.
Əgər sizdə ...\src\com\project\Service.java
faylı varsa, deməli onun içində bu yazılmalıdır:
package com.project;
public class Service
{
}
4. Klassların İdxalı
Klassın adı + pakətin adı belə adlanan klassın tam unikal adı formasını yaradır.
Nümunələr:
Tam unikal ad | Pakətin adı | Klassın adı |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
yoxdur | |
Yaxşı xəbər:
Klassın tam adı hər zaman bir layihə çərçivəsində unikaldır. Axı bir qovluqda iki sənədin eyni adda olmasını yarada bilməzsiniz.
Pis xəbər:
Tam adlar adətən ya uzun, ya da çox uzundur. Hər dəfə kodda uzun bir ad, məsələn java.util.ArrayList yazmaq çox əlverişsizdir.
Ona görə də Java-da «klassları idxal etmək» imkanı əlavə ediblər.
Beləliklə, siz kodunuzda klassın qısa adından istifadə edə bilərsiniz, amma əvvəlcə kompilyatora izah etməlisiniz ki, məhz hansı «tam unikal klass adı» qısa ada uyğun gəlir. Birdən layihənizdə bu adla bir neçə klass olar. Və ya əvvəlcə tək idi, sonra daha 15 əlavə edilib...
Klassın qısa adından kodunuzda istifadə etmək üçün kodunuzun əvvəlinə belə bir konstruktor əlavə etməlisiniz:
import tam-unikal-klass-adı;
Belə bir bəyanat əlavə etmək lazımdır ki, klassın başlanğıcında, package
bəyanatından dərhal sonra olsun.
Nümunə:
package com.codegym.tasks.task01;
import java.util.Scanner;
import com.test.helper.special.ArrayList;
public class Solution
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
ArrayList list = new ArrayList();
}
}
Biz java.util.Scanner və com.test.helper.special.ArrayList klasslarını idxal etdiyimiz üçün, kodumuzda qısa adlarından istifadə edə bilirik. Kompilyator bilir, konkret hansı klassları nəzərdə tutmuşuq.
Bəs bu kod, əgər import
istifadə etməsək, necə görünərdi:
package com.codegym.tasks.task01;
public class Solution
{
public static void main(String[] args)
{
java.util.Scanner console = new java.util.Scanner(System.in);
com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
}
}
Yeri gəlmişkən, əgər layihənizdə Scanner
adlı iki klass varsa, onları bir faylda idxal etmək mümkün deyil: ikincisi üçün daim uzun adı istifadə etməyə məcbur qalacaqsınız.
Məsələn, qrupunuzda Sərxan adlı biri var və ünsiyyətdə heç bir problem yoxdur — hamı onun kim olduğunu bilir. Amma əgər üç nəfər olsaydı, fərqləndirmək üçün tam unikal adlardan istifadə etməli olardınız.
Yeri gəlmişkən, əgər sinifinizə çoxlu import-lar əlavə etməyə ərinirsinizsə, «tənbəllər üçün» versiyasından istifadə edə bilərsiniz: klass adının əvəzinə ulduz qoyun:
import paketin-adı.*;
Beləliklə, siz kodunuzda həmin paketdə olan bütün klassların qısa adlarından istifadə edə biləcəksiniz.
Paketi java.lang
olan bütün klasslar avtomatik idxal olunur, ona görə də onların import
bəyanatını yazmaq lazım deyil. Sizə tanış olan bir klass: bu... java.lang.String
. Bəli, məhz məşhur String
klassı, hansı ki sətirlərlə işləmək üçün istifadə edilir.
GO TO FULL VERSION