Smalltalk mit Squeak

Squeak Markus Schlager Smalltalk mit Squeak Objektorientierte Programmierung in info10 Markus Schlager Gymnasium Untergriesbach 25. Februar 2012 ...
4 downloads 2 Views 6MB Size
Squeak Markus Schlager

Smalltalk mit Squeak Objektorientierte Programmierung in info10

Markus Schlager Gymnasium

Untergriesbach

25. Februar 2012

Vorbemerkungen I

Squeak Markus Schlager

I

Die Folien stellen einen Auszug aus Unterrichtsmaterial dar, das im Rahmen des Informatikunterrichtes der 10. Jahrgangsstufe am Staatlichen Landschulheim Marquartstein1 sowie am Gymnasium Untergriesbach entsteht.

I

Ziel ist eine Einführung in die objektorientierte Programmierung unter Einbeziehung verschiedener Modellierungstechniken.

I

Vorausgesetzt werden Grundkenntnisse der objektorientierten Modellierung und einfache Darstellungen in UML sowie Einblicke in die Ablaufmodellierung, wie sie am bayerischen Gymnasium im Rahmen des Faches Natur und Technik in der 6. und 7. Jahrgangsstufe vermittelt werden.

Vorbemerkungen II I

Die verwendete Programmiersprache ist I

I

1

Smalltalk unter Verwendung der Entwicklungsumgebung Squeak bzw. Pharo.

Als Modellierungswerkzeuge finden Dia und insbesondere für Python Umbrello Verwendung.

Hinter Text in dieser Farbe, allen Gliederungen (auch am rechten Rand) und den Symbolen am unteren Seitenrand verbergen sich in der Regel anklickbare Hyperlinks.

Squeak Markus Schlager

Gliederung

Squeak Markus Schlager

Smalltalk I – die Entwicklungsumgebung Squeak

Smalltalk II – Grundzüge der Programmiersprache

Anhang

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

Teil I

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

Smalltalk I

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

Überblick

Squeak Markus Schlager

Smalltalk I – die Entwicklungsumgebung Squeak

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel

Smalltalk II – Grundzüge der Programmiersprache

Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse

Anhang

Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

Gliederung

Squeak Markus Schlager Squeak

Smalltalk I – die Entwicklungsumgebung Squeak Die Arbeitsoberfläche Rot, Gelb, Blau – die Maus Wichtige Weltmenüs Halomenüs von Morph-Objekten Tastaturkürzel Speichern Speichern des gesamten Images Speichern von Projekten Speichern von Paketen – Monticello Hallo Welt! Der Browser MyWatchMorph – eine neue Klasse

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.1 Die Arbeitsoberfläche

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.1 Die Arbeitsoberfläche

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche

I

Wichtigster Unterschied zum squeakland-Image ist die Klappe Werkzeugkiste am rechten Rand.

Übung

1.1 Die Arbeitsoberfläche

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche

I

Bei den Halos gibt es ein Schraubenschlüssel-Halo für den Zugriff auf die Programmierwerkzeuge.

Übung

1.2 Rot, Gelb, Blau – die Maus

Squeak Markus Schlager

Rot – linke Maustaste wählt aus oder packt an.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

Gelb – mittlere Maustaste öffnet Kontextmenüs.

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen

Blau – rechte Maustaste führt Metaoperationen aus, bringt z. B. die Halos zum Vorschein.

Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

Squeak

1.3 Wichtige Weltmenüs

Markus Schlager

linke Maustaste (rot)

mittlere Maustaste (gelb)

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

Das Projektmenü ist der Navigator -Klappe ähnlich.

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus

Speichern bedeutet stets Speichern des gesamten Images im aktuellen Zustand, nicht nur des aktuellen Projektes.

Initialisierung Protokoll anlegen Methodendefinition

Durch Anklicken in der Objekthierarchie lassen sich auch ‚verschwundene‘ Objekte wieder finden. Alternative: Shift + roter Klick auf den Hintergrund

Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.4 Halomenüs von Morph-Objekten

Squeak Markus Schlager

graues Halo

rotes Halo

Squeak Arbeitsoberfläche

Besonders nützlich ist hier das LayoutUntermenü.

Dieses ProgrammierMenü ist das Tor von den eToys zur wahren Smalltalk -Welt. Besonders wichtig sind Browser für Morf und Morf erforschen (öffnet einen Inspector des Morfs).

Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.5 Tastaturkürzel

Squeak Markus Schlager

I

In zahlreichen Menüs (im Bild das Kontextmenü eines Workspace) sind in Klammern Tastaturkürzel angegeben.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

Aufruf mit der Alt- (oder Strg-)Taste, z. B. Alt-c Kopieren Alt-x Ausschneiden Alt-v Einfügen Alt-z Rückgängig Alt-f Suchen Alt-s Speichern/Akzeptieren Alt-a Alles auswählen Alt-d Ausführen (do it) Alt-p Auswerten (print it) Alt-i Untersuchen (inspect it) Vgl. auch die Squeak Language Reference zu Tastaturkürzeln, Mausfunktionen und Menüs sowie den Grundlagen von Smalltalk. I

I

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.6 Speichern

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel

Vorbemerkung zum Speichern

Speichern Speichern – Image Speichern – Projekte

Falls ihr im folgenden euer Werk als Projekt in eine Datei speichert (veröffentlicht), achtet unbedingt darauf, auch etwaige changes in the change set mit zu speichern, falls ihr danach gefragt werdet! Andernfalls gehen von euch programmierte Veränderungen in der Klassenhierarchie verloren.

Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.7 Speichern des gesamten Images

Squeak Markus Schlager

I Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.8 Speichern von Projekten

Squeak Markus Schlager

I Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.9 Speichern von Paketen – Monticello

Squeak Markus Schlager

I Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.10 Hallo Welt!

Squeak Markus Schlager

I I I

I

I I

I

Öffnet ein neues Projekt (Navigator-Klappe oder gelber Mausklick auf dem Hintergrund). Zieht aus der Werkzeugkiste einen Workspace und ein Transcript in die Welt. Ein Workspace ist eine Art Eingabefenster für Smalltalk-Nachrichten, ein Transcript ein Ausgabefenster. Schreibt in den Workspace die Zeile Transcript show: ’Hallo, Welt!’. (Beachtet den Punkt am Ende der Nachricht!) Markiert die Nachricht mit der Maus und führt sie aus (gelber Mausklick oder Alt-d). Öffnet den Terse Guide to Squeak oder alternativ dessen formatierte Version und probiert (ausführen bzw. auswerten) in eurem Workspace die Beispiele zu Transcript, Arithmetic expressions und Pen aus. Variiert die Beispiele und lasst euer Pen-Objekt z. B. das Haus vom Nikolaus zeichnen.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager

I

Öffnet ein neues Projekt und darin einen Workspace.

I

Schreibt die Zeile WatchMorph new openInWorld. in den Workspace und führt sie aus (do it).

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

2

Um die Namen der Farbattribute zu eruieren, könnt ihr den Morf auch mit dem Inspector erforschen.

1.11 Der Browser

Squeak Markus Schlager

I

Öffnet ein neues Projekt und darin einen Workspace.

I

Schreibt die Zeile WatchMorph new openInWorld. in den Workspace und führt sie aus (do it).

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung

I

I

Ruft über das Programmiermenü (graues Halo) einen Browser für den Morf auf. Ziel wird es sein, diese Uhr zu ‚verbessern‘, so könnte sie z. B. jede Sekunde ihre Farbe2 wechseln.

Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

2

Um die Namen der Farbattribute zu eruieren, könnt ihr den Morf auch mit dem Inspector erforschen.

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Der Browser kennt zwei Darstellungsformen:

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Der Browser kennt zwei Darstellungsformen: I

Als Hierarchy Browser zeigt er die Klasse und ihre Oberklassen,

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Der Browser kennt zwei Darstellungsformen: I

I

Als Hierarchy Browser zeigt er die Klasse und ihre Oberklassen, als System Browser (Aufruf auch mit Alt-b) die Klasse als Element einer logischen Kategorie.

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Der Browser kennt zwei Darstellungsformen: I

I

I

Als Hierarchy Browser zeigt er die Klasse und ihre Oberklassen, als System Browser (Aufruf auch mit Alt-b) die Klasse als Element einer logischen Kategorie.

Der Wechsel zwischen den beiden Darstellungen erfolgt mit den Schaltflächen browse bzw. hierarchy.

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Teilbereiche des Browsers

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Teilbereiche des Browsers I

die logischen Kategorien von Klassen I I

nicht alphabetisch sortiert! Gelber Mausklick darauf (Kontextmenü) erlaubt die Suche nach einer Klasse.

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Teilbereiche des Browsers I I

die logischen Kategorien von Klassen die Klassen der ausgewählten Kategorie bzw. die Klasse und ihre Oberklassen

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Teilbereiche des Browsers I I

I

die logischen Kategorien von Klassen die Klassen der ausgewählten Kategorie bzw. die Klasse und ihre Oberklassen die Kategorien oder Protokolle, in die die Methoden der ausgewählten Klasse logisch gruppiert sind

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Teilbereiche des Browsers I I

I

I

die logischen Kategorien von Klassen die Klassen der ausgewählten Kategorie bzw. die Klasse und ihre Oberklassen die Kategorien oder Protokolle, in die die Methoden der ausgewählten Klasse logisch gruppiert sind die Methoden (Selektoren) des gewählten Protokolls

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Teilbereiche des Browsers I I

I

I I

die logischen Kategorien von Klassen die Klassen der ausgewählten Kategorie bzw. die Klasse und ihre Oberklassen die Kategorien oder Protokolle, in die die Methoden der ausgewählten Klasse logisch gruppiert sind die Methoden (Selektoren) des gewählten Protokolls der Quelltext der ausgewählten Klasse oder Methode

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.11 Der Browser

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Teilbereiche des Browsers I I

I

I I I

die logischen Kategorien von Klassen die Klassen der ausgewählten Kategorie bzw. die Klasse und ihre Oberklassen die Kategorien oder Protokolle, in die die Methoden der ausgewählten Klasse logisch gruppiert sind die Methoden (Selektoren) des gewählten Protokolls der Quelltext der ausgewählten Klasse oder Methode der Klassenkommentar

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Öffnet einen Workspace und wertet darin den Befehl WatchMorph new openInWorld. aus (do it).

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Öffnet einen Workspace und wertet darin den Befehl WatchMorph new openInWorld. aus (do it).

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

I

Es erscheint eine Uhr der Klasse WatchMorph.

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

I

Ziel dieses Abschnittes wird es sein, diese Uhr so zu verändern, dass sie (auf Wunsch) im Sekundentakt die Farben von Zeigern und Hintergrund vertauscht.

Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Öffnet einen Workspace und wertet darin den Befehl WatchMorph new openInWorld. aus (do it).

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

I

Es erscheint eine Uhr der Klasse WatchMorph.

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

I

Ziel dieses Abschnittes wird es sein, diese Uhr so zu verändern, dass sie (auf Wunsch) im Sekundentakt die Farben von Zeigern und Hintergrund vertauscht.

Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

I

Technisch bedeutet das, dass für diese ‚besseren‘ Uhren eine neue Unterklasse (z. B. MyWatchMorph) von WatchMorph angelegt werden muss.

Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

MyWatchMorph ist Unterklasse von WatchMorph. Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

MyWatchMorph ist Unterklasse von WatchMorph.

I

Objekte der Klasse MyWatchMorph benötigen ein zusätzliches Attribut farbwechsel, das speichert, ob das Vertauschen der Farben ein- oder ausgeschaltet ist.3

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter

3

Außerdem sollte es auch Methoden geben, um den Wert dieses Attributes auszulesen oder zu verändern, get und set.

Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

MyWatchMorph ist Unterklasse von WatchMorph.

I

Objekte der Klasse MyWatchMorph benötigen ein zusätzliches Attribut farbwechsel, das speichert, ob das Vertauschen der Farben ein- oder ausgeschaltet ist.3

Squeak

I

Ferner benötigen die neuen Uhren eine Methode invertiereFarben, die die Farben vertauscht.

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter

3

Außerdem sollte es auch Methoden geben, um den Wert dieses Attributes auszulesen oder zu verändern, get und set.

Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

MyWatchMorph ist Unterklasse von WatchMorph.

I

Objekte der Klasse MyWatchMorph benötigen ein zusätzliches Attribut farbwechsel, das speichert, ob das Vertauschen der Farben ein- oder ausgeschaltet ist.3

Squeak

I

I

Ferner benötigen die neuen Uhren eine Methode invertiereFarben, die die Farben vertauscht. Zudem müssen vermutlich einige Methoden von WatchMorph angepasst (überschrieben) werden.4

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter

3

Außerdem sollte es auch Methoden geben, um den Wert dieses Attributes auszulesen oder zu verändern, get und set. 4 Konkret werden das initialize zur Instanzerzeugung und step zur Zustandsaktualisierung sein.

Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

MyWatchMorph ist Unterklasse von WatchMorph.

I

Objekte der Klasse MyWatchMorph benötigen ein zusätzliches Attribut farbwechsel, das speichert, ob das Vertauschen der Farben ein- oder ausgeschaltet ist.3

Squeak

I

I

I

Ferner benötigen die neuen Uhren eine Methode invertiereFarben, die die Farben vertauscht. Zudem müssen vermutlich einige Methoden von WatchMorph angepasst (überschrieben) werden.4

Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus

Modellierung in UML: WatchMorph

Arbeitsoberfläche

Initialisierung

MyWatchMorph

Protokoll anlegen Methodendefinition

+initialize() +step()

-farbwechsel: boolesch +invertiereFarben()

Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter

3

Außerdem sollte es auch Methoden geben, um den Wert dieses Attributes auszulesen oder zu verändern, get und set. 4 Konkret werden das initialize zur Instanzerzeugung und step zur Zustandsaktualisierung sein.

Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Erzeugt eine neue Kategorie für dieses Projekt. 5 Squeak I

I

I

I

I

Stellt den Browser auf System Browser um (’browse’). gelber Mausklick auf das Kategorienfenster (Kontextmenü) Wählt den Menüpunkt add item. . . und gebt in dem erscheinenden Fenster den Namen der neuen Kategorie ein, etwa Versuchsklassen. Kategorienamen beginnen stets mit einem Großbuchstaben. . . . auch Klassennamen!

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

5

Kategorien dienen der übersichtlichen Verwaltung der Klassen. Was sinnvollerweise zusammengehört/-passt, sollte in eine gemeinsame Kategorie aufgenommen werden. Für den Anfang empfiehlt es sich, für jedes Projekt eine eigene Kategorie anzulegen, die dann alle neuen Klassen des Projektes enthält.

Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Erzeugt die neue Klasse MyWatchMorph als Unterklasse von WatchMorph. I

I

Wählt die Kategorie aus (roter Mausklick auf den Namen). Ändert die Klassendefinition im Quelltextfenster wie folgt ab:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

WatchMorph subclass: #MyWatchMorph Der Browser einer neuen Klasse instanceVariableNames: ’’ Anlegen Planung Kategorie anlegen classVariableNames: ’’ Klassendefinition poolDictionaries: ’’ Attribute – Instanzvariablen category: ’Versuchsklassen’ Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Erzeugt die neue Klasse MyWatchMorph als Unterklasse von WatchMorph. I

I

Wählt die Kategorie aus (roter Mausklick auf den Namen). Ändert die Klassendefinition im Quelltextfenster wie folgt ab:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

WatchMorph subclass: #MyWatchMorph Der Browser einer neuen Klasse instanceVariableNames: ’’ Anlegen Planung Kategorie anlegen classVariableNames: ’’ Klassendefinition poolDictionaries: ’’ Attribute – Instanzvariablen category: ’Versuchsklassen’ Vererbung und Polymorphismus

I

Speichert die neue Definition mit Alt-s oder gelbem Mausklick in das Fenster und dann Ok .

Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Erzeugt die neue Klasse MyWatchMorph als Unterklasse von WatchMorph. I

I

Wählt die Kategorie aus (roter Mausklick auf den Namen). Ändert die Klassendefinition im Quelltextfenster wie folgt ab:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

WatchMorph subclass: #MyWatchMorph Der Browser einer neuen Klasse instanceVariableNames: ’’ Anlegen Planung Kategorie anlegen classVariableNames: ’’ Klassendefinition poolDictionaries: ’’ Attribute – Instanzvariablen category: ’Versuchsklassen’ Vererbung und Polymorphismus

I

I

Speichert die neue Definition mit Alt-s oder gelbem Mausklick in das Fenster und dann Ok . Im Kommentarfenster könnt ihr die neue Klasse noch dokumentieren. Alt-s!

Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Erzeugt die neue Klasse MyWatchMorph als Unterklasse von WatchMorph. I

I

Wählt die Kategorie aus (roter Mausklick auf den Namen). Ändert die Klassendefinition im Quelltextfenster wie folgt ab:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

WatchMorph subclass: #MyWatchMorph Der Browser einer neuen Klasse instanceVariableNames: ’’ Anlegen Planung Kategorie anlegen classVariableNames: ’’ Klassendefinition poolDictionaries: ’’ Attribute – Instanzvariablen category: ’Versuchsklassen’ Vererbung und Polymorphismus

I

I

6

Speichert die neue Definition mit Alt-s oder gelbem Mausklick in das Fenster und dann Ok . Im Kommentarfenster könnt ihr die neue Klasse noch dokumentieren. Alt-s! 6

Wann immer ihr aufgefordert werdet, eure Initialen einzugeben, tippt euren Namen in das Fenster.

Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Ergänzt die Klassendefinition um eine (boolesche) Instanzvariable farbwechsel, die die Werte wahr oder falsch annehmen soll – je nachdem, ob der Farbwechseleffekt aktiv ist oder nicht. I

Ändert den Quelltext dazu folgendermaßen ab:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image

WatchMorph subclass: #MyWatchMorph instanceVariableNames: ’farbwechsel’ classVariableNames: ’’ poolDictionaries: ’’ category: ’Versuchsklassen’ I

I

I

(lokale) Variablennamen müssen mit einem Kleinbuchstaben beginnen! Der Variablentyp (hier wäre er boolesch bzw. Boolean) wird in Smalltalk nicht festgelegt. Alt-s.

Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager Squeak Arbeitsoberfläche

I

Schaltet den Browser auf Hierarchy Browser um, sodass die Klassenhierarchie angezeigt wird.

Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager Squeak Arbeitsoberfläche

I

Schaltet den Browser auf Hierarchy Browser um, sodass die Klassenhierarchie angezeigt wird.

Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition

I

MyWatchMorph wurde als Unterklasse von WatchMorph angelegt – was bedeutet das?

Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Neben farbwechsel besitzen Objekte der Klasse MyWatchMorph auch sämtliche Attribute der Klasse WatchMorph (und deren Oberklassen), also z. B. color und handscolor.7

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Neben farbwechsel besitzen Objekte der Klasse MyWatchMorph auch sämtliche Attribute der Klasse WatchMorph (und deren Oberklassen), also z. B. color und handscolor.7

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

7

Öffnet einen Workspace, erzeugt mit dem Befehl MyWatchMorph new openInHand. eine Instanz der Klasse und erforscht den Morph, um das zu sehen.

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Neben farbwechsel besitzen Objekte der Klasse MyWatchMorph auch sämtliche Attribute der Klasse WatchMorph (und deren Oberklassen), also z. B. color und handscolor.7

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert

I 7

Noch hat farbwechsel keinen Wert: nil

Öffnet einen Workspace, erzeugt mit dem Befehl MyWatchMorph new openInHand. eine Instanz der Klasse und erforscht den Morph, um das zu sehen.

Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber:

Squeak Arbeitsoberfläche Maustasten

I

Vererbte Methoden können auch modifiziert werden und in der neuen Klasse eine andere Wirkung besitzen als in den Oberklassen: Polymorphismus oder Überschreiben (Override)

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber:

Squeak Arbeitsoberfläche Maustasten

I

I

Vererbte Methoden können auch modifiziert werden und in der neuen Klasse eine andere Wirkung besitzen als in den Oberklassen: Polymorphismus oder Überschreiben (Override) Bei MyWatchMorph ist das bei den Methoden initialize und step notwendig:

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber:

Squeak Arbeitsoberfläche Maustasten

I

I

Vererbte Methoden können auch modifiziert werden und in der neuen Klasse eine andere Wirkung besitzen als in den Oberklassen: Polymorphismus oder Überschreiben (Override) Bei MyWatchMorph ist das bei den Methoden initialize und step notwendig: initialize Bei der Erzeugung einer neuen Instanz der Klasse muss auch dem zusätzlichen Attribut farbwechsel ein Wert zugewiesen werden.

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber:

Squeak Arbeitsoberfläche Maustasten

I

I

Vererbte Methoden können auch modifiziert werden und in der neuen Klasse eine andere Wirkung besitzen als in den Oberklassen: Polymorphismus oder Überschreiben (Override) Bei MyWatchMorph ist das bei den Methoden initialize und step notwendig: initialize Bei der Erzeugung einer neuen Instanz der Klasse muss auch dem zusätzlichen Attribut farbwechsel ein Wert zugewiesen werden. step Bevor das Aussehen der Uhr im Sekundentakt aktualisiert wird, muss ggf. jeweils erst ein Farbwechsel erfolgen.

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel

I

I

Bei der Erzeugung eines neuen Objektes müssen dessen Attributen Werte zugewiesen werden.

Speichern

Das erledigt in der Regel die Methode initialize im Protokoll initialization.

Hallo Welt!

Speichern – Image Speichern – Projekte Speichern – Monticello

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen

I

I

Seht euch im Hierarchy Browser den Quelltext dieser Methode der Klasse WatchMorph an. Was passiert da?

Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

WatchMorph»initialize8 Squeak

1 2 3 4 5 6 7 8 9 10 11

initialize "initialize the state of the receiver" super initialize.

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung

I

Was passiert hier alles?

Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

8

Die Notation Klasse»methodenname ist kein gültiger Smalltalk-Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist.

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

WatchMorph»initialize8 Squeak

1 2 3 4 5 6 7 8 9 10 11

initialize "initialize the state of the receiver" super initialize.

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung

Zeile 1 Methodendeklaration (Name und evtl. Parameter)

Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

8

Die Notation Klasse»methodenname ist kein gültiger Smalltalk-Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist.

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

WatchMorph»initialize8 Squeak

1 2 3 4 5 6 7 8 9 10 11

initialize "initialize the state of the receiver" super initialize.

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung

Zeile 2 Kommentarzeile, wird nicht ausgewertet

Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

8

Die Notation Klasse»methodenname ist kein gültiger Smalltalk-Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist.

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

WatchMorph»initialize8 Squeak

1 2 3 4 5 6 7 8 9 10 11

initialize "initialize the state of the receiver" super initialize.

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung

Zeile 7–9 direkte Wertzuweisungen für Attribute (Instanzvariablen)

Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

8

Die Notation Klasse»methodenname ist kein gültiger Smalltalk-Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist.

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

WatchMorph»initialize8 Squeak

1 2 3 4 5 6 7 8 9 10 11

initialize "initialize the state of the receiver" super initialize.

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung

Zeile 5,6,10 Wertzuweisungen an Instanzvariablen über entsprechende (Set-)Methoden des Objekts (self)

Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

8

Die Notation Klasse»methodenname ist kein gültiger Smalltalk-Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist.

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

WatchMorph»initialize8 Squeak

1 2 3 4 5 6 7 8 9 10 11

initialize "initialize the state of the receiver" super initialize.

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung

Zeile 11 Aufruf einer weiteren Methode des Objekts

Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

8

Die Notation Klasse»methodenname ist kein gültiger Smalltalk-Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist.

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

WatchMorph»initialize8 Squeak

1 2 3 4 5 6 7 8 9 10 11

initialize "initialize the state of the receiver" super initialize.

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung

Zeile 3 Aufruf der Methode initialize, wie sie in der unmittelbaren Oberklasse (super) von WatchMorph definiert ist

Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

8

Die Notation Klasse»methodenname ist kein gültiger Smalltalk-Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist.

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Betrachtet auch die initialize-Methoden der Oberklassen von WatchMorph und macht euch deren Inhalt jeweils klar.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Betrachtet auch die initialize-Methoden der Oberklassen von WatchMorph und macht euch deren Inhalt jeweils klar.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

I

In den Klassen EllipseMorph und Object ist diese Methode nicht eigens definiert, d. h. es wird die entsprechende Methode der jeweiligen Oberklasse aufgerufen.

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Betrachtet auch die initialize-Methoden der Oberklassen von WatchMorph und macht euch deren Inhalt jeweils klar.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

I

I

In den Klassen EllipseMorph und Object ist diese Methode nicht eigens definiert, d. h. es wird die entsprechende Methode der jeweiligen Oberklasse aufgerufen. In der obersten Klasse ProtoObject enthält die Methodendefinition lediglich eine Kommentarzeile, d. h. es passiert gar nichts. Der Selektor ist lediglich ein Platzhalter, der gewährleistet, dass alle Objekte sämtlicher Unterklassen die Nachricht initialize verstehen, was auch immer sie dann tun.

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Betrachtet auch die initialize-Methoden der Oberklassen von WatchMorph und macht euch deren Inhalt jeweils klar.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

I

I

I

In den Klassen EllipseMorph und Object ist diese Methode nicht eigens definiert, d. h. es wird die entsprechende Methode der jeweiligen Oberklasse aufgerufen.

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse

In der obersten Klasse ProtoObject enthält die Methodendefinition lediglich eine Kommentarzeile, d. h. es passiert gar nichts. Der Selektor ist lediglich ein Platzhalter, der gewährleistet, dass alle Objekte sämtlicher Unterklassen die Nachricht initialize verstehen, was auch immer sie dann tun.

Planung

Wie sollte wohl die initialize-Methode der neuen Klasse MyWatchMorph aussehen? Notiert den vermutlichen Quelltext!

Methoden mit Parameter

Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert

Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Eröffnet ein neues Protokoll für die Methode MyWatchMorph»initialize. 9

Squeak Arbeitsoberfläche Maustasten

I

I

I

I

gelber Mausklick auf das Protokollfenster (Kontextmenü) Wählt den Menüpunkt new category. . . und im nächsten Menü das Protokoll initialization. Wie Methodennamen beginnen auch Protokollnamen stets mit einem Kleinbuchstaben. Aktiviert dieses Protokoll (roter Mausklick auf den Protokollnamen im Browser).

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter

9

Protokolle dienen der übersichtlichen Verwaltung der Methoden. Was sinnvollerweise zusammengehört/-passt, sollte in eine gemeinsame Kategorie aufgenommen werden. Für die meisten Methoden passt eine der vorgeschlagenen Standardkategorien.

Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Programmiert die neue Methode initialize. I

Nach Wahl eines Protokolls (roter Mausklick auf den Namen) erscheint im Quelltextfenster eine Vorlage (template) für neue Methoden:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel

message selector and argument names "comment stating purpose of message"

Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

| temporary variable names | statements

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen

I

Ersetzt die Vorlage durch folgenden Quelltext, den ihr per Copy&Paste weitgehend aus WatchMorph»initialize übernehmen könnt: 10

Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen

initialize "initialize the state of the receiver" super initialize.

Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

farbwechsel := true

Methodensuche Übung

I 10

Alt-s.

Zuordnungspfeil als Unterstrich

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Ein wichtiges Prinzip objektorientierter Programmierung ist die Datenkapselung: I

I

Die Werte (privater) Attribute von Objekten dürfen von außen nicht einfach durch direkte Wertzuweisungen verändert werden können. Stattdessen gehören zu jedem Attribut zwei (öffentliche) Methoden: Get-Methode liefert als Ergebnis den aktuellen Attributwert Set-Methode verändert den Wert des Attributs

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Ein wichtiges Prinzip objektorientierter Programmierung ist die Datenkapselung: I

I

I

Die Werte (privater) Attribute von Objekten dürfen von außen nicht einfach durch direkte Wertzuweisungen verändert werden können. Stattdessen gehören zu jedem Attribut zwei (öffentliche) Methoden: Get-Methode liefert als Ergebnis den aktuellen Attributwert Set-Methode verändert den Wert des Attributs

In Smalltalk haben diese Methoden in der Regel (fast) denselben Namen wie das Attribut. I

I I

in unserem Beispiel: Instanzvariable farbwechsel Get-Methode farbwechsel Set-Methode farbwechsel: Beachte den Doppelpunkt! Diese Methoden gehören zum Protokoll accessing.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Zunächst die Get-Methode, eine Methode mit Rückgabewert

Squeak Arbeitsoberfläche Maustasten

1 2

farbwechsel ↑farbwechsel

Weltmenüs Halomenüs Tastaturkürzel Speichern

Zeile 1 Methodendeklaration: der Methodenname (Selektor ) Zeile 2 Als Ergebnis wird an der Wert der Variablen farbwechsel an den Sender der Nachricht zurückgegeben.11

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

11

Der Rückgabepfeil wird als ‚Dach‘ (’ˆ’) eingegeben.

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Zunächst die Get-Methode, eine Methode mit Rückgabewert

Squeak Arbeitsoberfläche Maustasten

1 2

farbwechsel ↑farbwechsel

Weltmenüs Halomenüs Tastaturkürzel Speichern

Zeile 1 Methodendeklaration: der Methodenname (Selektor ) Zeile 2 Als Ergebnis wird an der Wert der Variablen farbwechsel an den Sender der Nachricht zurückgegeben.11 I

Wird bei einer Methode kein expliziter Rückgabewert definiert, liefert die Methode standardmäßig das aktuelle Objekt als Ergebnis zurück (ˆself).

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

11

Der Rückgabepfeil wird als ‚Dach‘ (’ˆ’) eingegeben.

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun die Set-Methode, eine Methode mit Parameter Squeak

1 2 3 4 5 6

farbwechsel: boolWert "Setzt bei boolescher Eingabe das farbwechsel-Verhalten"

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

