Constructor anlayışı obyekt yönümlü proqramlaşdırmanın əsas elementlərindən biri hesab olunur. Əgər bir Java sinfindən yeni bir obyekt yaratmaq istəsək, "new" açar sözündən istifadə edilir. Bu zaman proqram constructor'u çağırır və yaddaşda yeni bir instance yaradılır:
public class Test
{
Test t=new Test();
}
Buradakı "Test()" yazılışı constructor'dur. İlk baxışdan metodları
xatırladır. Oxşar cəhətləri olduğu kimi fərqli xüsusiyyətləri də var.
Oxşar cəhəti, ilk olaraq, yazılış formasıdır. Bundan başqa,
constructor'lar da onun daxilində yazılmış kod sətirlərini icra edə
bilir. Metodlar kimi overload etmək mümkündür və müxtəlif parametrlər
qəbul edə bilir. Lakin fərqləri də var:
- constructor'lar sinif adı ilə eyni ada malik olmalıdır.
- constructor'ların hər hansı bir tipi olmur. Bunu metodların heç bir dəyər tipi olmayan "void" tipi ilə qarışdırmaq olmaz. Ümumiyyətlə, bu cür bir şey təyin edilmir.
- heç bir constructor yazılmadığı halda proqram özü avtomatik constructor yaradır. Buna "default constructor" deyirlər.
Constructor'un yazılmasında əsas məqsəd yaradılan obyektin başlanğıc durumunu təyin etməkdir. Məsələn, əgər tarixlə bağlı bir sinif yazası olsaq (Date), bu sinifdən yaradılan "Date" obyektinin cari tarixi göstərməsini istəyə bilərik.
Constructor'lara parametrlər göndərərək istənilən başlanğıc dəyəri də vermək olur:
Burada 2 constructor təyin edilib: no-arg və parameterized.
No-arg constructor-heç bir parametri olmur, lakin proqramda açıq şəkildə təyin edilir. Bunu proqramın avtomatik yaratdığı "default constructor" ilə qarışdırmaq olmaz.
Parameterized constructor- parametr qəbul edir. Əgər bir sinifdə yalnız "parameterized constructor" təyin edilərsə, proqram özü "constructor" yaratmır. Yəni bu halda sinfin "no-arg constructor"u olmur. Aşağıdakı kimi bir obyekt yaratmaq xətaya səbəb olacaq:
Yəni əgər parametrli constructor yazılırsa və parametrsiz constructor da nəzərdə tutulubsa, onda mütləq bunu da yazmaq lazımdır.
- constructor'lar sinif adı ilə eyni ada malik olmalıdır.
- constructor'ların hər hansı bir tipi olmur. Bunu metodların heç bir dəyər tipi olmayan "void" tipi ilə qarışdırmaq olmaz. Ümumiyyətlə, bu cür bir şey təyin edilmir.
- heç bir constructor yazılmadığı halda proqram özü avtomatik constructor yaradır. Buna "default constructor" deyirlər.
Constructor'un yazılmasında əsas məqsəd yaradılan obyektin başlanğıc durumunu təyin etməkdir. Məsələn, əgər tarixlə bağlı bir sinif yazası olsaq (Date), bu sinifdən yaradılan "Date" obyektinin cari tarixi göstərməsini istəyə bilərik.
public class Date
{
public Date()
{
//cari tarixi quraşdıran kod sətirləri
}
}
Constructor'lara parametrlər göndərərək istənilən başlanğıc dəyəri də vermək olur:
public class Date
{
int day;
int month;
int year;
public Date()
{
day= <cari gün>;
month=<cari ay>;
year=<cari il>;
}
public Date(int d, int m, int y)
{
day=d;
month=m;
year=y;
}
public static void main (String[] arg)
{
Date d1=new Date();
Date d2=new Date(1, 1, 2019);
}
}
Burada 2 constructor təyin edilib: no-arg və parameterized.
No-arg constructor-heç bir parametri olmur, lakin proqramda açıq şəkildə təyin edilir. Bunu proqramın avtomatik yaratdığı "default constructor" ilə qarışdırmaq olmaz.
Parameterized constructor- parametr qəbul edir. Əgər bir sinifdə yalnız "parameterized constructor" təyin edilərsə, proqram özü "constructor" yaratmır. Yəni bu halda sinfin "no-arg constructor"u olmur. Aşağıdakı kimi bir obyekt yaratmaq xətaya səbəb olacaq:
public class Date
{
int day;
int month;
int year;
public Date(int d, int m, int y)
{
day=d;
month=m;
year=y;
}
public static void main (String[] arg)
{
Date d1=new Date(); //xəta
}
}
Yəni əgər parametrli constructor yazılırsa və parametrsiz constructor da nəzərdə tutulubsa, onda mütləq bunu da yazmaq lazımdır.
No comments:
Post a Comment