Griffindor01
Cadet 3rd Year
- Registriert
- Feb. 2021
- Beiträge
- 33
Hallo liebe Gemeinde,
Habe hier gerade ein Programm vorliegen (geht wohl um Beziehungen zwischen Klassen bzw. die binäre Assoziation) und probiere, den Code nachzuvollziehen.
An einer Stelle komme ich jedoch gerade ins stocken. Es geht um den Ausdruck "a.Kunde = this;".
Da das alleine jetzt wohl nicht gerade aussagekräftig ist, füge ich euch untendrunter den Code ein.
Grob geht es um Kunden, welche Aufträge an ein Unternehmen erstellen.
Meine Überlegungen bisher: Nicht jeder Kunde muss denke ich nicht zwangsläufig einen Auftrag erstellen, jeder Auftrag ist aber zwangsläufig einem Kunden zugeordnet. So erkläre ich mir dass es "a.Kunde" und nicht "Kunde.a" heißt.
Was ich mir dann überlegt habe ist, dass durch das "a.Kunde = this" dem Auftrag (durch den Parameter a der Methode übergeben) nun durch das "this" das Kunden-Objekt übermittelt wird, in welchem die Methode "neuerAuftrag" ausgeführt wurde, da bin ich mir aber echt nicht sicher. Soweit mein Ansatz.
Ich kann mir jedoch nach meiner Logik nicht wirklich erklären, wieso das von Nöten ist und nicht einfach das sich darunter befindende "aufträge.Add(a);" ausreicht.
Ich denke, ich habe irgendwo einen Denkfehler. Eure Hilfe schätze ich sehr.
Grüße
Griffindor01
Habe hier gerade ein Programm vorliegen (geht wohl um Beziehungen zwischen Klassen bzw. die binäre Assoziation) und probiere, den Code nachzuvollziehen.
An einer Stelle komme ich jedoch gerade ins stocken. Es geht um den Ausdruck "a.Kunde = this;".
Da das alleine jetzt wohl nicht gerade aussagekräftig ist, füge ich euch untendrunter den Code ein.
Grob geht es um Kunden, welche Aufträge an ein Unternehmen erstellen.
Meine Überlegungen bisher: Nicht jeder Kunde muss denke ich nicht zwangsläufig einen Auftrag erstellen, jeder Auftrag ist aber zwangsläufig einem Kunden zugeordnet. So erkläre ich mir dass es "a.Kunde" und nicht "Kunde.a" heißt.
Was ich mir dann überlegt habe ist, dass durch das "a.Kunde = this" dem Auftrag (durch den Parameter a der Methode übergeben) nun durch das "this" das Kunden-Objekt übermittelt wird, in welchem die Methode "neuerAuftrag" ausgeführt wurde, da bin ich mir aber echt nicht sicher. Soweit mein Ansatz.
Ich kann mir jedoch nach meiner Logik nicht wirklich erklären, wieso das von Nöten ist und nicht einfach das sich darunter befindende "aufträge.Add(a);" ausreicht.
Ich denke, ich habe irgendwo einen Denkfehler. Eure Hilfe schätze ich sehr.
Grüße
Griffindor01
C#:
namespace Binäre_Assoziation
{
class Program
{
static void Main(string[] args)
{
//Erzeugen von drei Kunden
Kunde k1 = new Kunde("Müller"); // 3 Kunden-Objekte werden erstellt, Namen übergeben
Kunde k2 = new Kunde("Jansen"); // Kunde kann Aufträge erstellen, löschen und ausgeben lassen
Kunde k3 = new Kunde("Jaust");// Nutzt also Klasse Aufträge, binäre Assoziation
// Erzeugen von 5 Aufträgen und Eintragen
// bei den Kunden
k1.neuerAuftrag( new Auftrag(1) ); // Methode neuerAuftrag wird bei bestimmtem Kunden-Objekt verwendet, ihm wird Objekt Auftrag übergeben
k2.neuerAuftrag( new Auftrag(2) );
k3.neuerAuftrag( new Auftrag(3) );
k1.neuerAuftrag( new Auftrag(4) );
k3.neuerAuftrag( new Auftrag(5) );
zeigeAlleKundenAuftraege(k1);
zeigeAlleKundenAuftraege(k2);
zeigeAlleKundenAuftraege(k3);
// Aufträge löschen
k1.loescheAuftrag(0);
k3.loescheAuftrag(0);
// Neuen Auftrag anlegen
k3.neuerAuftrag(new Auftrag(6));
zeigeAlleKundenAuftraege(k1);
zeigeAlleKundenAuftraege(k2);
zeigeAlleKundenAuftraege(k3);
// Auftragsdaten holen
Auftrag a = k2.holeAuftrag(1);
if ( a!= null)
Console.WriteLine("Kunde {0}: Auftrag {1}",
a.Kunde.Name, a.Auftragsnummer);
else
Console.WriteLine("Auftrag existiert nicht\n");
// Auftrag holen und anderem Kunden zuordnen
Auftrag a_alt = k2.holeAuftrag(0);
if ( a_alt != null )
{
// Nun Kunde k1 zuordnen
k1.neuerAuftrag(a_alt);
// Und beim alten Kunden löschen
k2.loescheAuftrag(0);
}
else
Console.WriteLine("Auftrag existiert nicht");
zeigeAlleKundenAuftraege(k1);
zeigeAlleKundenAuftraege(k2);
zeigeAlleKundenAuftraege(k3);
}
static void zeigeAlleKundenAuftraege(Kunde k)
{
// Aufträge der Kunden ausgeben
foreach (Auftrag a in k.Aufträge)
{
Console.WriteLine("Kunde {0}: Auftrag {1}",
a.Kunde.Name, a.Auftragsnummer);
}
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Binäre_Assoziation
{
class Kunde
{
// Private Felder/Attribute
private string name;
private List<Auftrag> aufträge;
// Properties für den Zugriff
// auf die Felder/Attribute
public string Name
{
get { return name; }
set { name = value; }
}
public List<Auftrag> Aufträge
{
get { return aufträge; }
}
public Kunde(string n)
{
name = n;
aufträge = new List<Auftrag>();
}
public void neuerAuftrag(Auftrag a)
{
// Auftrag a dem Kunden zuordnen
a.Kunde = this;
aufträge.Add(a);
}
public void loescheAuftrag(int anr)
{
// Auftrag anhand der Auftragsnummer anr löschen
if (anr >= 0 && anr < aufträge.Count)
aufträge.RemoveAt(anr);
}
public Auftrag holeAuftrag(int anr)
{
// Auftragsdaten anhand der Auftragsnummer anr ermitteln
if (anr >= 0 && anr < aufträge.Count)
return aufträge[anr];
else
return null;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Binäre_Assoziation
{
class Auftrag
{
// Private Felder/Attribute
private int auftragsnummer;
Kunde auftragnehmer;
public int Auftragsnummer
{
get { return auftragsnummer; }
set { auftragsnummer = value; }
}
public Kunde Kunde
{
// Liefert Kunden-Objekt
get { return auftragnehmer; }
// Setzt oder löscht Kunden-Objekt
set { auftragnehmer = value; }
}
public Auftrag(int anr)
{
auftragsnummer = anr;
}
}
}
Zuletzt bearbeitet: