Patientenkartei einer Tierarztpraxis
AFB I–IIDie Tierarztpraxis Dr. Brandt möchte ihre Patientenkartei digitalisieren. Jedes Tier, das in der Praxis behandelt wird, wird mit seinem Namen, seiner Tierart, seinem Geburtsjahr und seinem aktuellen Gewicht in Kilogramm erfasst. Außerdem wird festgehalten, ob das Tier gegen Tollwut geimpft ist.
Bei jedem Besuch wird das Tier gewogen und das neue Gewicht eingetragen. Nach einer Impfung wird der Impfstatus aktualisiert. Die Praxismitarbeiterinnen möchten jederzeit das Alter eines Tieres abfragen und nachsehen können, ob es geimpft ist.
Beim Übertragen der Papierkarteikarten stößt die Auszubildende auf die beiden unten abgebildeten Karten. Sie hält eine davon für eine versehentliche Doppelung und möchte sie löschen.
- Name: Mia
- Tierart: Katze
- Geburtsjahr: 2019
- Gewicht: 4,2 kg
- Tollwut geimpft: ja
- Name: Mia
- Tierart: Katze
- Geburtsjahr: 2019
- Gewicht: 4,2 kg
- Tollwut geimpft: ja
- Geben Sie an, welche Klasse im Text beschrieben wird, und geben Sie für die Karteikarte Nr. 1187 den Zustand des zugehörigen Objekts an.
- Erstellen Sie eine Klassenkarte der Klasse
Tier, die alle im Text genannten Anforderungen erfüllt. Verwenden Sie die Notation der Ergänzenden Hinweise (Sichtbarkeit, Datentypen, Konstruktor). - Erläutern Sie mithilfe der Begriffe Objekt, Zustand und Identität, warum die Auszubildende keine der beiden Karten löschen darf.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Beschrieben wird die Klasse Tier; jede Karteikarte steht für ein Objekt dieser Klasse.
Zustand des Objekts zu Karte 1187: name = "Mia", art = "Katze", geburtsjahr = 2019, gewicht = 4,2, geimpft = wahr.
Nicht zum Zustand gehören die Kartennummer und der Name der Besitzer, da diese im Text nicht als zu speichernde Eigenschaften genannt werden.
Erwartungshorizont zu Aufgabe b)
- - name: Zeichenkette
- - art: Zeichenkette
- - geburtsjahr: Ganzzahl
- - gewicht: Fließkommazahl
- - geimpft: Wahrheitswert
- c Tier(name: Zeichenkette, art: Zeichenkette, geburtsjahr: Ganzzahl, gewicht: Fließkommazahl)
- + wiegen(neuesGewicht: Fließkommazahl)
- + impfen()
- + getAlter(aktuellesJahr: Ganzzahl): Ganzzahl
- + istGeimpft(): Wahrheitswert
Erwartet werden: alle fünf Attribute privat mit passenden Datentypen (Gewicht als Fließkommazahl, Impfstatus als Wahrheitswert), ein Konstruktor, zwei Aufträge (wiegen, impfen) ohne Rückgabetyp und zwei Anfragen mit Rückgabetyp.
Das Alter wird nicht als Attribut gespeichert, sondern aus dem Geburtsjahr berechnet – ein gespeichertes Alter wäre nach dem Jahreswechsel falsch. Andere sinnvolle Namen (z. B. gewichtEintragen) und ein Konstruktor ohne Gewicht sind zu akzeptieren.
Erwartungshorizont zu Aufgabe c)
Ein Objekt ist ein konkretes Exemplar einer Klasse mit eigenem Zustand. Der Zustand ist die Gesamtheit der aktuellen Attributwerte; er ist bei beiden Karten zufällig gleich.
Objekte besitzen aber eine eigene Identität, die nicht von ihren Werten abhängt: Karte 1187 steht für die Katze der Familie Özdemir, Karte 1342 für die Katze von Herrn Laue – zwei verschiedene Tiere.
Das zeigt sich, sobald sich der Zustand eines Objekts ändert: Wiegt die Katze von Herrn Laue beim nächsten Besuch 4,6 kg, ändert sich nur ihr Objekt, das andere bleibt bei 4,2 kg. Würde eine Karte gelöscht, ginge die Patientenakte eines echten Tieres verloren.
Mitgliederverwaltung im Sportverein
AFB II–IIIDer TSV Lindenau verwaltet seine Mitglieder und Trainingszeiten bisher auf Papier. Ein Informatikkurs soll ein Programm entwickeln. Zur Anforderungsanalyse hat der Kurs ein Gespräch mit der Kassenwartin geführt und die wichtigsten Aussagen notiert (Material 2).
Für die erste Programmversion sollen nur die Klassen modelliert werden; Beziehungen zwischen Klassen werden erst später ergänzt.
„Jedes Mitglied hat bei uns eine Mitgliedsnummer, einen Namen und ein Eintrittsjahr. Wir haben die Abteilungen Fußball, Handball und Tischtennis; jedes Mitglied gehört genau einer Abteilung an. Jugendliche unter 18 Jahren zahlen 60 Euro im Jahr, Erwachsene 120 Euro. Wer den Beitrag bezahlt hat, bekommt in meiner Liste einen Haken; zu Beginn jedes Jahres streiche ich alle Haken wieder. Wer austritt, bleibt in der Liste, ist aber nicht mehr aktiv.
Jede Abteilung bietet Trainingseinheiten an. Eine Trainingseinheit findet an einem festen Wochentag zu einer festen Uhrzeit in einer bestimmten Halle statt und hat eine Höchstzahl an Teilnehmenden. Die Mitglieder melden sich für eine Trainingseinheit an; ist sie voll, wird die Anmeldung abgelehnt. Die Übungsleitung will jederzeit sehen, wie viele Plätze noch frei sind.“
- Analysieren Sie die Gesprächsnotiz im Hinblick auf ein objektorientiertes Modell: Ordnen Sie die relevanten Begriffe den Kategorien Klasse, Attribut und Methode zu, nennen Sie Begriffe, die nicht in das Modell gehören, und zeigen Sie auf, welche benötigte Information in der Notiz fehlt.
- Entwerfen Sie Klassenkarten für die Klassen
MitgliedundTrainingseinheit, mit denen sich alle Anforderungen aus Material 2 umsetzen lassen. - Der Verein möchte künftig zusätzlich zählen, wie oft ein Mitglied im laufenden Jahr am Training teilgenommen hat. Mitglieder mit mindestens 40 Teilnahmen werden auf der Jahresversammlung geehrt; zu Jahresbeginn beginnt die Zählung neu. Erweitern Sie Ihr Modell aus b) entsprechend und begründen Sie Ihre Änderungen kurz.
- Im Kurs gibt es zwei Vorschläge zur Abteilung: Vorschlag A speichert die Abteilung als Attribut
abteilung: ZeichenketteinMitglied. Vorschlag B modelliert eine eigene KlasseAbteilung. Beurteilen Sie beide Vorschläge im Hinblick auf die aktuellen Anforderungen und eine mögliche spätere Erweiterung des Programms.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Hinweis zu Aufgabe d)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Klassen: Mitglied, Trainingseinheit (viele gleichartige Exemplare mit eigenem Zustand).
Attribute von Mitglied: Mitgliedsnummer, Name, Eintrittsjahr, Abteilung, Haken (Beitrag bezahlt), aktiv. Attribute von Trainingseinheit: Wochentag, Uhrzeit, Halle, Höchstzahl der Teilnehmenden, Anzahl der Angemeldeten (ergibt sich aus „voll“ und „freie Plätze“).
Methoden: Beitrag bezahlen (Haken setzen), Haken streichen bzw. neues Jahr beginnen, austreten, Beitrag ermitteln; anmelden, freie Plätze abfragen.
Nicht im Modell: TSV Lindenau (nur ein Verein, Systemrahmen), Papier, Liste, Kassenwartin (Nutzerin, kein Objekt), Euro (Einheit).
Fehlende Information: Um zu entscheiden, ob ein Mitglied unter 18 ist, wird das Geburtsjahr (oder -datum) benötigt; es wird in der Notiz nicht genannt. Der Beitrag selbst muss nicht gespeichert werden, da er sich aus dem Alter berechnen lässt.
Erwartungshorizont zu Aufgabe b)
- - nummer: Ganzzahl
- - name: Zeichenkette
- - geburtsjahr: Ganzzahl
- - eintrittsjahr: Ganzzahl
- - abteilung: Zeichenkette
- - bezahlt: Wahrheitswert
- - aktiv: Wahrheitswert
- c Mitglied(nummer: Ganzzahl, name: Zeichenkette, geburtsjahr: Ganzzahl, eintrittsjahr: Ganzzahl, abteilung: Zeichenkette)
- + getBeitrag(jahr: Ganzzahl): Ganzzahl
- + beitragBezahlen()
- + hatBezahlt(): Wahrheitswert
- + neuesJahr()
- + austreten()
- + istAktiv(): Wahrheitswert
- - abteilung: Zeichenkette
- - wochentag: Zeichenkette
- - uhrzeit: Zeichenkette
- - halle: Zeichenkette
- - maxTeilnehmer: Ganzzahl
- - angemeldet: Ganzzahl
- c Trainingseinheit(abteilung: Zeichenkette, wochentag: Zeichenkette, uhrzeit: Zeichenkette, halle: Zeichenkette, maxTeilnehmer: Ganzzahl)
- + anmelden(): Wahrheitswert
- + getFreiePlaetze(): Ganzzahl
- + istVoll(): Wahrheitswert
Entscheidend: geburtsjahr ist ergänzt, der Beitrag wird über getBeitrag berechnet (60 bzw. 120), anmelden meldet mit einem Wahrheitswert zurück, ob die Anmeldung angenommen wurde. bezahlt und aktiv werden nicht im Konstruktor übergeben, sondern mit sinnvollen Startwerten (falsch bzw. wahr) belegt. Andere Bezeichner und z. B. die Uhrzeit als Ganzzahl sind zu akzeptieren, wenn sie schlüssig sind.
Erwartungshorizont zu Aufgabe c)
Ergänzungen in Mitglied:
- - teilnahmen: Ganzzahl
- + teilnahmeEintragen()
- + getTeilnahmen(): Ganzzahl
- + istEhrungsberechtigt(): Wahrheitswert
- + neuesJahr()
Begründung: Die Zahl der Teilnahmen ist Teil des Zustands jedes einzelnen Mitglieds und muss daher als Attribut gespeichert werden. teilnahmeEintragen() ist ein Auftrag, istEhrungsberechtigt() eine Anfrage, die „mindestens 40 Teilnahmen“ berechnet – ein zusätzliches Attribut „geehrt“ wäre redundant. neuesJahr() bleibt im Diagramm gleich, setzt aber jetzt neben dem Haken auch teilnahmen auf 0 zurück (Beschreibung genügt).
Erwartungshorizont zu Aufgabe d)
Vorschlag A (Attribut): genügt den aktuellen Anforderungen, denn eine Abteilung hat laut Notiz nur einen Namen und kein eigenes Verhalten. Das Modell bleibt klein und übersichtlich. Nachteil: Die Abteilung wird bei jedem Mitglied und jeder Trainingseinheit als Zeichenkette wiederholt; Schreibvarianten („Fussball“/„Fußball“) führen zu Fehlern beim Vergleichen.
Vorschlag B (eigene Klasse): sinnvoll, sobald eine Abteilung eigene Attribute (Leitung, Zusatzbeitrag, Budget) oder Methoden (Trainingseinheiten verwalten, Mitglieder zählen) erhält. Für die jetzige Version entstünde eine Klasse, die nur ein einziges Attribut besitzt; außerdem ist die dafür nötige Beziehung zwischen Klassen in dieser Version noch nicht vorgesehen.
Mögliches Urteil: Für die erste Version ist Vorschlag A angemessen, die Namen der drei Abteilungen sollten aber einheitlich festgelegt werden. Bei der angekündigten Erweiterung sollte auf Vorschlag B umgestellt werden. Ein begründetes Urteil für B (Zukunftssicherheit) ist ebenfalls vollständig, wenn die Kriterien abgewogen werden.
