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.

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.

Dies zeigt das zugehörige Sequenz-Diagramm eindeutig auf.

Abb: Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über eine Methode

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

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.

Abb: Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über den Konstruktor

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)

René Probst, bearbeitet durch Marcel Suter

  • modul/m320_2024/learningunits/lu08/einseitigebeziehung.txt
  • Zuletzt geändert: 2024/09/18 13:12
  • von msuter