(boolWert basicType = #Boolean) ifTrue: [farbwechsel := boolWert]

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun die Set-Methode, eine Methode mit Parameter Squeak

1 2 3 4 5 6

farbwechsel: boolWert "Setzt bei boolescher Eingabe das farbwechsel-Verhalten"

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

(boolWert basicType = #Boolean) ifTrue: [farbwechsel := boolWert]

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

Zeile 1 Methodendeklaration: der Selektor zusammen mit einem (frei gewählten) Namen eines Parameters, der der Methode beim Aufruf übergeben werden muss

Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun die Set-Methode, eine Methode mit Parameter Squeak

1 2 3 4 5 6

farbwechsel: boolWert "Setzt bei boolescher Eingabe das farbwechsel-Verhalten"

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

(boolWert basicType = #Boolean) ifTrue: [farbwechsel := boolWert]

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

Zeile 1 Methodendeklaration: der Selektor zusammen mit einem (frei gewählten) Namen eines Parameters, der der Methode beim Aufruf übergeben werden muss Zeile 2–3 Kommentarzeilen zur Dokumentation

Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun die Set-Methode, eine Methode mit Parameter Squeak

1 2 3 4 5 6

farbwechsel: boolWert "Setzt bei boolescher Eingabe das farbwechsel-Verhalten"

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

(boolWert basicType = #Boolean) ifTrue: [farbwechsel := boolWert]

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

Zeile 1 Methodendeklaration: der Selektor zusammen mit einem (frei gewählten) Namen eines Parameters, der der Methode beim Aufruf übergeben werden muss Zeile 2–3 Kommentarzeilen zur Dokumentation Zeile 5 eine Vorsichtsmaßnahme: Hier wird geprüft, ob der übergebene Parameter boolWert tatsächlich ein boolescher Wert (also true oder false) ist. 12

Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun die Set-Methode, eine Methode mit Parameter Squeak

1 2 3 4 5 6

farbwechsel: boolWert "Setzt bei boolescher Eingabe das farbwechsel-Verhalten"

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

(boolWert basicType = #Boolean) ifTrue: [farbwechsel := boolWert]

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

Zeile 1 Methodendeklaration: der Selektor zusammen mit einem (frei gewählten) Namen eines Parameters, der der Methode beim Aufruf übergeben werden muss Zeile 2–3 Kommentarzeilen zur Dokumentation Zeile 5 eine Vorsichtsmaßnahme: Hier wird geprüft, ob der übergebene Parameter boolWert tatsächlich ein boolescher Wert (also true oder false) ist. 12

Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

12

Das ist notwendig, weil Variablen (hier farbwechsel) beliebige Werte annehmen können, was gefährlich sein kann.

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun die Set-Methode, eine Methode mit Parameter Squeak

1 2 3 4 5 6

farbwechsel: boolWert "Setzt bei boolescher Eingabe das farbwechsel-Verhalten"

Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern

(boolWert basicType = #Boolean) ifTrue: [farbwechsel := boolWert]

Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

Zeile 1 Methodendeklaration: der Selektor zusammen mit einem (frei gewählten) Namen eines Parameters, der der Methode beim Aufruf übergeben werden muss Zeile 2–3 Kommentarzeilen zur Dokumentation Zeile 5 eine Vorsichtsmaßnahme: Hier wird geprüft, ob der übergebene Parameter boolWert tatsächlich ein boolescher Wert (also true oder false) ist. 12 Zeile 6 Nur wenn die Bedingung aus Zeile 5 wahr ist, wird dem Attribut farbwechsel der Wert des Parameters boolWert zugewiesen. 12

Das ist notwendig, weil Variablen (hier farbwechsel) beliebige Werte annehmen können, was gefährlich sein kann.

Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Um die Klasse MyWatchMorph soweit zu testen, könnt ihr ein Transcript und einen Workspace öffnen und im Workspace folgende Befehlssequenz ausführen (do it):

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image

testuhr := MyWatchMorph new. testuhr openInWorld.

Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

Transcript clear; show: testuhr farbwechsel; cr.

Anlegen einer neuen Klasse Planung Kategorie anlegen

testuhr farbwechsel: 5. Transcript show: testuhr farbwechsel; testuhr farbwechsel: false. Transcript show: testuhr farbwechsel; testuhr farbwechsel: 5. Transcript show: testuhr farbwechsel; testuhr farbwechsel: true. Transcript show: testuhr farbwechsel;

Klassendefinition

cr. cr.

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

cr.

Methoden mit Rückgabewert Methoden mit Parameter

cr.

Methoden mit temporären Variablen Methodensuche

Statt 5 könntet ihr auch sonst etwas schreiben.

Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Die Methode invertiereFarben (Protokoll visual properties), die die Farben von Zeigern und Hintergrund vertauscht, benötigt eine temporäre Variable (hFarbe), die nur innerhalb der Methode bekannt ist, um eine der beiden Farben zwischenzuspeichern:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

1 2 3 4 5 6 7

invertiereFarben "vertauscht Zeiger- und Hintergrundfarbe" | hFarbe | self farbwechsel ifTrue: [hFarbe := self color. self color: handsColor. self handsColor: hFarbe]

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Die Methode invertiereFarben (Protokoll visual properties), die die Farben von Zeigern und Hintergrund vertauscht, benötigt eine temporäre Variable (hFarbe), die nur innerhalb der Methode bekannt ist, um eine der beiden Farben zwischenzuspeichern:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

1 2 3 4 5 6 7

invertiereFarben "vertauscht Zeiger- und Hintergrundfarbe" | hFarbe | self farbwechsel ifTrue: [hFarbe := self color. self color: handsColor. self handsColor: hFarbe]

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

Zeile 3 Temporäre Variablen müssen am Beginn des Skripts zwischen senkrechten Strichen deklariert werden.

Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Die Methode invertiereFarben (Protokoll visual properties), die die Farben von Zeigern und Hintergrund vertauscht, benötigt eine temporäre Variable (hFarbe), die nur innerhalb der Methode bekannt ist, um eine der beiden Farben zwischenzuspeichern:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

1 2 3 4 5 6 7

invertiereFarben "vertauscht Zeiger- und Hintergrundfarbe" | hFarbe | self farbwechsel ifTrue: [hFarbe := self color. self color: handsColor. self handsColor: hFarbe]

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

Zeile 4 Als Bedingung wird hier die Get-Methode MyWatchMorph»farbwechsel ausgewertet, die einen booleschen Wahrheitswert liefert.

Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Die Methode invertiereFarben (Protokoll visual properties), die die Farben von Zeigern und Hintergrund vertauscht, benötigt eine temporäre Variable (hFarbe), die nur innerhalb der Methode bekannt ist, um eine der beiden Farben zwischenzuspeichern:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

1 2 3 4 5 6 7

invertiereFarben "vertauscht Zeiger- und Hintergrundfarbe" | hFarbe | self farbwechsel ifTrue: [hFarbe := self color. self color: handsColor. self handsColor: hFarbe]

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

Zeile 5 Der Hilfsvariablen hFarbe wird das Ergebnis der Get-Methode MyWatchMorph»color (Hintergrundfarbe) zugewiesen. (direkte Wertzuweisung, weil es zu temporären Variablen keine Set-Methoden gibt)

Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Die Methode invertiereFarben (Protokoll visual properties), die die Farben von Zeigern und Hintergrund vertauscht, benötigt eine temporäre Variable (hFarbe), die nur innerhalb der Methode bekannt ist, um eine der beiden Farben zwischenzuspeichern:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

1 2 3 4 5 6 7

invertiereFarben "vertauscht Zeiger- und Hintergrundfarbe" | hFarbe | self farbwechsel ifTrue: [hFarbe := self color. self color: handsColor. self handsColor: hFarbe]

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

Zeile 6,7 Mit den Set-Methoden MyWatchMorph»color: und MyWatchMorph»handsColor: werden den Attributen neue Werte zugewiesen.

Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Die Methode invertiereFarben (Protokoll visual properties), die die Farben von Zeigern und Hintergrund vertauscht, benötigt eine temporäre Variable (hFarbe), die nur innerhalb der Methode bekannt ist, um eine der beiden Farben zwischenzuspeichern:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

1 2 3 4 5 6 7

invertiereFarben "vertauscht Zeiger- und Hintergrundfarbe" | hFarbe | self farbwechsel ifTrue: [hFarbe := self color. self color: handsColor. self handsColor: hFarbe]

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

Zeile 6,7 Da zu hFarbe und handsColor keine Get-Methoden existieren, werden direkt die Variablenwerte übergeben. (kein self davor!)

Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun muss nur noch die Methode step13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

1 2 3

step self invertiereFarben. self changed

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

13

Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step!

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun muss nur noch die Methode step13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

1 2 3

step self invertiereFarben. self changed

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

I

Aber was bedeutet die Nachricht changed in Zeile 3?

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

13

Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step!

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun muss nur noch die Methode step13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

1 2 3

step self invertiereFarben. self changed

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

I

I

Aber was bedeutet die Nachricht changed in Zeile 3? Es gibt zwei Werkzeuge, das herauszufinden:

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

13

Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step!

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun muss nur noch die Methode step13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

1 2 3

step self invertiereFarben. self changed

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

I

I

Aber was bedeutet die Nachricht changed in Zeile 3? Es gibt zwei Werkzeuge, das herauszufinden: I

die Schaltflächen senders und implementors im (am besten Hierarchy ) Browser

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

13

Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step!

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Nun muss nur noch die Methode step13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden:

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs

1 2 3

step self invertiereFarben. self changed

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt!

I

I

Aber was bedeutet die Nachricht changed in Zeile 3? Es gibt zwei Werkzeuge, das herauszufinden: I

I

die Schaltflächen senders und implementors im (am besten Hierarchy ) Browser den Methoden-Sucher (Selector Browser) in der Klappe Werkzeugkiste

Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen

13

Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step!

Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

senders und implementors im (Hierarchy ) Browser I

I

Wählt eine Methode im Browser aus, z. B. MyWatchMorph»step. Bei Klick auf eine der beiden Schaltflächen erhaltet ihr ein Auswahlmenü mit allen Selektoren (z. B. changed), die in dieser Methode auftreten.

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser

senders liefert eine Liste aller Methoden von Klassen, in denen der ausgewählte Selektor aufgerufen wird. implementors liefert eine Liste aller Klassen, in denen eine Methode mit dem Selektor als Name definiert wird. I

Sucht in der erhaltenen Liste nach den Oberklassen der aktuellen Klasse, z. B. Morph»changed und Object»changed.

Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text

Squeak Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

14

oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld)

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text

Squeak Arbeitsoberfläche Maustasten

I

Im Suchfenster lassen sich beliebige Bruchstücke von Selektoren eingeben14

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

14

oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld)

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text

Squeak Arbeitsoberfläche Maustasten

I

Im Suchfenster lassen sich beliebige Bruchstücke von Selektoren eingeben14

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello

I

Auswahl eines Selektors liefert eine Liste passender Klassen und Methoden.

Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

14

oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld)

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text

Squeak Arbeitsoberfläche Maustasten

I

Im Suchfenster lassen sich beliebige Bruchstücke von Selektoren eingeben14

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello

I

Auswahl eines Selektors liefert eine Liste passender Klassen und Methoden.

Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Gelber Mausklick auf die Selektorenliste liefert ein Kontextmenü zur Einschränkung auf senders oder implementors.

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

14

oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld)

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text

Squeak Arbeitsoberfläche Maustasten

I

Im Suchfenster lassen sich beliebige Bruchstücke von Selektoren eingeben14

Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello

I

Auswahl eines Selektors liefert eine Liste passender Klassen und Methoden.

Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Gelber Mausklick auf die Selektorenliste liefert ein Kontextmenü zur Einschränkung auf senders oder implementors.

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung

I

Bei Klick auf eine der Methoden öffnet sich ein Systembrowser.

Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

14

oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld)

1.12 MyWatchMorph – eine neue Klasse

Squeak Markus Schlager

I

Was noch wünschenswert wäre: Squeak Arbeitsoberfläche Maustasten

I

Falls jemanden das ‚Geblinke‘ der Uhr

Weltmenüs Halomenüs

I

-Menü-Halo stört, sollte er über das die Möglichkeit haben, den Farbwechsel aus- oder auch wieder anzuschalten. Noch fehlt ein entsprechender Eintrag im Menü.

Tastaturkürzel Speichern Speichern – Image Speichern – Projekte Speichern – Monticello Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition

I

Seht euch die Methoden zum Protokoll menus der Klasse WatchMorph an – insbesondere WatchMorph»addCustomMenuItems:hand: und die toggle-Methoden – und spezifiziert/ergänzt sie für MyWatchMorph geeignet.

Attribute – Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Variablen Methodensuche Übung

Squeak Markus Schlager Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Teil II

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

Smalltalk II

Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

Überblick

Markus Schlager

Smalltalk I – die Entwicklungsumgebung Squeak

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

Smalltalk II – Grundzüge der Programmiersprache

Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen

Anhang

Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

Gliederung

Markus Schlager

Smalltalk II – Grundzüge der Programmiersprache Das Objekt-Modell von Squeak Instanzen und Variablen – Wertzuweisung new, new: und initialize Nachrichten an Instanzen Priorität/Rangfolge von Nachrichten Befehlssequenzen und Blöcke Variablen Literale Verzweigung – bedingte Anweisungen Bedingte Wiederholung Zählschleifen – immer das gleiche Intervalldurchlauf – fast das gleiche Übungen – Turtle-Grafik Kollektionen und Iteratoren

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.1 Das Objekt-Modell von Squeak

Markus Schlager

I I

I

I I

In Smalltalk ist alles ein Objekt. Jedes Objekt besitzt private Daten – die Werte seiner Attribute bzw. Instanzvariablen. Die privaten Daten können von außen nur durch Aufruf von öffentlichen Methoden verändert oder ausgelesen werden (z. B. set- und get-Methoden). Jedes Objekt ist Instanz einer Klasse. In einer Klasse wird durch Instanzvariablen die Struktur und durch Methodendefinitionen das Verhalten ihrer Instanzen festgelegt.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.1 Das Objekt-Modell von Squeak

Markus Schlager

I I

I

I I

I

I

I

In Smalltalk ist alles ein Objekt. Jedes Objekt besitzt private Daten – die Werte seiner Attribute bzw. Instanzvariablen. Die privaten Daten können von außen nur durch Aufruf von öffentlichen Methoden verändert oder ausgelesen werden (z. B. set- und get-Methoden). Jedes Objekt ist Instanz einer Klasse. In einer Klasse wird durch Instanzvariablen die Struktur und durch Methodendefinitionen das Verhalten ihrer Instanzen festgelegt. Jede Klasse erbt Verhalten und Struktur von einer einzigen Oberklasse. Auch Klassen sind Instanzen – Instanzen sogenannter Metaklassen. Objekte kommunizieren ausschließlich durch Nachrichten (Methodenaufrufe) miteinander.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.2 Instanzen und Variablen – Wertzuweisung

Markus Schlager

I

Instanzen werden in der Regel durch die Nachricht new an die Klasse erzeugt, z. B.15

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize

MyWatchMorph new.

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

15

z. B. im Workspace oder innerhalb einer Methodendefinition

Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.2 Instanzen und Variablen – Wertzuweisung

Markus Schlager

I

Instanzen werden in der Regel durch die Nachricht new an die Klasse erzeugt, z. B.15

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize

MyWatchMorph new.

Nachrichten Arithmetik Vergleiche

I

Um auf die Instanz zugreifen zu können, sollte sie als Wert einer Variablen zugewiesen werden:16

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

testUhr := MyWatchMorph new.

Nichtprivate Variablen Literale Zahlen Zeichen

oder:17

Zeichenketten Symbole

testUhr ← MyWatchMorph new.

Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

15

Zählschleifen

16

Übungen – Turtle-Grafik

z. B. im Workspace oder innerhalb einer Methodendefinition Probiert das in einem Workspace aus! (Alt-d) 17 ’←’ wird als Unterstrich ’_’ eingegeben.

Intervalldurchlauf

Kollektionen und Iteratoren

Squeak

2.2 Instanzen und Variablen – Wertzuweisung

Markus Schlager

I

Instanzen werden in der Regel durch die Nachricht new an die Klasse erzeugt, z. B.15

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize

MyWatchMorph new.

Nachrichten Arithmetik Vergleiche

I

Um auf die Instanz zugreifen zu können, sollte sie als Wert einer Variablen zugewiesen werden:16

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

testUhr := MyWatchMorph new.

Nichtprivate Variablen Literale Zahlen Zeichen

oder:17

Zeichenketten Symbole

testUhr ← MyWatchMorph new.

Arrays Verzweigung Bedingungen

I

:= bzw. ← ist der Zuweisungsoperator.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

15

Zählschleifen

16

Übungen – Turtle-Grafik

z. B. im Workspace oder innerhalb einer Methodendefinition Probiert das in einem Workspace aus! (Alt-d) 17 ’←’ wird als Unterstrich ’_’ eingegeben.

Intervalldurchlauf

Kollektionen und Iteratoren

Squeak

2.2 Instanzen und Variablen – Wertzuweisung

Markus Schlager

I

Instanzen werden in der Regel durch die Nachricht new an die Klasse erzeugt, z. B.15

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize

MyWatchMorph new.

Nachrichten Arithmetik Vergleiche

I

Um auf die Instanz zugreifen zu können, sollte sie als Wert einer Variablen zugewiesen werden:16

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

testUhr := MyWatchMorph new.

Nichtprivate Variablen Literale Zahlen Zeichen

oder:17

Zeichenketten Symbole

testUhr ← MyWatchMorph new.

Arrays Verzweigung Bedingungen

I

:= bzw. ← ist der Zuweisungsoperator.

I

(lokale) Variablennamen müssen mit einem Kleinbuchstaben beginnen.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

15

Zählschleifen

16

Übungen – Turtle-Grafik

z. B. im Workspace oder innerhalb einer Methodendefinition Probiert das in einem Workspace aus! (Alt-d) 17 ’←’ wird als Unterstrich ’_’ eingegeben.

Intervalldurchlauf

Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben:

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben:

Smalltalk Objekt-Modell Instanzen und Variablen

Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable."

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

↑ self basicNew initialize

Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben:

Smalltalk Objekt-Modell Instanzen und Variablen

Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable."

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

↑ self basicNew initialize

Private Variablen Nichtprivate Variablen Literale

I

Was passiert beim Aufruf der Methode?

Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben:

Smalltalk Objekt-Modell Instanzen und Variablen

Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable."

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

↑ self basicNew initialize

Private Variablen Nichtprivate Variablen Literale

I

Was passiert beim Aufruf der Methode? I

Die jeweilige Klasse (self), z. B. MyWatchMorph, erhält die Nachricht basicNew.

Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben:

Smalltalk Objekt-Modell Instanzen und Variablen

Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable."

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

↑ self basicNew initialize

Private Variablen Nichtprivate Variablen Literale

I

Was passiert beim Aufruf der Methode? I

I

Die jeweilige Klasse (self), z. B. MyWatchMorph, erhält die Nachricht basicNew. self basicNew ist die neue Instanz, die dadurch entsteht, also z. B. testUhr.

Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben:

Smalltalk Objekt-Modell Instanzen und Variablen

Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable."

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

↑ self basicNew initialize

Private Variablen Nichtprivate Variablen Literale

I

Was passiert beim Aufruf der Methode? I

I

I

Die jeweilige Klasse (self), z. B. MyWatchMorph, erhält die Nachricht basicNew. self basicNew ist die neue Instanz, die dadurch entsteht, also z. B. testUhr. Diese Instanz (self basicNew) erhält nun die Nachricht initialize, mit der z. B. die Werte der Instanzvariablen gesetzt werden. 18

Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf

18

Das habt ihr bei MyWatchMorph gesehen und selbst verändert.

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

Bei manchen Objekten – etwa Listen oder Zeichenketten – muss man bei der Erzeugung die Anzahl ihrer Elemente angeben.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

Bei manchen Objekten – etwa Listen oder Zeichenketten – muss man bei der Erzeugung die Anzahl ihrer Elemente angeben.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

I

Solche Instanzen werden mit new: erzeugt:

Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

Bei manchen Objekten – etwa Listen oder Zeichenketten – muss man bei der Erzeugung die Anzahl ihrer Elemente angeben.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

I

Solche Instanzen werden mit new: erzeugt:

Arithmetik Vergleiche Logik

Behavior>>new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested."

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten

↑ (self basicNew: sizeRequested) initialize

Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.3 new, new: und initialize

Markus Schlager

I

Bei manchen Objekten – etwa Listen oder Zeichenketten – muss man bei der Erzeugung die Anzahl ihrer Elemente angeben.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

I

Solche Instanzen werden mit new: erzeugt:

Arithmetik Vergleiche Logik

Behavior>>new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested."

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten

↑ (self basicNew: sizeRequested) initialize

Symbole Arrays Verzweigung

I

Beispielsweise entsteht mit

Bedingungen Bedingte Anweisungen Übungen

testWort := String new: 10.

eine zehn Zeichen lange Zeichenkette testWort.19 19

testWort besteht erst einmal nur aus zehn Platzhaltern. testWort at:1 put:$S setzt z. B. das erste Zeichen auf ’S’.

Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

I

Instanzen können Nachrichten empfangen.

I

Es gibt drei Arten von Nachrichten.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

I

Instanzen können Nachrichten empfangen.

I

Es gibt drei Arten von Nachrichten.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

Unäre Nachricht (ohne Argument)

Arithmetik Vergleiche Logik

empfaenger methodenName.

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

20

Nichtprivate Variablen Literale Zahlen

testUhr openInHand. Time now. Date today. 5 squared.

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf

20

Die Bspe. zu Daten und Zahlen wertet ihr besser mit Alt-p aus (print it)

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Schlüsselwortnachricht (mit Argument)

Smalltalk Objekt-Modell

empfaenger mWort1: wert1 mWort2: wert2.

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

21

Vergleiche Logik Priorität von Nachrichten

testUhr farbwechsel: false. testUhr x: 100 y:130. testUhr setColor: Color yellow borderWidth: 10 borderColor: Color blue. 5 raisedTo: 3.

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf

21

Natürlich sind yellow und blue auch nur (unäre) Nachrichten an Instanzen der Klasse Color.

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Schlüsselwortnachricht (mit Argument)

Smalltalk Objekt-Modell

empfaenger mWort1: wert1 mWort2: wert2.

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

21

Vergleiche Logik Priorität von Nachrichten

testUhr farbwechsel: false. testUhr x: 100 y:130. testUhr setColor: Color yellow borderWidth: 10 borderColor: Color blue. 5 raisedTo: 3.

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen

I I

I 21

Beachtet die Doppelpunkte! Methodennamen können aus beliebig vielen Teilwörtern bestehen. Am Ende jeder Nachricht steht ein Punkt.

Natürlich sind yellow und blue auch nur (unäre) Nachrichten an Instanzen der Klasse Color.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Binäre Nachricht (zwei Objekte)

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize

empfaenger binäreNachricht parameterObjekt.

Nachrichten Arithmetik Vergleiche Logik

I

Binäre Nachrichten haben die Gestalt von arithmetischen Operatoren.

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager Smalltalk

Binäre Nachricht (zwei Objekte)

Objekt-Modell Instanzen und Variablen new, new: und initialize

empfaenger binäreNachricht parameterObjekt.

Nachrichten Arithmetik Vergleiche Logik

I

Binäre Nachrichten haben die Gestalt von arithmetischen Operatoren.

Arithmetik: + 15+4 15-4 15*4 15/4 15//4 15\\4

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen

-

*

/

//

\\

22

"Addition" "Subtraktion" "Produkt" "Division" "Division (ganzzahlig)" "Divisionsrest"

Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf

22

Die Bspe. zu binären Nachrichten wertet ihr am besten mit Alt-p aus (print it)

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Vergleich:
=

=

~=

==

~~ Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Vergleich: < >= = ~= == ~~ I Vergleichsoperatoren liefern als Ergebnisse die booleschen Werte true oder false.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Vergleich: < >= = ~= == ~~ I Vergleichsoperatoren liefern als Ergebnisse die booleschen Werte true oder false. I Erzeugt im Workspace erst einmal zwei Variablen mit der gleichen Zeichenkette als Wert (Alt-d):

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

a := ’Squeak’. b := ’Squeak’.

Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Vergleich: < >= = ~= == ~~ I Vergleichsoperatoren liefern als Ergebnisse die booleschen Werte true oder false. I Erzeugt im Workspace erst einmal zwei Variablen mit der gleichen Zeichenkette als Wert (Alt-d):

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

a := ’Squeak’. b := ’Squeak’.

Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen

Vergleich von Werten

Zeichenketten Symbole Arrays

15 15 15 15 15 a a 15

< 4 "kleiner als" 4 "groesser als" >= 4 "groesser oder gleich" = 4 "gleich" = b = ’Scratch’ ~= 4 "nicht gleich"

Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Vergleich:
=

=

~=

==

~~ Smalltalk Objekt-Modell

a := ’Squeak’. b := ’Squeak’.

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

Vergleich von Identitäten

Vergleiche Logik Priorität von Nachrichten

15 == 4 "identisch gleich " 15 == 15 " gleiches Objekt" ’Squeak’ == ’Squeak’ a == b "!!!" 15 ~~ 4 "nicht das gleiche Objekt" 15 ~~ 15 a ~~ b

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Vergleich:
=

=

~=

==

~~ Smalltalk Objekt-Modell

a := ’Squeak’. b := ’Squeak’.

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

Vergleich von Identitäten

Vergleiche Logik Priorität von Nachrichten

15 == 4 "identisch gleich " 15 == 15 " gleiches Objekt" ’Squeak’ == ’Squeak’ a == b "!!!" 15 ~~ 4 "nicht das gleiche Objekt" 15 ~~ 15 a ~~ b

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen

I

Überrascht? – Auch Variablen sind eigenständige Objekte!

Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Vergleich:
=

=

~=

==

~~ Smalltalk Objekt-Modell

a := ’Squeak’. b := ’Squeak’.

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

Vergleich von Identitäten

Vergleiche Logik Priorität von Nachrichten

15 == 4 "identisch gleich " 15 == 15 " gleiches Objekt" ’Squeak’ == ’Squeak’ a == b "!!!" 15 ~~ 4 "nicht das gleiche Objekt" 15 ~~ 15 a ~~ b

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen

I I

Überrascht? – Auch Variablen sind eigenständige Objekte! Zunächst werdet ihr aber vor allem den Vergleich von Werten benötigen.

Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Logik: &

| Smalltalk

true true false false true true false false

& & & & | | | |

true false true false true false true false

"logisches Und (AND)"

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

"logisches Oder (OR)"

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Logik: &

| Smalltalk

true true false false true true false false

& & & & | | | |

true false true false true false true false

"logisches Und (AND)"

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

"logisches Oder (OR)"

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

I

Wie in der Mathematik üblich, ist ein Oder stets ein Oder auch.

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.4 Nachrichten an Instanzen

Markus Schlager

Logik: &

| Smalltalk

true true false false true true false false

& & & & | | | |

true false true false true false true false

"logisches Und (AND)"

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

"logisches Oder (OR)"

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

I

Wie in der Mathematik üblich, ist ein Oder stets ein Oder auch.

Zeichen Zeichenketten Symbole Arrays Verzweigung

Sonstiges: ,

@

->

23 24

Bedingungen

Bedingte Anweisungen Übungen

’Haus’,’halt’ 100@200

Existenztest "Konkatenation (Aneinanderhaengen)" Bedingte Wiederholung "Ein Punkt mit x- und y-Koordinate" Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf

23

Erforscht diese Beispiele: Auswählen und Alt-i 24 -> Assoziation, vielleicht später . . .

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.5 Priorität/Rangfolge von Nachrichten

Markus Schlager

Priorität von Nachrichten

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke

Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript

show: ’Haus’ , ’halt’. cr. "Neue Zeile im Transcript" show: 16 sqrt. show: 16 sqrt negated. show: 16 + 3. show: 16 + 3 squared. show: 16 + 3 * 2. "!" show: 16 + (3 * 2). show: 16 + 3 squared * 2. show: 4 raisedTo: 9. "!!!" show: (4 raisedTo: 9). show: (4 raisedTo: 9 - 7). show: (4 sqrt raisedTo: 9). show: (4 raisedTo: 9 sqrt).

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.5 Priorität/Rangfolge von Nachrichten

Markus Schlager

Priorität von Nachrichten I

Abarbeitung von links nach rechts, aber

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke

Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript

show: ’Haus’ , ’halt’. cr. "Neue Zeile im Transcript" show: 16 sqrt. show: 16 sqrt negated. show: 16 + 3. show: 16 + 3 squared. show: 16 + 3 * 2. "!" show: 16 + (3 * 2). show: 16 + 3 squared * 2. show: 4 raisedTo: 9. "!!!" show: (4 raisedTo: 9). show: (4 raisedTo: 9 - 7). show: (4 sqrt raisedTo: 9). show: (4 raisedTo: 9 sqrt).

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.5 Priorität/Rangfolge von Nachrichten

Markus Schlager

Priorität von Nachrichten I

Abarbeitung von links nach rechts, aber

I

Unär vor Binär vor Schlüsselwort

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke

Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript

show: ’Haus’ , ’halt’. cr. "Neue Zeile im Transcript" show: 16 sqrt. show: 16 sqrt negated. show: 16 + 3. show: 16 + 3 squared. show: 16 + 3 * 2. "!" show: 16 + (3 * 2). show: 16 + 3 squared * 2. show: 4 raisedTo: 9. "!!!" show: (4 raisedTo: 9). show: (4 raisedTo: 9 - 7). show: (4 sqrt raisedTo: 9). show: (4 raisedTo: 9 sqrt).

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.5 Priorität/Rangfolge von Nachrichten

Markus Schlager

Priorität von Nachrichten I

Abarbeitung von links nach rechts, aber

I

Unär vor Binär vor Schlüsselwort

I

Änderung der Reihenfolge durch Klammern ()

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke

Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript Transcript

show: ’Haus’ , ’halt’. cr. "Neue Zeile im Transcript" show: 16 sqrt. show: 16 sqrt negated. show: 16 + 3. show: 16 + 3 squared. show: 16 + 3 * 2. "!" show: 16 + (3 * 2). show: 16 + 3 squared * 2. show: 4 raisedTo: 9. "!!!" show: (4 raisedTo: 9). show: (4 raisedTo: 9 - 7). show: (4 sqrt raisedTo: 9). show: (4 raisedTo: 9 sqrt).

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Eine Abfolge mehrerer Nachrichten wird als Sequenz bezeichnet.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Eine Abfolge mehrerer Nachrichten wird als Sequenz bezeichnet.

Smalltalk Objekt-Modell Instanzen und Variablen

I

Betrachtet z. B. die Initialisierungsmethode der Klasse WatchMorph:

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten

WatchMorph>>initialize

Sequenzen und Blöcke Variablen Private Variablen

super initialize. self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Eine Abfolge mehrerer Nachrichten wird als Sequenz bezeichnet.

Smalltalk Objekt-Modell Instanzen und Variablen

I

Betrachtet z. B. die Initialisierungsmethode der Klasse WatchMorph:

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten

WatchMorph>>initialize

Sequenzen und Blöcke Variablen Private Variablen

super initialize. self handsColor: Color red. self centerColor: Color gray. romanNumerals := false. antialias := false. fontName := ’NewYork’. self extent: 130 @ 130. self start

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung

I

Die Nachrichten innerhalb einer Sequenz werden durch einen Punkt voneinander getrennt.

Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Flussdiagramm Start

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

initialisiere wie Oberklasse

Arithmetik Vergleiche Logik

setze Zeigerfarbe rot

Priorität von Nachrichten Sequenzen und Blöcke Variablen

setze Zentrumsfarbe grau

Private Variablen Nichtprivate Variablen Literale Zahlen

schalte römische Ziffern aus

Zeichen Zeichenketten Symbole

schalte Kantenglättung aus

Arrays Verzweigung Bedingungen

setze Schriftart ’New York’

Bedingte Anweisungen Übungen Existenztest

setze Abmessungen auf 130x130

Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

starte

Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik

Ende

Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Flussdiagramm Start

initialisiere wie Oberklasse

setze Zeigerfarbe rot

setze Zentrumsfarbe grau

I

Struktogramm WatchMorph»initialize initialisiere wie Oberklasse setze Zeigerfarbe rot setze Zentrumsfarbe grau schalte römische Ziffern aus schalte Kantenglättung aus

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen

schalte römische Ziffern aus

schalte Kantenglättung aus

setze Schriftart ’New York’ setze Abmessungen auf 130x130 starte

Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen

setze Schriftart ’New York’

Bedingte Anweisungen Übungen Existenztest

setze Abmessungen auf 130x130

Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

starte

Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik

Ende

Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Flussdiagramm Start

initialisiere wie Oberklasse

setze Zeigerfarbe rot

setze Zentrumsfarbe grau

I

Struktogramm WatchMorph»initialize initialisiere wie Oberklasse setze Zeigerfarbe rot setze Zentrumsfarbe grau schalte römische Ziffern aus schalte Kantenglättung aus

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen

schalte römische Ziffern aus

schalte Kantenglättung aus

setze Schriftart ’New York’ setze Abmessungen auf 130x130 starte

Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen

setze Schriftart ’New York’

setze Abmessungen auf 130x130

starte

Ende

Struktogramme ermöglichen eine tabellarische Darstellung von Algorithmen oder Abläufen.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Einem einzigen Empfänger können auch mehrere Nachrichten zusammen geschickt werden.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

I

Einem einzigen Empfänger können auch mehrere Nachrichten zusammen geschickt werden. Trennung der Nachrichten durch einen Strichpunkt:

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

I

Einem einzigen Empfänger können auch mehrere Nachrichten zusammen geschickt werden. Trennung der Nachrichten durch einen Strichpunkt: I

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

statt

Arithmetik Vergleiche

Transcript show: ’Erste Nachricht’. Transcript cr. "Zeilenumbruch" Transcript show: ’Dritte Nachricht’

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

I

Einem einzigen Empfänger können auch mehrere Nachrichten zusammen geschickt werden. Trennung der Nachrichten durch einen Strichpunkt: I

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

statt

Arithmetik Vergleiche

Transcript show: ’Erste Nachricht’. Transcript cr. "Zeilenumbruch" Transcript show: ’Dritte Nachricht’ I

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen

nun

Literale Zahlen

Transcript show: ’Erste Nachricht’; cr; show: ’Dritte Nachricht’

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

I

Einem einzigen Empfänger können auch mehrere Nachrichten zusammen geschickt werden. Trennung der Nachrichten durch einen Strichpunkt: I

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

statt

Arithmetik Vergleiche

Transcript show: ’Erste Nachricht’. Transcript cr. "Zeilenumbruch" Transcript show: ’Dritte Nachricht’ I

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen

nun

Literale Zahlen

Transcript show: ’Erste Nachricht’; cr; show: ’Dritte Nachricht’

Zeichen Zeichenketten Symbole Arrays Verzweigung

I

oder

Bedingungen Bedingte Anweisungen Übungen

Existenztest Transcript show: ’Erste Nachricht’; cr; show: ’Dritte Nachricht’ Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen:

Smalltalk Objekt-Modell Instanzen und Variablen

einBlock := [Transcript cr; show: ’ein Befehlsblock’. MyWatchMorph new openInWorld].

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen:

Smalltalk Objekt-Modell Instanzen und Variablen

einBlock := [Transcript cr; show: ’ein Befehlsblock’. MyWatchMorph new openInWorld].

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

I

Blöcke sind Instanzen der Klasse BlockClosure und können daher Nachrichten empfangen, z. B. BlockClosure»value, um ihren Inhalt ausführen zu lassen:

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten

einBlock value.

Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen:

Smalltalk Objekt-Modell Instanzen und Variablen

einBlock := [Transcript cr; show: ’ein Befehlsblock’. MyWatchMorph new openInWorld].

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

I

Blöcke sind Instanzen der Klasse BlockClosure und können daher Nachrichten empfangen, z. B. BlockClosure»value, um ihren Inhalt ausführen zu lassen:

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten

einBlock value.

Symbole Arrays

I

Blöcke kennen Blockvariablen.

Verzweigung Bedingungen Bedingte Anweisungen

rechenBlock := [ :b1 :b2 | b1 + (2 * b2)].

Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen:

Smalltalk Objekt-Modell Instanzen und Variablen

einBlock := [Transcript cr; show: ’ein Befehlsblock’. MyWatchMorph new openInWorld].

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

I

Blöcke sind Instanzen der Klasse BlockClosure und können daher Nachrichten empfangen, z. B. BlockClosure»value, um ihren Inhalt ausführen zu lassen:

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten

einBlock value.

Symbole Arrays

I

Blöcke kennen Blockvariablen.

Verzweigung Bedingungen Bedingte Anweisungen

rechenBlock := [ :b1 :b2 | b1 + (2 * b2)].

Übungen Existenztest

I

Diese werden zu Blockbeginn vor einem | mit vorangestelltem Doppelpunkt : deklariert und können von außen angesprochen werden: Transcript show: (rechenBlock value:5 value:4).

Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.6 Befehlssequenzen und Blöcke

Markus Schlager

I

Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen:

Smalltalk Objekt-Modell Instanzen und Variablen

einBlock := [Transcript cr; show: ’ein Befehlsblock’. MyWatchMorph new openInWorld].

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

I

Blöcke sind Instanzen der Klasse BlockClosure und können daher Nachrichten empfangen, z. B. BlockClosure»value, um ihren Inhalt ausführen zu lassen:

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten

einBlock value.

Symbole Arrays

I

Blöcke kennen Blockvariablen.

Verzweigung Bedingungen Bedingte Anweisungen

rechenBlock := [ :b1 :b2 | b1 + (2 * b2)].

Übungen Existenztest

I

Diese werden zu Blockbeginn vor einem | mit vorangestelltem Doppelpunkt : deklariert und können von außen angesprochen werden: Transcript show: (rechenBlock value:5 value:4).

Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Wie im Abschnitt zur Wertzuweisung gezeigt, spielen Variablen eine zentrale Rolle beim Zugriff auf Objekte, um diesen Nachrichten senden zu können.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Wie im Abschnitt zur Wertzuweisung gezeigt, spielen Variablen eine zentrale Rolle beim Zugriff auf Objekte, um diesen Nachrichten senden zu können.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

I

Jede Variable referenziert (verweist auf) das Objekt, das ihr als Wert zugewiesen wurde, etwa in dem Wertzuweisungsbeispiel die Variable testUhr auf eine bestimmte Instanz der Klasse MyWatchMorph.

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Wie im Abschnitt zur Wertzuweisung gezeigt, spielen Variablen eine zentrale Rolle beim Zugriff auf Objekte, um diesen Nachrichten senden zu können.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

I

I

Jede Variable referenziert (verweist auf) das Objekt, das ihr als Wert zugewiesen wurde, etwa in dem Wertzuweisungsbeispiel die Variable testUhr auf eine bestimmte Instanz der Klasse MyWatchMorph. Je nachdem, welche Objekte direkt (also ohne den Umweg über set/get-Methoden) auf eine Variable zugreifen dürfen, unterscheidet man in der Objektorientierung zwischen privaten und öffentlichen Variablen.

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Wie im Abschnitt zur Wertzuweisung gezeigt, spielen Variablen eine zentrale Rolle beim Zugriff auf Objekte, um diesen Nachrichten senden zu können.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

I

I

I

Jede Variable referenziert (verweist auf) das Objekt, das ihr als Wert zugewiesen wurde, etwa in dem Wertzuweisungsbeispiel die Variable testUhr auf eine bestimmte Instanz der Klasse MyWatchMorph. Je nachdem, welche Objekte direkt (also ohne den Umweg über set/get-Methoden) auf eine Variable zugreifen dürfen, unterscheidet man in der Objektorientierung zwischen privaten und öffentlichen Variablen. Dieser Unterschied spiegelt sich in Smalltalk im Variablennamen wider.

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Bislang sind euch private Variablen begegnet als Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Bislang sind euch private Variablen begegnet als Blockvariablen innerhalb eines Anweisungsblocks:

Smalltalk Objekt-Modell Instanzen und Variablen

[ :b1 :b2 | b1 + (2 * b2) ] value:5 value:4.

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Bislang sind euch private Variablen begegnet als Blockvariablen innerhalb eines Anweisungsblocks:

Smalltalk Objekt-Modell Instanzen und Variablen

[ :b1 :b2 | b1 + (2 * b2) ] value:5 value:4.

new, new: und initialize Nachrichten Arithmetik

temporäre Variablen innerhalb einer Methode:

Vergleiche Logik Priorität von Nachrichten

MyWatchMorph>>invertiereFarben | hFarbe | hFarbe := self color. self handsColor: hFarbe.

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Bislang sind euch private Variablen begegnet als Blockvariablen innerhalb eines Anweisungsblocks:

Smalltalk Objekt-Modell Instanzen und Variablen

[ :b1 :b2 | b1 + (2 * b2) ] value:5 value:4.

new, new: und initialize Nachrichten Arithmetik

temporäre Variablen innerhalb einer Methode:

Vergleiche Logik Priorität von Nachrichten

MyWatchMorph>>invertiereFarben | hFarbe | hFarbe := self color. self handsColor: hFarbe.

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen

Instanzvariablen einer Klasse:

Zeichenketten Symbole Arrays

WatchMorph subclass: #MyWatchMorph instanceVariableNames: ’farbwechsel’ classVariableNames: ’’

Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Bislang sind euch private Variablen begegnet als Blockvariablen innerhalb eines Anweisungsblocks:

Smalltalk Objekt-Modell Instanzen und Variablen

[ :b1 :b2 | b1 + (2 * b2) ] value:5 value:4.

new, new: und initialize Nachrichten Arithmetik

temporäre Variablen innerhalb einer Methode:

Vergleiche Logik Priorität von Nachrichten

MyWatchMorph>>invertiereFarben | hFarbe | hFarbe := self color. self handsColor: hFarbe.

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen

Instanzvariablen einer Klasse:

Zeichenketten Symbole Arrays

WatchMorph subclass: #MyWatchMorph instanceVariableNames: ’farbwechsel’ classVariableNames: ’’

Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung

Parameter einer Methode:

Anfangsbedingung Endbedingung Übungen

MyWatchMorph>>farbwechsel: boolWert farbwechsel := boolWert

Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Private Variablen sind nur innerhalb ihres Kontextes bekannt:

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Private Variablen sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Private Variablen sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks temporäre Variablen und Parameter nur innerhalb der Methode

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Private Variablen sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks temporäre Variablen und Parameter nur innerhalb der Methode Instanzvariablen nur für die jeweilige Instanz einer Klasse, also auch in all ihren Methoden.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

I

Private Variablen sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks temporäre Variablen und Parameter nur innerhalb der Methode Instanzvariablen nur für die jeweilige Instanz einer Klasse, also auch in all ihren Methoden. Die Namen privater Variablen müssen mit einem Kleinbuchstaben beginnen!

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

I I

Private Variablen sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks temporäre Variablen und Parameter nur innerhalb der Methode Instanzvariablen nur für die jeweilige Instanz einer Klasse, also auch in all ihren Methoden. Die Namen privater Variablen müssen mit einem Kleinbuchstaben beginnen! Innerhalb ihres Kontextes kann man auf private Variablen direkt zugreifen – ohne den Umweg über Set- und Get-Methoden.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung

| hFarbe | hFarbe := self color. self handsColor: hFarbe.

Übungen Zählschleifen

"ohne Set" "ohne Get"

Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

Dem gegenüber stehen nichtprivate Variablen: Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

Dem gegenüber stehen nichtprivate Variablen: Smalltalk

I

Sie sind mehreren Objekten zugänglich.

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

Dem gegenüber stehen nichtprivate Variablen: Smalltalk

I I

Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben.

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

Dem gegenüber stehen nichtprivate Variablen: Smalltalk

I I I

Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Beispiele für nichtprivate Variablen:

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

Dem gegenüber stehen nichtprivate Variablen: Smalltalk

I I I

Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Beispiele für nichtprivate Variablen: globale Variablen sind allen Instanzen aller Klassen bekannt und können überall verwendet werden. Ein Beispiel ist die globale Variable Transcript.

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

Dem gegenüber stehen nichtprivate Variablen: Smalltalk

I I I

Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Beispiele für nichtprivate Variablen: globale Variablen sind allen Instanzen aller Klassen bekannt und können überall verwendet werden. Ein Beispiel ist die globale Variable Transcript. Poolvariablen werden in poolDictionaries verwaltet und sind einer bestimmten Teilmenge von Klassen zugänglich.

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

Dem gegenüber stehen nichtprivate Variablen: Smalltalk

I I I

Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Beispiele für nichtprivate Variablen: globale Variablen sind allen Instanzen aller Klassen bekannt und können überall verwendet werden. Ein Beispiel ist die globale Variable Transcript. Poolvariablen werden in poolDictionaries verwaltet und sind einer bestimmten Teilmenge von Klassen zugänglich. Klassenvariablen sind allen Instanzen einer Klasse und deren Unterklassen zugänglich.

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung

WatchMorph subclass: #MyWatchMorph instanceVariableNames: ’farbwechsel,zeitzone’ classVariableNames: ’Zeitzonen’

Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

Beispielsweise könntet ihr den Uhren der Klasse MyWatchMorph noch beibringen wollen, die Zeit verschiedener Zeitzonen anzuzeigen.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung

WatchMorph subclass: #MyWatchMorph instanceVariableNames: ’farbwechsel,zeitzone’ classVariableNames: ’Zeitzonen’

Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

I

Beispielsweise könntet ihr den Uhren der Klasse MyWatchMorph noch beibringen wollen, die Zeit verschiedener Zeitzonen anzuzeigen. Dann müsste jede Instanz dieser Klasse in einer ihr eigenen Instanzvariable zeitzone ihre eigene, gerade aktuelle Zeitzone verwalten.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung

WatchMorph subclass: #MyWatchMorph instanceVariableNames: ’farbwechsel,zeitzone’ classVariableNames: ’Zeitzonen’

Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.7 Variablen

Markus Schlager

I

I

I

Beispielsweise könntet ihr den Uhren der Klasse MyWatchMorph noch beibringen wollen, die Zeit verschiedener Zeitzonen anzuzeigen. Dann müsste jede Instanz dieser Klasse in einer ihr eigenen Instanzvariable zeitzone ihre eigene, gerade aktuelle Zeitzone verwalten. Die Liste der möglichen Zeitzonen wäre aber für alle Uhren ein und dieselbe. Um diese Liste auch tatsächlich nur ein einziges Mal für alle Instanzen speichern und verwalten zu müssen, bietet sich die Verwendung einer Klassenvariable Zeitzonen an, auf die dann alle Uhren zugreifen können:

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung

WatchMorph subclass: #MyWatchMorph instanceVariableNames: ’farbwechsel,zeitzone’ classVariableNames: ’Zeitzonen’

Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

I

Literale sind Objekte, auf die (auch ohne Referenzierung durch Variablen) durch einfaches „Hinschreiben“ Bezug genommen werden kann.

Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

I

I

Literale sind Objekte, auf die (auch ohne Referenzierung durch Variablen) durch einfaches „Hinschreiben“ Bezug genommen werden kann. Smalltalk kennt fünf Arten von Literalen: I I I I I

Zahl (Number) Zeichen (Character) Zeichenkette (String) Symbol Feld (Array)

Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 I

I

Unterklassen sind SmallInteger sehr effizient zu rechnen, aber nicht beliebig groß oder klein LargePositiveInteger beliebig groß LargeNegativeInteger beliebig klein Je nach Größe der Zahl wählt Smalltalk die Klasse automatisch.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 I

I

Unterklassen sind SmallInteger sehr effizient zu rechnen, aber nicht beliebig groß oder klein LargePositiveInteger beliebig groß LargeNegativeInteger beliebig klein Je nach Größe der Zahl wählt Smalltalk die Klasse automatisch.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole

Übung

Arrays Verzweigung Bedingungen

1. Sucht die Klassen im Browser und findet heraus, wie groß SmallInteger-Zahlen höchstens sein können. 2. Lasst euch von einem Workspace aus im Transcript ganze Zahlen eurer Wahl als römische Zahlen, im 16er-System (als Hex-Zahl) oder z. B. im Vierersystem ausgeben. 3. Was berechnen die Methoden factorial, gcd:, lcm: ?

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5)

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) I

