1 // WertKlasse.java /* TODO: anderer Klassenname */
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&uuml;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 &ouml;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 * &uuml;berschreiben.</p> 23 * <p> 24 * Eine Wertklasse muss die Schnittstelle <code>java.lang.Comparable</code> 25 * implementieren, wenn es eine nat&uuml;rliche Ordnung f&uuml;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&uuml;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&uuml;ck zu <code>toString()</code>. 41 * @param s Stringdarstellung eines Wertobjekts 42 * @return Referenz auf zugeh&ouml;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&auml;&szlig; 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 * &Uuml;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&uuml;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