Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m320_2024:learningunits:lu08:zweiseitigebeziehung [2024/09/10 15:11] – angelegt msuter | modul:m320_2024:learningunits:lu08:zweiseitigebeziehung [2024/09/18 13:43] (aktuell) – [Sourcecode] msuter | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
Bei einer zweiseitigen Beziehung kennt ein Objekt A ein anderes Objekt B und umgekehrt.\\ | Bei einer zweiseitigen Beziehung kennt ein Objekt A ein anderes Objekt B und umgekehrt.\\ | ||
- | ---- | + | ===== Beispiel: Lernende/r und Lehrperson ===== |
+ | ==== Klassendiagramm ==== | ||
- | //Beispiel 5.3: Lernende/r und Lehrperson// | + | {{:modul: |
- | {{modul: | + | //Abb: Klassen in einer zweiseitigen Beziehung |
- | + | ||
- | //Abb 5.5:// Klassen in einer zweiseitigen Beziehung | + | |
Es ist offensichtlich, | Es ist offensichtlich, | ||
- | Wie in Beispiel | + | Wie im vorherigen |
Es macht Sinn, die Zuweisung dann zu machen, wenn sie benötigt wird. | Es macht Sinn, die Zuweisung dann zu machen, wenn sie benötigt wird. | ||
- | Um sicherzugehen, | + | Um sicherzugehen, |
- | //Hinweis:// Programmtechnisch muss einfach sichergestellt werden, dass eine schon bestehende Beziehung nicht noch einmal zugewiesen wird. | + | <WRAP center round tip 60%> |
+ | Hinweis: Programmtechnisch muss einfach sichergestellt werden, dass eine schon bestehende Beziehung nicht noch einmal zugewiesen wird. | ||
+ | </ | ||
- | {{modul: | + | ==== Sequenzdiagramm ==== |
- | //Abb 5.6:// Sequenz-Diagramm der Zuweisung einer zweiseitigen Beziehung über Methoden \\ | + | {{:modul: |
- | ---- | + | //Abb: Sequenz-Diagramm der Zuweisung einer zweiseitigen Beziehung über Methoden // |
- | //Beispiel 5.4: Lernende/r und Schulklasse// | + | ==== Sourcecode ==== |
+ | ==== Lernende/r und Lehrperson ==== | ||
- | === Code-Beispiele === | ||
- | Zu den oben erwähnten 4 Fällen finden Sie hier den passenden Code in Python und Java. | ||
- | |||
- | === Fall 1: === | ||
- | |||
- | Geldbeutel und Besitzer\\ | ||
- | **Python**< | ||
<code python> | <code python> | ||
- | class Person: | + | class Teacher: |
- | private Wallet wallet = null; | + | |
- | | + | def __init__(self, |
- | + | self._name | |
- | def __init__(self, | + | self._student |
- | self._name | + | |
- | self._wallet | + | @student.setter |
- | + | def student(self, | |
- | | + | self._student |
- | def name(self): | + | student.teacher |
- | return self._name | + | |
- | } | + | |
- | @property | + | |
- | def wallet(self): | + | |
- | return self._wallet | + | |
- | } | + | |
- | @wallet.setter | + | |
- | def wallet(self, | + | |
- | self._wallet | + | |
- | } | + | |
- | | + | |
- | + | ||
- | class Wallet: | + | |
- | | + | class Student: |
- | | + | |
- | + | | |
- | def deposit_money(self, | + | |
- | | + | |
+ | |||
+ | @teacher.setter | ||
+ | def teacher(self, | ||
+ | self._teacher = teacher | ||
+ | teacher.student = self | ||
+ | |||
+ | if __name__ == ' | ||
+ | mia = Teacher(' | ||
+ | cathy = Student(' | ||
+ | |||
+ | #ENTWEDER | ||
+ | mia.student = cathy | ||
+ | #ODER | ||
+ | cathy.teacher = mia | ||
- | def withdraw_money(self, | ||
- | pass } | ||
- | } | ||
- | |||
- | | ||
- | if __name__ == ' | ||
- | person = Person(' | ||
- | wallet = Wallet() | ||
- | person.wallet = wallet | ||
- | } | ||
- | } | ||
</ | </ | ||
- | === Fall 2: === | + | ===== Beispiel: Lernende/r und Schulklasse ===== |
+ | ==== Klassendiagramm ==== | ||
- | Stromschalter und Wippe | + | {{: |
- | <code python> | + | //Abb: Klassen in einer zweiseitigen Beziehung// |
- | class PowerSwitch: | + | |
- | private String type; | + | |
- | private Seesaw seesaw; | + | |
- | def __init__(self, | + | Ein Student wird bei der Anmeldung einer Klasse zugewiesen. |
- | self._type = type | + | Daher macht es Sinn, diese Referenz über den Konstruktor mitzuteilen. |
- | self._seesaw = seesaw | + | Dabei muss die Klasse '' |
- | } | + | |
- | @property | + | |
- | def type(self): | + | |
- | return self._type | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | class Seesaw: | + | |
- | | + | |
- | def __init__(self): | + | |
- | self._position = False /* Default-Konstruktor | + | |
- | def press(self): | + | ==== Sequenzdiagramm ==== |
- | pass } | + | |
- | def resolve(self): | + | {{: |
- | pass } | + | |
- | def is_pressed(self): | + | //Abb: Sequenz-Diagramm der Zuweisung einer zweiseitigen Beziehung über Konstruktor// |
- | return self._position | + | |
- | } | + | |
- | } | + | |
- | public class App{ | + | ==== Sourcecode |
- | if __name__ | + | |
- | seesaw | + | |
- | switch | + | |
- | } | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | === Fall 3: === | + | |
- | + | ||
- | Lernende/r und Lehrperson | + | |
<code python> | <code python> | ||
- | class Teacher: | + | class SchoolClass: |
- | private String name; | + | |
- | private Student ref2student; | + | def __init__(self, |
- | + | self._designation = designation | |
- | def __init__(self, | + | self._student |
- | self._name | + | |
- | self._ref2student = None } | + | |
- | + | ||
- | @student.setter | + | |
- | def student(self, | + | |
- | | + | |
- | student.teacher = self student.setTeacher(this); | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | class Student: | + | |
- | private Strig name; | + | |
- | private Teacher ref2teacher; | + | |
- | + | ||
- | def __init__(self, | + | |
- | self._name | + | |
- | self._ref2teacher = None } | + | |
- | + | ||
- | @teacher.setter | + | |
- | def teacher(self, | + | |
- | self._ref2teacher = teacher | + | |
- | teacher.student = self teacher.setStudent(this); | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | public class App{ | + | |
- | if __name__ == ' | + | |
- | mia = Teacher(' | + | |
- | cathy = Student(' | + | |
- | mia.student = cathy | + | |
- | #ODER // ODER | + | |
- | cathy.teacher = mia | + | |
- | } | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | === Fall 4: === | + | |
- | + | ||
- | Lernende/r und Schulklasse | + | |
- | + | ||
- | <code python> | + | |
- | class SchoolClass: | + | |
- | private String designation; | + | |
- | private Stduent ref2student; | + | |
- | | + | |
- | def __init__(self, | + | |
- | self._designation = designation | + | |
- | self._ref2student | + | |
| | ||
@student.setter | @student.setter | ||
- | def student(self, | + | def student(self, |
- | self._ref2student | + | self._student |
- | } | + | |
- | } | + | class Student: |
- | + | ||
- | class Student: | + | |
- | private String name; | + | |
- | private SchoolClass ref2class; | + | |
| | ||
- | def __init__(self, | + | def __init__(self, |
- | self._name = name this.name = name; | + | self._name = name |
- | self._ref2class | + | self._class |
- | the_class.student = self | + | the_class.student = self |
- | } | + | |
- | } | + | |
- | public class App{ | + | |
- | if __name__ == ' | + | if __name__ == ' |
- | i1a = SchoolClass(' | + | i1a = SchoolClass(' |
- | cathy = Student(" | + | cathy = Student(" |
- | } | + | |
- | } | + | |
</ | </ | ||