Smalltalk liefert Brüche als Rechenergebnisse stets vollständig gekürzt.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) Float Reelle Zahlen, z. B. 8.0 -2.01 1.27e-30 -12.08e5

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) Float Reelle Zahlen, z. B. 8.0 -2.01 1.27e-30 -12.08e5 I

Beachtet den Dezimalpunkt!

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) Float Reelle Zahlen, z. B. 8.0 -2.01 1.27e-30 -12.08e5 I I

Beachtet den Dezimalpunkt! Das e steht für die Zehnerpotenz, z. B. 1.27e − 30 = 1, 27 · 10

−30

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

I

Smalltalk bringt Ergebnisse immer in korrekte Gleitkommadarstellung, z. B. −12.08e5 7→ −1.208e6

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) Float Reelle Zahlen, z. B. 8.0 -2.01 1.27e-30 -12.08e5 I I

Beachtet den Dezimalpunkt! Das e steht für die Zehnerpotenz, z. B. 1.27e − 30 = 1, 27 · 10

−30

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

I

Smalltalk bringt Ergebnisse immer in korrekte Gleitkommadarstellung, z. B. −12.08e5 7→ −1.208e6

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen

I

Besondere Zahlen: Kreiszahl π Float pi Eulerzahl e Float e

Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) Float Reelle Zahlen, z. B. 8.0 -2.01 1.27e-30 -12.08e5 I I

