Das UML-Anwendungsfalldiagramm macht doppelte Navigationsrichtungen nötig:

Klassendiagramm mit konreter Realisierung zweier Rollen

UML-Klassendiagramm der konkreten Implementierung zweier Rollen


Eine mögliche Lösung wurde mit Properties realisiert:

  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         Kunde k1 = new Kunde(1, "Musterinhaber");
  6.         Kunde k2 = new Kunde(2, "Musterberechtigter 1");
  7.         Kunde k3 = new Kunde(3, "Musterberechtigter 2");
  8.  
  9.         Konto kto1 = new Konto(1, 50);
  10.         Konto kto2 = new Konto(2, 100);
  11.  
  12.         k1.addInhaberberechtigung(kto1);
  13.         k2.addZugriffsberechtigung(kto1);
  14.         k3.addZugriffsberechtigung(kto1);
  15.  
  16.         k1.addZugriffsberechtigung(kto2);
  17.  
  18.         // Navigation über einen Kunden
  19.         Console.WriteLine(k1.Name + " ist Inhaber von: ");
  20.         foreach (Konto konto in k1.Inhaberberechtigungen)
  21.         {
  22.             Console.WriteLine("KontoNr: " + konto.Nr);
  23.         }
  24.         Console.WriteLine("und zugriffsberechtigt auf: ");
  25.         foreach (Konto konto in k1.Zugriffsberechtigungen)
  26.         {
  27.             Console.WriteLine("KontoNr: " + konto.Nr);
  28.         }
  29.  
  30.         // Navigation über ein Konto
  31.         Console.WriteLine("\nInhaber von KontoNr: " + kto1.Nr + " ist: ");
  32.         Console.WriteLine("KundenNr: " + kto1.Inhaber.Nr + " Name: " + kto1.Inhaber.Name);
  33.         Console.WriteLine("und zugriffsberechtigt sind: ");
  34.         foreach (Kunde kunde in kto1.Zugriffsberechtigte)
  35.         {
  36.             Console.WriteLine("KundenNr: " + kunde.Nr + " Name: " + kunde.Name);
  37.         }
  38.     }
  39. }
  40.  
  41. class Konto
  42. {
  43.     public int Nr { get; set; }             // Properties
  44.     public double Guthaben { get; set; }
  45.     public Kunde Inhaber { get; set; }      // Konto hat einen Inhaber
  46.     public List<Kunde> Zugriffsberechtigte { get; set; }  // Konto hat mehrere Zugriffsberechtigte
  47.  
  48.     public Konto(int nr, double guthaben)
  49.     {
  50.         Nr = nr;
  51.         Guthaben = guthaben;
  52.         Zugriffsberechtigte = new List<Kunde>();  // Objekterzeugung ist noch nötig
  53.     }
  54.     public void addZugriffsberechtigte(Kunde k)
  55.     {
  56.         Zugriffsberechtigte.Add(k);
  57.     }
  58. }
  59.  
  60. class Kunde
  61. {
  62.     public int Nr { get; set; }             
  63.     public string Name { get; set; }
  64.     public List<Konto> Inhaberberechtigungen { get; set; }  // Kunde ist Inhaber mehrerer Konten
  65.     public List<Konto> Zugriffsberechtigungen { get; set; } // Kunde ist auf mehrere Konten zugriffsberechtigt
  66.  
  67.     public Kunde(int nr, string name)
  68.     {
  69.         Nr = nr;
  70.         Name = name;
  71.         Inhaberberechtigungen = new List<Konto>();
  72.         Zugriffsberechtigungen = new List<Konto>();
  73.     }
  74.  
  75.     public void addInhaberberechtigung(Konto kto)
  76.     {
  77.         Inhaberberechtigungen.Add(kto);
  78.         kto.Inhaber = this;
  79.     }
  80.     public void addZugriffsberechtigung(Konto kto)
  81.     {
  82.         Zugriffsberechtigungen.Add(kto);
  83.         kto.addZugriffsberechtigte(this);
  84.     }
  85. }

Last modified: Thursday, 1 February 2018, 9:02 PM