Asoziazioak(III): Kode-adibideak

logo OPP min

Praktikan, nola inplementatzen da mota bakoitza?

Asoziazio bitarrak, erreflexiboak eta agregaziokoak antzekoak dira. Bitar eta erreflexiboen kasuan argi dago, azken horiek jatorri eta helburu-klaseak berdinak diren bitarren kasu berezia baitira.

Bitarren eta agregazioaren kasuan, bereizketa kontzeptual bakarra dago: agregazioak esaten digu klase nagusi bat dagoela beste batekiko, eta asoziazio bitarretan ez.

Horregatik, hiru asoziazio motak berdin kodetzen dira. Kodetzeko modua da erabili beharreko klasearen objektua (bitarraren kasuan) edo osagaia (agregazioaren kasuan) parametroz parametro pasatzea, hura erabiltzen duen klasearen (bitarraren kasuan) edo klase konposatuaren (agregazioaren kasuan) metodo batean. Hau da, erabili beharreko klasea/osagaia ez da istantziatzen erabiltzen edo konposatzen duen klasean.

Asoziazio bitarraren adibidea

Testuinguru jakin horretan, pertsona batek zero edo txartel bat erabiltzen duela ikusten dugu, eta txartel bat jabea den pertsona batek bakarrik erabil dezakeela. Adibide honen Java kodea honako hau izango litzateke:

public class Pertsona{
	private String izena;
	private KreditoTxartela txartela;
	
	
	public Pertsona(){
		izena = "Jon";
		txartela = null;
	}	
	
	public void addKreditoTxartela
      (KreditoTxartela txartelaBerria){	
	
		txartela =txartelaBerria;
		System.out.println(txartela);
	}	
}

Horrela, Pertsona motako objektua ezabatzen badugu, ez genuke lotutako txartela ezabatuko, txartela Pertsona klasetik kanpo sortzen baita.

Adibide honetan nabigagarritasunaren kontzeptua aplikatzen ari gara, pertsonak ezagutzen baitu txartela, eta ez alderantziz. Bi norabideko harremana izan balitz, antzeko modua izan beharko genuke Pertsona objektua TxartelaKreditu klasera pasatzeko. Kasu horretan, TxartelaKredituaren klaseak Pertsona motako jabea izeneko atributu bat izango luke.

Begira nola gehitu dugun Pertsona klasean TxartelaKreditu motako txartela izeneko atributua, asoziazioak inplementatzen duena. Atributuaren izena erlazioaren rolarekin bat eginarazi dugu. Hori oso ohikoa da rol bat badago.

Agregazio-Asoziazioaren adibidea

public class Agenda{
 private	Kontaktua [] kontaktuak;
 private int posizioLibrea;

  public Agenda(int zenKontaktuak){
	kontaktuak = new Kontaktua[zenKontaktuak];
	posizioLibrea = 0;
	}

  public boolean addKontaktua(Kontaktua k){
	boolean ok = false;		
		
	int zenKontaktuak = kontaktuak.length; 
		
	if(posizioLibrea<zenKontaktuak){
		kontaktuak[posizioLibrea] = k;
		posizioLibrea++;
		ok = true;
	}
		
	return ok;
  }
}

Horrela, agendako objektua ezabatzen badugu, ez gara kontaktuak ezabatzen ariko, kontaktu klaseko objektuak programaren beste zati batean sortzen baitira.

Konposizio-Asoziazioaren adibidea

konposizio-asoziazioa kodifikatzeko, objektu osagaia objektu konposatuaren barruan istantziatzen da, normalean eraikitzailean. Izan ere, konposizio-asoziazioak adierazten digu objektu osagaiaren bizitza objektu konposatuaren bizitzaren araberakoa dela.

public class Liburua{
  private Orrialdea [] orrialdeak;
	
  public Liburua(int zenOrrialdeak){
	orrialdeak = new Orrialdea[zenOrrialdeak];
	}
}

Liburu honen kasuan orrialde-array bat (bilduma bat) duela ikusten dugu. Hau da, Orrialde objektu bat ez ezik, ZenOrrialdeak adierazten dituen beste objektu gehiago ere baditu. Konposizio-Asoziazioa batean oinarritutako ezarpen horri esker, liburu objektua suntsitzen denean, haren orrialdeak suntsitzen dira.

Bukatzeko, azpimarratu behar da, inplentazioan asoziazioen propietateak hartu behar direla kontuan: kardinaltasuna, nabigagarritasuna eta rolak.

Utzi erantzun bat

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Aldatu )

Google photo

You are commenting using your Google account. Log Out /  Aldatu )

Twitter picture

You are commenting using your Twitter account. Log Out /  Aldatu )

Facebook photo

You are commenting using your Facebook account. Log Out /  Aldatu )

Connecting to %s