Beachtet den Dezimalpunkt! Das e steht für die Zehnerpotenz, z. B. 1.27e − 30 = 1, 27 · 10

−30

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

I

Smalltalk bringt Ergebnisse immer in korrekte Gleitkommadarstellung, z. B. −12.08e5 7→ −1.208e6

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen

I

I

Besondere Zahlen: Kreiszahl π Float pi Eulerzahl e Float e Eine verwandte Klasse mit beliebiger Genauigkeit: ScaledDecimal

Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) Float Reelle Zahlen, z. B. 8.0 -2.01 1.27e-30 -12.08e5 Complex Komplexe Zahlen, z. B. 5.6 + 8 i

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) Float Reelle Zahlen, z. B. 8.0 -2.01 1.27e-30 -12.08e5 Complex Komplexe Zahlen, z. B. 5.6 + 8 i I

Lest bei Bedarf den Klassenkommentar.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

I

I

I

I

In Smalltalk gibt es verschiedene Zahlenklassen: Integer Ganze Zahlen, z. B. 5 420 -1000 Fraction Rationale Zahlen, z. B. (1/3) (-8/5) Float Reelle Zahlen, z. B. 8.0 -2.01 1.27e-30 -12.08e5 Complex Komplexe Zahlen, z. B. 5.6 + 8 i Abgesehen von Complex sind alle Zahlenklassen Unterklassen von Number. Das Protokoll converting bietet Methoden zum Umwandeln verschiedener Zahlenarten in andere. Bei Rechenoperationen kann es zu einem Wechsel der Zahlenklasse kommen, z. B. ergeben 5 sqrt oder 2 ∗ 2.5 Floats. Informationen zu mathematischen Funktionen (z. B. sqrt für die Quadratwurzel oder atRandom für Zufallszahlen) findet ihr im Browser im Quelltext der Klassen und übersichtlich im Terse Guide to Squeak.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

Einzelzeichen gehören der Klasse Character an. Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $’, $3, $$.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

I

Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $’, $3, $$. Für nichtdruckbare Zeichen stehen Nachrichten an die Klasse25 Character zur Verfügung, z. B.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung

25

Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert.

Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

I

Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $’, $3, $$. Für nichtdruckbare Zeichen stehen Nachrichten an die Klasse25 Character zur Verfügung, z. B. Leerzeichen Character space

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung

25

Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert.

Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

I

Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $’, $3, $$. Für nichtdruckbare Zeichen stehen Nachrichten an die Klasse25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung

25

Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert.

Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

I

Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $’, $3, $$. Für nichtdruckbare Zeichen stehen Nachrichten an die Klasse25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab Zeilenumbruch Character cr

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung

25

Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert.

Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

I

Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $’, $3, $$. Für nichtdruckbare Zeichen stehen Nachrichten an die Klasse25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab Zeilenumbruch Character cr Rückwärtslöschen Character backspace

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung

25

Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert.

Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

I

Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $’, $3, $$. Für nichtdruckbare Zeichen stehen Nachrichten an die Klasse25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab Zeilenumbruch Character cr Rückwärtslöschen Character backspace Eurozeichen Character euro26

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung

25

Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. 26 Eine Liste weiterer Zeichen findet ihr im Klassenprotokoll accessing untypeable characters, auch eine Erklärung, warum das Eurozeichen evtl. nicht funktioniert.

Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

I

I

