Sunday, 22 July 2018

Java-da Non-access Modifiers

Java proqramlaşdırmada "Non-access modifiers". Access modifiers barədə yazmışdım. Qısaca xatırladım ki, bunlar sinif, dəyişən və metodların "görünəbilmə zonalarını" təyin edirdi. Non-access modifiers isə əlavə xüsusiyyətlər verir. Aşağıdakılardır:

static
final
abstract
synchronized
volatile

transient

static-bu barədə əvvəlki postlarda yazmışdım. Yenə yada salım, bu söz aid olduğu obyekt, dəyişən və metodları sinif səviyyəsində təyin edir. "static" olan bir elementə birbaşa sinif adı ilə müraciət etmək mümkündür. Məsələn, "Math.PI" Math sinfindəki PI adlı sabit bir dəyişəni göstərir. Bu bildiyimiz "pi" ədədidir. "Math.sqrt(double i)" metodu isə double tipdən daxil edilmiş bir ədədin kvadrat kökünü verir.

final-dəyişən üçün işlədildikə o dəyişənin dəyərinin yalnız bir dəfə təyin edilə bildiyini göstərir. Məsələn,

final int i=5;
i=10; //compile error

"static" və "final" sözlərinin birlikdə işlədilməsi sinif səviyyəsində bir sabit yaradır. Məsələn,

public static final PI=3.1415.....
public static final E=2.7182.....


Metodlar üçün "final" sözü o metodun altsiniflərdə "override" olmasının qarşısının alınması üçün işlədilir. Qısaca deyə bilərəm ki, "overriding" bir metodun altsiniflərdə daxili kodunun yenidən yazılmasıdır.

abstract-mücərrəd siniflər və mücərrəd metodlar yaratmaq üçün istifadə olunur. Mücərrəd metod odur ki, metod yalnız imzadan (signature) ibarət olur, daxili kod yazılmır. Bu metodun olduğu sinif də mücərrəd olur. Bu sinifdən törədilmiş altsinif bu metodu mütləq "override" etməlidir. Məsələn,

public abstract class Test1 //mücərrəd sinfin yaradılması
{
    abstract void print(); //mücərrəd metod, kod bloku və gövdə yoxdur.
}


public class Test2 extends Test1 //Test1 sinfindən Test2 sinfi törədilir
{
    public void print(). //print() metodunun gövdəsi yazılır
    {
       System.out.println("print () method overrode");
    }
}


synchronized-bu ifadə "thread" əməliyyatları ilə bağlıdır. İstənilən proqram iş parçacıqlarından (thread) ibarətdir. Java Multithreading-i dəstəkləyir. Bu isə o deməkdir ki, eyni zamanda bir neçə əməliyyat aparmaq mümkündür (əslində, tam da eyni zamanda demək olmaz, sadəcə biz bu şəkildə qəbul edirik). Əgər normal halda bir proqram öz işini bitirməmiş digər proqram icraya başlamırsa, multithreading-də hər iş parçacığı növbəli şəkildə eyni bir yaddaş ünvanına müraciət edə bilir. Amma bu zaman da bir iş parçacığının öz işini tam yekunlaşdırması tələb oluna bilir. Bu məqsədlə də metodlarda "synchronized" ifadəsi işlədilir.

volatile-yenə "multithreading" əməliyyatının bir elementidir. Bəzən komputer sürət xatirinə bir dəyişənin o ankı həqiqi dəyərini yox, keş yaddaşında saxlanmış dəyirini oxumağa çalışa bilir. Lakin elə bir dəyişən təyin edilmiş ola bilər ki, onun istənilən anda həqiqi dəyəri oxunmalı olsun. Bu zaman həmin dəyişən "volatile" kimi qeyd edilir. Bu, komputerin həmin dəyişənin dəyərini keş yaddaşından oxumasının qarşısını alır və hər zaman aktual dəyərini götürür.

No comments:

Post a Comment