Modellierung und Produktkonfigurierung

Erweiterung des Hausratmodells

In diesem Abschnitt werden wir unser Hausratmodell vervollständigen. Die folgende Abbildung zeigt das Modell.

hausratmodell
Figure 1. Hausratmodell mit Grunddeckung und Zusatzudeckung

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):

Table 1. Attribut Felder der Klasse „HausratVertrag“
Name : Datentyp Beschreibung, Bemerkung

plz: String

Postleitzahl des versicherten Hausrats

/tarifzone : String

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!

wohnflaeche : Integer

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.

/vorschlagVersSumme : Money

Vorschlag für die Versicherungssumme. Wird auf Basis der Wohnfläche bestimmt.
→ Achten Sie bei der Eingabe darauf den Typ des Attributs auf abgeleitet (Berechnung bei jedem Aufruf der Gettermethode) zu setzen!

versSumme : Money

Die Versicherungssumme.
Der erlaubte Wertebereich ist min=0 EUR und max lassen Sie leer.

Der Editor, der die Klasse „HausratVertrag“ anzeigt, sieht wie folgt aus:

hausratvertrag
Figure 2. Klasse HausratVertrag

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() {
	return "I"; // TODO wird spaeter anhand einer Tarifzonentabelle ermittelt
}

/**
 * Gibt den Wert des Attributs vorschlagVersSumme zurueck.
 *
 * @restrainedmodifiable
 */
@IpsAttribute(name = "vorschlagversSumme", kind = AttributeKind.DERIVED_ON_THE_FLY, valueSetKind = ValueSetKind.AllValues)
public Money getVorschlagversSumme() {
	// TODO: Der Multiplikator wird spaeter aus den Produktdaten ermittelt.
	// begin-user-code
	return Money.euro(650).multiply(wohnflaeche);
	// end-user-code
}

@restrainedmodifiable wird bei bestimmten Methoden (z.B. in generierten Testklassen oder Regeln) vom Generator anstatt @generated erzeugt und weist darauf hin, dass der Entwickler eigenen Code hinzufügen kann. Der Abschnitt, an dem der Code stehen darf, ist mit Kommentaren gekennzeichnet. @restrainedmodifiable kann nur verwendet werden, wenn es bereits vom Generator erzeugt wurde. Ein Ersetzen von @generated und Einfügen der entsprechenden Kommentarzeilen funktioniert nicht und wird vom Generator überschrieben.