25

Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $’, $3, $$. Für nichtdruckbare Zeichen stehen Nachrichten an die Klasse25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab Zeilenumbruch Character cr Rückwärtslöschen Character backspace Eurozeichen Character euro26 Besonders wichtig ist das Protokoll testing. Erkundet die Wirkung der zugehörigen Nachrichten in einem Workspace (Alt-p).

Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. 26 Eine Liste weiterer Zeichen findet ihr im Klassenprotokoll accessing untypeable characters, auch eine Erklärung, warum das Eurozeichen evtl. nicht funktioniert.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

Zeichenketten (Strings) werden in Smalltalk durch einfache Hochkommata begrenzt, z. B. I I I I

’Das ist ein String.’ ’Smalltalk rocks :-)’ ’1234567’ (Das ist keine Zahl!) ’u’ (Das ist etwas Anderes als $u!)

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

Zeichenketten (Strings) werden in Smalltalk durch einfache Hochkommata begrenzt, z. B. I I I I

I

’Das ist ein String.’ ’Smalltalk rocks :-)’ ’1234567’ (Das ist keine Zahl!) ’u’ (Das ist etwas Anderes als $u!)

Soll der String ein Hochkomma (’) als Zeichen enthalten, muss dieses verdoppelt werden: I

Wie geht’s?

wird zu

’Wie geht’’s?’

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

Zeichenketten (Strings) werden in Smalltalk durch einfache Hochkommata begrenzt, z. B. I I I I

I

Soll der String ein Hochkomma (’) als Zeichen enthalten, muss dieses verdoppelt werden: I

I

’Das ist ein String.’ ’Smalltalk rocks :-)’ ’1234567’ (Das ist keine Zahl!) ’u’ (Das ist etwas Anderes als $u!)

Wie geht’s?

wird zu

’Wie geht’’s?’

