Box Generator / Sprache Smalltalk
 
StartSeite | BoxGenerator/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (letzte Änderung) (Korrektur, Autor, Normalansicht)

Verändert: 45c45
ifFalse: [ second ].
ifFalse: [ second ]

Entfernt: 87,104d86

==Kontrollstrukturen=

Eine weitere erwähnenswerte Besonderheit ist die Abwesenheit von in die Sprache eingebauten Kontrollstrukturen. Kontrollstrukturen werden über DynamicClosures realisiert. Diese heißen in Smalltalk Blöcke und werden mit eckigen Klammern erzeugt. Kontrollstrukturen sind als Methoden von Boolean oder BlockClosure implementiert und es lassen sich beliebige Konstrukte nachrüsten. Die Implementation von whileTrue: bei BlockClosure könnte z. B. so aussehen:

whileTrue: aBlock Werte aBlock solange aus, wie mein Wert wahr ergibt.
[[Code]
^self value
ifTrue: [
aBlock value
[ self value ] whileTrue: [ aBlock value ]]
]

Wer das begriffen hat, wird keine Probleme haben, die Methoden Boolean>>ifTrue:ifFalse oder Collection>>do: zu implementieren. Die mitgelieferte Klassenbibliothek hält eine Reihe von in dieser Form implementierten Kontrollstrukturen bereit. Diese werden i. A. durch die VirtuelleMaschine optimiert behandelt und sind daher Eigenkreationen vorzuziehen.

==Kapselung=

Alle Instanzvariablen sind protected. Es ist durchaus üblich, trotzdem Zugriffsmethoden bereitzustellen, diese aber in ein Protokoll private zu verschieben. Das ist letztenendes eine Frage der persönlichen Vorlieben. Will man eine Methode als private kennzeichnen, so ist man generell auf solche Konventionen angewiesen. Die SpracheSmalltalk kennt keine privaten Methoden.

Klassenbeschreibung

 value
class nameRandbox
superclassObject
instance variable namesx y product first second available random
commentI generate gaussian random deviates

class methods

instance creation

new
 ^super new initialize

instance methods

instance initialization

initialize
  random := Random new.
  available := false

random number generation

next moves to the next element of the pseudo random sequence
  available  
    ifTrue: [ available := false ] 
    ifFalse: [ self generate ]

inquiry

lastGaussian returns a pseudo random deviate from the gaussian distribution
  ^available 
    ifTrue: [ first ] 
    ifFalse: [ second ]

private

randuniv returns a random deviate from a uniform distribution on the unit interval
  random next.
  ^random lastUniform

randpoint from a uniform distribution on the area of the unit circle
  product := 2 .
  [product <= 1] whileFalse: 
  [ 
    x := (self randuniv) * 2 - 1. 
    y := (self randuniv) * 2 - 1. 
    product := (x * x) + (y * y). 
  ]

generate two pseudo random deviates from a gaussian distribution
  | p |
  self randpoint.
  p := ((-2 * (product log)) / product) sqrt.
  available := true.
  first := p * x.
  second := p * y

Bemerkungen

Teile der Smalltalk Syntax, etwa die Klassendefinition, werden bei Smalltalk in eine dafür vorgesehene Text-Schablone innerhalb eines Code-Browsers eingegeben. Für den fertigen Code gibt es verschiedene Ablagemöglichkeiten und Formate.

Eine Implementation in SpracheSmalltalk ist deshalb nicht ohne weiteres in die Form eines Textes zu bringen. fett sind die Nachrichten angegeben, die zum Protokoll von Randbox gehören. kursiv sind die Protokollbeschreibungen der einzelnen Nachrichten aufgeführt. Die Informationen über die Klasse selbst stehen oben in tabellarischer Form. Die Kategorien des Protokolls von Randbox sind als Gliederung dieses Quelltextes angegeben.

Wenn es der verwendete Zeichensatz hergeben würde, wäre der :=-Operator ein Pfeil nach links und der ^-Operator ein Pfeil nach oben.

Die Lesart bei Smalltalk ist satzähnlich, wobei die Objekte die Subjekt sind und die Methoden die Prädikate. Ergebnis jeder Kombination aus Objekt und Methode ist wieder ein Objekt. Methoden ohne expliziten Rückgabewert liefern self (das Objekt, an das die Methode geschickt wurde). Bei Methoden mit Parametern muss man den "Satz" klammern, um sein Ergebnisobjekt weiterverwenden zu können. Da es keinen Operatorvorrang a la Punkt- vor Strichrechnung gibt, muss diese Klammerung in Rechnungen meist explizit erfolgen.


KategorieProgrammierBeispiele KategorieSmalltalk
StartSeite | BoxGenerator/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 24. November 2003 22:32 (diff))
Suchbegriff: gesucht wird
im Titel
im Text