Sobes.tech
Middle

Šta su nizovi referentnih tipova u kontekstu programiranja?

sobes.tech АИ

Одговор од АИ

Nizovi referentnih tipova u programiranju ne sadrže same objekte, već reference (adrese) na memorijske oblasti gde se ti objekti čuvaju. Za razliku od nizova primitivnih tipova, koji direktno čuvaju vrednosti, nizovi referentnih tipova čuvaju pokazivače na instance klasa, interfejse ili druge referentne tipove.

Osobine:

  • Memorija: Pri kreiranju niza referentnih tipova dodeljuje se memorija za sam niz (skladište referenci), ali ne za same objekte. Objekti se kreiraju odvojeno pomoću operatora new.
  • Inicijalizacija: Po defaultu, elementi niza referentnih tipova inicijalizuju se vrednošću null (u većini jezika), što označava odsustvo reference na bilo koji objekat.
  • Kopiranje: Pri dodeljivanju jednog niza referentnih tipova drugom (npr., array2 = array1), kopiraju se samo reference na elemente, a ne same elemente. Oba niza će ukazivati na iste objekte u memoriji. Promena objekta na koji ukazuje jedan niz odraziće se i na drugi. Za kreiranje nezavisne kopije objekata, potrebno je njihovo eksplicitno kloniranje ili kreiranje novih instanci.
  • Polimorfizam: U nizovima referentnih tipova može se čuvati reference na objekte različitih klasa, ako te klase nasleđuju od zajedničke osnovne klase ili implementiraju zajednički interfejs (princip polimorfizma).

Primer na Javi:

// Kreiranje niza referenci na objekte klase String
String[] names = new String[3];

// Inicijalizacija elemenata niza referencama na objekte String
names[0] = new String("Alice");
names[1] = "Bob"; // String literal takođe predstavlja referentni tip
names[2] = new String("Charlie");

// Nizovi links i names ukazuju na iste objekte
String[] links = names;

// Promena objekta putem jednog niza odražava se na drugom
links[0] = "Alicia";

// Ispis vrednosti u izvornom nizu
System.out.println(names[0]); // Ispisaće "Alicia"

Primer na Pythonu:

# Kreiranje liste (analog niza) referenci na objekte
data = [1, "hello", [1, 2]] # Elementi su reference na int, str, list

# Druga promenljiva ukazuje na istu listu
more_data = data

# Promena elementa putem jedne reference odražava se na drugu
more_data[0] = 10

# Ispis vrednosti u originalnoj listi
print(data[0]) # Ispisaće 10

# Kreiranje nezavisne kopije
copied_data = data[:] # Kreira površinsku kopiju (kopiraju se reference)

Razumevanje rada sa nizovima referentnih tipova je ključno za pravilno upravljanje memorijom i izbegavanje nejasnih grešaka povezanih sa modifikacijom objekata putem različitih referenci.