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