Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| 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.1 | de: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.\\ | ||
| + | |||
| + | * einseitge Beziehungen | ||
| + | * zweiseitige Beziehungen | ||
| + | |||
| + | Bei einer einseitigen Beziehung kennt ein Objekt " | ||
| + | |||
| + | ===== Beispiel: Geldbeutel und Besitzer ===== | ||
| + | ==== Klassendiagramm ==== | ||
| + | |||
| + | {{de: | ||
| + | |||
| + | //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: | ||
| + | |||
| + | //Abb: Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über eine Methode // | ||
| + | |||
| + | ==== Sourcecode ==== | ||
| + | <code python> | ||
| + | class Person: | ||
| + | |||
| + | def __init__(self, | ||
| + | self._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, | ||
| + | self._wallet = wallet | ||
| + | |||
| + | class Wallet: | ||
| + | |||
| + | def __init__(self): | ||
| + | pass | ||
| + | | ||
| + | def deposit_money(self, | ||
| + | pass | ||
| + | |||
| + | def withdraw_money(self, | ||
| + | pass | ||
| + | |||
| + | if __name__ == ' | ||
| + | person = Person(' | ||
| + | wallet = Wallet() | ||
| + | person.wallet = wallet | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Beispiel: Stromschalter und Wippe (Aktuator) ===== | ||
| + | ==== Klassendiagramm ==== | ||
| + | |||
| + | {{de: | ||
| + | |||
| + | //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: | ||
| + | |||
| + | //Abb: Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über den Konstruktor// | ||
| + | |||
| + | ==== Sourcecode ==== | ||
| + | |||
| + | <code python> | ||
| + | class PowerSwitch: | ||
| + | |||
| + | def __init__(self, | ||
| + | self._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__ == ' | ||
| + | actuator = Actuator() | ||
| + | switch = PowerSwitch(' | ||
| + | |||
| + | </ | ||
| + | ---- | ||
| + | {{tag> | ||
| + | [[https:// | ||