CodeGym /Kurslar /Java SELF AZ /Java-da Proyektlər

Java-da Proyektlər

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

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ı
\com\codegym\tasks\Solution.java
com.codegym.tasks
Solution
\com\io\FileInputStream.java
com.io
FileInputStream
\java\util\ArrayList.java
java.util
ArrayList

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ı
c:\projects\data\my\src\com\codegym\tasks\
com.codegym.tasks
d:\files\git\data\project\src\com\codegym\tasks\
com.codegym.tasks

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ı
org.apache.common
org.apache.tomcat
org.apache.util
«Apache» layihəsi
com.oracle.jdbc
«Oracle» şirkəti
java.io
javax.servlet
Oracle şirkəti, Java layihəsi
com.ibm.websphere
«IBM» şirkəti, WebSphere layihəsi
com.jboss
«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ı
java.io.FileInputStream
java.io
FileInputStream
java.lang.String
java.lang
String
java.util.ArrayList
java.util
ArrayList
org.apache.tomcat.Servlet
org.apache.tomcat
Servlet
Cat
yoxdur
Cat

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.Scannercom.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.

Qeyd 1

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.

Qeyd 2

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.


Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION