Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:m320_2024:learningunits:lu08:zweiseitigebeziehung [2026/08/30 14:05] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1de:modul:m320_2024:learningunits:lu08:zweiseitigebeziehung [2026/08/30 14:12] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden 74.7.243.195
Zeile 1: Zeile 1:
 +====== LU08b - Zweiseitige Beziehungen ======
 +Bei einer zweiseitigen Beziehung kennt ein Objekt A ein anderes Objekt B und umgekehrt.\\
 +
 +===== Beispiel: Lernende/r und Lehrperson =====
 +==== Klassendiagramm ====
 +
 +{{de:modul:m320_2024:learningunits:lu08:klasseteacher.png?600|}}
 +
 +//Abb: Klassen in einer zweiseitigen Beziehung //
 +
 +Es ist offensichtlich, dass eine Lehrperson nicht zu jedem Student und umgekehrt nicht jeder Student zu einer Lehrperson eine Beziehung pflegen muss.
 +Wie im vorherigen Beispiel müssen daher auch hier die Objekte nicht zwingend eine Referenz zu einem anderen Objekt kennen, um existieren zu können. 
 +Es macht Sinn, die Zuweisung dann zu machen, wenn sie benötigt wird.
 +
 +Um sicherzugehen, dass immer eine zweiseitige Beziehung besteht, wird in der jeweiligen <<setter>>-Methode gleich auch die "Rückbeziehung" gesetzt.
 +
 +<WRAP center round tip 60%>
 +Hinweis: Programmtechnisch muss einfach sichergestellt werden, dass eine schon bestehende Beziehung nicht noch einmal zugewiesen wird.
 +</WRAP>
 +
 +==== Sequenzdiagramm ====
 +
 +{{de:modul:m320_2024:learningunits:lu08:sequenzteacher.png?400|}}
 +
 +//Abb: Sequenz-Diagramm der Zuweisung einer zweiseitigen Beziehung über Methoden //
 +
 +==== Sourcecode ====
 +==== Lernende/r und Lehrperson ====
 +
 +
 +<code python>
 +class Teacher:                       
 +                                                                                
 +    def __init__(self, name):         
 +        self._name    = name     
 +        self._student = None   
 +    
 +    @student.setter    
 +    def student(self, student):          
 +        self._student   = student                
 +        student.teacher = self        
 +
 +class Student:           
 +        
 +    def __init__(self, name):                      
 +        self._name    = name      
 +        self._teacher = None                   
 +        
 +    @teacher.setter
 +    def teacher(self, teacher):                     
 +        self._teacher = teacher          
 +        teacher.student = self          
 +                                                                                       
 +if __name__ == '__main__':     
 +    mia   = Teacher('Mia'
 +    cathy = Student('Cathy')
 +    
 +    #ENTWEDER
 +    mia.student = cathy   
 +    #ODER                                       
 +    cathy.teacher = mia            
 +
 +</code>
 +===== Beispiel: Lernende/r und Schulklasse =====
 +==== Klassendiagramm ====
 +
 +{{de:modul:m320_2024:learningunits:lu08:klasseschool.png?600|}}
 +
 +//Abb: Klassen in einer zweiseitigen Beziehung//
 +
 +Ein Student wird bei der Anmeldung einer Klasse zugewiesen. 
 +Daher macht es Sinn, diese Referenz über den Konstruktor mitzuteilen. 
 +Dabei muss die Klasse ''SchoolClass'' zeitlich vorher erstellt werden, damit die Referenz verfügbar ist.
 +
 +==== Sequenzdiagramm ====
 +
 +{{de:modul:m320_2024:learningunits:lu08:sequenzschool.png?400|}}
 +
 +//Abb: Sequenz-Diagramm der Zuweisung einer zweiseitigen Beziehung über Konstruktor//
 +
 +==== Sourcecode ====
 +
 +<code python>
 +class SchoolClass:                                               
 +                                                                                                                               
 +    def __init__(self, designation):                                          
 +        self._designation = designation                                    
 +        self._student = None                             
 +  
 +    @student.setter
 +    def student(self, student):                                     
 +        self._student = student                           
 +                   
 +class Student:                                                                
 +                                                                                          
 +    def __init__(self, name, the_class):                                       
 +        self._name = name                                                         
 +        self._class = the_class                                               
 +        the_class.student = self                                                                                          
 +                                                                                         
 +                                                                      
 +if __name__ == '__main__':                                                 
 +    i1a   = SchoolClass('I1a'                                                
 +    cathy = Student("Cathy", i1a)                                         
 +                                                                           
 +                                                                             
 +</code>
 +
 +----
 +{{tag>M320-LU08}}
 +[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] René Probst, bearbeitet durch Marcel Suter