/*
Dies ist ein Demo-Programm für eine längerfristige 
Assoziation mit folgender Eigenschaft:
1)
1 : n (zu einem Auto gehören mehrer Fahrer) 

2)
biidirektional (mit Navigierbarkeit in zwei Richtungen)
Auto <--> Fahrer

3)
Die Fahrer und das Auto werden in main angelegt, wobei
die Fahrer das Array dieFahrer[] bilden. 

4)
Der Konstruktor Auto(...) wird zur Verlinkung 
Auto ---> seineFahrer
benutzt.
Der Konstruktor Fahrer(...) wird nicht zur Verlinkung
seineFahrer ---> Auto
benutzt.
Dies wird mit set-Methoden gemacht.  

5) 
Alle Zugriffe werden mit set-und get-Methoden gemacht.
*/


public class MainAssoziationBI_1zuN_1 {
	public static void main(String[] args){
		Fahrer[] dieFahrer = new Fahrer[2];
		dieFahrer[0] = new Fahrer("Maier");
		dieFahrer[1] = new Fahrer("Müller");		

		// Verlinkung: myCar --> dieFahrer		
		Auto myCar = new Auto ("B-KI 11", dieFahrer);
		
		// Verlinkung: dieFahrer --> myCar
		dieFahrer[0].setAuto(myCar);
		dieFahrer[1].setAuto(myCar);		
		//myCar.setFahrer(0, new Fahrer("Aust"));
		
		System.out.println("myCar.f[0].name = "+myCar.getFahrer(1).getAuto().getFahrer(0).getName());
		System.out.println("myCar.f[0].name = "+myCar.getFahrer(0).getAuto().getFahrer(1).getName());		
	
	}
}	

class Auto{
	private String kfzZeichen;
	private Fahrer[] seineFahrer;

	public Auto(String pKfzZeichen, Fahrer[] pSeineFahrer){
		kfzZeichen=pKfzZeichen;
		seineFahrer = pSeineFahrer;		
	}
	
	public void setKfzZeichen(String pKfzZeichen){
		kfzZeichen=pKfzZeichen;		
	}

	public void setSeineFahrer(Fahrer[] pSeineFahrer){
		seineFahrer = pSeineFahrer;
	}
	
	public void setFahrer(int i, Fahrer pDerFahrer){
		seineFahrer[i] = pDerFahrer;
	}
	
	public Fahrer getFahrer(int i){
		return(seineFahrer[i]);
	}
}

class Fahrer{
	private String name;
	private Auto seinAuto;

	public Fahrer(String pName){
		name = pName;
	}
	
	public void setName(String pName){
		name = pName;
	}
	
	public String getName(){
		return(name);
	}
	
	public void setAuto(Auto pSeinAuto){
		seinAuto = pSeinAuto;
	}
	
	public Auto getAuto(){
		return(seinAuto);
	}
}










