Middle
Proqramlaşdırma kontekstində referans tiplərinin massivləri nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Proqramlaşdırmada referans tipləri massivləri öz obyektlərini deyil, bu obyektlərin yaddaş sahələrinə (ünvanlara) istinad edən göstəriciləri (ünvanları) ehtiva edir. Saf primitiv tiplər massivləri kimi, referans tipləri massivləri siniflərin, interfeyslərin və ya digər referans tiplərinin nümunələrinə işarə edən göstəriciləri saxlayır.
Xüsusiyyətlər:
- Yaddaş: Referans tipləri massivinin yaradılmasında, massiv üçün (istinadlar üçün) yaddaş ayrılır, lakin obyektlər üçün deyil. Obyektlər
newoperatoru ilə ayrıca yaradılır. - İlkinləşdirmə: Standart olaraq, referans tipləri massivinin elementləri
nulldəyəri ilə ilkinləşdirilir (əksər dillərdə), bu da heç bir obyektə istinad etmədiyini göstərir. - Kopyalama: Bir referans tipləri massivini başqa birinə (məsələn,
array2 = array1) təyin etdikdə, yalnız istinadlar kopyalanır, elementlər yox. Hər iki massiv yaddaşda eyni obyektlərə istinad edəcək. Bir massivdəki obyektə edilən dəyişiklik digərində də görünəcək. Müstəqil obyekt kopyası yaratmaq üçün, onları açıq şəkildə klonlamaq və ya yeni nümunələr yaratmaq lazımdır. - Polimorfizm: Referans tipləri massivlərində, ümumi əsas sinifdən irsən gəlmiş və ya ümumi interfeysi həyata keçirmiş müxtəlif siniflərin obyektlərinə istinadlar saxlamaq mümkündür (polimorfizm prinsipi).
Java nümunəsi:
// String sinifindən obyektlərə istinad edən massiv yaratmaq
String[] adlar = new String[3];
// String obyektlərinə istinad edən massiv elementlərinin ilkinləşdirilməsi
adlar[0] = new String("Alice");
adlar[1] = "Bob"; // String literal də referans tipidir
adlar[2] = new String("Charlie");
// links və adlar massivləri eyni obyektlərə istinad edir
String[] əlaqələr = adlar;
// Bir massiv vasitəsilə obyekt dəyişdirildikdə, digərində də görünür
əlaqələr[0] = "Alicia";
// Orijinal massivdə dəyəri çap etmək
System.out.println(adlar[0]); // "Alicia" çıxaracaq
Python nümunəsi:
# Obyektlərə istinad edən siyahı (massiv) yaratmaq
data = [1, "salam", [1, 2]] # Elementlər int, str, list referanslarıdır
# Başqa bir dəyişən həmin siyahıya istinad edir
daha_cox_data = data
# Bir istinad vasitəsilə dəyişiklik digərində də görünür
daha_cox_data[0] = 10
# Orijinal siyahıdakı dəyəri çap etmək
print(data[0]) # 10 çıxaracaq
# Müstəqil nüsxə yaratmaq
kopya_data = data[:] # Yüzeysel nüsxə yaradır (istinadlar kopyalanır)
Referans tipləri massivlərinin necə işlədiyini başa düşmək, yaddaşın düzgün idarə olunması və obyektlərin müxtəlif istinadlar vasitəsilə dəyişdirilməsi ilə bağlı qeyri-müəyyən səhvlərdən qaçınmaq üçün çox vacibdir.