2 package klassenvorlagen; /* TODO: anderer Paketname */
3
4 /* TODO: bei Bedarf import-Deklarationen ... */
5
6 /**
7 * eine Wertklasse <em>(value-based class)</em> ist mittels Fabrikmethoden
8 * instanziierbar (sie ist Bauplan für Wertobjekte),
9 * hat keine Unterklassen und alle ihre Instanzvariablen sind konstant
10 * (Wertobjekte sind <em>immutable objects</em>).
11 * <p>
12 * Fabrikmethoden sind Klassenmethoden, die eine Referenz auf ein
13 * Wertobjekt der Klasse liefern. Zur Instanziierung verwenden die
14 * Fabrikmethoden die privaten Konstruktoren der Klasse.
15 * Ein Wertklasse sollte keine öffentlichen Konstruktoren haben.</p>
16 * <p>
17 * Unterklassen werden durch <code>final</code>-Markierung der Klasse
18 * verhindert.</p>
19 * <p>
20 * Eine Wertklasse muss die <code>java.lang.Object</code>-Methoden
21 * <code>equals</code>, <code>hashCode</code> und <code>toString</code>
22 * überschreiben.</p>
23 * <p>
24 * Eine Wertklasse muss die Schnittstelle <code>java.lang.Comparable</code>
25 * implementieren, wenn es eine natürliche Ordnung für die
26 * Wertobjekte der Klasse gibt.</p>
27 * <p>
28 * Eine Wertklasse sollte die Schnittstelle <code>java.util.Formattable</code>
29 * implementieren, wenn die String-Darstellung der Wertobjekte nicht durch
30 * Formatierung (z.B. in <code>printf</code>) kürzbar sein soll.</p>
31 */
32 public final class WertKlasse
33 implements Comparable<WertKlasse>, java.util.Formattable {
34
35 /* TODO: gekapselte konstante Instanzvariablen ... */
36 private final TYP NAME;
37
38 /* TODO: Fabrikmethoden ... */
39 /**
40 * Gegenstück zu <code>toString()</code>.
41 * @param s Stringdarstellung eines Wertobjekts
42 * @return Referenz auf zugehöriges Wertobjekt
43 */
44 public static WertKlasse valueOf(String s) {
45 /* TODO: Referenz auf konsistentes Objekt zurueckgeben oder
46 bei ungueltigem String *IllegalArgumentException* werfen */
47 }
48
49 /**
50 * liefert gemäß der Parameterliste initialisiertes Wertobjekt.
51 * @return Referenz auf Wertobjekt
52 */
53 public static WertKlasse valueOf(/* Parameterliste */) {
54 /* TODO: Referenz auf konsistentes Objekt zurueckgeben oder
55 bei ungueltigen Argumenten *IllegalArgumentException* werfen */
56 }
57
58 /* TODO: gegebenenfalls Standardwerte ... */
59 /**
60 * Übliche Standardwerte sind neutrale Elemente, Minimum, Maximum.
61 */
62 public static final WertKlasse STANDARDWERT
63 = new WertKlasse(/* Argumente */);
64
65
66 /* TODO: private Konstruktoren ... */
67 /**
68 * initialisiert neues Wertobjekt mit den Argumenten der Parameterliste.
69 */
70 private WertKlasse(/* Parameterliste */) {
71 /* TODO: Instanzvariablen initialisieren */
72 }
73
74 /* TODO: Methoden aus java.lang.Object ueberschreiben ... */
75 @Override
76 public boolean equals(Object o) {
77 if (o instanceof WertKlasse) {
78 WertKlasse that = (WertKlasse) o;
79 /* TODO: return true, wenn die Objekte this und that gleich sind */
80 }
81 return false;
82 }
83
84 @Override
85 public int hashCode() {
86 /* TODO: aus den Werten der Instanzvariablen einen Hashcode berechnen */
87 }
88
89 @Override
90 public String toString() {
91 /* TODO: aus den Werten der Instanzvariablen einen String erzeugen,
92 Gegenstueck zu valueOf(String) */
93 }
94
95 /* TODO: gegebenenfalls Comparable<WertKlasse> implementieren ... */
96 @Override
97 public int compareTo(WertKlasse that) {
98 /* TODO: this und that vergleichen ... */
99 }
100
101 /* TODO: gegebenenfalls java.util.Formattable implementieren ... */
102 @Override
103 public void formatTo(java.util.Formatter f,
104 int flags, int width, int precision) {
105 /* TODO: formatierte String-Darstellung bauen ... */
106 }
107
108 /* TODO: Operationen ... */
109 /**
110 * verknüpft ein Wertobjekt mit den Argumenten der Parameterliste
111 * zu einem neuen Wertobjekt.
112 * @return Referenz auf das berechnete Wertobjekt
113 */
114 public WertKlasse OPERATION(/* Parameterliste */) {
115 /* aus this und den Argumenten neues Wertobjekt berechnen ... */
116 }
117
118 /* TODO: bei Bedarf Getter ... */
119 /**
120 * liefert Bestandteile eines Wertobjekts.
121 * @return z.B. Wert einer Instanzvariablen
122 */
123 public TYP getNAME() {
124 return this.NAME;
125 }
126 }
127