OOP Instanz einer Klasse an eine andere weitergeben

Floo_08

Mitglied
Hallo zusammen,
ich muss für die Schule ein Projekt machen und bin gerade etwas am verzweifeln.
Ich habe eine Klasse Praxis und jede Instanz dieser Klasse besitzt einen Namen und eine Queue.
Dazu habe ich eine Klasse Kasse und diese soll in einem Baum alle Instanzen der Klasse Praxis speichern.
Folgendes habe ich mir überlegt:

In der Klasse Praxis:

Java:
public void senden(){
            if(kasse != null){
            kasse.patientenEmpfangen(this);
        }
    }

In der Klasse Kasse:

Java:
public void patientenEmpfangen(Praxis pPraxis){
      verwaltung.insert(pPraxis);
    }

Aber irgendwie tauchen die Praxis-Objekte nachher nicht im Suchbaum auf 🙁
Ich hoffe auf eure Hilfe! 🙂
 
Java:
public class Praxis implements ComparableContent<Praxis>
{  
    private String name;
    private Queue<Patient> patienten;
    private Kasse kasse;

public Praxis(String pName){
        name = pName;
        patienten = new Queue<Patient>();  
    }

public void senden(){
            if(kasse != null){
            kasse.patientenEmpfangen(this);
        }
    }
}


Java:
public class Kasse
{
    private Praxis praxis;
    private BinarySearchTree<Praxis> verwaltung;
   
    public Kasse(){
     verwaltung = new BinarySearchTree<Praxis>();
    }
   
    public void patientenEmpfangen(Praxis pPraxis){
      verwaltung.insert(pPraxis);
    }
   
    public BinarySearchTree<Praxis> getBaum(){
     return verwaltung;  
    }
}
 
Schau dir das mal an, eventuell ist es hilfreich:
Muss jetzt weg und habe für eine Lehrstunde keine Zeit
Java:
public class Test
{

    public static void main(String[] args) throws IOException
    {
        Versicherung TKK = new Versicherung("Technische Krankenkasse");
        Versicherung AOK = new Versicherung("AOK");
        Versicherung IKK = new Versicherung("IKK");
        Versicherung AAK = new Versicherung("AAK");
        Patient alex = new Patient("Alex", "Schmidt", TKK);
        Patient victor = new Patient("Victor", "Reisberger", AAK);
        Patient lili = new Patient("Lili", "Volkowa", AOK);
        Patient anna = new Patient("Anna", "Müller", IKK);

        Praxis HrDrSchmidt = new Praxis("Herr Dr. Schmidt");
        HrDrSchmidt.addToPatientList(anna);
        HrDrSchmidt.addToPatientList(alex);
        HrDrSchmidt.addToPatientList(victor);
        HrDrSchmidt.addToPatientList(lili);
        HrDrSchmidt.printPraxisList();

        Kasse krankenKasse = new Kasse();
        krankenKasse.addToKassenList(HrDrSchmidt);
        krankenKasse.printKassenList();

    }

}
/** Konsolenausgabe */
Name: Anna, Nachname: Müller, Versicherung: IKK
Name: Alex, Nachname: Schmidt, Versicherung: Technische Krankenkasse
Name: Victor, Nachname: Reisberger, Versicherung: AAK
Name: Lili, Nachname: Volkowa, Versicherung: AOK
Praxisname: Herr Dr. Schmidt
Java:
class Patient
{

    private final String name;
    private final String nachname;
    private final Versicherung versicherung;

    Patient(String name, String nachname, Versicherung v)
    {
        this.name = name;
        this.nachname = nachname;
        this.versicherung = v;
    }

    protected String getName()
    {
        return name;
    }

    protected String getNachname()
    {
        return nachname;
    }

    protected Versicherung getVersicherung()
    {
        return versicherung;
    }

    @Override
    public String toString()
    {
        return "Name: " + this.name + ", Nachname: " + this.nachname + ", Versicherung: " + this.versicherung.getName();
    }

}
Java:
class Praxis
{

    private final String praxisName;
    private final List<Patient> patients = new ArrayList<>();

    Praxis(String praxisName)
    {
        this.praxisName = praxisName;
    }

    protected String getPraxisName()
    {
        return praxisName;
    }

    protected void addToPatientList(Patient patient)
    {
        this.patients.add(patient);
    }

    protected void removeFromPatientList(Patient patient)
    {
        if (!this.patients.contains(patient)) {
            System.out.printf("Patient: " + patient.toString() + " ist nicht auf der Liste");
        } else {
            this.patients.remove(patient);
        }
    }

    protected void printPraxisList()
    {
        for (Patient p : patients) {
            System.out.println(p.toString());
        }
    }

    @Override
    public String toString()
    {
        return "Praxisname: " + this.praxisName;
    }

}
Java:
class Kasse
{

    private final List<Praxis> praxises = new ArrayList<>();

    public Kasse()
    {
    }

    protected void addToKassenList(Praxis praxis)
    {
        this.praxises.add(praxis);
    }

    protected void printKassenList()
    {
        for (Praxis p : praxises) {
            System.out.println(p.toString());
        }
    }

}
Java:
class Versicherung
{

    private final String name;

    public Versicherung(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

}
 
Oder in Kurzform:
Du musst der Klasse Kasse im Konstruktor ein Praxis-Objekt übergeben.
Als kleines Beispiel:
Java:
public class FooA {
    public void doSomething() { .. };
}

public class FooB {
    private FooA fooA;

    public FooB(FooA fooA) {
         this.fooA = fooA;
         fooA.doSomething();
    }
}

public class Main {
    public static void main(String[] args) {
        FooA fooA = new FooA();
        FooB fooB = new FooB(fooA);
    }
}
 
Dann würde ich es so machen, dass die Klasse Kasse ein Array (oder eine List falls du sowas schon kennst) hat, in der du die Praxen speicherst.
Dazu gibt es in der Klasse Kasse eine Methode addPraxis(Praxis p) die eine Praxis hinzufügt.
 
@Robat: Die Idee an sich hatte ich auch schon, allerdings würde ich es gerne so machen, dass nicht die Kasse sich die Praxen holt, sondern die Praxen "quasi sich selbst" an die Kasse schicken können und da habe ich dann ja ganz viele Praxen, die sich alle an EINE Kasse schicken müssen 🙂
 
Dann müssten die Praxen ja wissen an welche Kasse sie gebunden sind.
Dann bräuchte die Klasse Praxis eine Methode die Die Kasse als Parameter bekommt bei der sie sich registrieren soll.
 
@Robat: Die Idee an sich hatte ich auch schon, allerdings würde ich es gerne so machen, dass nicht die Kasse sich die Praxen holt, sondern die Praxen "quasi sich selbst" an die Kasse schicken können und da habe ich dann ja ganz viele Praxen, die sich alle an EINE Kasse schicken müssen 🙂
Das ist doch genau der Vorschlag von @Robat. Die Praxis ruft die MethodeaddPraxis() der Kasse auf, übergibt dabei eine Referenz auf sich selbst als Argument und registriert sich dadurch dort.
 

Zurück
Oben