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:einseitigebeziehung [2026/08/30 14:05] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1de:modul:m320_2024:learningunits:lu08:einseitigebeziehung [2026/08/30 14:12] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden 74.7.243.195
Zeile 1: Zeile 1:
 +====== LU08a - Einseitige Beziehungen ======
 +Damit ein Objekt A ein anderes Objekt B ansprechen kann, muss es dessen Referenz kennen. Dazu muss die Referenz über den Konstruktor oder eine Methode übergeben werden.\\  Vom grundsätzlich Verhalten her unterscheiden wir in
 +
 +  * einseitge Beziehungen
 +  * zweiseitige Beziehungen
 +
 +Bei einer einseitigen Beziehung kennt ein Objekt "A" ein anderes Objekt "B" aber nicht umgekehrt.\\
 +
 +===== Beispiel: Geldbeutel und Besitzer =====
 +==== Klassendiagramm ====
 +
 +{{de:modul:m320_2024:learningunits:lu08:klassewallet.png?600|}}
 +
 +//Abb: Klassen in einer einseitigen Beziehung//
 +
 +Eine Person kann auch keinen Geldbeutel besitzen. 
 +Daher wird hier die Referenz über eine Methode gesetzt. 
 +So sind die Erzeugung des Personen-Objekts und die Zuweisung der Referenz zeitlich unabhängig.
 +
 +==== Sequenzdiagramm ====
 +
 +Dies zeigt das zugehörige Sequenz-Diagramm eindeutig auf.
 +
 +{{de:modul:m320_2024:learningunits:lu08:sequenzwallet.png?600|}}
 +
 +//Abb: Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über eine Methode //
 +
 +==== Sourcecode ====
 +<code python>
 +class Person:                                                
 +                                                                                 
 +    def __init__(self, name):     
 +        self._name   = name     
 +        self._wallet = None # die Referenz wird erst später zugewiesen 
 +         
 +    @property                                                                    
 +    def name(self):                                                             
 +        return self._name                   
 +
 +    @property            
 +    def wallet(self):          
 +        return self._wallet                                  
 +                                  
 +    @wallet.setter    
 +    def wallet(self, wallet):                                      
 +        self._wallet = wallet                   
 +                               
 +class Wallet:                     
 +
 +    def __init__(self):       
 +        pass  
 +                                              
 +    def deposit_money(self, amount):    
 +        pass                         
 +
 +    def withdraw_money(self, amount):     
 +        pass   
 +
 +if __name__ == '__main__':   
 +    person = Person('Max')  
 +    wallet = Wallet()  
 +    person.wallet = wallet 
 +
 +</code>
 +
 +===== Beispiel: Stromschalter und Wippe (Aktuator) =====
 +==== Klassendiagramm ====
 +
 +{{de:modul:m320_2024:learningunits:lu08:klassepower.png?600|}}
 +
 +//Abb: Klassen in einer einseitigen Beziehung//
 +
 +Ein Stromschalter braucht immer eine Wippe, sonst kann er ja nicht benutzt werden. 
 +Daher muss sichergestellt sein, dass mit der Erzeugung des Stromschalter-Objektes auch die Referenz zu einer Wippe gesetzt wird. 
 +Es ist also wichtig, dass die Referenz mit dem Konstruktor geliefert wird. 
 +In diesem Fall ist es zwingend, dass die Wippe zeitlich zuerst erzeugt wird, so dass ihre Referenz verfügbar ist.
 +
 +==== Sequenzdiagramm ====
 +
 +{{de:modul:m320_2024:learningunits:lu08:sequenzpower.png?600|}}
 +
 +//Abb: Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über den Konstruktor//
 +
 +==== Sourcecode ====
 +
 +<code python>
 +class PowerSwitch:    
 +
 +    def __init__(self, type, actuator):  
 +        self._type   = type     
 +        self._actuator = actuator
 +
 +    @property    
 +    def type(self):
 +        return self._type  
 +         
 +class Actuator:   
 +              
 +    def __init__(self):
 +        self._position = False
 +
 +    def press(self): 
 +        pass  
 +
 +    def release(self):  
 +        pass 
 +
 +    def is_pressed(self): 
 +        return self._position   
 +
 +if __name__ == '__main__':  
 +    actuator = Actuator()         
 +    switch = PowerSwitch('single', actuator)
 +
 +</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