Teil 1: Modellierung und Produktkonfiguration
Erweiterung des Hausratmodells
In diesem Abschnitt werden wir unser Hausratmodell vervollständigen. Die folgende Abbildung zeigt das Modell.
Jeder Hausratvertrag hat genau eine Grunddeckung und kann beliebig viele Zusatzdeckungen haben. Die Grunddeckung deckt immer die im Vertrag definierte Versicherungssumme. Darüber hinaus kann ein Hausratvertrag optional Zusatzdeckungen enthalten, typischerweise sind dies Deckungen gegen Risiken wie zum Beispiel Fahrraddiebstahl oder Überspannungschäden. Die Zusatzdeckung werden wir im zweiten Teil des Tutorials näher betrachten.
Wir öffnen die Klasse „HausratVertrag“
und definieren die Attribute der Klasse (analog zahlweise
):
Name : Datentyp | Beschreibung, Bemerkung |
---|---|
|
Postleitzahl des versicherten Hausrats |
|
Die Tarifzone (I, II, III, IV, V oder VI) ergibt sich aus der Postleitzahl und ist maßgeblich für den zu zahlenden Beitrag. → Achten Sie also bei der Eingabe darauf Typ des Attributs auf abgeleitet (Berechnung bei jedem Aufruf der Gettermethode) zu setzen! |
|
Die Wohnfläche des versicherten Hausrats in Quadratmetern. Der erlaubte Wertebereich ist min=0 und unbeschränkt. Den Wertebereich definieren Sie auf der zweiten Seite des Dialogs „Vorbelegung und Werte“. In der Auswahlbox „Typ der Wertemenge“ wählen Sie Bereich aus. Für „Minimum“ geben Sie eine 0 ein, Felder „Maximum“ und „Schrittweite“ lassen Sie leer. |
|
Vorschlag für die Versicherungssumme. Wird auf Basis der
Wohnfläche bestimmt. |
|
Die Versicherungssumme. |
Der Editor, der die Klasse „HausratVertrag“
anzeigt, sieht wie folgt aus:
Die abgeleiteten Attribute werden UML-konform mit einem vorangestellten Schrägstrich angezeigt.
Öffnen Sie nun die Klasse „HausratVertrag“
im Java-Editor und implementieren die Gettermethoden für die beiden abgeleiteten Attribute tarifzone
und vorschlagVersSumme
wie folgt:
/**
* Gibt den Wert des Attributs tarifzone zurueck.
*
* @restrainedmodifiable
*/
@IpsAttribute(name = "tarifzone", kind = AttributeKind.DERIVED_ON_THE_FLY, valueSetKind = ValueSetKind.AllValues)
public String getTarifzone() {
// begin-user-code
// TODO: Wird spaeter anhand einer Tarifzonentabelle ermittelt
return "I";
// end-user-code
}
/**
* Gibt den Wert des Attributs vorschlagVersSumme zurueck.
*
* @restrainedmodifiable
*/
@IpsAttribute(name = "vorschlagversSumme", kind = AttributeKind.DERIVED_ON_THE_FLY, valueSetKind = ValueSetKind.AllValues)
public Money getVorschlagversSumme() {
// begin-user-code
// TODO: Der Multiplikator wird spaeter aus den Produktdaten ermittelt
return Money.euro(650).multiply(wohnflaeche);
// end-user-code
}
@restrainedmodifiable
wird bei bestimmten Methoden (z.B. in generierten Testklassen oder Regeln) vom Generator anstelle von @generated
erzeugt und weist darauf hin, dass der Entwickler eigenen Code hinzufügen kann. Der Abschnitt, in dem der eigene Code stehen darf, wird durch Kommentare gekennzeichnet.
@restrainedmodifiable
kann nur verwendet werden, wenn die Annotation vom Generator erzeugt wurde. Ein Ersetzen von @generated
und Einfügen der entsprechenden Kommentarzeilen funktioniert nicht und wird vom Generator überschrieben.