You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Einen Hinweis darauf, ob sich das Unterteilen in spezielle Klassen lohnt, geben die jeweiligen Eigenschaften. So hat jede Bahn einen Namen, aber nur Bergbahnen besitzen eine Tal- und eine Bergstation.
37
37
38
-
CLASS Bahn = +
39
-
Name: TEXT++*++100; +
40
-
END Bahn; +
41
-
+
42
-
CLASS Bergbahn EXTENDS Bahn = +
43
-
LageTalstation: LandesKoord; +
44
-
LageBergstation: LandesKoord; +
45
-
END Bergbahn; +
46
-
+
47
-
CLASS Tramlinie EXTENDS Bahn = +
38
+
[source]
39
+
----
40
+
CLASS Bahn =
41
+
Name: TEXT*100;
42
+
END Bahn;
43
+
44
+
CLASS Bergbahn EXTENDS Bahn =
45
+
LageTalstation: LandesKoord;
46
+
LageBergstation: LandesKoord;
47
+
END Bergbahn;
48
+
49
+
CLASS Tramlinie EXTENDS Bahn =
48
50
END Tramlinie;
51
+
----
49
52
50
53
.Bergbahn und Tramlinie übernehmen («erben») die Eigenschaft Name von ihrer Oberklasse Bahn, ohne dass dies nochmals geschrieben werden müsste. Eine Bergbahn besitzt zusätzlich zu den ererbten noch weitere Eigenschaften, nämlich die Lage von Tal- und Bergstation (in Landeskoordinaten). Rechts dasselbe in der Schreibweise von INTERLIS.
51
54
image::img/image26.png[width=230,height=90]
@@ -61,18 +64,21 @@ Hundert Zeichen für den Namen einer Bahn mag im allgemeinen Fall ja angemessen
61
64
62
65
Aber eine Tramlinie mit hundert Buchstaben? Hier reichen fünf Zeichen definitiv aus.
63
66
64
-
CLASS Bahn = +
65
-
Name: TEXT++*++100; +
66
-
END Bahn; +
67
-
+
68
-
CLASS Bergbahn EXTENDS Bahn = +
69
-
LageTalstation: LandesKoord; +
70
-
LageBergstation: LandesKoord; +
71
-
END Bergbahn; +
72
-
+
73
-
CLASS Tramlinie EXTENDS Bahn = +
74
-
**Name (EXTENDED): TEXT++*++5; +
75
-
**END Tramlinie;
67
+
[source]
68
+
----
69
+
CLASS Bahn =
70
+
Name: TEXT*100;
71
+
END Bahn;
72
+
73
+
CLASS Bergbahn EXTENDS Bahn =
74
+
LageTalstation: LandesKoord;
75
+
LageBergstation: LandesKoord;
76
+
END Bergbahn;
77
+
78
+
CLASS Tramlinie EXTENDS Bahn =
79
+
Name (EXTENDED): TEXT*5;
80
+
END Tramlinie;
81
+
----
76
82
77
83
Abbildung 27: Für den Namen einer Tramlinie reichen fünf Zeichen aus: Der Typ der Eigenschaft «Name» wird von der Unterklasse verfeinert (präzisiert). Rechts wiederum dasselbe in der Schreibweise von INTERLIS.
78
84
@@ -95,17 +101,20 @@ Soll es von einer Klasse keine konkreten Objekte geben können, wird sie als *ab
95
101
96
102
Häufig sind in einem Datenmodell sogar alle Oberklassen abstrakt und nur die untersten, speziellsten Klassen konkret.
97
103
98
-
CLASS Bahn *(ABSTRACT)* = +
99
-
Name: TEXT++*++100; +
100
-
END Bahn; +
101
-
+
102
-
CLASS Bergbahn EXTENDS Bahn = +
103
-
LageTalstation: LandesKoord; +
104
-
LageBergstation: LandesKoord; +
105
-
END Bergbahn; +
106
-
+
107
-
CLASS Tramlinie EXTENDS Bahn = +
104
+
[source]
105
+
----
106
+
CLASS Bahn (ABSTRACT) =
107
+
Name: TEXT*100;
108
+
END Bahn;
109
+
110
+
CLASS Bergbahn EXTENDS Bahn =
111
+
LageTalstation: LandesKoord;
112
+
LageBergstation: LandesKoord;
113
+
END Bergbahn;
114
+
115
+
CLASS Tramlinie EXTENDS Bahn =
108
116
END Tramlinie;
117
+
----
109
118
110
119
Abbildung 28: Bahn als abstrakte Klasse: Soll es keine Objekte geben können, die nur Bahn sind, ohne auch Bergbahn oder Tramlinie zu sein, wird dies im Diagramm mittels Schrägschrift bezeichnet. Rechts dasselbe Modell in der Schreibweise von INTERLIS.
111
120
@@ -114,15 +123,16 @@ Abbildung 28: Bahn als abstrakte Klasse: Soll es keine Objekte geben können, di
114
123
115
124
Angenommen, ein internationaler Verband möchte sicherstellen, dass Billette mit ihren Preisen erfasst werden. Er will aber keine bestimmte Währung für die Preisangabe vorschreiben, und entsprechend ist auch nicht klar, was eine sinnvolle Obergrenze für den Preis wäre. Fest steht andererseits, dass «Preis» eine Zahl sein soll, und dass es sich um Geld handelt. Schliesslich werden Preise nicht in Kilometern pro Stunde gemessen!
116
125
117
-
____
118
-
CLASS BillettartWeltweit (ABSTRACT) = +
119
-
Preis (ABSTRACT): NUMERIC ++[++MONEY++]++; +
120
-
END BillettartWeltweit; +
121
-
+
122
-
CLASS BillettartAhland EXTENDS BillettartWeltweit = +
CLASS BillettartAhland EXTENDS BillettartWeltweit =
133
+
Preis (EXTENDED): 0.00 .. 9999.99 [Ahland.Taler];
124
134
END BillettartAhland;
125
-
____
135
+
----
126
136
127
137
[NOTE]
128
138
Nicht alle Eigenschaften müssen bis ins Detail festgelegt werden: Bei abstrakten Klassen sind *abstrakte Eigenschaften* zulässig. Es liegt dann an den konkreten Unterklassen, diese Eigenschaften zu präzisieren. Dies ist zum Beispiel dann nützlich, wenn etwas auf internationaler oder nationaler Stufe allgemein geregelt werden soll, ohne gleich jedes Detail vorzuschreiben.
0 commit comments