Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m320_2024:learningunits:lu08:einseitigebeziehung [2024/09/12 11:05] – msuter | modul:m320_2024:learningunits:lu08:einseitigebeziehung [2024/09/18 13:12] (aktuell) – msuter | ||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
* zweiseitige Beziehungen | * zweiseitige Beziehungen | ||
- | === Einseitige | + | Bei einer einseitigen |
- | Bei einer einseitigen Beziehung kennt ein Objekt A ein anderes Objekt B aber nicht umgekehrt.\\ | + | ===== Beispiel: Geldbeutel und Besitzer ===== |
+ | ==== Klassendiagramm ==== | ||
- | ---- | + | {{: |
- | //Beispiel 5.1: Geldbeutel und Besitzer// | + | //Abb: Klassen in einer einseitigen Beziehung// |
- | + | ||
- | {{: | + | |
- | + | ||
- | //Abb 5.1:// Klassen in einer einseitigen Beziehung\\ | + | |
Eine Person kann auch keinen Geldbeutel besitzen. | Eine Person kann auch keinen Geldbeutel besitzen. | ||
Daher wird hier die Referenz über eine Methode gesetzt. | Daher wird hier die Referenz über eine Methode gesetzt. | ||
So sind die Erzeugung des Personen-Objekts und die Zuweisung der Referenz zeitlich unabhängig. | 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. | Dies zeigt das zugehörige Sequenz-Diagramm eindeutig auf. | ||
- | {{: | + | {{: |
- | //Abb 5.2:// Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über eine Methode | + | //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 | ||
- | //Beispiel 5.2: Stromschalter und Wippe// \\ | + | @property |
+ | def wallet(self): | ||
+ | return self._wallet | ||
+ | |||
+ | @wallet.setter | ||
+ | def wallet(self, | ||
+ | self._wallet = wallet | ||
+ | |||
+ | class Wallet: | ||
- | {{:modul:m320_2024: | + | def __init__(self): |
+ | pass | ||
+ | |||
+ | def deposit_money(self, | ||
+ | pass | ||
- | //Abb 5.3:// Klassen in einer einseitigen Beziehung\\ | + | def withdraw_money(self, |
+ | pass | ||
+ | |||
+ | if __name__ == ' | ||
+ | person = Person(' | ||
+ | wallet = Wallet() | ||
+ | person.wallet = wallet | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Beispiel: Stromschalter und Wippe (Aktuator) ===== | ||
+ | ==== Klassendiagramm ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | //Abb: Klassen in einer einseitigen Beziehung// | ||
Ein Stromschalter braucht immer eine Wippe, sonst kann er ja nicht benutzt werden. | Ein Stromschalter braucht immer eine Wippe, sonst kann er ja nicht benutzt werden. | ||
Zeile 40: | Zeile 76: | ||
In diesem Fall ist es zwingend, dass die Wippe zeitlich zuerst erzeugt wird, so dass ihre Referenz verfügbar ist. | In diesem Fall ist es zwingend, dass die Wippe zeitlich zuerst erzeugt wird, so dass ihre Referenz verfügbar ist. | ||
- | {{modul:m320: | + | ==== Sequenzdiagramm ==== |
+ | |||
+ | {{:modul:m320_2024: | ||
+ | |||
+ | //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 | ||
- | //Abb 5.4:// Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über den Konstruktor | + | if __name__ == ' |
+ | actuator = Actuator() | ||
+ | switch = PowerSwitch(' | ||
+ | </ | ||
---- | ---- | ||
{{tag> | {{tag> | ||
[[https:// | [[https:// | ||