Sunday, 22 July 2018

Java-da Access Modifiers

Java proqramlaşdırmada Access modifiers. Tərcümədə çətinlik çəkdiyim bu ifadə proqram daxilində tərtib olunan siniflər, onun dəyişənləri və metodlarının kimlərə əlçatan olub olmadığını təyin etmək üçündür. 4 forması var:

public
(default, friendly, no keyword, heç bir söz yazılmır)
protected
private


public-bütün Java dünyası üçün əlçatandır. Siniflər, metodlar və dəyişənlər üçün işlədilə bilər.

(default, və ya friendly)-heç bir şey yazılmadığı halda Java bu cür qəbul edir. Bu zaman sinfin öz daxili metodları, eyni paket daxilində olan siniflər və törədilmiş (derived) siniflər üçün əlçatan olur. Bundan kənar siniflər bu sahələrə müraciət imkanına sahib olmur. Siniflər, metodlar və dəyişənlər üçün istifadə edilə bilər.

protected-sinif daxilindəki metodlar və törədilmiş siniflər üçün əlçatan olduğunu göstərir. Metodlar və dəyişənlər üçün istifadə olunur. Siniflər "protected" ola bilməz.

private-yalnız sinif daxilindəki metodlar istifadə edə bilər. Digər heç bir sinif üçün istifadəyə açıq deyil. Metodlar və dəyişənlər üçün istifadə olunur. Siniflər "private" ola bilməz.

Əlavə olaraq, "interface"lər və onların metodlarında heç bir "access modifier" qeyd olunmadığı halda Java onları avtomatik olaraq "public" şəklində tanıyır.

Java-da metodlar

Java proqramlaşdırmada metodlar barədə. Proqramın bir hissəsi kimi metodlar müəyyən bir əməliyyatı yerinə yetirmək üçün yazılır. Proqramlaşdırmadakı "Parçala və hökm sür" prinsipinin əsas özəyini təşkil edir. Metod hansısa çıxış və ya qayıdış dəyəri tipində ola bilər, ya da heç bir dəyər döndürməyə bilər. Əgər bir dəyər qaytararsa, ümumi bu formada yazılır:
<access mod.> <dəyər tipi> <metodun adı>(parametr)
{
   //kodlar
   return <qayıdış dəyəri>
}

access mod.- public, private, protected və ya default (default-heç bir şey yazılmazsa, default kimi tanınır.)
dəyər tipi-primitiv və ya referans bir dəyər tipi ola bilər. Məsələn, int, char, String və ya Test (Test-proqramçının yazdığı hər hansı bir sinif).
metodun adı-çox vaxt felin əmr şəklində bir və ya bir neçə sözdən ibarət ifadə olur. Qəbul olunmuş standarta görə kiçik hərflə başlayır və iki və daha çox söz olarsa, sonrakı sözlər böyük hərflə başlayır və bitişik yazılır (dəyişənlərin adlandırılmasında da bu cür qəbul olunub).
parametr-dəyər tipi və adı qeyd olunmaqla metod daxilində işlədiləcək bir və ya bir neçə parametrlər daxil edilə bilər. Heç bir parametr olmaya da bilər.
Nümunə:

public class Test
{
    public double kvadratHesabla(double d)
    {
        double k=d*d;
        return k;
    }
}

Burada diqqət edilməli məsələ odur ki,qaytarılan dəyərin tipi (k-double) metod tanıtılması zamanı qeyd olunan tipdən (double) olmalıdır. Əslində, bu nümunədəki metodun static olması daha məqəsədəuyğun olardı. Bu barədə isə daha sonra yazacam.

Java-da dəyişənlər (variables)

Java proqramlaşdırmada dəyişənlər (Variables) barədə. Tip olaraq primitiv və referans dəyişənlərinə bölünür. Primitiv tip dəyişənlər tam ədədlər (byte, int, short, long), həqiqi ədədlər (double, float), simvollar (char) və məntiq (boolean) dəyişnləridir. Referans dəyişənləri isə bir sinfə mənsub obyekt kimi yaradılmış dəyişənlərdir. Məsələn, String.
Bundan başqa bir də qüvvədə olma baxımından 3 formada olur: Local, instanca, class.
Local variables yalnız metodlar və ya {} bloku daxilində yaradılır və orada qüvvədə olur. Bundan kənarda heç bir şəkildə istifadə oluna bilməz.
Instance variables metodların xaricində, əksər hallarda sinfin elan olunmasından (declaration) dərhal sonra yazılır və həmin sinfin obyektlərinin bir xüsusiyyəti kimi çıxış edir. Hər yeni yaradılmış obyekt üçün yeni bir instance variable yaradılır və hər obyektə uyğun fərqli dəyərlər verilir. Müraciət yalnız obyekt üzərindən mümkün olur. Məsələn, Test sinfi v dəyişəninə malikdir. Bu sinfin test1, test2 obyektlərinin fərqli dəyərlərdə v dəyişəni var. Müraciət isə test1.v, test2.v yolu ilə olur. Bunlar hər biri ayrı ünvanları göstərir.

public class Test
{
    int v;
    public static void main (String[] arg) 
    {
        Test test1=new Test();
        Test test2=new Test();
        test1.v=5;
        test2.v=10;
        System.out.println(test1.v);
        System.out.println(test2.v);
    }
}

Class (və ya static) variables sinif səviyyəsində dəyişənlərdir. Bu sinifdən yaradılmış bütün obyektlər üçün ümumi dəyərə sahib olur və müraciət həm obyekt üzərindən, həm də sinif vasitəsilə mümkündür. Yəni, Test.v, test1.v, test2.v müraciətləri eyni bir ünvanı göstərir.

public class Test
{
    static int v;
    public static void main (String[] arg)
    {
        Test test1=new Test();
        Test test2=new Test();
        test1.v=5;
        test2.v=10;
        Test.v=15;
        System.out.println(test1.v);
        System.out.println(test2.v);
        System.out.println(v);
    }
}

Son nümunədə hər nə qədər ayrı ayrı obyektlər üçün fərqli dəyər verilibsə də, dəyişiklik eyni bir "v" üzərində gedir və sondakı dəyər 15 olur.