Vorsicht, doppelte Hochkommata (") kennzeichnen in Smalltalk Kommentare: I

"Das ist ein Kommentar im Quelltext."

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

Zeichenketten (Strings) werden in Smalltalk durch einfache Hochkommata begrenzt, z. B. I I I I

I

Soll der String ein Hochkomma (’) als Zeichen enthalten, muss dieses verdoppelt werden: I

I

Wie geht’s?

wird zu

’Wie geht’’s?’

Vorsicht, doppelte Hochkommata (") kennzeichnen in Smalltalk Kommentare: I

I

’Das ist ein String.’ ’Smalltalk rocks :-)’ ’1234567’ (Das ist keine Zahl!) ’u’ (Das ist etwas Anderes als $u!)

"Das ist ein Kommentar im Quelltext."

Strings beherrschen zahlreiche nützliche Methoden, die sie teilweise auch von der Oberklasse SequenceableCollection erben. I

Besonders interressant sind die Protokolle comparing, converting und testing.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

Zeichenketten (Strings) werden in Smalltalk durch einfache Hochkommata begrenzt, z. B. I I I I

I

Soll der String ein Hochkomma (’) als Zeichen enthalten, muss dieses verdoppelt werden: I

I

Wie geht’s?

wird zu

’Wie geht’’s?’

Vorsicht, doppelte Hochkommata (") kennzeichnen in Smalltalk Kommentare: I

I

’Das ist ein String.’ ’Smalltalk rocks :-)’ ’1234567’ (Das ist keine Zahl!) ’u’ (Das ist etwas Anderes als $u!)

"Das ist ein Kommentar im Quelltext."

Strings beherrschen zahlreiche nützliche Methoden, die sie teilweise auch von der Oberklasse SequenceableCollection erben. I

I I

Besonders interressant sind die Protokolle comparing, converting und testing. Probiert die eine oder andere aus! Später mehr dazu. Eine Übersicht bietet der Terse Guide to Squeak.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

Symbole sind besondere Zeichenketten, also eine Unterklasse von String.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

I

Symbole sind besondere Zeichenketten, also eine Unterklasse von String. Symbole werden durch ein vorangestelltes Doppelkreuz (#) gekennzeichnet, z. B. I I I

#Symbol #Feb13 #’Ich bin ein Symbol!’

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

I

Symbole sind besondere Zeichenketten, also eine Unterklasse von String. Symbole werden durch ein vorangestelltes Doppelkreuz (#) gekennzeichnet, z. B. I I I

I

#Symbol #Feb13 #’Ich bin ein Symbol!’

Enthält der Symbolbezeichner auch andere Zeichen als Buchstaben oder Ziffern, sind die einfachen Hochkommata notwendig.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

I

Symbole sind besondere Zeichenketten, also eine Unterklasse von String. Symbole werden durch ein vorangestelltes Doppelkreuz (#) gekennzeichnet, z. B. I I I

I

I

#Symbol #Feb13 #’Ich bin ein Symbol!’

Enthält der Symbolbezeichner auch andere Zeichen als Buchstaben oder Ziffern, sind die einfachen Hochkommata notwendig. Anders als gewöhnliche Strings gibt es ein Symbol immer nur ein einziges Mal im ganzen System.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

I

Symbole sind besondere Zeichenketten, also eine Unterklasse von String. Symbole werden durch ein vorangestelltes Doppelkreuz (#) gekennzeichnet, z. B. I I I

I

I

#Symbol #Feb13 #’Ich bin ein Symbol!’

Enthält der Symbolbezeichner auch andere Zeichen als Buchstaben oder Ziffern, sind die einfachen Hochkommata notwendig. Anders als gewöhnliche Strings gibt es ein Symbol immer nur ein einziges Mal im ganzen System.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen

I

Symbole werden z. B. als Namen von Klassen oder Methoden verwendet.

Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I

Arrays (deutsch oft als ‚Felder‘ bezeichnet) sind Listen mit einer festen Anzahl von Elementen.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

Arrays (deutsch oft als ‚Felder‘ bezeichnet) sind Listen mit einer festen Anzahl von Elementen. Ein Array wird durch ein vorangestelltes Doppelkreuz und runde Klammern gekennzeichnet und kann beliebige Elemente – getrennt durch Leerzeichen – enthalten, z. B. I I I

#(123 124 125 126) #(’squeak’ $s #Feb13) #($a $b #($s ’smalltalk’) 4)

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

Arrays (deutsch oft als ‚Felder‘ bezeichnet) sind Listen mit einer festen Anzahl von Elementen. Ein Array wird durch ein vorangestelltes Doppelkreuz und runde Klammern gekennzeichnet und kann beliebige Elemente – getrennt durch Leerzeichen – enthalten, z. B. I I I

#(123 124 125 126) #(’squeak’ $s #Feb13) #($a $b #($s ’smalltalk’) 4)

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

I

Ein Array kann also auch andere Arrays als Elemente enthalten.

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

Arrays (deutsch oft als ‚Felder‘ bezeichnet) sind Listen mit einer festen Anzahl von Elementen. Ein Array wird durch ein vorangestelltes Doppelkreuz und runde Klammern gekennzeichnet und kann beliebige Elemente – getrennt durch Leerzeichen – enthalten, z. B. I I I

#(123 124 125 126) #(’squeak’ $s #Feb13) #($a $b #($s ’smalltalk’) 4)

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

I I

Ein Array kann also auch andere Arrays als Elemente enthalten. Bei einem Spiel wie dem Schlagenrennen könnte man z. B. das Labyrinth als Array von Arrays implementieren, wenn jeder Rasterzeile ein Array von Labyrinthfeldern und dem ganzen Labyrinth ein Array dieser Zeilen zugeordnet wird.

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.8 Literale

Markus Schlager

I I

Arrays (deutsch oft als ‚Felder‘ bezeichnet) sind Listen mit einer festen Anzahl von Elementen. Ein Array wird durch ein vorangestelltes Doppelkreuz und runde Klammern gekennzeichnet und kann beliebige Elemente – getrennt durch Leerzeichen – enthalten, z. B. I I I

#(123 124 125 126) #(’squeak’ $s #Feb13) #($a $b #($s ’smalltalk’) 4)

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

I I

I

Ein Array kann also auch andere Arrays als Elemente enthalten. Bei einem Spiel wie dem Schlagenrennen könnte man z. B. das Labyrinth als Array von Arrays implementieren, wenn jeder Rasterzeile ein Array von Labyrinthfeldern und dem ganzen Labyrinth ein Array dieser Zeilen zugeordnet wird. Einen Überblick über die wichtigsten Methoden von Arrays findet sich wieder im Terse Guide to Squeak.

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

Unter einer Verzweigung oder bedingten Anweisung versteht man ein Konstrukt der Form

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

Unter einer Verzweigung oder bedingten Anweisung versteht man ein Konstrukt der Form

Smalltalk Objekt-Modell Instanzen und Variablen

einseitige Verzweigung

new, new: und initialize Nachrichten Arithmetik Vergleiche

wenn Bedingung, dann Aktion

Logik Priorität von Nachrichten Sequenzen und Blöcke

oder

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

Unter einer Verzweigung oder bedingten Anweisung versteht man ein Konstrukt der Form

Smalltalk Objekt-Modell Instanzen und Variablen

einseitige Verzweigung

new, new: und initialize Nachrichten Arithmetik Vergleiche

wenn Bedingung, dann Aktion

Logik Priorität von Nachrichten Sequenzen und Blöcke

oder

Variablen Private Variablen Nichtprivate Variablen

zweiseitige Verzweigung

Literale Zahlen Zeichen Zeichenketten

wenn Bedingung, dann Aktion, sonst Alternative

Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

Unter einer Verzweigung oder bedingten Anweisung versteht man ein Konstrukt der Form

Smalltalk Objekt-Modell Instanzen und Variablen

einseitige Verzweigung

new, new: und initialize Nachrichten Arithmetik Vergleiche

wenn Bedingung, dann Aktion

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

oder

Private Variablen Nichtprivate Variablen

zweiseitige Verzweigung

Literale Zahlen Zeichen Zeichenketten

wenn Bedingung, dann Aktion, sonst Alternative

Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen

I

Flussdiagramm

Übungen Existenztest Bedingte Wiederholung

WAHR Bedingung

FALSCH

Anfangsbedingung Endbedingung Übungen Zählschleifen

Aktion

Alternative

Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

Unter einer Verzweigung oder bedingten Anweisung versteht man ein Konstrukt der Form

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize

einseitige Verzweigung

Nachrichten Arithmetik Vergleiche

wenn Bedingung, dann Aktion

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

oder

Private Variablen Nichtprivate Variablen Literale

zweiseitige Verzweigung

Zahlen Zeichen Zeichenketten

wenn Bedingung, dann Aktion, sonst Alternative

Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen

I

Flussdiagramm WAHR Bedingung

Aktion

I FALSCH

Alternative

Struktogramm

Übungen Existenztest

Bedingung WAHR FALSCH Aktion

Alternative

Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf

27

Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt.

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I I

Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. Ein Beispiel für Bedingungen sind Vergleiche, evtl. verknüpft durch logische Operatoren:

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf

27

Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt.

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I I

Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. Ein Beispiel für Bedingungen sind Vergleiche, evtl. verknüpft durch logische Operatoren: I

Die Zahl x liegt zwischen 5 und 13.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

(5>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»initialize Smalltalk

1 2 3 4 5

WatchMorph>>initialize "initialize the state of the receiver" ... romanNumerals := false. ...

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

Zeile 4: romanNumerals ist eine Variable mit einem booleschen Wert (false), die sich als Bedingung eignet: Sie kann wahr (true) oder falsch (false) sein.

Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»addCustomMenuItems:hand: Smalltalk

1 2 3 4 5 6

WatchMorph>>addCustomMenuItems: aMenu hand: aHandMorph "Add morph-specific items to the given menu which was invoked by the given hand." ... aMenu addUpdating: #romanNumeralString action: #toggleRoman. ...

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 1: aHandMorph ist ein Mauszeiger.

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»addCustomMenuItems:hand: Smalltalk

1 2 3 4 5 6

WatchMorph>>addCustomMenuItems: aMenu hand: aHandMorph "Add morph-specific items to the given menu which was invoked by the given hand." ... aMenu addUpdating: #romanNumeralString action: #toggleRoman. ...

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 1: aHandMorph ist ein Mauszeiger. Zeile 5: Hier wird der entsprechende Eintrag im Menü beschrieben:

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»addCustomMenuItems:hand: Smalltalk

1 2 3 4 5 6

WatchMorph>>addCustomMenuItems: aMenu hand: aHandMorph "Add morph-specific items to the given menu which was invoked by the given hand." ... aMenu addUpdating: #romanNumeralString action: #toggleRoman. ...

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 1: aHandMorph ist ein Mauszeiger. Zeile 5: Hier wird der entsprechende Eintrag im Menü beschrieben: I

Bei einem Mausklick wird als Aktion die Methode toggleRoman aufgerufen und zur Aktualisierung des Menüeintrags (addUpdating) die Methode romanNumeralString.

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»addCustomMenuItems:hand: Smalltalk

1 2 3 4 5 6

WatchMorph>>addCustomMenuItems: aMenu hand: aHandMorph "Add morph-specific items to the given menu which was invoked by the given hand." ... aMenu addUpdating: #romanNumeralString action: #toggleRoman. ...

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 1: aHandMorph ist ein Mauszeiger. Zeile 5: Hier wird der entsprechende Eintrag im Menü beschrieben: I

I

Bei einem Mausklick wird als Aktion die Methode toggleRoman aufgerufen und zur Aktualisierung des Menüeintrags (addUpdating) die Methode romanNumeralString. Beachtet, wie hier die Namen der beiden Methoden als Symbole übergeben werden!

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»toggleRoman Smalltalk

1 2 3

WatchMorph>>toggleRoman romanNumerals := romanNumerals not. self createLabels

Objekt-Modell Instanzen und Variablen new, new: und initialize

Zeile 2: Hier passieren zwei Dinge:

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»toggleRoman Smalltalk

1 2 3

WatchMorph>>toggleRoman romanNumerals := romanNumerals not. self createLabels

Objekt-Modell Instanzen und Variablen new, new: und initialize

Zeile 2: Hier passieren zwei Dinge: I

Mit romanNumerals not wird der Wert der Variable in sein logisches Gegenteil verkehrt (wahr statt falsch und umgekehrt).

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»toggleRoman Smalltalk

1 2 3

WatchMorph>>toggleRoman romanNumerals := romanNumerals not. self createLabels

Objekt-Modell Instanzen und Variablen new, new: und initialize

Zeile 2: Hier passieren zwei Dinge: I

I

Mit romanNumerals not wird der Wert der Variable in sein logisches Gegenteil verkehrt (wahr statt falsch und umgekehrt). Dann wird der neue Wert mit der Wertzuweisung in derselben Variablen abgespeichert.

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»toggleRoman Smalltalk

1 2 3

WatchMorph>>toggleRoman romanNumerals := romanNumerals not. self createLabels

Objekt-Modell Instanzen und Variablen new, new: und initialize

Zeile 2: Hier passieren zwei Dinge: I

I

Mit romanNumerals not wird der Wert der Variable in sein logisches Gegenteil verkehrt (wahr statt falsch und umgekehrt). Dann wird der neue Wert mit der Wertzuweisung in derselben Variablen abgespeichert.

Zeile 3: Abschließend wird die Nachricht createLabels an die Uhr selbst (self) geschickt, damit diese ihre Beschriftung (die ‚Labels‘) neu zeichnet.

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 3-5: eine zweiseitige Verzweigung:

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 3-5: eine zweiseitige Verzweigung: I

romanNumerals ist die Bedingung.

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 3-5: eine zweiseitige Verzweigung: I I

romanNumerals ist die Bedingung. Ist sie wahr (ifTrue:), wird der nachfolgende Anweisungsblock [...] ausgeführt,

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 3-5: eine zweiseitige Verzweigung: I I

I

romanNumerals ist die Bedingung. Ist sie wahr (ifTrue:), wird der nachfolgende Anweisungsblock [...] ausgeführt, ist sie falsch (ifFalse:), der Alternativblock [...].

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 3-5: eine zweiseitige Verzweigung: I I

I

romanNumerals ist die Bedingung. Ist sie wahr (ifTrue:), wird der nachfolgende Anweisungsblock [...] ausgeführt, ist sie falsch (ifFalse:), der Alternativblock [...].

I

Einer der beiden Zweige kann auch fehlen.

I

Die Reihenfolge der beiden Zweige ist gleichgültig.

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

Bedingte Anweisungen in Smalltalk

Smalltalk Objekt-Modell Instanzen und Variablen

I

Bedingung ifTrue:

[Anweisungsblock]

I

Bedingung ifFalse: [Anweisungsblock]

I

Bedingung ifTrue: [Anweisungsblock] ifFalse: [Alternativblock]

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Bedingung ifFalse: [Anweisungsblock] ifTrue: [Alternativblock]

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole

I

Ein Beispiel

Arrays

29

x := 100 atRandom. (x > 50) ifTrue: [Transcript show: x asString ifFalse: [Transcript show: x asString

Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung

cr; , ’: gewonnen!’] cr; , ’: leider verloren’]

Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

29

Probiert es in einem Workspace aus!

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

I

etwas genauer betrachtet Zeile 3: Das Skript beginnt mit einer Rückgabeanweisung (↑): Der nachfolgende Ausdruck wird ausgewertet und sein Wert als Ergebnis an den Aufrufer zurückgegeben.

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

I

etwas genauer betrachtet Zeile 3: Das Skript beginnt mit einer Rückgabeanweisung (↑): Der nachfolgende Ausdruck wird ausgewertet und sein Wert als Ergebnis an den Aufrufer zurückgegeben. Zeile 4–5: Die beiden Anweisungsblöcke liefern jeweils eine Zeichenkette (’’ bzw. ’’) als Wert.30

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf

30

Diese Zeichenketten werden (wegen der spitzen Klammern) im Menü als (un)ausgefüllte Checkbox dargestellt.

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 6: Drei Dinge:

Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 6: Drei Dinge:

Logik Priorität von Nachrichten Sequenzen und Blöcke

I

Auch hier wird eine Zeichenkette als Wert erzeugt (’roman numerals’).

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 6: Drei Dinge:

Logik Priorität von Nachrichten Sequenzen und Blöcke

I

I

Auch hier wird eine Zeichenkette als Wert erzeugt (’roman numerals’). Mit der Nachricht translated wird sie ggf. in verschiedene Sprachen übersetzt (z. B. Deutsch)

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 6: Drei Dinge:

Logik Priorität von Nachrichten Sequenzen und Blöcke

I

I

I

Auch hier wird eine Zeichenkette als Wert erzeugt (’roman numerals’). Mit der Nachricht translated wird sie ggf. in verschiedene Sprachen übersetzt (z. B. Deutsch) Was bedeutet das Komma?

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»romanNumeralString Smalltalk

1 2 3 4 5 6

WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" ↑ (romanNumerals ifTrue: [’’] ifFalse: [’’]) , ’roman numerals’ translated

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche

Zeile 6: Drei Dinge:

Logik Priorität von Nachrichten Sequenzen und Blöcke

I

I

I I

Auch hier wird eine Zeichenkette als Wert erzeugt (’roman numerals’). Mit der Nachricht translated wird sie ggf. in verschiedene Sprachen übersetzt (z. B. Deutsch) Was bedeutet das Komma? Das Komma ist die binäre Nachricht Konkatenation an das Ergebnis der vorangegangenen Verzweigung (daher die runden Klammern). Dadurch werden die Zeichenketten ’’ (bzw. ’’) und die Übersetzung von ’roman numerals’ zu einer einzigen Kette aneinandergehängt.

Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Was passiert hier im wesentlichen?

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Was passiert hier im wesentlichen? Zeile 3: Als erstes werden alle Submorphe der Uhr entfernt.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Was passiert hier im wesentlichen? Zeile 3: Als erstes werden alle Submorphe der Uhr entfernt. I

Erforscht so eine Uhr mit dem Inspector!

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Was passiert hier im wesentlichen? Zeile 3: Als erstes werden alle Submorphe der Uhr entfernt. I

I

Erforscht so eine Uhr mit dem Inspector! Ihr seht, die Submorphe der Uhr sind genau die Zahlen auf dem Ziffernblatt.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Was passiert hier im wesentlichen? Zeile 4–5: Schriftart, -größe und Radius der Bezifferung werden bestimmt.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Was passiert hier im wesentlichen? Zeile 8–10: Verzweigung: Wenn eine neue Zahl römisch sein soll, wird sie so geschrieben, sonst nicht.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Was passiert hier im wesentlichen? Zeile 11–12: Die neue Zahl wird unter dem richtigen Winkel (hourAngle: hour) wieder in die Uhr eingefügt.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht?

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 2: Vier temporäre Hilfsvariablen werden deklariert.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 2: Vier temporäre Hilfsvariablen werden deklariert. Zeile 4–5: Schriftart, -größe und Radius der Bezifferung werden in den Hilfsvariablen font, h und r zwischengespeichert.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 2: Vier temporäre Hilfsvariablen werden deklariert. Zeile 4–5: Schriftart, -größe und Radius der Bezifferung werden in den Hilfsvariablen font, h und r zwischengespeichert. Zeile 8–10: Die neue Darstellung der Zahlen wird in der Hilfsvariablen numeral zwischengespeichert.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 4: Hier passiert viel: font := StrikeFont familyName: fontName size: (h := self height min: self width)//8.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Nichtprivate Variablen

Wie wird das gemacht? Zeile 4: Hier passiert viel:

Literale Zahlen Zeichen Zeichenketten

font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. self height min: self width

Symbole Arrays Verzweigung Bedingungen

I

Zuerst wird das Minimum aus Höhe und Breite von self, also des ganzen WatchMorphs bestimmt.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Nichtprivate Variablen

Wie wird das gemacht? Zeile 4: Hier passiert viel:

Literale Zahlen Zeichen Zeichenketten

font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. h := self height min: self width

Symbole Arrays Verzweigung Bedingungen

I

Dann wird dieses Minimum in der Hilfsvariablen h abgespeichert, um damit später in Zeile 5 den Radius r der Bezifferung zu berechnen.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Nichtprivate Variablen

Wie wird das gemacht? Zeile 4: Hier passiert viel:

Literale Zahlen Zeichen Zeichenketten

font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. (h := self height min: self width)//8.

Symbole Arrays Verzweigung Bedingungen

I

Nun wird der Wert von h (ganzzahlig) durch 8 geteilt.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 4: Hier passiert viel: font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. StrikeFont familyName: fontName size: (h := self height min: self width)//8.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen

I

Das Ergebnis dieser Division wird als Schriftgröße, die Schriftart der Uhr (Instanzvariable fontName) als Schriftart einer hier neu erzeugten Schrift der Klasse StrikeFont benutzt.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 4: Hier passiert viel: font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen

I

Zuletzt wird die neu erzeugte Schrift der Hilfsvariablen font als Wert zugewiesen.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 7–12: ein großer Anweisungsblock

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 7–12: ein großer Anweisungsblock Zeile 7: Eine Blockvariable wird deklariert (hour). Wie ihr Name schon sagt, wird in ihr vermutlich die gerade aktuelle Stunde gespeichert.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 7–12: ein großer Anweisungsblock Zeile 7: Eine Blockvariable wird deklariert (hour). Wie ihr Name schon sagt, wird in ihr vermutlich die gerade aktuelle Stunde gespeichert. Zeile 8–12: die Anweisungen des Blocks mit Unterblöcken in der Verzweigung

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 6–12: ein erstes Beispiel einer Zählschleife:

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 6–12: ein erstes Beispiel einer Zählschleife: Zeile 6: 1 to: 12 ist eine Instanz der Klasse Interval mit Schrittweite 1.31 Interval ist eine Unterklasse von Collection und kennt daher die Methode Collection»do:. Collection>>do: aBlock "Evaluate aBlock with each of the receiver’s elements as the argument."

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

self subclassResponsibility

Zählschleifen Intervalldurchlauf

31

Untersucht 1 to: 12 mit Alt-i im Workspace oder lest die Methode Number»to:!

Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

WatchMorph»createLabels Smalltalk

1 2 3 4 5 6 7 8 9 10 11 12

WatchMorph>>createLabels | numeral font h r | self removeAllMorphs. font := StrikeFont familyName: fontName size: (h := self height min: self width)//8. r := 1.0 - (1.4 * font height / h). 1 to: 12 do: [:hour | numeral := romanNumerals ifTrue: [hour printStringRoman] ifFalse: [hour asString]. self addMorphBack: ((StringMorph contents: numeral font: font emphasis: 1) center: (self radius: r hourAngle: hour)) lock]

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

I

Wie wird das gemacht? Zeile 6–12: ein erstes Beispiel einer Zählschleife: Zeile 6–7: Der ersten (hier einzigen) Blockvariablen hour werden nach und nach die Elemente der Kollektion (hier die ganzen Zahlen von 1 bis 12) als Wert zugewiesen und für jedes dieser Elemente der Block einmal ausgeführt.

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

Übung 1

Smalltalk Objekt-Modell Instanzen und Variablen

I

Bringt euren Uhren der Klasse MyWatchMorph bei, alle z. B. 5 Minuten neue Farben für Zeiger und Hintergrund zu benutzen. I

I

I

Vielleicht ist es hilfreich, die Methode WatchMorph»drawOn: zu lesen. relevante Klassen: Time und Color

Anregungen zur Farbverwaltung: I I

I

I

Lest die Klassendokumentation von Color! Die relevanten Methoden zur Erzeugung einer Farbe sind Klassenmethoden. Wenn ihr im Browser das Feld class aktiviert, seht ihr bei den Methoden auch alle bekannten Farbnamen. Man könnte z. B. die gewünschten Farben oder Farbkombinationen in einem Array verwalten. Lasst die Uhr ihre Farben doch zufällig (Integer»atRandom) aus dem Array wählen oder mit Hilfe von RGB-Werten Zufallsfarben erzeugen.

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

Übung 2

Smalltalk Objekt-Modell Instanzen und Variablen

I

Programmiert ein kleines Quiz, in dem der Rechner der Reihe nach ein paar Fragen stellt und bei richtigen Antworten Punkte vergibt. Lasst das Programm den aktuellen Punktestand von einem Zähler anzeigen und z. B. durch ein Rechteck veranschaulichen, das seine Länge (und bei bestimmten Punktegrenzen vielleicht auch seine Farbe) ändert.

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen

I I I

Modelliert solch ein Quiz zunächst mit einem UML-Diagramm. Welche Objekte benötigt das Quiz und welchen Klassen gehören sie an? Vergleicht euer Ergebnis mit dem Vorschlag auf der nächsten Seite.

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I

UML-Modell: Object

FillInTheBlankMorph

Smalltalk Objekt-Modell

+class request(frage)

Instanzen und Variablen new, new: und initialize Nachrichten

MiniQuiz

Arithmetik Vergleiche

+fragenkatalog +punktezaehler +initialize() +stelleFragen(fragenkatalog) +bewerte(antwort,loesung,maxPunkte): punkte +gibEndstandAus()

Logik

Array +at(index) +do(anweisungsblock)

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

Punktezaehler

Nichtprivate Variablen

+punktestand +aktualisiereDich(punkte)

Literale

Dialogfenster

Zahlen Zeichen

Fragenkatalog

Zeichenketten Symbole

TextMorph +text +newContents(string)

Rectangle +color +width +color(farbe) +width(breite)

*

Eintrag +frage +loesung +maxPunkte

Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest

I

I

Setzt das Modell mit Squeak um. Auf den nächsten Seiten folgen ein paar nützliche Bemerkungen.

Bedingte Wiederholung

Es kann sinnvoll sein, für ein derartiges Projekt im Browser eine eigene Kategorie anzulegen.

Zählschleifen

Anfangsbedingung Endbedingung Übungen

Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

Generalisierung: Dialogfenster und Fragenkatalog haben erst einmal keine besonderen Eigenschaften. Daher sind hier nicht unbedingt neue Unterklassen nötig, allerdings vorteilhaft, wenn das Projekt später verbessert werden soll.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

Generalisierung: Dialogfenster und Fragenkatalog haben erst einmal keine besonderen Eigenschaften. Daher sind hier nicht unbedingt neue Unterklassen nötig, allerdings vorteilhaft, wenn das Projekt später verbessert werden soll.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

Aggregation: Bei der Enthält-Beziehung ist es wichtig, dass das Ganze seine Teile kennt oder auch umgekehrt. So sollte z. B. das MiniQuiz wissen, welchen Fragenkatalog es abarbeitet und welcher Punktezähler seinen Punktestand protokolliert. Evtl. sollte auch der Punktezähler wissen, für welches Quiz er zählt. Das erreicht ihr durch Instanzvariablen, also z. B. Miniquiz»fragenkatalog und Miniquiz»punktezaehler bzw. Punktezaehler»miniquiz.

Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

MiniQuiz: Struktogramme einiger Methoden 31 Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

31

Untermethode

Rückgabewert

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

MiniQuiz: Struktogramme einiger Methoden 31 MiniQuiz»initialize initialisiere wie Oberklasse lege den fragenkatalog fest erzeuge einen neuen punktezaehler setze den Punktestand auf seinen Startwert stelle die Fragen aus dem fragenkatalog

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

31

Untermethode

Rückgabewert

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

MiniQuiz: Struktogramme einiger Methoden 31 MiniQuiz»initialize initialisiere wie Oberklasse lege den fragenkatalog fest erzeuge einen neuen punktezaehler setze den Punktestand auf seinen Startwert stelle die Fragen aus dem fragenkatalog

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten

MiniQuiz»gibEndstandAus lass dir von deinem punktezaehler den punktestand geben gib je nach Punktestand den punktestand und einen passenden Kommentar in einem Dialogfenster aus

Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

31

Untermethode

Rückgabewert

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

MiniQuiz: Struktogramme einiger Methoden 31 MiniQuiz»initialize initialisiere wie Oberklasse lege den fragenkatalog fest erzeuge einen neuen punktezaehler setze den Punktestand auf seinen Startwert stelle die Fragen aus dem fragenkatalog MiniQuiz»gibEndstandAus lass dir von deinem punktezaehler den punktestand geben gib je nach Punktestand den punktestand und einen passenden Kommentar in einem Dialogfenster aus

MiniQuiz»stelleFragenAus:katalog

Smalltalk Objekt-Modell Instanzen und Variablen

wiederhole für jeden eintrag im katalog stelle die frage in einem Dialogfenster bewerte die antwort lass deinen punktezaehler sich aktualisieren. gib den Endstand aus

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

31

Untermethode

Rückgabewert

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

MiniQuiz: Struktogramme einiger Methoden 31 MiniQuiz»initialize initialisiere wie Oberklasse lege den fragenkatalog fest erzeuge einen neuen punktezaehler setze den Punktestand auf seinen Startwert stelle die Fragen aus dem fragenkatalog

MiniQuiz»stelleFragenAus:katalog

gib je nach Punktestand den punktestand und einen passenden Kommentar in einem Dialogfenster aus

Objekt-Modell Instanzen und Variablen

wiederhole für jeden eintrag im katalog stelle die frage in einem Dialogfenster bewerte die antwort lass deinen punktezaehler sich aktualisieren. gib den Endstand aus

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole

MiniQuiz»gibEndstandAus lass dir von deinem punktezaehler den punktestand geben

Smalltalk

Arrays Verzweigung

MiniQuiz»bewerte:antwort zu:loesung mit:maxPunkte

Bedingungen Bedingte Anweisungen Übungen Existenztest

antwort=loesung WAHR FALSCH

Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

punkte

0

Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

31

Untermethode

Rückgabewert

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

FillInTheBlankMorph: ein Dialogfenster Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

FillInTheBlankMorph: ein Dialogfenster I Üblicherweise wird hier die Klassenmethode FillInTheBlankMorph class»request:initialAnswer: oder einfacher FillInTheBlankMorph class»request: benutzt. | ergebnis | ergebnis := FillInTheBlankMorph request: ’Was denkst du?’ initialAnswer: ’Schreib es hierher!’. Transcript cr; show: ergebnis.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays

| ergebnis | ergebnis := FillInTheBlankMorph request: ’Was denkst du?’. Transcript cr; show: ergebnis.

Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

FillInTheBlankMorph: ein Dialogfenster I Üblicherweise wird hier die Klassenmethode FillInTheBlankMorph class»request:initialAnswer: oder einfacher FillInTheBlankMorph class»request: benutzt. | ergebnis | ergebnis := FillInTheBlankMorph request: ’Was denkst du?’ initialAnswer: ’Schreib es hierher!’. Transcript cr; show: ergebnis.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays

| ergebnis | ergebnis := FillInTheBlankMorph request: ’Was denkst du?’. Transcript cr; show: ergebnis.

I

Probiert beides in einem Workspace aus!

Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

FillInTheBlankMorph: ein Dialogfenster I Üblicherweise wird hier die Klassenmethode FillInTheBlankMorph class»request:initialAnswer: oder einfacher FillInTheBlankMorph class»request: benutzt. | ergebnis | ergebnis := FillInTheBlankMorph request: ’Was denkst du?’ initialAnswer: ’Schreib es hierher!’. Transcript cr; show: ergebnis.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays

| ergebnis | ergebnis := FillInTheBlankMorph request: ’Was denkst du?’. Transcript cr; show: ergebnis.

I I

Probiert beides in einem Workspace aus! Lest die Quelltexte und die Varianten dieser Methoden, um z. B. das Aussehen des Fensters zu beeinflussen.

Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

Dialogfenster: z. B. ein FillInTheBlankMorph Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

Dialogfenster: z. B. ein FillInTheBlankMorph I Leider wird bei Verwendung von FillInTheBlankMorph für jeden Dialog ein neues Fenster erzeugt.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

Dialogfenster: z. B. ein FillInTheBlankMorph I Leider wird bei Verwendung von FillInTheBlankMorph für jeden Dialog ein neues Fenster erzeugt. I Um das zu vermeiden, könntet ihr eine Unterklasse von FillInTheBlankMorph (oder auch direkt von RectangleMorph) anlegen, I

I

I

die mit Dialogfenster new ein vollständiges Dialogfenster erzeugt, 32 das nach Drücken des ‹ok›-Knopfes offen bleibt und die nächste Frage anzeigt, sich bei Betätigung des ‹cancel›-Knopfes schließt. 33

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen

32

Probiert einmal FillInTheBlankMorph new openInHand. 33 Lesenswert sind hierzu die Klassenmethode class»request: initialAnswer: centerAt: inWorld: onCancelReturn: acceptOnCR: answerExtent: sowie die darin aufgerufenen Instanzmethoden setQuery: initialAnswer: answerExtent: acceptOnCR: und getUserResponse.

Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I 1 2 3 4 5 6 7 8 9 10 11 12 13 14

In WatchMorph»drawOn: tritt noch eine weitere gebräuchliche Form der Verzweigung auf: WatchMorph>>drawOn: aCanvas "Draw the watch on the given canvas"

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

| pHour pMin pSec time centerColor | time := Time now. "..." centerColor := cColor ifNil: [Color transparent] ifNotNil: [time hours < 12 ifTrue: [cColor muchLighter] ifFalse: [cColor]]. "..."

Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I 1 2 3 4 5 6 7 8 9 10 11 12 13 14

In WatchMorph»drawOn: tritt noch eine weitere gebräuchliche Form der Verzweigung auf: WatchMorph>>drawOn: aCanvas "Draw the watch on the given canvas"

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

| pHour pMin pSec time centerColor | time := Time now. "..." centerColor := cColor ifNil: [Color transparent] ifNotNil: [time hours < 12 ifTrue: [cColor muchLighter] ifFalse: [cColor]]. "..."

Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung

I

In Zeile 7–13 wird überprüft, ob die Instanzvariable cColor überhaupt einen Wert besitzt.

Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I 1 2 3 4 5 6 7 8 9 10 11 12 13 14

In WatchMorph»drawOn: tritt noch eine weitere gebräuchliche Form der Verzweigung auf: WatchMorph>>drawOn: aCanvas "Draw the watch on the given canvas"

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

| pHour pMin pSec time centerColor | time := Time now. "..." centerColor := cColor ifNil: [Color transparent] ifNotNil: [time hours < 12 ifTrue: [cColor muchLighter] ifFalse: [cColor]]. "..."

Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung

I I

In Zeile 7–13 wird überprüft, ob die Instanzvariable cColor überhaupt einen Wert besitzt. Nur wenn das der Fall ist (cColor ifNotNil:), wird darauf zugegriffen.

Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.9 Verzweigung – bedingte Anweisungen

Markus Schlager

I 1 2 3 4 5 6 7 8 9 10 11 12 13 14

In WatchMorph»drawOn: tritt noch eine weitere gebräuchliche Form der Verzweigung auf: WatchMorph>>drawOn: aCanvas "Draw the watch on the given canvas"

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

| pHour pMin pSec time centerColor | time := Time now. "..." centerColor := cColor ifNil: [Color transparent] ifNotNil: [time hours < 12 ifTrue: [cColor muchLighter] ifFalse: [cColor]]. "..."

Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung

I I I

In Zeile 7–13 wird überprüft, ob die Instanzvariable cColor überhaupt einen Wert besitzt. Nur wenn das der Fall ist (cColor ifNotNil:), wird darauf zugegriffen. Der temporären Variablen centerColor wird dann das Ergebnis des jeweiligen Anweisungsblockes als Wert zugewiesen.

Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

I

Ein wesentliches Konstrukt in Algorithmen sind bedingte Wiederholungen, in Programmiersprachen oft als while-Schleifen bezeichnet.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

I

Ein wesentliches Konstrukt in Algorithmen sind bedingte Wiederholungen, in Programmiersprachen oft als while-Schleifen bezeichnet.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

I

Man unterscheidet zwei Arten:

Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

I

Ein wesentliches Konstrukt in Algorithmen sind bedingte Wiederholungen, in Programmiersprachen oft als while-Schleifen bezeichnet.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

I

Man unterscheidet zwei Arten:

Arithmetik Vergleiche Logik

Anfangsbedingung: solange (als)

Priorität von Nachrichten Sequenzen und Blöcke Variablen

solange (als) Bedingung (noch nicht) erfüllt ist, agiere

Private Variablen Nichtprivate Variablen Literale Zahlen

Solange du die dritte Kreuzung noch nicht erreicht hast, gehe geradeaus.

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

I

Ein wesentliches Konstrukt in Algorithmen sind bedingte Wiederholungen, in Programmiersprachen oft als while-Schleifen bezeichnet.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten

I

Man unterscheidet zwei Arten:

Arithmetik Vergleiche Logik

Anfangsbedingung: solange (als)

Priorität von Nachrichten Sequenzen und Blöcke Variablen

solange (als) Bedingung (noch nicht) erfüllt ist, agiere

Private Variablen Nichtprivate Variablen Literale Zahlen

Solange du die dritte Kreuzung noch nicht erreicht hast, gehe geradeaus.

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen

Endbedingung: solange bis

Bedingte Anweisungen Übungen Existenztest

agiere so lange, bis Bedingung (nicht mehr) erfüllt ist

Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen

Gehe so lange geradeaus, bis du an die dritte Kreuzung kommst.

Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Anfangsbedingung: erst sehen, dann gehen Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Anfangsbedingung: erst sehen, dann gehen Smalltalk

I

Flussdiagramm

Objekt-Modell Instanzen und Variablen new, new: und initialize

dreh dich nach Norden

Nachrichten Arithmetik Vergleiche Logik

WAHR

dritte Kreuzung erreicht

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

FALSCH

Nichtprivate Variablen Literale

biege links ab

gehe geradeaus

Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Anfangsbedingung: erst sehen, dann gehen Smalltalk

I

Flussdiagramm

I

Struktogramm

Objekt-Modell Instanzen und Variablen new, new: und initialize

dreh dich nach Norden

WAHR

dritte Kreuzung erreicht

dreh dich nach Norden dritte Kreuzung nicht erreicht gehe geradeaus biege links ab

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

FALSCH

Nichtprivate Variablen Literale

biege links ab

gehe geradeaus

Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Anfangsbedingung: erst sehen, dann gehen Smalltalk

I

Flussdiagramm

I

Struktogramm

Objekt-Modell Instanzen und Variablen new, new: und initialize

dreh dich nach Norden

WAHR

dritte Kreuzung erreicht

dreh dich nach Norden dritte Kreuzung nicht erreicht gehe geradeaus biege links ab

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

FALSCH

Nichtprivate Variablen Literale

biege links ab

gehe geradeaus

Zahlen Zeichen Zeichenketten

Schleifen mit Anfangsbedingung in Smalltalk

Symbole Arrays Verzweigung Bedingungen

I

[Bedingungsblock] whileTrue: [Anweisungsblock]

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung

I

[Bedingungsblock] whileFalse: [Anweisungsblock]

Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Endbedingung: erst gehen, dann sehen Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Endbedingung: erst gehen, dann sehen Smalltalk

I

Flussdiagramm

Objekt-Modell Instanzen und Variablen new, new: und initialize

dreh dich nach Norden

Nachrichten Arithmetik Vergleiche Logik

gehe geradeaus

Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen WAHR

biege links ab

dritte Kreuzung erreicht

FALSCH

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Endbedingung: erst gehen, dann sehen Smalltalk

I

Flussdiagramm

I

Struktogramm

Objekt-Modell Instanzen und Variablen new, new: und initialize

dreh dich nach Norden gehe geradeaus

dreh dich nach Norden

gehe geradeaus

dritte Kreuzung nicht erreicht biege links ab

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

WAHR

biege links ab

dritte Kreuzung erreicht

FALSCH

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Endbedingung: erst gehen, dann sehen Smalltalk

I

Flussdiagramm

I

Struktogramm

Objekt-Modell Instanzen und Variablen new, new: und initialize

dreh dich nach Norden gehe geradeaus

dreh dich nach Norden

gehe geradeaus

dritte Kreuzung nicht erreicht biege links ab

Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen

WAHR

dritte Kreuzung erreicht

FALSCH

biege links ab

Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten

Schleifen mit Endbedingung in Smalltalk

Symbole Arrays Verzweigung Bedingungen

I

[Anweisungsblock] doWhileTrue: [Bedingungsblock]

Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung

I

[Anweisungsblock] doWhileFalse: [Bedingungsblock]

Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.10 Bedingte Wiederholung

Markus Schlager

Übung

Smalltalk Objekt-Modell Instanzen und Variablen

I Legt in einer geeigneten Kategorie (z. B. euren Versuchsklassen) eine Unterklasse (z. B. Massenpunkt) von EllipseMorph (oder sonst einem Morph) an. I Massenpunkte sollten eine Masse besitzen. Es dürfte auch sinnvoll sein, dass sie ihre Momentangeschwindigkeit und Beschleunigung kennen – vermutlich aufgeschlüsselt nach horizontaler und vertikaler Komponente. Für ihre Position erben sie die entsprechenden Instanzvariablen ohnehin von ihrer Oberklasse. I Grundsätzlich wäre es vernünftig, wenn sie als Klassenvariable (warum?) auch die Gravitationskonstante zur Verfügung hätten. I Bringt den Instanzen dieser Klasse bei, sich mit Hilfe der Methode kleiner Schritte physikalisch richtig über den Bildschirm zu bewegen.

new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen

I Mögliche Ideen:

Übungen Existenztest

I Freier Fall, senkrechter Wurf, schiefer Wurf, harmonische Schwingung,

Bedingte Wiederholung Anfangsbedingung

Planetenbewegung, elastischer Stoß, . . .

I Wie könnte man die Bewegungen starten bzw. stoppen? I Mit Hilfe von stepTime lässt sich das Tempo der Bewegung steuern.

Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

I

Wie zeichnet man ein gleichseitiges Dreieck, ein Quadrat, ein reguläres Vieleck?

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

I

I

Wie zeichnet man ein gleichseitiges Dreieck, ein Quadrat, ein reguläres Vieleck? Immer wieder das gleiche – so oft wie die Zahl der Seiten: I I

Zeichne eine Seite. Drehe den Stift um den richtigen Winkel.

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

I

I

Wie zeichnet man ein gleichseitiges Dreieck, ein Quadrat, ein reguläres Vieleck? Immer wieder das gleiche – so oft wie die Zahl der Seiten: I I

I

Zeichne eine Seite. Drehe den Stift um den richtigen Winkel.

z. B. für ein Quadrat:

Smalltalk Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

I

I

Wie zeichnet man ein gleichseitiges Dreieck, ein Quadrat, ein reguläres Vieleck? Immer wieder das gleiche – so oft wie die Zahl der Seiten: I I

I

Zeichne eine Seite. Drehe den Stift um den richtigen Winkel.

z. B. für ein Quadrat:

Zeichne ein Quadrat

Smalltalk

denke daran, am Ende wieder aufzuräumen nimm eine leere Zeichenfläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke

Objekt-Modell Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen

drehe den Stift in die richtige Richtung setze den Stift auf die Zeichenfläche wähle eine Seitenlänge wiederhole 4-mal gehe die Seitenlänge vor 90◦

drehe den Stift um hebe den Stift wieder auf

Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

I 1 2 3 4 5 6 7 8 9 10 11 12

Umsetzung in Smalltalk (z. B. in einem workspace): | stift seite | Display restoreAfter: [ Display fillWhite. stift := Pen new. stift defaultNib: 5. stift color: 7. stift place: 250@300. stift north. stift down. seite := 100. 4 timesRepeat: [ stift go: seite. stift turn: 90.]. stift up.]

Zeichne ein Quadrat

Smalltalk

denke daran, am Ende wieder aufzuräumen nimm eine leere Zeichenfläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke

Objekt-Modell

drehe den Stift in die richtige Richtung

Priorität von Nachrichten

setze den Stift auf die Zeichenfläche wähle eine Seitenlänge wiederhole 4-mal gehe die Seitenlänge vor drehe den Stift um 90◦ hebe den Stift wieder auf

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

I 1 2 3 4 5 6 7 8 9 10 11 12

Umsetzung in Smalltalk (z. B. in einem workspace): | stift seite | Display restoreAfter: [ Display fillWhite. stift := Pen new. stift defaultNib: 5. stift color: 7. stift place: 250@300. stift north. stift down. seite := 100. 4 timesRepeat: [ stift go: seite. stift turn: 90.]. stift up.]

Zeichne ein Quadrat

Smalltalk

denke daran, am Ende wieder aufzuräumen nimm eine leere Zeichenfläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke

Objekt-Modell

drehe den Stift in die richtige Richtung

Priorität von Nachrichten

setze den Stift auf die Zeichenfläche wähle eine Seitenlänge wiederhole 4-mal gehe die Seitenlänge vor drehe den Stift um 90◦ hebe den Stift wieder auf

Zeile 2: Wie Transcript ist auch Display eine globale Variable. Die Nachricht Display restoreAfter: aBlock hat zur Folge, dass das Programm nach Abarbeitung des Blocks auf einen Mausklick wartet und dann den Bildschirm wiederherstellt.

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

I 1 2 3 4 5 6 7 8 9 10 11 12

Umsetzung in Smalltalk (z. B. in einem workspace): | stift seite | Display restoreAfter: [ Display fillWhite. stift := Pen new. stift defaultNib: 5. stift color: 7. stift place: 250@300. stift north. stift down. seite := 100. 4 timesRepeat: [ stift go: seite. stift turn: 90.]. stift up.]

Zeichne ein Quadrat

Smalltalk

denke daran, am Ende wieder aufzuräumen nimm eine leere Zeichenfläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke

Objekt-Modell

drehe den Stift in die richtige Richtung

Priorität von Nachrichten

setze den Stift auf die Zeichenfläche wähle eine Seitenlänge wiederhole 4-mal gehe die Seitenlänge vor drehe den Stift um 90◦ hebe den Stift wieder auf

Zeile 3: Instanzen der Klasse Pen sind (unsichtbare) Stifte, die auf dem Untergrund zeichnen können. Informiert euch im Browser insbesondere über die Methoden im Protokoll operations.

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

I 1 2 3 4 5 6 7 8 9 10 11 12

Umsetzung in Smalltalk (z. B. in einem workspace): | stift seite | Display restoreAfter: [ Display fillWhite. stift := Pen new. stift defaultNib: 5. stift color: 7. stift place: 250@300. stift north. stift down. seite := 100. 4 timesRepeat: [ stift go: seite. stift turn: 90.]. stift up.]

Zeichne ein Quadrat

Smalltalk

denke daran, am Ende wieder aufzuräumen nimm eine leere Zeichenfläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke

Objekt-Modell

drehe den Stift in die richtige Richtung

Priorität von Nachrichten

setze den Stift auf die Zeichenfläche wähle eine Seitenlänge wiederhole 4-mal gehe die Seitenlänge vor drehe den Stift um 90◦ hebe den Stift wieder auf

Zeile 10–11: Zählschleifen sind in Smalltalk Schlüsselwortnachrichten an eine ganze Zahl.

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik

Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

Zählschleifen in Smalltalk – timesRepeat:

Smalltalk Objekt-Modell

Integer

timesRepeat:

[Anweisungsblock]

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen Private Variablen Nichtprivate Variablen Literale Zahlen Zeichen Zeichenketten Symbole Arrays Verzweigung Bedingungen Bedingte Anweisungen Übungen Existenztest Bedingte Wiederholung Anfangsbedingung Endbedingung Übungen Zählschleifen Intervalldurchlauf Übungen – Turtle-Grafik Kollektionen und Iteratoren

Squeak

2.11 Zählschleifen – immer das gleiche

Markus Schlager

Zählschleifen in Smalltalk – timesRepeat:

Smalltalk Objekt-Modell

Integer

timesRepeat:

[Anweisungsblock]

Instanzen und Variablen new, new: und initialize Nachrichten Arithmetik

I

Integer»timesRepeat: aBlock ist eigentlich eine while-Schleife:

Vergleiche Logik Priorität von Nachrichten Sequenzen und Blöcke Variablen

Integer>>timesRepeat: aBlock "Evaluate the argument, aBlock, the number of times represented by the receiver." | count | count := 1. [count

Suggest Documents