03.11.2013 Aufrufe

SMALLTALK K1ex127-.45ex51275ahler/Bothner

SMALLTALK K1ex127-.45ex51275ahler/Bothner

SMALLTALK K1ex127-.45ex51275ahler/Bothner

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

14.2 Einsatz von Datenströmen 297<br />

14.2.4 Weiterer Einsatz von Datenströmen<br />

Anzeige von Objekten<br />

Wie zuvor erwähnt, besteht die Möglichkeit, Datenströme nicht nur zur Sicherung<br />

von Daten in einer Datei, sondern auch – für besondere Anwendungen – zur temporären<br />

Sicherung zu verwenden.<br />

Von dieser Möglichkeit wird z.B. systemseitig Gebrauch gemacht, wenn ein Ergebnis-<br />

Objekt einer Anforderung unter Einsatz der Menü-Option “Show It” des Menüs<br />

“Smalltalk” zur Anzeige gebracht werden soll.<br />

In dieser Situation wird vom <strong>SMALLTALK</strong>-System automatisch die Methode “print-<br />

String” ausgeführt, die folgendermaßen innerhalb der Klasse “Object” vereinbart<br />

ist:<br />

printString<br />

|aStream aString|<br />

RecursiveSet := Set new.<br />

aString := String new: 20.<br />

self printOn: (aStream := WriteStream on: aString).<br />

∧ aStream contents<br />

Hierbei wird auf die ebenfalls in der Klasse “Object” vereinbarte Methode “print-<br />

On:” zurückgegriffen, die wie folgt festgelegt ist:<br />

printOn: aStream<br />

|aString|<br />

aString := self class name.<br />

(aString at: 1) isVowel<br />

ifTrue: [aStream nextPutAll: ’an ’]<br />

ifFalse: [aStream nextPutAll: ’a ’].<br />

aStream nextPutAll: aString<br />

Hinweis: Die innerhalb der Methode “printOn:” eingesetzten Messages “name” bzw.<br />

“isVowel” dienen dazu, den Klassennamen des Empfänger-Objekts als Zeichenkette zu<br />

ermitteln bzw. zu prüfen, ob es sich bei einem Zeichen um einen Vokal handelt.<br />

Wollen wir z.B. eine aussagefähigere Darstellung als “an InWerteErfassung” erhalten,<br />

wenn wir uns Objekte anzeigen lassen, die als Instanziierungen einer Unterklasse<br />

von “WerteErfassung” eingerichtet wurden, so sollten wir innerhalb der Klasse<br />

“WerteErfassung” die Methode “printOn:” z.B. in der folgenden Form redefinieren:<br />

printOn: aStream<br />

aStream nextPutAll: self class name.<br />

aStream nextPutAll: ’ Inhalt von werteBag: ’.<br />

self bereitstellenWerte do:<br />

[:einObjekt|aStream nextPutAll: einObjekt,’ ’]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!