Smalltalk mit Squeak

Größe: px
Ab Seite anzeigen:

Download "Smalltalk mit Squeak"

Transkript

1 mit Objektorientierte Programmierung in info10 Gymnasium Untergriesbach 25. Februar 2012

2 Vorbemerkungen I Die Folien stellen einen Auszug aus Unterrichtsmaterial dar, das im Rahmen des Informatikunterrichtes der 10. Jahrgangsstufe am Staatlichen Landschulheim Marquartstein 1 sowie am Gymnasium Untergriesbach entsteht. Ziel ist eine Einführung in die objektorientierte Programmierung unter Einbeziehung verschiedener Modellierungstechniken. 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.

3 Vorbemerkungen II Die verwendete Programmiersprache ist unter Verwendung der Entwicklungsumgebung bzw. Pharo. Als Modellierungswerkzeuge finden Dia und insbesondere für Python Umbrello Verwendung. 1 Hinter Text in dieser Farbe, allen Gliederungen (auch am rechten Rand) und den n am unteren Seitenrand verbergen sich in der Regel anklickbare Hyperlinks.

4 Gliederung I die Entwicklungsumgebung II Grundzüge der Programmiersprache Anhang

5 Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Teil 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 Methodensuche Übung

6 Überblick I die Entwicklungsumgebung Arbeitsoberfläche Maustasten Weltmenüs Halomenüs II Grundzüge der Programmiersprache Tastaturkürzel Speichern Speichern Image Speichern Projekte Speichern Monticello Hallo Welt! Der Browser Anhang 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 Methodensuche Übung

7 Gliederung I die Entwicklungsumgebung 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 Methodensuche Übung

8 1.1 Die Arbeitsoberfläche 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 Methodensuche Übung

9 1.1 Die Arbeitsoberfläche 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 Wichtigster Unterschied zum squeakland-image ist die Klappe Werkzeugkiste am rechten Rand. Methodensuche Übung

10 1.1 Die Arbeitsoberfläche 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 Bei den Halos gibt es ein Schraubenschlüssel-Halo für den Zugriff auf die Programmierwerkzeuge. Methodensuche Übung

11 1.2 Rot, Gelb, Blau die Maus Rot linke Maustaste wählt aus oder packt an. Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern Image Speichern Projekte Speichern Monticello Gelb mittlere Maustaste öffnet Kontextmenüs. Hallo Welt! Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute Instanzvariablen Vererbung und Polymorphismus Initialisierung Blau rechte Maustaste führt Metaoperationen aus, bringt z. B. die Halos zum Vorschein. Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

12 1.3 Wichtige Weltmenüs linke Maustaste (rot) Speichern bedeutet stets Speichern des gesamten Images im aktuellen Zustand, nicht nur des aktuellen Projektes. mittlere Maustaste (gelb) Das Projektmenü ist der Navigator-Klappe ähnlich. Durch Anklicken in der Objekthierarchie lassen sich auch verschwundene Objekte wieder finden. Alternative: Shift + roter Klick auf den Hintergrund 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 Methodensuche Übung

13 1.4 Halomenüs von Morph-Objekten rotes Halo Besonders nützlich ist hier das Layout- Untermenü. graues Halo Dieses Programmier- Menü ist das Tor von den etoys zur wahren -Welt. Besonders wichtig sind Browser für Morf und Morf erforschen (öffnet einen Inspector des Morfs). 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 Methodensuche Übung

14 1.5 Tastaturkürzel In zahlreichen Menüs (im Bild das Kontextmenü eines Workspace) sind in Klammern Tastaturkürzel angegeben. 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 Language Reference zu Tastaturkürzeln, Mausfunktionen und Menüs sowie den Grundlagen von. 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 Methodensuche Übung

15 1.6 Speichern Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Vorbemerkung zum Speichern 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. 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 Methodensuche Übung

16 1.7 Speichern des gesamten Images 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 Methodensuche Übung

17 1.8 Speichern von Projekten 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 Methodensuche Übung

18 1.9 Speichern von Paketen Monticello 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 Methodensuche Übung

19 1.10 Hallo Welt! Ö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 -, 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 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. 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 Methodensuche Übung

20 1.11 Der Browser Öffnet ein neues Projekt und darin einen Workspace. Schreibt die Zeile WatchMorph new openinworld. in den Workspace und führt sie aus (do it). 2 Um die Namen der Farbattribute zu eruieren, könnt ihr den Morf auch mit dem Inspector erforschen. 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 Methodensuche Übung

21 1.11 Der Browser Öffnet ein neues Projekt und darin einen Workspace. Schreibt die Zeile WatchMorph new openinworld. in den Workspace und führt sie aus (do it). 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 Farbe 2 wechseln. 2 Um die Namen der Farbattribute zu eruieren, könnt ihr den Morf auch mit dem Inspector erforschen. 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 Methodensuche Übung

22 1.11 Der Browser 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 Methodensuche Übung

23 1.11 Der Browser 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 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 Methodensuche Übung

24 1.11 Der Browser Der Browser kennt zwei Darstellungsformen: Als Hierarchy Browser zeigt er die Klasse und ihre Oberklassen, 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 Methodensuche Übung

25 1.11 Der Browser Der Browser kennt zwei Darstellungsformen: 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. 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 Methodensuche Übung

26 1.11 Der Browser Der Browser kennt zwei Darstellungsformen: 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. 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 Methodensuche Übung

27 1.11 Der Browser 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 Teilbereiche des Browsers Attribute Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

28 1.11 Der Browser Teilbereiche des Browsers die logischen Kategorien von Klassen nicht alphabetisch sortiert! Gelber Mausklick darauf (Kontextmenü) erlaubt die Suche nach einer 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 Methodensuche Übung

29 1.11 Der Browser Teilbereiche des Browsers die logischen Kategorien von Klassen die Klassen der ausgewählten Kategorie bzw. die Klasse und ihre Oberklassen 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 Methodensuche Übung

30 1.11 Der Browser Teilbereiche des Browsers 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 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 Methodensuche Übung

31 1.11 Der Browser Teilbereiche des Browsers 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 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 Methodensuche Übung

32 1.11 Der Browser Teilbereiche des Browsers 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 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 Methodensuche Übung

33 1.11 Der Browser Teilbereiche des Browsers 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 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 Methodensuche Übung

34 1.12 MyWatchMorph eine neue Klasse Öffnet einen Workspace und wertet darin den Befehl WatchMorph new openinworld. aus (do it). 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 Methodensuche Übung

35 1.12 MyWatchMorph eine neue Klasse Öffnet einen Workspace und wertet darin den Befehl WatchMorph new openinworld. aus (do it). Es erscheint eine Uhr der Klasse WatchMorph. Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern Image Speichern Projekte Speichern Monticello Hallo Welt! 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. 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 Methodensuche Übung

36 1.12 MyWatchMorph eine neue Klasse Öffnet einen Workspace und wertet darin den Befehl WatchMorph new openinworld. aus (do it). Es erscheint eine Uhr der Klasse WatchMorph. Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern Image Speichern Projekte Speichern Monticello Hallo Welt! 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. Der Browser Anlegen einer neuen Klasse Planung Kategorie anlegen Klassendefinition Attribute Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Technisch bedeutet das, dass für diese besseren Uhren eine neue Unterklasse (z. B. MyWatchMorph) von WatchMorph angelegt werden muss. Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

37 1.12 MyWatchMorph eine neue Klasse MyWatchMorph ist Unterklasse von WatchMorph. 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 Methodensuche Übung

38 1.12 MyWatchMorph eine neue Klasse MyWatchMorph ist Unterklasse von WatchMorph. Objekte der Klasse MyWatchMorph benötigen ein zusätzliches Attribut farbwechsel, das speichert, ob das Vertauschen der Farben ein- oder ausgeschaltet ist. 3 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 Methodensuche Übung

39 1.12 MyWatchMorph eine neue Klasse MyWatchMorph ist Unterklasse von WatchMorph. Objekte der Klasse MyWatchMorph benötigen ein zusätzliches Attribut farbwechsel, das speichert, ob das Vertauschen der Farben ein- oder ausgeschaltet ist. 3 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 Methodensuche Übung

40 1.12 MyWatchMorph eine neue Klasse MyWatchMorph ist Unterklasse von WatchMorph. Objekte der Klasse MyWatchMorph benötigen ein zusätzliches Attribut farbwechsel, das speichert, ob das Vertauschen der Farben ein- oder ausgeschaltet ist. 3 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 Methodensuche Übung

41 1.12 MyWatchMorph eine neue Klasse MyWatchMorph ist Unterklasse von WatchMorph. Objekte der Klasse MyWatchMorph benötigen ein zusätzliches Attribut farbwechsel, das speichert, ob das Vertauschen der Farben ein- oder ausgeschaltet ist. 3 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 Modellierung in UML: WatchMorph +initialize() +step() MyWatchMorph -farbwechsel: boolesch +invertierefarben() 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 Methodensuche Übung

42 1.12 MyWatchMorph eine neue Klasse Erzeugt eine neue Kategorie für dieses Projekt. 5 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! 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. 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 Methodensuche Übung

43 1.12 MyWatchMorph eine neue Klasse Erzeugt die neue Klasse MyWatchMorph als Unterklasse von WatchMorph. Wählt die Kategorie aus (roter Mausklick auf den Namen). Ändert die Klassendefinition im Quelltextfenster wie folgt ab: Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern Image Speichern Projekte Speichern Monticello Hallo Welt! WatchMorph subclass: #MyWatchMorph instancevariablenames: Planung classvariablenames: pooldictionaries: category: Versuchsklassen Der Browser Anlegen einer neuen Klasse Kategorie anlegen Klassendefinition Attribute Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

44 1.12 MyWatchMorph eine neue Klasse Erzeugt die neue Klasse MyWatchMorph als Unterklasse von WatchMorph. Wählt die Kategorie aus (roter Mausklick auf den Namen). Ändert die Klassendefinition im Quelltextfenster wie folgt ab: Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern Image Speichern Projekte Speichern Monticello Hallo Welt! WatchMorph subclass: #MyWatchMorph instancevariablenames: Planung classvariablenames: pooldictionaries: category: Versuchsklassen Speichert die neue Definition mit Alt-s oder gelbem Mausklick in das Fenster und dann Ok. Der Browser Anlegen einer neuen Klasse Kategorie anlegen Klassendefinition Attribute Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

45 1.12 MyWatchMorph eine neue Klasse Erzeugt die neue Klasse MyWatchMorph als Unterklasse von WatchMorph. Wählt die Kategorie aus (roter Mausklick auf den Namen). Ändert die Klassendefinition im Quelltextfenster wie folgt ab: Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern Image Speichern Projekte Speichern Monticello Hallo Welt! WatchMorph subclass: #MyWatchMorph instancevariablenames: Planung classvariablenames: pooldictionaries: category: Versuchsklassen 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! Der Browser Anlegen einer neuen Klasse Kategorie anlegen Klassendefinition Attribute Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

46 1.12 MyWatchMorph eine neue Klasse Erzeugt die neue Klasse MyWatchMorph als Unterklasse von WatchMorph. Wählt die Kategorie aus (roter Mausklick auf den Namen). Ändert die Klassendefinition im Quelltextfenster wie folgt ab: Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Tastaturkürzel Speichern Speichern Image Speichern Projekte Speichern Monticello Hallo Welt! WatchMorph subclass: #MyWatchMorph instancevariablenames: Planung classvariablenames: pooldictionaries: category: Versuchsklassen 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 6 Wann immer ihr aufgefordert werdet, eure Initialen einzugeben, tippt euren Namen in das Fenster. Der Browser Anlegen einer neuen Klasse Kategorie anlegen Klassendefinition Attribute Instanzvariablen Vererbung und Polymorphismus Initialisierung Protokoll anlegen Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

47 1.12 MyWatchMorph eine neue Klasse 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. Ändert den Quelltext dazu folgendermaßen ab: WatchMorph subclass: #MyWatchMorph instancevariablenames: farbwechsel classvariablenames: pooldictionaries: category: Versuchsklassen (lokale) namen müssen mit einem Kleinbuchstaben beginnen! Der typ (hier wäre er boolesch bzw. Boolean) wird in nicht festgelegt. Alt-s. 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 Methodensuche Übung

48 1.12 MyWatchMorph eine neue Klasse Schaltet den Browser auf Hierarchy Browser um, sodass die Klassenhierarchie angezeigt wird. 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 Methodensuche Übung

49 1.12 MyWatchMorph eine neue Klasse Schaltet den Browser auf Hierarchy Browser um, sodass die Klassenhierarchie angezeigt wird. 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 MyWatchMorph wurde als Unterklasse von WatchMorph angelegt was bedeutet das? Methodendefinition Datenkapselung Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

50 1.12 MyWatchMorph eine neue Klasse Neben farbwechsel besitzen Objekte der Klasse MyWatchMorph auch sämtliche Attribute der Klasse WatchMorph (und deren Oberklassen), also z. B. color und handscolor. 7 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 Methodensuche Übung

51 1.12 MyWatchMorph eine neue Klasse Neben farbwechsel besitzen Objekte der Klasse MyWatchMorph auch sämtliche Attribute der Klasse WatchMorph (und deren Oberklassen), also z. B. color und handscolor. 7 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 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

52 1.12 MyWatchMorph eine neue Klasse Neben farbwechsel besitzen Objekte der Klasse MyWatchMorph auch sämtliche Attribute der Klasse WatchMorph (und deren Oberklassen), also z. B. color und handscolor. 7 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 Noch hat farbwechsel keinen Wert: nil 7 Öffnet einen Workspace, erzeugt mit dem Befehl MyWatchMorph new openinhand. eine Instanz der Klasse und erforscht den Morph, um das zu sehen. Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

53 1.12 MyWatchMorph eine neue Klasse Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber: 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 Methodensuche Übung

54 1.12 MyWatchMorph eine neue Klasse Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber: Vererbte Methoden können auch modifiziert werden und in der neuen Klasse eine andere Wirkung besitzen als in den Oberklassen: Polymorphismus oder Überschreiben (Override) 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 Methodensuche Übung

55 1.12 MyWatchMorph eine neue Klasse Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber: 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: 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 Methodensuche Übung

56 1.12 MyWatchMorph eine neue Klasse Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber: 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. 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 Methodensuche Übung

57 1.12 MyWatchMorph eine neue Klasse Gleiches gilt für die Methoden: Die neue Klasse erbt alle Methoden ihrer Oberklassen, aber: 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. 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 Methodensuche Übung

58 1.12 MyWatchMorph eine neue Klasse Arbeitsoberfläche Maustasten Weltmenüs Halomenüs Bei der Erzeugung eines neuen Objektes müssen dessen Attributen Werte zugewiesen werden. Das erledigt in der Regel die Methode initialize im Protokoll initialization. Seht euch im Hierarchy Browser den Quelltext dieser Methode der Klasse WatchMorph an. Was passiert da? 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 Methodensuche Übung

59 1.12 MyWatchMorph eine neue Klasse WatchMorph»initialize 8 1 initialize 2 "initialize the state of the receiver" 3 super initialize. 4 5 self handscolor: Color red. 6 self centercolor: Color gray. 7 romannumerals := false. 8 antialias := false. 9 fontname := NewYork. 10 self extent: self start Was passiert hier alles? 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 8 Die Notation Klasse»methodenname ist kein gültiger -Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist. Methodensuche Übung

60 1.12 MyWatchMorph eine neue Klasse WatchMorph»initialize 8 1 initialize 2 "initialize the state of the receiver" 3 super initialize. 4 5 self handscolor: Color red. 6 self centercolor: Color gray. 7 romannumerals := false. 8 antialias := false. 9 fontname := NewYork. 10 self extent: self start Zeile 1 Methodendeklaration (Name und evtl. Parameter) 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 8 Die Notation Klasse»methodenname ist kein gültiger -Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist. Methodensuche Übung

61 1.12 MyWatchMorph eine neue Klasse WatchMorph»initialize 8 1 initialize 2 "initialize the state of the receiver" 3 super initialize. 4 5 self handscolor: Color red. 6 self centercolor: Color gray. 7 romannumerals := false. 8 antialias := false. 9 fontname := NewYork. 10 self extent: self start Zeile 2 Kommentarzeile, wird nicht ausgewertet 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 8 Die Notation Klasse»methodenname ist kein gültiger -Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist. Methodensuche Übung

62 1.12 MyWatchMorph eine neue Klasse WatchMorph»initialize 8 1 initialize 2 "initialize the state of the receiver" 3 super initialize. 4 5 self handscolor: Color red. 6 self centercolor: Color gray. 7 romannumerals := false. 8 antialias := false. 9 fontname := NewYork. 10 self extent: self start Zeile 7 9 direkte Wertzuweisungen für Attribute (Instanzvariablen) 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 8 Die Notation Klasse»methodenname ist kein gültiger -Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist. Methodensuche Übung

63 1.12 MyWatchMorph eine neue Klasse WatchMorph»initialize 8 1 initialize 2 "initialize the state of the receiver" 3 super initialize. 4 5 self handscolor: Color red. 6 self centercolor: Color gray. 7 romannumerals := false. 8 antialias := false. 9 fontname := NewYork. 10 self extent: self start Zeile 5,6,10 Wertzuweisungen an Instanzvariablen über entsprechende (Set-)Methoden des Objekts (self) 8 Die Notation Klasse»methodenname ist kein gültiger -Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist. 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 Methodensuche Übung

64 1.12 MyWatchMorph eine neue Klasse WatchMorph»initialize 8 1 initialize 2 "initialize the state of the receiver" 3 super initialize. 4 5 self handscolor: Color red. 6 self centercolor: Color gray. 7 romannumerals := false. 8 antialias := false. 9 fontname := NewYork. 10 self extent: self start Zeile 11 Aufruf einer weiteren Methode des Objekts 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 8 Die Notation Klasse»methodenname ist kein gültiger -Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist. Methodensuche Übung

65 1.12 MyWatchMorph eine neue Klasse WatchMorph»initialize 8 1 initialize 2 "initialize the state of the receiver" 3 super initialize. 4 5 self handscolor: Color red. 6 self centercolor: Color gray. 7 romannumerals := false. 8 antialias := false. 9 fontname := NewYork. 10 self extent: self start Zeile 3 Aufruf der Methode initialize, wie sie in der unmittelbaren Oberklasse (super) von WatchMorph definiert ist 8 Die Notation Klasse»methodenname ist kein gültiger -Code, sondern beschreibt nur, dass der genannte Selektor methodenname der angebenen Klasse gemeint ist. 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 Methodensuche Übung

66 1.12 MyWatchMorph eine neue Klasse Betrachtet auch die initialize-methoden der Oberklassen von WatchMorph und macht euch deren Inhalt jeweils klar. 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 Methodensuche Übung

67 1.12 MyWatchMorph eine neue Klasse Betrachtet auch die initialize-methoden der Oberklassen von WatchMorph und macht euch deren Inhalt jeweils klar. In den Klassen EllipseMorph und Object ist diese Methode nicht eigens definiert, d. h. es wird die entsprechende Methode der jeweiligen Oberklasse aufgerufen. 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 Methodensuche Übung

68 1.12 MyWatchMorph eine neue Klasse Betrachtet auch die initialize-methoden der Oberklassen von WatchMorph und macht euch deren Inhalt jeweils klar. 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. 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 Methodensuche Übung

69 1.12 MyWatchMorph eine neue Klasse Betrachtet auch die initialize-methoden der Oberklassen von WatchMorph und macht euch deren Inhalt jeweils klar. 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. Wie sollte wohl die initialize-methode der neuen Klasse MyWatchMorph aussehen? Notiert den vermutlichen Quelltext! 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 Methodensuche Übung

70 1.12 MyWatchMorph eine neue Klasse Eröffnet ein neues Protokoll für die Methode MyWatchMorph»initialize. 9 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). 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. 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 Methodensuche Übung

71 1.12 MyWatchMorph eine neue Klasse Programmiert die neue Methode initialize. Nach Wahl eines Protokolls (roter Mausklick auf den Namen) erscheint im Quelltextfenster eine Vorlage (template) für neue Methoden: message selector and argument names "comment stating purpose of message" temporary variable names statements Ersetzt die Vorlage durch folgenden Quelltext, den ihr per Copy&Paste weitgehend aus WatchMorph»initialize übernehmen könnt: 10 initialize "initialize the state of the receiver" super initialize. farbwechsel := true Alt-s. 10 Zuordnungspfeil als Unterstrich 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 Methodensuche Übung

72 1.12 MyWatchMorph eine neue Klasse Ein wichtiges Prinzip objektorientierter Programmierung ist die Datenkapselung: 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 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 Methodensuche Übung

73 1.12 MyWatchMorph eine neue Klasse Ein wichtiges Prinzip objektorientierter Programmierung ist die Datenkapselung: 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 haben diese Methoden in der Regel (fast) denselben Namen wie das Attribut. in unserem Beispiel: Instanzvariable farbwechsel Get-Methode farbwechsel Set-Methode farbwechsel: Beachte den Doppelpunkt! Diese Methoden gehören zum Protokoll accessing. 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 Methodensuche Übung

74 1.12 MyWatchMorph eine neue Klasse Zunächst die Get-Methode, eine Methode mit Rückgabewert 1 farbwechsel 2 farbwechsel Zeile 1 Methodendeklaration: der Methodenname (Selektor) Zeile 2 Als Ergebnis wird an der Wert der farbwechsel an den Sender der Nachricht zurückgegeben. 11 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 Methodensuche Übung 11 Der Rückgabepfeil wird als Dach ( ˆ ) eingegeben.

75 1.12 MyWatchMorph eine neue Klasse Zunächst die Get-Methode, eine Methode mit Rückgabewert 1 farbwechsel 2 farbwechsel Zeile 1 Methodendeklaration: der Methodenname (Selektor) Zeile 2 Als Ergebnis wird an der Wert der farbwechsel an den Sender der Nachricht zurückgegeben. 11 Wird bei einer Methode kein expliziter Rückgabewert definiert, liefert die Methode standardmäßig das aktuelle Objekt als Ergebnis zurück (ˆself). 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 Methodensuche Übung 11 Der Rückgabepfeil wird als Dach ( ˆ ) eingegeben.

76 1.12 MyWatchMorph eine neue Klasse Nun die Set-Methode, eine Methode mit Parameter 1 farbwechsel: boolwert 2 "Setzt bei boolescher Eingabe 3 das farbwechsel-verhalten" 4 5 (boolwert basictype = #Boolean) 6 iftrue: [farbwechsel := boolwert] 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 Methodensuche Übung

77 1.12 MyWatchMorph eine neue Klasse Nun die Set-Methode, eine Methode mit Parameter 1 farbwechsel: boolwert 2 "Setzt bei boolescher Eingabe 3 das farbwechsel-verhalten" 4 5 (boolwert basictype = #Boolean) 6 iftrue: [farbwechsel := boolwert] Zeile 1 Methodendeklaration: der Selektor zusammen mit einem (frei gewählten) Namen eines Parameters, der der Methode beim Aufruf übergeben werden muss 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 Methodensuche Übung

78 1.12 MyWatchMorph eine neue Klasse Nun die Set-Methode, eine Methode mit Parameter 1 farbwechsel: boolwert 2 "Setzt bei boolescher Eingabe 3 das farbwechsel-verhalten" 4 5 (boolwert basictype = #Boolean) 6 iftrue: [farbwechsel := boolwert] 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 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 Methodensuche Übung

79 1.12 MyWatchMorph eine neue Klasse Nun die Set-Methode, eine Methode mit Parameter 1 farbwechsel: boolwert 2 "Setzt bei boolescher Eingabe 3 das farbwechsel-verhalten" 4 5 (boolwert basictype = #Boolean) 6 iftrue: [farbwechsel := boolwert] 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 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 Methodensuche Übung

80 1.12 MyWatchMorph eine neue Klasse Nun die Set-Methode, eine Methode mit Parameter 1 farbwechsel: boolwert 2 "Setzt bei boolescher Eingabe 3 das farbwechsel-verhalten" 4 5 (boolwert basictype = #Boolean) 6 iftrue: [farbwechsel := boolwert] 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 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 Methodensuche 12 Das ist notwendig, weil (hier farbwechsel) beliebige Werte annehmen können, was gefährlich sein kann. Übung

81 1.12 MyWatchMorph eine neue Klasse Nun die Set-Methode, eine Methode mit Parameter 1 farbwechsel: boolwert 2 "Setzt bei boolescher Eingabe 3 das farbwechsel-verhalten" 4 5 (boolwert basictype = #Boolean) 6 iftrue: [farbwechsel := boolwert] 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 (hier farbwechsel) beliebige Werte annehmen können, was gefährlich sein kann. 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 Methodensuche Übung

82 1.12 MyWatchMorph eine neue Klasse 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): testuhr := MyWatchMorph new. testuhr openinworld. Transcript clear; show: testuhr farbwechsel; cr. testuhr farbwechsel: 5. Transcript show: testuhr farbwechsel; cr. testuhr farbwechsel: false. Transcript show: testuhr farbwechsel; cr. testuhr farbwechsel: 5. Transcript show: testuhr farbwechsel; cr. testuhr farbwechsel: true. Transcript show: testuhr farbwechsel; cr. Statt 5 könntet ihr auch sonst etwas schreiben. 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 Methodensuche Übung

83 1.12 MyWatchMorph eine neue Klasse 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: 1 invertierefarben 2 "vertauscht Zeiger- und Hintergrundfarbe" 3 hfarbe 4 self farbwechsel 5 iftrue: [hfarbe := self color. 6 self color: handscolor. 7 self handscolor: hfarbe] 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 Methodensuche Übung

84 1.12 MyWatchMorph eine neue Klasse 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: 1 invertierefarben 2 "vertauscht Zeiger- und Hintergrundfarbe" 3 hfarbe 4 self farbwechsel 5 iftrue: [hfarbe := self color. 6 self color: handscolor. 7 self handscolor: hfarbe] Zeile 3 Temporäre müssen am Beginn des Skripts zwischen senkrechten Strichen deklariert werden. 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 Methodensuche Übung

85 1.12 MyWatchMorph eine neue Klasse 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: 1 invertierefarben 2 "vertauscht Zeiger- und Hintergrundfarbe" 3 hfarbe 4 self farbwechsel 5 iftrue: [hfarbe := self color. 6 self color: handscolor. 7 self handscolor: hfarbe] Zeile 4 Als Bedingung wird hier die Get-Methode MyWatchMorph»farbwechsel ausgewertet, die einen booleschen Wahrheitswert liefert. 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 Methodensuche Übung

86 1.12 MyWatchMorph eine neue Klasse 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: 1 invertierefarben 2 "vertauscht Zeiger- und Hintergrundfarbe" 3 hfarbe 4 self farbwechsel 5 iftrue: [hfarbe := self color. 6 self color: handscolor. 7 self handscolor: hfarbe] Zeile 5 Der Hilfsvariablen hfarbe wird das Ergebnis der Get-Methode MyWatchMorph»color (Hintergrundfarbe) zugewiesen. (direkte Wertzuweisung, weil es zu temporären keine Set-Methoden gibt) 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 Methodensuche Übung

87 1.12 MyWatchMorph eine neue Klasse 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: 1 invertierefarben 2 "vertauscht Zeiger- und Hintergrundfarbe" 3 hfarbe 4 self farbwechsel 5 iftrue: [hfarbe := self color. 6 self color: handscolor. 7 self handscolor: hfarbe] Zeile 6,7 Mit den Set-Methoden MyWatchMorph»color: und MyWatchMorph»handsColor: werden den Attributen neue Werte zugewiesen. 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 Methodensuche Übung

88 1.12 MyWatchMorph eine neue Klasse 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: 1 invertierefarben 2 "vertauscht Zeiger- und Hintergrundfarbe" 3 hfarbe 4 self farbwechsel 5 iftrue: [hfarbe := self color. 6 self color: handscolor. 7 self handscolor: hfarbe] 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 Zeile 6,7 Da zu hfarbe und handscolor keine Get-Methoden existieren, werden direkt die werte übergeben. (kein self davor!) Methoden mit Rückgabewert Methoden mit Parameter Methoden mit temporären Methodensuche Übung

89 1.12 MyWatchMorph eine neue Klasse Nun muss nur noch die Methode step 13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden: 1 step 2 self invertierefarben. 3 self changed 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 13 Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step! Methodensuche Übung

90 1.12 MyWatchMorph eine neue Klasse Nun muss nur noch die Methode step 13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden: 1 step 2 self invertierefarben. 3 self changed Aber was bedeutet die Nachricht changed in Zeile 3? 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 13 Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step! Methodensuche Übung

91 1.12 MyWatchMorph eine neue Klasse Nun muss nur noch die Methode step 13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden: 1 step 2 self invertierefarben. 3 self changed Aber was bedeutet die Nachricht changed in Zeile 3? Es gibt zwei Werkzeuge, das herauszufinden: 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 13 Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step! Methodensuche Übung

92 1.12 MyWatchMorph eine neue Klasse Nun muss nur noch die Methode step 13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden: 1 step 2 self invertierefarben. 3 self changed Aber was bedeutet die Nachricht changed in Zeile 3? Es gibt zwei Werkzeuge, das herauszufinden: die Schaltflächen senders und implementors im (am besten Hierarchy) Browser 13 Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step! 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 Methodensuche Übung

93 1.12 MyWatchMorph eine neue Klasse Nun muss nur noch die Methode step 13 (Protokoll stepping and presenter) gegenüber WatchMorph»step geeignet angepasst werden: 1 step 2 self invertierefarben. 3 self changed Aber was bedeutet die Nachricht changed in Zeile 3? Es gibt zwei Werkzeuge, das herauszufinden: die Schaltflächen senders und implementors im (am besten Hierarchy) Browser den Methoden-Sucher (Selector Browser) in der Klappe Werkzeugkiste 13 Diese Methode wird bei Morph-Objekten in regelmäßigen Abständen aufgerufen; lest dazu den Quelltext von Morph»step! 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 Methodensuche Übung

94 1.12 MyWatchMorph eine neue Klasse senders und implementors im (Hierarchy) Browser 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. 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. Sucht in der erhaltenen Liste nach den Oberklassen der aktuellen Klasse, z. B. Morph»changed und Object»changed. 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 Methodensuche Übung

95 1.12 MyWatchMorph eine neue Klasse Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text 14 oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld) 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 Methodensuche Übung

96 1.12 MyWatchMorph eine neue Klasse Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text Im Suchfenster lassen sich beliebige Bruchstücke von Selektoren eingeben oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld) 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 Methodensuche Übung

97 1.12 MyWatchMorph eine neue Klasse Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text Im Suchfenster lassen sich beliebige Bruchstücke von Selektoren eingeben 14 Auswahl eines Selektors liefert eine Liste passender Klassen und Methoden. 14 oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld) 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 Methodensuche Übung

98 1.12 MyWatchMorph eine neue Klasse Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text Im Suchfenster lassen sich beliebige Bruchstücke von Selektoren eingeben 14 Auswahl eines Selektors liefert eine Liste passender Klassen und Methoden. Gelber Mausklick auf die Selektorenliste liefert ein Kontextmenü zur Einschränkung auf senders oder implementors. 14 oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld) 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 Methodensuche Übung

99 1.12 MyWatchMorph eine neue Klasse Methoden-Sucher (oder Selector Browser) in der Klappe Werkzeugkiste 14 text Im Suchfenster lassen sich beliebige Bruchstücke von Selektoren eingeben 14 Auswahl eines Selektors liefert eine Liste passender Klassen und Methoden. Gelber Mausklick auf die Selektorenliste liefert ein Kontextmenü zur Einschränkung auf senders oder implementors. Bei Klick auf eine der Methoden öffnet sich ein Systembrowser. 14 oder auch Anderes, etwa Ein-Ausgabe-Muster (vgl. die Anleitung im unteren Textfeld) 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 Methodensuche Übung

100 1.12 MyWatchMorph eine neue Klasse Was noch wünschenswert wäre: Falls jemanden das Geblinke der Uhr stört, sollte er über das -Menü-Halo die Möglichkeit haben, den Farbwechsel aus- oder auch wieder anzuschalten. Noch fehlt ein entsprechender Eintrag im Menü. 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. 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 Methodensuche Übung

101 Teil II II Instanzen und Private Nichtprivate ketten Turtle-Grafik

102 Überblick I die Entwicklungsumgebung II Grundzüge der Programmiersprache Anhang Instanzen und Private Nichtprivate ketten Turtle-Grafik

103 Gliederung II Grundzüge der Programmiersprache Das von Instanzen und Wertzuweisung an Instanzen Priorität/Rangfolge von Befehlssequenzen und Blöcke bedingte Anweisungen immer das gleiche fast das gleiche Turtle-Grafik Instanzen und Private Nichtprivate ketten Turtle-Grafik

104 2.1 Das von In 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

105 2.1 Das von In 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 (Methodenaufrufe) miteinander. Instanzen und Private Nichtprivate ketten Turtle-Grafik

106 2.2 Instanzen und Wertzuweisung Instanzen werden in der Regel durch die Nachricht new an die Klasse erzeugt, z. B. 15 MyWatchMorph new. 15 z. B. im Workspace oder innerhalb einer Methodendefinition Instanzen und Private Nichtprivate ketten Turtle-Grafik

107 2.2 Instanzen und Wertzuweisung Instanzen werden in der Regel durch die Nachricht new an die Klasse erzeugt, z. B. 15 MyWatchMorph new. Um auf die Instanz zugreifen zu können, sollte sie als Wert einer zugewiesen werden: 16 oder: 17 testuhr := MyWatchMorph new. testuhr MyWatchMorph new. 15 z. B. im Workspace oder innerhalb einer Methodendefinition 16 Probiert das in einem Workspace aus! (Alt-d) 17 wird als Unterstrich _ eingegeben. Instanzen und Private Nichtprivate ketten Turtle-Grafik

108 2.2 Instanzen und Wertzuweisung Instanzen werden in der Regel durch die Nachricht new an die Klasse erzeugt, z. B. 15 MyWatchMorph new. Um auf die Instanz zugreifen zu können, sollte sie als Wert einer zugewiesen werden: 16 oder: 17 testuhr := MyWatchMorph new. testuhr MyWatchMorph new. := bzw. ist der Zuweisungsoperator. 15 z. B. im Workspace oder innerhalb einer Methodendefinition 16 Probiert das in einem Workspace aus! (Alt-d) 17 wird als Unterstrich _ eingegeben. Instanzen und Private Nichtprivate ketten Turtle-Grafik

109 2.2 Instanzen und Wertzuweisung Instanzen werden in der Regel durch die Nachricht new an die Klasse erzeugt, z. B. 15 MyWatchMorph new. Um auf die Instanz zugreifen zu können, sollte sie als Wert einer zugewiesen werden: 16 oder: 17 testuhr := MyWatchMorph new. testuhr MyWatchMorph new. := bzw. ist der Zuweisungsoperator. (lokale) namen müssen mit einem Kleinbuchstaben beginnen. 15 z. B. im Workspace oder innerhalb einer Methodendefinition 16 Probiert das in einem Workspace aus! (Alt-d) 17 wird als Unterstrich _ eingegeben. Instanzen und Private Nichtprivate ketten Turtle-Grafik

110 2.3 new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben: Instanzen und Private Nichtprivate ketten Turtle-Grafik

111 2.3 new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben: Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." self basicnew initialize Instanzen und Private Nichtprivate ketten Turtle-Grafik

112 2.3 new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben: Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." self basicnew initialize Was passiert beim Aufruf der Methode? Instanzen und Private Nichtprivate ketten Turtle-Grafik

113 2.3 new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben: Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." self basicnew initialize Was passiert beim Aufruf der Methode? Die jeweilige Klasse (self), z. B. MyWatchMorph, erhält die Nachricht basicnew. Instanzen und Private Nichtprivate ketten Turtle-Grafik

114 2.3 new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben: Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." self basicnew initialize Was passiert beim Aufruf der Methode? 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

115 2.3 new ist eine Klassenmethode, die alle Klassen von der Metaklasse Behavior erben: Behavior>>new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." self basicnew initialize Was passiert beim Aufruf der Methode? 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 Das habt ihr bei MyWatchMorph gesehen und selbst verändert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

116 2.3 Bei manchen Objekten etwa Listen oder ketten muss man bei der Erzeugung die Anzahl ihrer Elemente angeben. Instanzen und Private Nichtprivate ketten Turtle-Grafik

117 2.3 Bei manchen Objekten etwa Listen oder ketten muss man bei der Erzeugung die Anzahl ihrer Elemente angeben. Solche Instanzen werden mit new: erzeugt: Instanzen und Private Nichtprivate ketten Turtle-Grafik

118 2.3 Bei manchen Objekten etwa Listen oder ketten muss man bei der Erzeugung die Anzahl ihrer Elemente angeben. Solche Instanzen werden mit new: erzeugt: Behavior>>new: sizerequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizerequested." (self basicnew: sizerequested) initialize Instanzen und Private Nichtprivate ketten Turtle-Grafik

119 2.3 Bei manchen Objekten etwa Listen oder ketten muss man bei der Erzeugung die Anzahl ihrer Elemente angeben. Solche Instanzen werden mit new: erzeugt: Behavior>>new: sizerequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizerequested." (self basicnew: sizerequested) initialize Beispielsweise entsteht mit testwort := String new: 10. eine zehn lange kette testwort testwort besteht erst einmal nur aus zehn Platzhaltern. testwort at:1 put:$s setzt z. B. das erste auf S. Instanzen und Private Nichtprivate ketten Turtle-Grafik

120 2.4 an Instanzen Instanzen können empfangen. Es gibt drei Arten von. Instanzen und Private Nichtprivate ketten Turtle-Grafik

121 2.4 an Instanzen Instanzen können empfangen. Es gibt drei Arten von. Unäre Nachricht (ohne Argument) empfaenger methodenname. testuhr openinhand. Time now. Date today. 5 squared. 20 Die Bspe. zu Daten und wertet ihr besser mit Alt-p aus (print it) 20 Instanzen und Private Nichtprivate ketten Turtle-Grafik

122 2.4 an Instanzen Schlüsselwortnachricht (mit Argument) empfaenger mwort1: wert1 mwort2: wert2. testuhr farbwechsel: false. testuhr x: 100 y:130. testuhr setcolor: Color yellow borderwidth: 10 bordercolor: Color blue. 5 raisedto: Natürlich sind yellow und blue auch nur (unäre) an Instanzen der Klasse Color. 21 Instanzen und Private Nichtprivate ketten Turtle-Grafik

123 2.4 an Instanzen Schlüsselwortnachricht (mit Argument) empfaenger mwort1: wert1 mwort2: wert2. testuhr farbwechsel: false. testuhr x: 100 y:130. testuhr setcolor: Color yellow borderwidth: 10 bordercolor: Color blue. 5 raisedto: 3. Beachtet die Doppelpunkte! Methodennamen können aus beliebig vielen Teilwörtern bestehen. Am Ende jeder Nachricht steht ein Punkt. 21 Natürlich sind yellow und blue auch nur (unäre) an Instanzen der Klasse Color. 21 Instanzen und Private Nichtprivate ketten Turtle-Grafik

124 2.4 an Instanzen Binäre Nachricht (zwei Objekte) empfaenger binärenachricht parameterobjekt. Binäre haben die Gestalt von arithmetischen Operatoren. Instanzen und Private Nichtprivate ketten Turtle-Grafik

125 2.4 an Instanzen Binäre Nachricht (zwei Objekte) empfaenger binärenachricht parameterobjekt. Binäre haben die Gestalt von arithmetischen Operatoren. : + - * / // \\ 15+4 "Addition" 15-4 "Subtraktion" 15*4 "Produkt" 15/4 "Division" 15//4 "Division (ganzzahlig)" 15\\4 "Divisionsrest" 22 Die Bspe. zu binären wertet ihr am besten mit Alt-p aus (print it) 22 Instanzen und Private Nichtprivate ketten Turtle-Grafik

126 2.4 an Instanzen Vergleich: < <= > >= = ~= == ~~ Instanzen und Private Nichtprivate ketten Turtle-Grafik

127 2.4 an Instanzen Vergleich: < <= > >= = ~= == ~~ Vergleichsoperatoren liefern als Ergebnisse die booleschen Werte true oder false. Instanzen und Private Nichtprivate ketten Turtle-Grafik

128 2.4 an Instanzen Vergleich: < <= > >= = ~= == ~~ Vergleichsoperatoren liefern als Ergebnisse die booleschen Werte true oder false. Erzeugt im Workspace erst einmal zwei mit der gleichen kette als Wert (Alt-d): a :=. b :=. Instanzen und Private Nichtprivate ketten Turtle-Grafik

129 2.4 an Instanzen Vergleich: < <= > >= = ~= == ~~ Vergleichsoperatoren liefern als Ergebnisse die booleschen Werte true oder false. Erzeugt im Workspace erst einmal zwei mit der gleichen kette als Wert (Alt-d): a :=. b :=. Vergleich von Werten 15 < 4 "kleiner als" 15 <= 4 "kleiner oder gleich" 15 > 4 "groesser als" 15 >= 4 "groesser oder gleich" 15 = 4 "gleich" a = b a = Scratch 15 ~= 4 "nicht gleich" Instanzen und Private Nichtprivate ketten Turtle-Grafik

130 2.4 an Instanzen Vergleich: < <= > >= = ~= == ~~ a :=. b :=. Vergleich von Identitäten 15 == 4 "identisch gleich - " 15 == 15 " gleiches Objekt" == a == b "!!!" 15 ~~ 4 "nicht das gleiche Objekt" 15 ~~ 15 a ~~ b Instanzen und Private Nichtprivate ketten Turtle-Grafik

131 2.4 an Instanzen Vergleich: < <= > >= = ~= == ~~ a :=. b :=. Vergleich von Identitäten 15 == 4 "identisch gleich - " 15 == 15 " gleiches Objekt" == a == b "!!!" 15 ~~ 4 "nicht das gleiche Objekt" 15 ~~ 15 a ~~ b Überrascht? Auch sind eigenständige Objekte! Instanzen und Private Nichtprivate ketten Turtle-Grafik

132 2.4 an Instanzen Vergleich: < <= > >= = ~= == ~~ a :=. b :=. Vergleich von Identitäten 15 == 4 "identisch gleich - " 15 == 15 " gleiches Objekt" == a == b "!!!" 15 ~~ 4 "nicht das gleiche Objekt" 15 ~~ 15 a ~~ b Überrascht? Auch sind eigenständige Objekte! Zunächst werdet ihr aber vor allem den Vergleich von Werten benötigen. Instanzen und Private Nichtprivate ketten Turtle-Grafik

133 2.4 an Instanzen : & true & true "logisches Und (AND)" true & false false & true false & false true true "logisches Oder (OR)" true false false true false false Instanzen und Private Nichtprivate ketten Turtle-Grafik

134 2.4 an Instanzen : & true & true "logisches Und (AND)" true & false false & true false & false true true "logisches Oder (OR)" true false false true false false Wie in der Mathematik üblich, ist ein Oder stets ein Oder auch. Instanzen und Private Nichtprivate ketten Turtle-Grafik

135 2.4 an Instanzen : & true & true "logisches Und (AND)" true & false false & true false & false true true "logisches Oder (OR)" true false false true false false Wie in der Mathematik üblich, ist ein Oder stets ein Oder auch. -> Instanzen und Private Nichtprivate ketten Haus, halt "Konkatenation (Aneinanderhaengen)" 100@200 "Ein Punkt mit x- und y-koordinate" 23 Erforscht diese Beispiele: Auswählen und Alt-i 24 -> Assoziation, vielleicht später Turtle-Grafik

136 2.5 Priorität/Rangfolge von Transcript show: Haus, halt. Transcript cr. "Neue Zeile im Transcript" Transcript show: 16 sqrt. Transcript show: 16 sqrt negated. Transcript show: Transcript show: squared. Transcript show: * 2. "!" Transcript show: 16 + (3 * 2). Transcript show: squared * 2. Transcript show: 4 raisedto: 9. "!!!" Transcript show: (4 raisedto: 9). Transcript show: (4 raisedto: 9-7). Transcript show: (4 sqrt raisedto: 9). Transcript show: (4 raisedto: 9 sqrt). Instanzen und Private Nichtprivate ketten Turtle-Grafik

137 2.5 Priorität/Rangfolge von Abarbeitung von links nach rechts, aber Transcript show: Haus, halt. Transcript cr. "Neue Zeile im Transcript" Transcript show: 16 sqrt. Transcript show: 16 sqrt negated. Transcript show: Transcript show: squared. Transcript show: * 2. "!" Transcript show: 16 + (3 * 2). Transcript show: squared * 2. Transcript show: 4 raisedto: 9. "!!!" Transcript show: (4 raisedto: 9). Transcript show: (4 raisedto: 9-7). Transcript show: (4 sqrt raisedto: 9). Transcript show: (4 raisedto: 9 sqrt). Instanzen und Private Nichtprivate ketten Turtle-Grafik

138 2.5 Priorität/Rangfolge von Abarbeitung von links nach rechts, aber Unär vor Binär vor Schlüsselwort Transcript show: Haus, halt. Transcript cr. "Neue Zeile im Transcript" Transcript show: 16 sqrt. Transcript show: 16 sqrt negated. Transcript show: Transcript show: squared. Transcript show: * 2. "!" Transcript show: 16 + (3 * 2). Transcript show: squared * 2. Transcript show: 4 raisedto: 9. "!!!" Transcript show: (4 raisedto: 9). Transcript show: (4 raisedto: 9-7). Transcript show: (4 sqrt raisedto: 9). Transcript show: (4 raisedto: 9 sqrt). Instanzen und Private Nichtprivate ketten Turtle-Grafik

139 2.5 Priorität/Rangfolge von Abarbeitung von links nach rechts, aber Unär vor Binär vor Schlüsselwort Änderung der Reihenfolge durch Klammern () Transcript show: Haus, halt. Transcript cr. "Neue Zeile im Transcript" Transcript show: 16 sqrt. Transcript show: 16 sqrt negated. Transcript show: Transcript show: squared. Transcript show: * 2. "!" Transcript show: 16 + (3 * 2). Transcript show: squared * 2. Transcript show: 4 raisedto: 9. "!!!" Transcript show: (4 raisedto: 9). Transcript show: (4 raisedto: 9-7). Transcript show: (4 sqrt raisedto: 9). Transcript show: (4 raisedto: 9 sqrt). Instanzen und Private Nichtprivate ketten Turtle-Grafik

140 2.6 Befehlssequenzen und Blöcke Eine Abfolge mehrerer wird als Sequenz bezeichnet. Instanzen und Private Nichtprivate ketten Turtle-Grafik

141 2.6 Befehlssequenzen und Blöcke Eine Abfolge mehrerer wird als Sequenz bezeichnet. Betrachtet z. B. die Initialisierungsmethode der Klasse WatchMorph: WatchMorph>>initialize super initialize. self handscolor: Color red. self centercolor: Color gray. romannumerals := false. antialias := false. fontname := NewYork. self extent: 130. self start Instanzen und Private Nichtprivate ketten Turtle-Grafik

142 2.6 Befehlssequenzen und Blöcke Eine Abfolge mehrerer wird als Sequenz bezeichnet. Betrachtet z. B. die Initialisierungsmethode der Klasse WatchMorph: WatchMorph>>initialize super initialize. self handscolor: Color red. self centercolor: Color gray. romannumerals := false. antialias := false. fontname := NewYork. self extent: 130. self start Die innerhalb einer Sequenz werden durch einen Punkt voneinander getrennt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

143 2.6 Befehlssequenzen und Blöcke Flussdiagramm Start initialisiere wie Oberklasse setze Zeigerfarbe rot setze Zentrumsfarbe grau schalte römische Ziffern aus schalte Kantenglättung aus setze Schriftart New York setze Abmessungen auf 130x130 starte Ende Instanzen und Private Nichtprivate ketten Turtle-Grafik

144 2.6 Befehlssequenzen und Blöcke Flussdiagramm Start initialisiere wie Oberklasse setze Zeigerfarbe rot setze Zentrumsfarbe grau schalte römische Ziffern aus schalte Kantenglättung aus setze Schriftart New York setze Abmessungen auf 130x130 starte Ende Struktogramm WatchMorph»initialize initialisiere wie Oberklasse setze Zeigerfarbe rot setze Zentrumsfarbe grau schalte römische Ziffern aus schalte Kantenglättung aus setze Schriftart New York setze Abmessungen auf 130x130 starte Instanzen und Private Nichtprivate ketten Turtle-Grafik

145 2.6 Befehlssequenzen und Blöcke Flussdiagramm Start initialisiere wie Oberklasse setze Zeigerfarbe rot setze Zentrumsfarbe grau schalte römische Ziffern aus schalte Kantenglättung aus setze Schriftart New York setze Abmessungen auf 130x130 starte Ende Struktogramm WatchMorph»initialize initialisiere wie Oberklasse setze Zeigerfarbe rot setze Zentrumsfarbe grau schalte römische Ziffern aus schalte Kantenglättung aus setze Schriftart New York setze Abmessungen auf 130x130 starte Struktogramme ermöglichen eine tabellarische Darstellung von Algorithmen oder Abläufen. Instanzen und Private Nichtprivate ketten Turtle-Grafik

146 2.6 Befehlssequenzen und Blöcke Einem einzigen Empfänger können auch mehrere zusammen geschickt werden. Instanzen und Private Nichtprivate ketten Turtle-Grafik

147 2.6 Befehlssequenzen und Blöcke Einem einzigen Empfänger können auch mehrere zusammen geschickt werden. Trennung der durch einen Strichpunkt: Instanzen und Private Nichtprivate ketten Turtle-Grafik

148 2.6 Befehlssequenzen und Blöcke Einem einzigen Empfänger können auch mehrere zusammen geschickt werden. Trennung der durch einen Strichpunkt: statt Transcript show: Erste Nachricht. Transcript cr. "Zeilenumbruch" Transcript show: Dritte Nachricht Instanzen und Private Nichtprivate ketten Turtle-Grafik

149 2.6 Befehlssequenzen und Blöcke Einem einzigen Empfänger können auch mehrere zusammen geschickt werden. Trennung der durch einen Strichpunkt: statt Transcript show: Erste Nachricht. Transcript cr. "Zeilenumbruch" Transcript show: Dritte Nachricht nun Transcript show: Erste Nachricht ; cr; show: Dritte Nachricht Instanzen und Private Nichtprivate ketten Turtle-Grafik

150 2.6 Befehlssequenzen und Blöcke Einem einzigen Empfänger können auch mehrere zusammen geschickt werden. Trennung der durch einen Strichpunkt: statt Transcript show: Erste Nachricht. Transcript cr. "Zeilenumbruch" Transcript show: Dritte Nachricht nun oder Transcript show: Erste Nachricht ; cr; show: Dritte Nachricht Instanzen und Private Nichtprivate ketten Transcript show: Erste Nachricht ; cr; show: Dritte Nachricht Turtle-Grafik

151 2.6 Befehlssequenzen und Blöcke Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen: einblock := [Transcript cr; show: ein Befehlsblock. MyWatchMorph new openinworld]. Instanzen und Private Nichtprivate ketten Turtle-Grafik

152 2.6 Befehlssequenzen und Blöcke Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen: einblock := [Transcript cr; show: ein Befehlsblock. MyWatchMorph new openinworld]. Blöcke sind Instanzen der Klasse BlockClosure und können daher empfangen, z. B. BlockClosure»value, um ihren Inhalt ausführen zu lassen: einblock value. Instanzen und Private Nichtprivate ketten Turtle-Grafik

153 2.6 Befehlssequenzen und Blöcke Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen: einblock := [Transcript cr; show: ein Befehlsblock. MyWatchMorph new openinworld]. Blöcke sind Instanzen der Klasse BlockClosure und können daher empfangen, z. B. BlockClosure»value, um ihren Inhalt ausführen zu lassen: einblock value. Blöcke kennen Blockvariablen. rechenblock := [ :b1 :b2 b1 + (2 * b2)]. Instanzen und Private Nichtprivate ketten Turtle-Grafik

154 2.6 Befehlssequenzen und Blöcke Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen: einblock := [Transcript cr; show: ein Befehlsblock. MyWatchMorph new openinworld]. Blöcke sind Instanzen der Klasse BlockClosure und können daher empfangen, z. B. BlockClosure»value, um ihren Inhalt ausführen zu lassen: einblock value. Blöcke kennen Blockvariablen. rechenblock := [ :b1 :b2 b1 + (2 * b2)]. 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). Instanzen und Private Nichtprivate ketten Turtle-Grafik

155 2.6 Befehlssequenzen und Blöcke Durch eckige Klammern [ ] lässt sich eine Befehlssequenz zu einem Block zusammenfassen: einblock := [Transcript cr; show: ein Befehlsblock. MyWatchMorph new openinworld]. Blöcke sind Instanzen der Klasse BlockClosure und können daher empfangen, z. B. BlockClosure»value, um ihren Inhalt ausführen zu lassen: einblock value. Blöcke kennen Blockvariablen. rechenblock := [ :b1 :b2 b1 + (2 * b2)]. 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). Instanzen und Private Nichtprivate ketten Turtle-Grafik

156 2.7 Instanzen und Private Nichtprivate ketten Turtle-Grafik

157 2.7 Wie im Abschnitt zur Wertzuweisung gezeigt, spielen eine zentrale Rolle beim Zugriff auf Objekte, um diesen senden zu können. Instanzen und Private Nichtprivate ketten Turtle-Grafik

158 2.7 Wie im Abschnitt zur Wertzuweisung gezeigt, spielen eine zentrale Rolle beim Zugriff auf Objekte, um diesen senden zu können. 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

159 2.7 Wie im Abschnitt zur Wertzuweisung gezeigt, spielen eine zentrale Rolle beim Zugriff auf Objekte, um diesen senden zu können. 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

160 2.7 Wie im Abschnitt zur Wertzuweisung gezeigt, spielen eine zentrale Rolle beim Zugriff auf Objekte, um diesen senden zu können. 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. Dieser Unterschied spiegelt sich in im namen wider. Instanzen und Private Nichtprivate ketten Turtle-Grafik

161 2.7 Bislang sind euch private begegnet als Instanzen und Private Nichtprivate ketten Turtle-Grafik

162 2.7 Bislang sind euch private begegnet als Blockvariablen innerhalb eines Anweisungsblocks: [ :b1 :b2 b1 + (2 * b2) ] value:5 value:4. Instanzen und Private Nichtprivate ketten Turtle-Grafik

163 2.7 Bislang sind euch private begegnet als Blockvariablen innerhalb eines Anweisungsblocks: [ :b1 :b2 b1 + (2 * b2) ] value:5 value:4. temporäre innerhalb einer Methode: MyWatchMorph>>invertiereFarben hfarbe hfarbe := self color. self handscolor: hfarbe. Instanzen und Private Nichtprivate ketten Turtle-Grafik

164 2.7 Bislang sind euch private begegnet als Blockvariablen innerhalb eines Anweisungsblocks: [ :b1 :b2 b1 + (2 * b2) ] value:5 value:4. temporäre innerhalb einer Methode: MyWatchMorph>>invertiereFarben hfarbe hfarbe := self color. self handscolor: hfarbe. Instanzvariablen einer Klasse: WatchMorph subclass: #MyWatchMorph instancevariablenames: farbwechsel classvariablenames: Instanzen und Private Nichtprivate ketten Turtle-Grafik

165 2.7 Bislang sind euch private begegnet als Blockvariablen innerhalb eines Anweisungsblocks: [ :b1 :b2 b1 + (2 * b2) ] value:5 value:4. temporäre innerhalb einer Methode: MyWatchMorph>>invertiereFarben hfarbe hfarbe := self color. self handscolor: hfarbe. Instanzvariablen einer Klasse: WatchMorph subclass: #MyWatchMorph instancevariablenames: farbwechsel classvariablenames: Parameter einer Methode: MyWatchMorph>>farbwechsel: boolwert farbwechsel := boolwert Instanzen und Private Nichtprivate ketten Turtle-Grafik

166 2.7 Private sind nur innerhalb ihres Kontextes bekannt: Instanzen und Private Nichtprivate ketten Turtle-Grafik

167 2.7 Private sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks Instanzen und Private Nichtprivate ketten Turtle-Grafik

168 2.7 Private sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks temporäre und Parameter nur innerhalb der Methode Instanzen und Private Nichtprivate ketten Turtle-Grafik

169 2.7 Private sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks temporäre und Parameter nur innerhalb der Methode Instanzvariablen nur für die jeweilige Instanz einer Klasse, also auch in all ihren Methoden. Instanzen und Private Nichtprivate ketten Turtle-Grafik

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

171 2.7 Private sind nur innerhalb ihres Kontextes bekannt: Blockvariablen nur innerhalb des Blocks temporäre und Parameter nur innerhalb der Methode Instanzvariablen nur für die jeweilige Instanz einer Klasse, also auch in all ihren Methoden. Die Namen privater müssen mit einem Kleinbuchstaben beginnen! Innerhalb ihres Kontextes kann man auf private direkt zugreifen ohne den Umweg über Set- und Get-Methoden. hfarbe hfarbe := self color. self handscolor: hfarbe. "ohne Set" "ohne Get" Instanzen und Private Nichtprivate ketten Turtle-Grafik

172 2.7 Dem gegenüber stehen nichtprivate : Instanzen und Private Nichtprivate ketten Turtle-Grafik

173 2.7 Dem gegenüber stehen nichtprivate : Sie sind mehreren Objekten zugänglich. Instanzen und Private Nichtprivate ketten Turtle-Grafik

174 2.7 Dem gegenüber stehen nichtprivate : Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Instanzen und Private Nichtprivate ketten Turtle-Grafik

175 2.7 Dem gegenüber stehen nichtprivate : Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Beispiele für nichtprivate : Instanzen und Private Nichtprivate ketten Turtle-Grafik

176 2.7 Dem gegenüber stehen nichtprivate : Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Beispiele für nichtprivate : globale sind allen Instanzen aller Klassen bekannt und können überall verwendet werden. Ein Beispiel ist die globale Variable Transcript. Instanzen und Private Nichtprivate ketten Turtle-Grafik

177 2.7 Dem gegenüber stehen nichtprivate : Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Beispiele für nichtprivate : globale 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

178 2.7 Dem gegenüber stehen nichtprivate : Sie sind mehreren Objekten zugänglich. Ihre Namen beginnen mit einem Großbuchstaben. Beispiele für nichtprivate : globale 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. WatchMorph subclass: #MyWatchMorph instancevariablenames: farbwechsel,zeitzone classvariablenames: Zeitzonen Instanzen und Private Nichtprivate ketten Turtle-Grafik

179 2.7 Beispielsweise könntet ihr den Uhren der Klasse MyWatchMorph noch beibringen wollen, die Zeit verschiedener Zeitzonen anzuzeigen. WatchMorph subclass: #MyWatchMorph instancevariablenames: farbwechsel,zeitzone classvariablenames: Zeitzonen Instanzen und Private Nichtprivate ketten Turtle-Grafik

180 2.7 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. WatchMorph subclass: #MyWatchMorph instancevariablenames: farbwechsel,zeitzone classvariablenames: Zeitzonen Instanzen und Private Nichtprivate ketten Turtle-Grafik

181 2.7 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: WatchMorph subclass: #MyWatchMorph instancevariablenames: farbwechsel,zeitzone classvariablenames: Zeitzonen Instanzen und Private Nichtprivate ketten Turtle-Grafik

182 2.8 Instanzen und Private Nichtprivate ketten Turtle-Grafik

183 2.8 sind Objekte, auf die (auch ohne Referenzierung durch ) durch einfaches Hinschreiben Bezug genommen werden kann. Instanzen und Private Nichtprivate ketten Turtle-Grafik

184 2.8 sind Objekte, auf die (auch ohne Referenzierung durch ) durch einfaches Hinschreiben Bezug genommen werden kann. kennt fünf Arten von n: Zahl (Number) (Character) kette (String) Symbol Feld (Array) Instanzen und Private Nichtprivate ketten Turtle-Grafik

185 2.8 In gibt es verschiedene klassen: Instanzen und Private Nichtprivate ketten Turtle-Grafik

186 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Instanzen und Private Nichtprivate ketten Turtle-Grafik

187 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B 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 die Klasse automatisch. Instanzen und Private Nichtprivate ketten Turtle-Grafik

188 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B 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 die Klasse automatisch. Übung 1. Sucht die Klassen im Browser und findet heraus, wie groß SmallInteger- höchstens sein können. 2. Lasst euch von einem Workspace aus im Transcript ganze eurer Wahl als römische, im 16er-System (als Hex-Zahl) oder z. B. im Vierersystem ausgeben. 3. Was berechnen die Methoden factorial, gcd:, lcm:? Instanzen und Private Nichtprivate ketten Turtle-Grafik

189 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Instanzen und Private Nichtprivate ketten Turtle-Grafik

190 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) liefert Brüche als Rechenergebnisse stets vollständig gekürzt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

191 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Float Reelle, z. B e e5 Instanzen und Private Nichtprivate ketten Turtle-Grafik

192 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Float Reelle, z. B e e5 Beachtet den Dezimalpunkt! Instanzen und Private Nichtprivate ketten Turtle-Grafik

193 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Float Reelle, z. B e e5 Beachtet den Dezimalpunkt! Das e steht für die Zehnerpotenz, z. B. 1.27e 30 = 1, bringt Ergebnisse immer in korrekte Gleitkommadarstellung, z. B e e6 Instanzen und Private Nichtprivate ketten Turtle-Grafik

194 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Float Reelle, z. B e e5 Beachtet den Dezimalpunkt! Das e steht für die Zehnerpotenz, z. B. 1.27e 30 = 1, bringt Ergebnisse immer in korrekte Gleitkommadarstellung, z. B e e6 Besondere : Kreiszahl π Float pi Eulerzahl e Float e Instanzen und Private Nichtprivate ketten Turtle-Grafik

195 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Float Reelle, z. B e e5 Beachtet den Dezimalpunkt! Das e steht für die Zehnerpotenz, z. B. 1.27e 30 = 1, bringt Ergebnisse immer in korrekte Gleitkommadarstellung, z. B e e6 Besondere : Kreiszahl π Float pi Eulerzahl e Float e Eine verwandte Klasse mit beliebiger Genauigkeit: ScaledDecimal Instanzen und Private Nichtprivate ketten Turtle-Grafik

196 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Float Reelle, z. B e e5 Complex Komplexe, z. B i Instanzen und Private Nichtprivate ketten Turtle-Grafik

197 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Float Reelle, z. B e e5 Complex Komplexe, z. B i Lest bei Bedarf den Klassenkommentar. Instanzen und Private Nichtprivate ketten Turtle-Grafik

198 2.8 In gibt es verschiedene klassen: Integer Ganze, z. B Fraction Rationale, z. B. (1/3) (-8/5) Float Reelle, z. B e e5 Complex Komplexe, z. B i Abgesehen von Complex sind alle klassen Unterklassen von Number. Das Protokoll converting bietet Methoden zum Umwandeln verschiedener arten in andere. Bei Rechenoperationen kann es zu einem Wechsel der klasse kommen, z. B. ergeben 5 sqrt oder 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

199 2.8 Einzelzeichen gehören der Klasse Character an. Instanzen und Private Nichtprivate ketten Turtle-Grafik

200 2.8 Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $, $3, $$. Instanzen und Private Nichtprivate ketten Turtle-Grafik

201 2.8 Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $, $3, $$. Für nichtdruckbare stehen an die Klasse 25 Character zur Verfügung, z. B. 25 Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

202 2.8 Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $, $3, $$. Für nichtdruckbare stehen an die Klasse 25 Character zur Verfügung, z. B. Leerzeichen Character space 25 Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

203 2.8 Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $, $3, $$. Für nichtdruckbare stehen an die Klasse 25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab 25 Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

204 2.8 Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $, $3, $$. Für nichtdruckbare stehen an die Klasse 25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab Zeilenumbruch Character cr 25 Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

205 2.8 Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $, $3, $$. Für nichtdruckbare stehen an die Klasse 25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab Zeilenumbruch Character cr Rückwärtslöschen Character backspace 25 Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

206 2.8 Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $, $3, $$. Für nichtdruckbare stehen an die Klasse 25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab Zeilenumbruch Character cr Rückwärtslöschen Character backspace Eurozeichen Character euro Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. 26 Eine Liste weiterer findet ihr im Klassenprotokoll accessing untypeable characters, auch eine Erklärung, warum das Eurozeichen evtl. nicht funktioniert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

207 2.8 Einzelzeichen gehören der Klasse Character an. Druckbare Einzelzeichen werden mit vorangestelltem Dollarzeichen dargestellt, z. B. $a, $R, $, $3, $$. Für nichtdruckbare stehen an die Klasse 25 Character zur Verfügung, z. B. Leerzeichen Character space Tabulator Character tab Zeilenumbruch Character cr Rückwärtslöschen Character backspace Eurozeichen Character euro 26 Besonders wichtig ist das Protokoll testing. Erkundet die Wirkung der zugehörigen in einem Workspace (Alt-p). 25 Klassenmethoden werden im Browser angezeigt, wenn ihr in der Klassenspalte statt instance das Feld class aktiviert. 26 Eine Liste weiterer findet ihr im Klassenprotokoll accessing untypeable characters, auch eine Erklärung, warum das Eurozeichen evtl. nicht funktioniert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

208 2.8 ketten (Strings) werden in durch einfache Hochkommata begrenzt, z. B. Das ist ein String. rocks :-) (Das ist keine Zahl!) u (Das ist etwas Anderes als $u!) Instanzen und Private Nichtprivate ketten Turtle-Grafik

209 2.8 ketten (Strings) werden in durch einfache Hochkommata begrenzt, z. B. Das ist ein String. rocks :-) (Das ist keine Zahl!) u (Das ist etwas Anderes als $u!) Soll der String ein Hochkomma ( ) als enthalten, muss dieses verdoppelt werden: Wie geht s? wird zu Wie geht s? Instanzen und Private Nichtprivate ketten Turtle-Grafik

210 2.8 ketten (Strings) werden in durch einfache Hochkommata begrenzt, z. B. Das ist ein String. rocks :-) (Das ist keine Zahl!) u (Das ist etwas Anderes als $u!) Soll der String ein Hochkomma ( ) als enthalten, muss dieses verdoppelt werden: Wie geht s? wird zu Wie geht s? Vorsicht, doppelte Hochkommata (") kennzeichnen in Kommentare: "Das ist ein Kommentar im Quelltext." Instanzen und Private Nichtprivate ketten Turtle-Grafik

211 2.8 ketten (Strings) werden in durch einfache Hochkommata begrenzt, z. B. Das ist ein String. rocks :-) (Das ist keine Zahl!) u (Das ist etwas Anderes als $u!) Soll der String ein Hochkomma ( ) als enthalten, muss dieses verdoppelt werden: Wie geht s? wird zu Wie geht s? Vorsicht, doppelte Hochkommata (") kennzeichnen in Kommentare: "Das ist ein Kommentar im Quelltext." Strings beherrschen zahlreiche nützliche Methoden, die sie teilweise auch von der Oberklasse SequenceableCollection erben. Besonders interressant sind die Protokolle comparing, converting und testing. Instanzen und Private Nichtprivate ketten Turtle-Grafik

212 2.8 ketten (Strings) werden in durch einfache Hochkommata begrenzt, z. B. Das ist ein String. rocks :-) (Das ist keine Zahl!) u (Das ist etwas Anderes als $u!) Soll der String ein Hochkomma ( ) als enthalten, muss dieses verdoppelt werden: Wie geht s? wird zu Wie geht s? Vorsicht, doppelte Hochkommata (") kennzeichnen in Kommentare: "Das ist ein Kommentar im Quelltext." Strings beherrschen zahlreiche nützliche Methoden, die sie teilweise auch von der Oberklasse SequenceableCollection erben. 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

213 2.8 sind besondere ketten, also eine Unterklasse von String. Instanzen und Private Nichtprivate ketten Turtle-Grafik

214 2.8 sind besondere ketten, also eine Unterklasse von String. werden durch ein vorangestelltes Doppelkreuz (#) gekennzeichnet, z. B. #Symbol #Feb13 # Ich bin ein Symbol! Instanzen und Private Nichtprivate ketten Turtle-Grafik

215 2.8 sind besondere ketten, also eine Unterklasse von String. werden durch ein vorangestelltes Doppelkreuz (#) gekennzeichnet, z. B. #Symbol #Feb13 # Ich bin ein Symbol! Enthält der Symbolbezeichner auch andere als Buchstaben oder Ziffern, sind die einfachen Hochkommata notwendig. Instanzen und Private Nichtprivate ketten Turtle-Grafik

216 2.8 sind besondere ketten, also eine Unterklasse von String. werden durch ein vorangestelltes Doppelkreuz (#) gekennzeichnet, z. B. #Symbol #Feb13 # Ich bin ein Symbol! Enthält der Symbolbezeichner auch andere 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

217 2.8 sind besondere ketten, also eine Unterklasse von String. werden durch ein vorangestelltes Doppelkreuz (#) gekennzeichnet, z. B. #Symbol #Feb13 # Ich bin ein Symbol! Enthält der Symbolbezeichner auch andere 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. werden z. B. als Namen von Klassen oder Methoden verwendet. Instanzen und Private Nichtprivate ketten Turtle-Grafik

218 2.8 (deutsch oft als Felder bezeichnet) sind Listen mit einer festen Anzahl von Elementen. Instanzen und Private Nichtprivate ketten Turtle-Grafik

219 2.8 (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. #( ) #( squeak $s #Feb13) #($a $b #($s smalltalk ) 4) Instanzen und Private Nichtprivate ketten Turtle-Grafik

220 2.8 (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. #( ) #( squeak $s #Feb13) #($a $b #($s smalltalk ) 4) Ein Array kann also auch andere als Elemente enthalten. Instanzen und Private Nichtprivate ketten Turtle-Grafik

221 2.8 (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. #( ) #( squeak $s #Feb13) #($a $b #($s smalltalk ) 4) Ein Array kann also auch andere als Elemente enthalten. Bei einem Spiel wie dem Schlagenrennen könnte man z. B. das Labyrinth als Array von implementieren, wenn jeder Rasterzeile ein Array von Labyrinthfeldern und dem ganzen Labyrinth ein Array dieser Zeilen zugeordnet wird. Instanzen und Private Nichtprivate ketten Turtle-Grafik

222 2.8 (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. #( ) #( squeak $s #Feb13) #($a $b #($s smalltalk ) 4) Ein Array kann also auch andere als Elemente enthalten. Bei einem Spiel wie dem Schlagenrennen könnte man z. B. das Labyrinth als Array von 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 findet sich wieder im Terse Guide to. Instanzen und Private Nichtprivate ketten Turtle-Grafik

223 2.9 bedingte Anweisungen Unter einer oder bedingten Anweisung versteht man ein Konstrukt der Form Instanzen und Private Nichtprivate ketten Turtle-Grafik

224 2.9 bedingte Anweisungen Unter einer oder bedingten Anweisung versteht man ein Konstrukt der Form einseitige wenn Bedingung, dann Aktion oder Instanzen und Private Nichtprivate ketten Turtle-Grafik

225 2.9 bedingte Anweisungen Unter einer oder bedingten Anweisung versteht man ein Konstrukt der Form einseitige wenn Bedingung, dann Aktion oder zweiseitige wenn Bedingung, dann Aktion, sonst Alternative Instanzen und Private Nichtprivate ketten Turtle-Grafik

226 2.9 bedingte Anweisungen Unter einer oder bedingten Anweisung versteht man ein Konstrukt der Form einseitige wenn Bedingung, dann Aktion oder zweiseitige wenn Bedingung, dann Aktion, sonst Alternative Flussdiagramm WAHR Aktion Bedingung FALSCH Alternative Instanzen und Private Nichtprivate ketten Turtle-Grafik

227 2.9 bedingte Anweisungen Unter einer oder bedingten Anweisung versteht man ein Konstrukt der Form einseitige wenn Bedingung, dann Aktion oder zweiseitige wenn Bedingung, dann Aktion, sonst Alternative Flussdiagramm WAHR Aktion Bedingung FALSCH Alternative Struktogramm Bedingung WAHR FALSCH Aktion Alternative Instanzen und Private Nichtprivate ketten Turtle-Grafik

228 2.9 bedingte Anweisungen Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. 27 Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

229 2.9 bedingte Anweisungen Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. Ein Beispiel für sind, evtl. verknüpft durch logische Operatoren: 27 Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

230 2.9 bedingte Anweisungen Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. Ein Beispiel für sind, evtl. verknüpft durch logische Operatoren: Die Zahl x liegt zwischen 5 und 13. (5<=x) & (x<=13) 27 Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

231 2.9 bedingte Anweisungen Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. Ein Beispiel für sind, evtl. verknüpft durch logische Operatoren: Die Zahl x liegt zwischen 5 und 13. (5<=x) & (x<=13) Die Zahl y ist ein Vielfaches von 5. y\\5 = 0 27 Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

232 2.9 bedingte Anweisungen Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. Ein Beispiel für sind, evtl. verknüpft durch logische Operatoren: Die Zahl x liegt zwischen 5 und 13. (5<=x) & (x<=13) Die Zahl y ist ein Vielfaches von 5. y\\5 = 0 Die Zahl z ist ungerade oder größer als 100. (z\\2 ~= 0) (z > 100) 27 Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

233 2.9 bedingte Anweisungen Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. Ein Beispiel für sind, evtl. verknüpft durch logische Operatoren: Die Zahl x liegt zwischen 5 und 13. (5<=x) & (x<=13) Die Zahl y ist ein Vielfaches von 5. y\\5 = 0 Die Zahl z ist ungerade oder größer als 100. (z\\2 ~= 0) (z > 100) Das Wort name ist weder Hans noch Elke. (name ~= Hans ) & (name ~= Elke ) 27 Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

234 2.9 bedingte Anweisungen Eine Bedingung ist ein boolescher Ausdruck, d. h. sie liefert den Wert true oder false. Ein Beispiel für sind, evtl. verknüpft durch logische Operatoren: Die Zahl x liegt zwischen 5 und 13. (5<=x) & (x<=13) Die Zahl y ist ein Vielfaches von 5. y\\5 = 0 Die Zahl z ist ungerade oder größer als 100. (z\\2 ~= 0) (z > 100) Das Wort name ist weder Hans noch Elke. (name ~= Hans ) & (name ~= Elke ) oder 27 ((name = Hans ) (name = Elke )) not 27 Die Nachricht not kehrt einen booleschen Wert um: true not ergibt false und umgekehrt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

235 2.9 bedingte Anweisungen Manche Klassen (z. B. alle ) bieten in den Protokollen comparing und testing weitere Methoden, die als taugen, z. B. Instanzen und Private Nichtprivate ketten Turtle-Grafik

236 2.9 bedingte Anweisungen Manche Klassen (z. B. alle ) bieten in den Protokollen comparing und testing weitere Methoden, die als taugen, z. B. Die ganze Zahl x ist durch die ganze Zahl y teilbar. x isdivisibleby: y Instanzen und Private Nichtprivate ketten Turtle-Grafik

237 2.9 bedingte Anweisungen Manche Klassen (z. B. alle ) bieten in den Protokollen comparing und testing weitere Methoden, die als taugen, z. B. Die ganze Zahl x ist durch die ganze Zahl y teilbar. x isdivisibleby: y Die Zahl z ist gerade. z even Instanzen und Private Nichtprivate ketten Turtle-Grafik

238 2.9 bedingte Anweisungen Manche Klassen (z. B. alle ) bieten in den Protokollen comparing und testing weitere Methoden, die als taugen, z. B. Die ganze Zahl x ist durch die ganze Zahl y teilbar. x isdivisibleby: y Die Zahl z ist gerade. z even Das Wort name beginnt mit Small. name beginswith: Small Instanzen und Private Nichtprivate ketten Turtle-Grafik

239 2.9 bedingte Anweisungen Manche Klassen (z. B. alle ) bieten in den Protokollen comparing und testing weitere Methoden, die als taugen, z. B. Die ganze Zahl x ist durch die ganze Zahl y teilbar. x isdivisibleby: y Die Zahl z ist gerade. z even Das Wort name beginnt mit Small. name beginswith: Small Das zeichen ist eine Ziffer. zeichen isdigit Instanzen und Private Nichtprivate ketten Turtle-Grafik

240 2.9 bedingte Anweisungen Manche Klassen (z. B. alle ) bieten in den Protokollen comparing und testing weitere Methoden, die als taugen, z. B. Die ganze Zahl x ist durch die ganze Zahl y teilbar. x isdivisibleby: y Die Zahl z ist gerade. z even Das Wort name beginnt mit Small. name beginswith: Small Das zeichen ist eine Ziffer. zeichen isdigit Das vierte im Wort name ist kein Buchstabe (name at: 4) isletter not Instanzen und Private Nichtprivate ketten Turtle-Grafik

241 2.9 bedingte Anweisungen Testet die vorangegangenen Beispiele in einem Workspace, indem ihr dort den auftretenden erst einen typischen Wert zuordnet, dann die Bedingung schreibt, alles auswählt und dann mit Alt-p anzeigen lasst, z. B. name := Heidschnucke. name beginswith: Small Instanzen und Private Nichtprivate ketten Turtle-Grafik

242 2.9 bedingte Anweisungen Testet die vorangegangenen Beispiele in einem Workspace, indem ihr dort den auftretenden erst einen typischen Wert zuordnet, dann die Bedingung schreibt, alles auswählt und dann mit Alt-p anzeigen lasst, z. B. name := Heidschnucke. name beginswith: Small Entwickelt folgende und testet sie mit guten und schlechten Werten: Hinweis: Manchmal findet sich die passende Methode in einer Oberklasse! Instanzen und Private Nichtprivate ketten Turtle-Grafik

243 2.9 bedingte Anweisungen Testet die vorangegangenen Beispiele in einem Workspace, indem ihr dort den auftretenden erst einen typischen Wert zuordnet, dann die Bedingung schreibt, alles auswählt und dann mit Alt-p anzeigen lasst, z. B. name := Heidschnucke. name beginswith: Small Entwickelt folgende und testet sie mit guten und schlechten Werten: 28 Eine Zahl ist durch 7 teilbar, aber nicht positiv. 28 Hinweis: Manchmal findet sich die passende Methode in einer Oberklasse! Instanzen und Private Nichtprivate ketten Turtle-Grafik

244 2.9 bedingte Anweisungen Testet die vorangegangenen Beispiele in einem Workspace, indem ihr dort den auftretenden erst einen typischen Wert zuordnet, dann die Bedingung schreibt, alles auswählt und dann mit Alt-p anzeigen lasst, z. B. name := Heidschnucke. name beginswith: Small Entwickelt folgende und testet sie mit guten und schlechten Werten: 28 Eine Zahl ist durch 7 teilbar, aber nicht positiv. Eine Zahl liegt zwischen 0 und 4 oder -7 und Hinweis: Manchmal findet sich die passende Methode in einer Oberklasse! Instanzen und Private Nichtprivate ketten Turtle-Grafik

245 2.9 bedingte Anweisungen Testet die vorangegangenen Beispiele in einem Workspace, indem ihr dort den auftretenden erst einen typischen Wert zuordnet, dann die Bedingung schreibt, alles auswählt und dann mit Alt-p anzeigen lasst, z. B. name := Heidschnucke. name beginswith: Small Entwickelt folgende und testet sie mit guten und schlechten Werten: 28 Eine Zahl ist durch 7 teilbar, aber nicht positiv. Eine Zahl liegt zwischen 0 und 4 oder -7 und -3. Bis auf Groß- und Kleinschreibung lautet ein Wort smalltalk. 28 Hinweis: Manchmal findet sich die passende Methode in einer Oberklasse! Instanzen und Private Nichtprivate ketten Turtle-Grafik

246 2.9 bedingte Anweisungen Testet die vorangegangenen Beispiele in einem Workspace, indem ihr dort den auftretenden erst einen typischen Wert zuordnet, dann die Bedingung schreibt, alles auswählt und dann mit Alt-p anzeigen lasst, z. B. name := Heidschnucke. name beginswith: Small Entwickelt folgende und testet sie mit guten und schlechten Werten: 28 Eine Zahl ist durch 7 teilbar, aber nicht positiv. Eine Zahl liegt zwischen 0 und 4 oder -7 und -3. Bis auf Groß- und Kleinschreibung lautet ein Wort smalltalk. Ein Wort enthält einen Bindestrich. 28 Hinweis: Manchmal findet sich die passende Methode in einer Oberklasse! Instanzen und Private Nichtprivate ketten Turtle-Grafik

247 2.9 bedingte Anweisungen Testet die vorangegangenen Beispiele in einem Workspace, indem ihr dort den auftretenden erst einen typischen Wert zuordnet, dann die Bedingung schreibt, alles auswählt und dann mit Alt-p anzeigen lasst, z. B. name := Heidschnucke. name beginswith: Small Entwickelt folgende und testet sie mit guten und schlechten Werten: 28 Eine Zahl ist durch 7 teilbar, aber nicht positiv. Eine Zahl liegt zwischen 0 und 4 oder -7 und -3. Bis auf Groß- und Kleinschreibung lautet ein Wort smalltalk. Ein Wort enthält einen Bindestrich. Ein Wort hat höchstens 18, enthält kein Leerzeichen und beginnt mit einem Kleinbuchstaben. 28 Hinweis: Manchmal findet sich die passende Methode in einer Oberklasse! Instanzen und Private Nichtprivate ketten Turtle-Grafik

248 2.9 bedingte Anweisungen Beispiel: römische Ziffern für (My)WatchMorph Wenn im Menü (rotes Halo) die römischen aktivert sind, dann zeigt die Uhr solche an, sonst arabische. Wie ist das gemacht? Sucht im Browser die Attribute und Methoden der Klasse WatchMorph, die mit den römischen zu tun haben (Tipp: Sender)! Wie wird die bedingte Anweisung in umgesetzt? Instanzen und Private Nichtprivate ketten Turtle-Grafik

249 2.9 bedingte Anweisungen WatchMorph>>initialize "initialize the state of the receiver"... romannumerals := false.... 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.... WatchMorph>>toggleRoman romannumerals := romannumerals not. self createlabels WatchMorph>>romanNumeralString "Answer a string governing the roman-numerals checkbox" (romannumerals iftrue: [ <on> ] iffalse: [ <off> ]), roman numerals translated WatchMorph>>createLabels numeral font h r self removeallmorphs. font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. r := (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] Instanzen und Private Nichtprivate ketten Turtle-Grafik

250 2.9 bedingte Anweisungen WatchMorph»initialize 1 WatchMorph>>initialize 2 "initialize the state of the receiver" romannumerals := false Zeile 4: romannumerals ist eine Variable mit einem booleschen Wert (false), die sich als Bedingung eignet: Sie kann wahr (true) oder falsch (false) sein. Instanzen und Private Nichtprivate ketten Turtle-Grafik

251 2.9 bedingte Anweisungen WatchMorph»addCustomMenuItems:hand: 1 WatchMorph>>addCustomMenuItems: amenu hand: ahandmorph 2 "Add morph-specific items to the given menu 3 which was invoked by the given hand." amenu addupdating: #romannumeralstring action: #toggleroman Zeile 1: ahandmorph ist ein Mauszeiger. Instanzen und Private Nichtprivate ketten Turtle-Grafik

252 2.9 bedingte Anweisungen WatchMorph»addCustomMenuItems:hand: 1 WatchMorph>>addCustomMenuItems: amenu hand: ahandmorph 2 "Add morph-specific items to the given menu 3 which was invoked by the given hand." amenu addupdating: #romannumeralstring action: #toggleroman Zeile 1: ahandmorph ist ein Mauszeiger. Zeile 5: Hier wird der entsprechende Eintrag im Menü beschrieben: Instanzen und Private Nichtprivate ketten Turtle-Grafik

253 2.9 bedingte Anweisungen WatchMorph»addCustomMenuItems:hand: 1 WatchMorph>>addCustomMenuItems: amenu hand: ahandmorph 2 "Add morph-specific items to the given menu 3 which was invoked by the given hand." amenu addupdating: #romannumeralstring action: #toggleroman Zeile 1: ahandmorph ist ein Mauszeiger. Zeile 5: Hier wird der entsprechende Eintrag im Menü beschrieben: Bei einem Mausklick wird als Aktion die Methode toggleroman aufgerufen und zur Aktualisierung des Menüeintrags (addupdating) die Methode romannumeralstring. Instanzen und Private Nichtprivate ketten Turtle-Grafik

254 2.9 bedingte Anweisungen WatchMorph»addCustomMenuItems:hand: 1 WatchMorph>>addCustomMenuItems: amenu hand: ahandmorph 2 "Add morph-specific items to the given menu 3 which was invoked by the given hand." amenu addupdating: #romannumeralstring action: #toggleroman Zeile 1: ahandmorph ist ein Mauszeiger. Zeile 5: Hier wird der entsprechende Eintrag im Menü beschrieben: 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 übergeben werden! Instanzen und Private Nichtprivate ketten Turtle-Grafik

255 2.9 bedingte Anweisungen WatchMorph»toggleRoman 1 WatchMorph>>toggleRoman 2 romannumerals := romannumerals not. 3 self createlabels Zeile 2: Hier passieren zwei Dinge: Instanzen und Private Nichtprivate ketten Turtle-Grafik

256 2.9 bedingte Anweisungen WatchMorph»toggleRoman 1 WatchMorph>>toggleRoman 2 romannumerals := romannumerals not. 3 self createlabels Zeile 2: Hier passieren zwei Dinge: Mit romannumerals not wird der Wert der Variable in sein logisches Gegenteil verkehrt (wahr statt falsch und umgekehrt). Instanzen und Private Nichtprivate ketten Turtle-Grafik

257 2.9 bedingte Anweisungen WatchMorph»toggleRoman 1 WatchMorph>>toggleRoman 2 romannumerals := romannumerals not. 3 self createlabels Zeile 2: Hier passieren zwei Dinge: 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 abgespeichert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

258 2.9 bedingte Anweisungen WatchMorph»toggleRoman 1 WatchMorph>>toggleRoman 2 romannumerals := romannumerals not. 3 self createlabels Zeile 2: Hier passieren zwei Dinge: 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 abgespeichert. Zeile 3: Abschließend wird die Nachricht createlabels an die Uhr selbst (self) geschickt, damit diese ihre Beschriftung (die Labels ) neu zeichnet. Instanzen und Private Nichtprivate ketten Turtle-Grafik

259 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 3-5: eine zweiseitige : Instanzen und Private Nichtprivate ketten Turtle-Grafik

260 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 3-5: eine zweiseitige : romannumerals ist die Bedingung. Instanzen und Private Nichtprivate ketten Turtle-Grafik

261 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 3-5: eine zweiseitige : romannumerals ist die Bedingung. Ist sie wahr (iftrue:), wird der nachfolgende Anweisungsblock [...] ausgeführt, Instanzen und Private Nichtprivate ketten Turtle-Grafik

262 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 3-5: eine zweiseitige : romannumerals ist die Bedingung. Ist sie wahr (iftrue:), wird der nachfolgende Anweisungsblock [...] ausgeführt, ist sie falsch (iffalse:), der Alternativblock [...]. Instanzen und Private Nichtprivate ketten Turtle-Grafik

263 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 3-5: eine zweiseitige : romannumerals ist die Bedingung. Ist sie wahr (iftrue:), wird der nachfolgende Anweisungsblock [...] ausgeführt, ist sie falsch (iffalse:), der Alternativblock [...]. Einer der beiden Zweige kann auch fehlen. Die Reihenfolge der beiden Zweige ist gleichgültig. Instanzen und Private Nichtprivate ketten Turtle-Grafik

264 2.9 bedingte Anweisungen in Bedingung iftrue: [Anweisungsblock] Bedingung iffalse: [Anweisungsblock] Bedingung iftrue: [Anweisungsblock] iffalse: [Alternativblock] Bedingung iffalse: [Anweisungsblock] iftrue: [Alternativblock] Ein Beispiel 29 x := 100 atrandom. (x > 50) iftrue: [Transcript cr; show: x asstring, : gewonnen! ] iffalse: [Transcript cr; show: x asstring, : leider verloren ] 29 Probiert es in einem Workspace aus! Instanzen und Private Nichtprivate ketten Turtle-Grafik

265 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

266 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated 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 kette ( <on> bzw. <off> ) als Wert Diese ketten werden (wegen der spitzen Klammern) im Menü als (un)ausgefüllte Checkbox dargestellt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

267 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 6: Drei Dinge: Instanzen und Private Nichtprivate ketten Turtle-Grafik

268 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 6: Drei Dinge: Auch hier wird eine kette als Wert erzeugt ( roman numerals ). Instanzen und Private Nichtprivate ketten Turtle-Grafik

269 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 6: Drei Dinge: Auch hier wird eine kette als Wert erzeugt ( roman numerals ). Mit der Nachricht translated wird sie ggf. in verschiedene Sprachen übersetzt (z. B. Deutsch) Instanzen und Private Nichtprivate ketten Turtle-Grafik

270 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 6: Drei Dinge: Auch hier wird eine kette als Wert erzeugt ( roman numerals ). Mit der Nachricht translated wird sie ggf. in verschiedene Sprachen übersetzt (z. B. Deutsch) Was bedeutet das Komma? Instanzen und Private Nichtprivate ketten Turtle-Grafik

271 2.9 bedingte Anweisungen WatchMorph»romanNumeralString 1 WatchMorph>>romanNumeralString 2 "Answer a string governing the roman-numerals checkbox" 3 (romannumerals 4 iftrue: [ <on> ] 5 iffalse: [ <off> ]) 6, roman numerals translated Zeile 6: Drei Dinge: Auch hier wird eine kette 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 (daher die runden Klammern). Dadurch werden die ketten <on> (bzw. <off> ) und die Übersetzung von roman numerals zu einer einzigen Kette aneinandergehängt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

272 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Instanzen und Private Nichtprivate ketten Turtle-Grafik

273 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Was passiert hier im wesentlichen? Instanzen und Private Nichtprivate ketten Turtle-Grafik

274 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Was passiert hier im wesentlichen? Zeile 3: Als erstes werden alle Submorphe der Uhr entfernt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

275 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Was passiert hier im wesentlichen? Zeile 3: Als erstes werden alle Submorphe der Uhr entfernt. Erforscht so eine Uhr mit dem Inspector! Instanzen und Private Nichtprivate ketten Turtle-Grafik

276 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Was passiert hier im wesentlichen? Zeile 3: Als erstes werden alle Submorphe der Uhr entfernt. Erforscht so eine Uhr mit dem Inspector! Ihr seht, die Submorphe der Uhr sind genau die auf dem Ziffernblatt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

277 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Was passiert hier im wesentlichen? Zeile 4 5: Schriftart, -größe und Radius der Bezifferung werden bestimmt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

278 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Was passiert hier im wesentlichen? Zeile 8 10: : Wenn eine neue Zahl römisch sein soll, wird sie so geschrieben, sonst nicht. Instanzen und Private Nichtprivate ketten Turtle-Grafik

279 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Was passiert hier im wesentlichen? Zeile 11 12: Die neue Zahl wird unter dem richtigen Winkel (hourangle: hour) wieder in die Uhr eingefügt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

280 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Instanzen und Private Nichtprivate ketten Turtle-Grafik

281 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Wie wird das gemacht? Instanzen und Private Nichtprivate ketten Turtle-Grafik

282 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Wie wird das gemacht? Zeile 2: Vier temporäre Hilfsvariablen werden deklariert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

283 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

284 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] 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 wird in der Hilfsvariablen numeral zwischengespeichert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

285 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Wie wird das gemacht? Zeile 4: Hier passiert viel: font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. Instanzen und Private Nichtprivate ketten Turtle-Grafik

286 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Wie wird das gemacht? Zeile 4: Hier passiert viel: font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. self height min: self width Zuerst wird das Minimum aus Höhe und Breite von self, also des ganzen WatchMorphs bestimmt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

287 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Wie wird das gemacht? Zeile 4: Hier passiert viel: font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. h := self height min: self width Dann wird dieses Minimum in der Hilfsvariablen h abgespeichert, um damit später in Zeile 5 den Radius r der Bezifferung zu berechnen. Instanzen und Private Nichtprivate ketten Turtle-Grafik

288 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Wie wird das gemacht? Zeile 4: Hier passiert viel: font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. (h := self height min: self width)//8. Nun wird der Wert von h (ganzzahlig) durch 8 geteilt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

289 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] 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. 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

290 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] 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. Zuletzt wird die neu erzeugte Schrift der Hilfsvariablen font als Wert zugewiesen. Instanzen und Private Nichtprivate ketten Turtle-Grafik

291 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Wie wird das gemacht? Zeile 7 12: ein großer Anweisungsblock Instanzen und Private Nichtprivate ketten Turtle-Grafik

292 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

293 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] 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 Instanzen und Private Nichtprivate ketten Turtle-Grafik

294 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] Wie wird das gemacht? Zeile 6 12: ein erstes Beispiel einer Zählschleife: Instanzen und Private Nichtprivate ketten Turtle-Grafik

295 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] 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 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." self subclassresponsibility 31 Untersucht 1 to: 12 mit Alt-i im Workspace oder lest die Methode Number»to:! Instanzen und Private Nichtprivate ketten Turtle-Grafik

296 2.9 bedingte Anweisungen WatchMorph»createLabels 1 WatchMorph>>createLabels 2 numeral font h r 3 self removeallmorphs. 4 font := StrikeFont familyname: fontname size: (h := self height min: self width)//8. 5 r := (1.4 * font height / h). 6 1 to: 12 do: 7 [:hour 8 numeral := romannumerals 9 iftrue: [hour printstringroman] 10 iffalse: [hour asstring]. 11 self addmorphback: ((StringMorph contents: numeral font: font emphasis: 1) 12 center: (self radius: r hourangle: hour)) lock] 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 von 1 bis 12) als Wert zugewiesen und für jedes dieser Elemente der Block einmal ausgeführt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

297 2.9 bedingte Anweisungen Übung 1 Bringt euren Uhren der Klasse MyWatchMorph bei, alle z. B. 5 Minuten neue Farben für Zeiger und Hintergrund zu benutzen. Vielleicht ist es hilfreich, die Methode WatchMorph»drawOn: zu lesen. relevante Klassen: Time und Color Anregungen zur Farbverwaltung: 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

298 2.9 bedingte Anweisungen Übung 2 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. 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

299 2.9 bedingte Anweisungen UML-Modell: Punktezaehler +punktestand +aktualisieredich(punkte) TextMorph +text +newcontents(string) +fragenkatalog +punktezaehler +initialize() Object MiniQuiz +stellefragen(fragenkatalog) +bewerte(antwort,loesung,maxpunkte): punkte +gibendstandaus() Rectangle +color +width +color(farbe) +width(breite) Dialogfenster Fragenkatalog FillInTheBlankMorph +class request(frage) +at(index) Array +do(anweisungsblock) Eintrag +frage +loesung +maxpunkte Setzt das Modell mit um. Auf den nächsten Seiten folgen ein paar nützliche Bemerkungen. Es kann sinnvoll sein, für ein derartiges Projekt im Browser eine eigene Kategorie anzulegen. * Instanzen und Private Nichtprivate ketten Turtle-Grafik

300 2.9 bedingte Anweisungen 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

301 2.9 bedingte Anweisungen 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. 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

302 2.9 bedingte Anweisungen MiniQuiz: Struktogramme einiger Methoden Untermethode Rückgabewert Instanzen und Private Nichtprivate ketten Turtle-Grafik

303 2.9 bedingte Anweisungen MiniQuiz: Struktogramme einiger Methoden 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 Untermethode Rückgabewert Instanzen und Private Nichtprivate ketten Turtle-Grafik

304 2.9 bedingte Anweisungen MiniQuiz: Struktogramme einiger Methoden 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 Untermethode Rückgabewert Instanzen und Private Nichtprivate ketten Turtle-Grafik

305 2.9 bedingte Anweisungen MiniQuiz: Struktogramme einiger Methoden 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 Untermethode Rückgabewert MiniQuiz»stelleFragenAus:katalog 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 Instanzen und Private Nichtprivate ketten Turtle-Grafik

306 2.9 bedingte Anweisungen MiniQuiz: Struktogramme einiger Methoden 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 Untermethode Rückgabewert MiniQuiz»stelleFragenAus:katalog 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 MiniQuiz»bewerte:antwort zu:loesung mit:maxpunkte antwort=loesung WAHR FALSCH punkte 0 Instanzen und Private Nichtprivate ketten Turtle-Grafik

307 2.9 bedingte Anweisungen FillInTheBlankMorph: ein Dialogfenster Instanzen und Private Nichtprivate ketten Turtle-Grafik

308 2.9 bedingte Anweisungen FillInTheBlankMorph: ein Dialogfenster Ü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. ergebnis ergebnis := FillInTheBlankMorph request: Was denkst du?. Transcript cr; show: ergebnis. Instanzen und Private Nichtprivate ketten Turtle-Grafik

309 2.9 bedingte Anweisungen FillInTheBlankMorph: ein Dialogfenster Ü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. ergebnis ergebnis := FillInTheBlankMorph request: Was denkst du?. Transcript cr; show: ergebnis. Probiert beides in einem Workspace aus! Instanzen und Private Nichtprivate ketten Turtle-Grafik

310 2.9 bedingte Anweisungen FillInTheBlankMorph: ein Dialogfenster Ü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. ergebnis ergebnis := FillInTheBlankMorph request: Was denkst du?. Transcript cr; show: ergebnis. Probiert beides in einem Workspace aus! Lest die Quelltexte und die Varianten dieser Methoden, um z. B. das Aussehen des Fensters zu beeinflussen. Instanzen und Private Nichtprivate ketten Turtle-Grafik

311 2.9 bedingte Anweisungen Dialogfenster: z. B. ein FillInTheBlankMorph Instanzen und Private Nichtprivate ketten Turtle-Grafik

312 2.9 bedingte Anweisungen Dialogfenster: z. B. ein FillInTheBlankMorph Leider wird bei Verwendung von FillInTheBlankMorph für jeden Dialog ein neues Fenster erzeugt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

313 2.9 bedingte Anweisungen Dialogfenster: z. B. ein FillInTheBlankMorph Leider wird bei Verwendung von FillInTheBlankMorph für jeden Dialog ein neues Fenster erzeugt. Um das zu vermeiden, könntet ihr eine Unterklasse von FillInTheBlankMorph (oder auch direkt von RectangleMorph) anlegen, 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 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

314 2.9 bedingte Anweisungen In WatchMorph»drawOn: tritt noch eine weitere gebräuchliche Form der auf: 1 WatchMorph>>drawOn: acanvas 2 "Draw the watch on the given canvas" 3 4 phour pmin psec time centercolor 5 time := Time now. 6 "..." 7 centercolor := ccolor 8 ifnil: 9 [Color transparent] 10 ifnotnil: 11 [time hours < iftrue: [ccolor muchlighter] 13 iffalse: [ccolor]]. 14 "..." Instanzen und Private Nichtprivate ketten Turtle-Grafik

315 2.9 bedingte Anweisungen In WatchMorph»drawOn: tritt noch eine weitere gebräuchliche Form der auf: 1 WatchMorph>>drawOn: acanvas 2 "Draw the watch on the given canvas" 3 4 phour pmin psec time centercolor 5 time := Time now. 6 "..." 7 centercolor := ccolor 8 ifnil: 9 [Color transparent] 10 ifnotnil: 11 [time hours < iftrue: [ccolor muchlighter] 13 iffalse: [ccolor]]. 14 "..." In Zeile 7 13 wird überprüft, ob die Instanzvariable ccolor überhaupt einen Wert besitzt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

316 2.9 bedingte Anweisungen In WatchMorph»drawOn: tritt noch eine weitere gebräuchliche Form der auf: 1 WatchMorph>>drawOn: acanvas 2 "Draw the watch on the given canvas" 3 4 phour pmin psec time centercolor 5 time := Time now. 6 "..." 7 centercolor := ccolor 8 ifnil: 9 [Color transparent] 10 ifnotnil: 11 [time hours < iftrue: [ccolor muchlighter] 13 iffalse: [ccolor]]. 14 "..." 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. Instanzen und Private Nichtprivate ketten Turtle-Grafik

317 2.9 bedingte Anweisungen In WatchMorph»drawOn: tritt noch eine weitere gebräuchliche Form der auf: 1 WatchMorph>>drawOn: acanvas 2 "Draw the watch on the given canvas" 3 4 phour pmin psec time centercolor 5 time := Time now. 6 "..." 7 centercolor := ccolor 8 ifnil: 9 [Color transparent] 10 ifnotnil: 11 [time hours < iftrue: [ccolor muchlighter] 13 iffalse: [ccolor]]. 14 "..." 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 centercolor wird dann das Ergebnis des jeweiligen Anweisungsblockes als Wert zugewiesen. Instanzen und Private Nichtprivate ketten Turtle-Grafik

318 2.10 Ein wesentliches Konstrukt in Algorithmen sind bedingte Wiederholungen, in Programmiersprachen oft als while-schleifen bezeichnet. Instanzen und Private Nichtprivate ketten Turtle-Grafik

319 2.10 Ein wesentliches Konstrukt in Algorithmen sind bedingte Wiederholungen, in Programmiersprachen oft als while-schleifen bezeichnet. Man unterscheidet zwei Arten: Instanzen und Private Nichtprivate ketten Turtle-Grafik

320 2.10 Ein wesentliches Konstrukt in Algorithmen sind bedingte Wiederholungen, in Programmiersprachen oft als while-schleifen bezeichnet. Man unterscheidet zwei Arten: : solange (als) solange (als) Bedingung (noch nicht) erfüllt ist, agiere Solange du die dritte Kreuzung noch nicht erreicht hast, gehe geradeaus. Instanzen und Private Nichtprivate ketten Turtle-Grafik

321 2.10 Ein wesentliches Konstrukt in Algorithmen sind bedingte Wiederholungen, in Programmiersprachen oft als while-schleifen bezeichnet. Man unterscheidet zwei Arten: : solange (als) solange (als) Bedingung (noch nicht) erfüllt ist, agiere Solange du die dritte Kreuzung noch nicht erreicht hast, gehe geradeaus. : solange bis agiere so lange, bis Bedingung (nicht mehr) erfüllt ist Gehe so lange geradeaus, bis du an die dritte Kreuzung kommst. Instanzen und Private Nichtprivate ketten Turtle-Grafik

322 2.10 : erst sehen, dann gehen Instanzen und Private Nichtprivate ketten Turtle-Grafik

323 2.10 : erst sehen, dann gehen Flussdiagramm dreh dich nach Norden WAHR dritte Kreuzung erreicht FALSCH biege links ab gehe geradeaus Instanzen und Private Nichtprivate ketten Turtle-Grafik

324 2.10 : erst sehen, dann gehen Flussdiagramm WAHR biege links ab dreh dich nach Norden dritte Kreuzung erreicht FALSCH gehe geradeaus Struktogramm dreh dich nach Norden dritte Kreuzung nicht erreicht gehe geradeaus biege links ab Instanzen und Private Nichtprivate ketten Turtle-Grafik

325 2.10 : erst sehen, dann gehen Flussdiagramm WAHR biege links ab dreh dich nach Norden dritte Kreuzung erreicht FALSCH gehe geradeaus Struktogramm dreh dich nach Norden dritte Kreuzung nicht erreicht gehe geradeaus biege links ab Schleifen mit in [Bedingungsblock] whiletrue: [Anweisungsblock] [Bedingungsblock] whilefalse: [Anweisungsblock] Instanzen und Private Nichtprivate ketten Turtle-Grafik

326 2.10 : erst gehen, dann sehen Instanzen und Private Nichtprivate ketten Turtle-Grafik

327 2.10 : erst gehen, dann sehen Flussdiagramm dreh dich nach Norden gehe geradeaus WAHR dritte Kreuzung FALSCH erreicht biege links ab Instanzen und Private Nichtprivate ketten Turtle-Grafik

328 2.10 : erst gehen, dann sehen Flussdiagramm WAHR biege links ab dreh dich nach Norden gehe geradeaus dritte Kreuzung erreicht FALSCH Struktogramm dreh dich nach Norden gehe geradeaus dritte Kreuzung nicht erreicht biege links ab Instanzen und Private Nichtprivate ketten Turtle-Grafik

329 2.10 : erst gehen, dann sehen Flussdiagramm WAHR biege links ab dreh dich nach Norden gehe geradeaus dritte Kreuzung erreicht FALSCH Struktogramm Schleifen mit in dreh dich nach Norden gehe geradeaus dritte Kreuzung nicht erreicht biege links ab [Anweisungsblock] dowhiletrue: [Bedingungsblock] [Anweisungsblock] dowhilefalse: [Bedingungsblock] Instanzen und Private Nichtprivate ketten Turtle-Grafik

330 2.10 Übung Legt in einer geeigneten Kategorie (z. B. euren Versuchsklassen) eine Unterklasse (z. B. Massenpunkt) von EllipseMorph (oder sonst einem Morph) an. 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. Grundsätzlich wäre es vernünftig, wenn sie als Klassenvariable (warum?) auch die Gravitationskonstante zur Verfügung hätten. Bringt den Instanzen dieser Klasse bei, sich mit Hilfe der Methode kleiner Schritte physikalisch richtig über den Bildschirm zu bewegen. Mögliche Ideen: Freier Fall, senkrechter Wurf, schiefer Wurf, harmonische Schwingung, Planetenbewegung, elastischer Stoß,... Wie könnte man die Bewegungen starten bzw. stoppen? Mit Hilfe von steptime lässt sich das Tempo der Bewegung steuern. Instanzen und Private Nichtprivate ketten Turtle-Grafik

331 2.11 immer das gleiche Wie zeichnet man ein gleichseitiges Dreieck, ein Quadrat, ein reguläres Vieleck? Instanzen und Private Nichtprivate ketten Turtle-Grafik

332 2.11 immer das gleiche Wie zeichnet man ein gleichseitiges Dreieck, ein Quadrat, ein reguläres Vieleck? Immer wieder das gleiche so oft wie die Zahl der Seiten: Zeichne eine Seite. Drehe den Stift um den richtigen Winkel. Instanzen und Private Nichtprivate ketten Turtle-Grafik

333 2.11 immer das gleiche Wie zeichnet man ein gleichseitiges Dreieck, ein Quadrat, ein reguläres Vieleck? Immer wieder das gleiche so oft wie die Zahl der Seiten: Zeichne eine Seite. Drehe den Stift um den richtigen Winkel. z. B. für ein Quadrat: Instanzen und Private Nichtprivate ketten Turtle-Grafik

334 2.11 immer das gleiche Wie zeichnet man ein gleichseitiges Dreieck, ein Quadrat, ein reguläres Vieleck? Immer wieder das gleiche so oft wie die Zahl der Seiten: Zeichne eine Seite. Drehe den Stift um den richtigen Winkel. z. B. für ein Quadrat: Zeichne ein Quadrat denke daran, am Ende wieder aufzuräumen nimm eine leere fläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke drehe den Stift in die richtige Richtung setze den Stift auf die flä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 Private Nichtprivate ketten Turtle-Grafik

335 2.11 immer das gleiche Umsetzung in (z. B. in einem workspace): 1 stift seite 2 Display restoreafter: [ Display fillwhite. 3 stift := Pen new. 4 stift defaultnib: 5. 5 stift color: 7. 6 stift place: 250@ stift north. 8 stift down. 9 seite := timesrepeat: [ stift go: seite. 11 stift turn: 90.]. 12 stift up.] Zeichne ein Quadrat denke daran, am Ende wieder aufzuräumen nimm eine leere fläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke drehe den Stift in die richtige Richtung setze den Stift auf die flä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 Private Nichtprivate ketten Turtle-Grafik

336 2.11 immer das gleiche Umsetzung in (z. B. in einem workspace): 1 stift seite 2 Display restoreafter: [ Display fillwhite. 3 stift := Pen new. 4 stift defaultnib: 5. 5 stift color: 7. 6 stift place: 250@ stift north. 8 stift down. 9 seite := timesrepeat: [ stift go: seite. 11 stift turn: 90.]. 12 stift up.] Zeichne ein Quadrat denke daran, am Ende wieder aufzuräumen nimm eine leere fläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke drehe den Stift in die richtige Richtung setze den Stift auf die flä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 Private Nichtprivate ketten Turtle-Grafik

337 2.11 immer das gleiche Umsetzung in (z. B. in einem workspace): 1 stift seite 2 Display restoreafter: [ Display fillwhite. 3 stift := Pen new. 4 stift defaultnib: 5. 5 stift color: 7. 6 stift place: 250@ stift north. 8 stift down. 9 seite := timesrepeat: [ stift go: seite. 11 stift turn: 90.]. 12 stift up.] Zeichne ein Quadrat denke daran, am Ende wieder aufzuräumen nimm eine leere fläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke drehe den Stift in die richtige Richtung setze den Stift auf die flä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 Private Nichtprivate ketten Turtle-Grafik

338 2.11 immer das gleiche Umsetzung in (z. B. in einem workspace): 1 stift seite 2 Display restoreafter: [ Display fillwhite. 3 stift := Pen new. 4 stift defaultnib: 5. 5 stift color: 7. 6 stift place: 250@ stift north. 8 stift down. 9 seite := timesrepeat: [ stift go: seite. 11 stift turn: 90.]. 12 stift up.] Zeichne ein Quadrat denke daran, am Ende wieder aufzuräumen nimm eine leere fläche nimm einen Stift wähle die Stiftdicke wähle die Stiftfarbe gehe zur ersten Ecke drehe den Stift in die richtige Richtung setze den Stift auf die flä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: sind in Schlüsselwortnachrichten an eine ganze Zahl. Instanzen und Private Nichtprivate ketten Turtle-Grafik

339 2.11 immer das gleiche in timesrepeat: Integer timesrepeat: [Anweisungsblock] Instanzen und Private Nichtprivate ketten Turtle-Grafik

340 2.11 immer das gleiche in timesrepeat: Integer timesrepeat: [Anweisungsblock] Integer»timesRepeat: ablock ist eigentlich eine while-schleife: Integer>>timesRepeat: ablock "Evaluate the argument, ablock, the number of times represented by the receiver." count count := 1. [count <= self] whiletrue: [ablock value. count := count + 1] Instanzen und Private Nichtprivate ketten Turtle-Grafik

341 2.12 fast das gleiche Eines der Probleme, die C. F. Gauß als kleiner Junge gelöst hat, war es, gekonnt alle ganzen von 1 bis 100 zusammenzuzählen. Vermutlich kennt ihr seinen Trick. Instanzen und Private Nichtprivate ketten Turtle-Grafik

342 2.12 fast das gleiche Eines der Probleme, die C. F. Gauß als kleiner Junge gelöst hat, war es, gekonnt alle ganzen von 1 bis 100 zusammenzuzählen. Vermutlich kennt ihr seinen Trick. Für einen Rechner ist es aber auch ein leichtes, diese Aufgabe zu Fuß zu lösen: Instanzen und Private Nichtprivate ketten Turtle-Grafik

343 2.12 fast das gleiche Eines der Probleme, die C. F. Gauß als kleiner Junge gelöst hat, war es, gekonnt alle ganzen von 1 bis 100 zusammenzuzählen. Vermutlich kennt ihr seinen Trick. Für einen Rechner ist es aber auch ein leichtes, diese Aufgabe zu Fuß zu lösen: Addiere zur gerade aktuellen Zwischensumme (am Anfang ist sie Null) die jeweils nächste Zahl und merke dir das Ergebnis. Wiederhole das für jede Zahl von eins bis hundert. Instanzen und Private Nichtprivate ketten Turtle-Grafik

344 2.12 fast das gleiche Eines der Probleme, die C. F. Gauß als kleiner Junge gelöst hat, war es, gekonnt alle ganzen von 1 bis 100 zusammenzuzählen. Vermutlich kennt ihr seinen Trick. Für einen Rechner ist es aber auch ein leichtes, diese Aufgabe zu Fuß zu lösen: Addiere zur gerade aktuellen Zwischensumme (am Anfang ist sie Null) die jeweils nächste Zahl und merke dir das Ergebnis. Wiederhole das für jede Zahl von eins bis hundert. Zum Merken der Zwischensumme wird eine Variable summe benötigt. Die zu bearbeitende Zahl wird in einer Laufvariablen (gern mit i bezeichnet) verwaltet. Instanzen und Private Nichtprivate ketten Turtle-Grafik

345 2.12 fast das gleiche Eines der Probleme, die C. F. Gauß als kleiner Junge gelöst hat, war es, gekonnt alle ganzen von 1 bis 100 zusammenzuzählen. Vermutlich kennt ihr seinen Trick. Für einen Rechner ist es aber auch ein leichtes, diese Aufgabe zu Fuß zu lösen: Addiere zur gerade aktuellen Zwischensumme (am Anfang ist sie Null) die jeweils nächste Zahl und merke dir das Ergebnis. Wiederhole das für jede Zahl von eins bis hundert. Zum Merken der Zwischensumme wird eine Variable summe benötigt. Die zu bearbeitende Zahl wird in einer Laufvariablen (gern mit i bezeichnet) verwaltet. In vielen Programmiersprachen nennt man das eine for-schleife. Instanzen und Private Nichtprivate ketten Turtle-Grafik

346 2.12 fast das gleiche Als Struktogramm: Addiere alle von 1 bis 100 summe = 0 wiederhole für jede Zahl i von 1 bis 100 summe = summe + i Gib summe als Ergebnis aus Instanzen und Private Nichtprivate ketten Turtle-Grafik

347 2.12 fast das gleiche Als Struktogramm: Addiere alle von 1 bis 100 summe = 0 wiederhole für jede Zahl i von 1 bis 100 summe = summe + i Gib summe als Ergebnis aus In wird die Laufvariable zu einer Blockvariablen, die nach und nach jeden der Werte annimmt: summe summe := 0. 1 to: 100 do: [ :i summe := summe + i]. Transcript show: summe. Instanzen und Private Nichtprivate ketten Turtle-Grafik

348 2.12 fast das gleiche Als Struktogramm: Addiere alle von 1 bis 100 summe = 0 wiederhole für jede Zahl i von 1 bis 100 summe = summe + i Gib summe als Ergebnis aus In wird die Laufvariable zu einer Blockvariablen, die nach und nach jeden der Werte annimmt: summe summe := 0. 1 to: 100 do: [ :i summe := summe + i]. Transcript show: summe. 1 to: 100 ist ein Intervall mit Schrittweite eins, do: ein Iterator, den das Intervall als Nachricht empfängt. Instanzen und Private Nichtprivate ketten Turtle-Grafik

349 2.12 fast das gleiche Mathematisch spannender ist es, nur die ungeraden aufzusummieren, also von der ersten an nur jede zweite. Instanzen und Private Nichtprivate ketten Turtle-Grafik

350 2.12 fast das gleiche Mathematisch spannender ist es, nur die ungeraden aufzusummieren, also von der ersten an nur jede zweite. Addiere alle ungeraden von 1 bis 100 summe = 0 wiederhole ab der ersten für jede zweite Zahl i von 1 bis 100 summe = summe + i Gib summe als Ergebnis aus Instanzen und Private Nichtprivate ketten Turtle-Grafik

351 2.12 fast das gleiche Mathematisch spannender ist es, nur die ungeraden aufzusummieren, also von der ersten an nur jede zweite. Addiere alle ungeraden von 1 bis 100 summe = 0 wiederhole ab der ersten für jede zweite Zahl i von 1 bis 100 In : 34 summe = summe + i Gib summe als Ergebnis aus summe summe := 0. 1 to: 100 by: 2 do: [ :i summe := summe + i]. Transcript show: summe. Instanzen und Private Nichtprivate ketten Turtle-Grafik

352 2.12 fast das gleiche Mathematisch spannender ist es, nur die ungeraden aufzusummieren, also von der ersten an nur jede zweite. Addiere alle ungeraden von 1 bis 100 summe = 0 wiederhole ab der ersten für jede zweite Zahl i von 1 bis 100 In : 34 summe = summe + i Gib summe als Ergebnis aus summe summe := 0. 1 to: 100 by: 2 do: [ :i summe := summe + i]. Transcript show: summe. 34 Erweitert das Skript um einen Eingabedialog, in dem man statt 100 eine beliebige gerade Zahl angeben kann. Probiert kleine und findet heraus, wie man das Ergebnis auch direkt aus der eingegeben Zahl berechnen könnte. Instanzen und Private Nichtprivate ketten Turtle-Grafik

353 2.13 Turtle-Grafik MyPen Legt eine Unterklasse MyPen von Pen an. Bringt MyPen Methoden dreieck: seite und quadrat: seite sowie neck: seite miteckenzahl: n bei, um reguläre Vielecke mit Seitenlänge seite zu zeichnen. Sorgt dafür, dass der Stift nach dem Zeichnen in die gleiche Richtung zeigt wie zuvor! Lasst ein Objekt der Klasse MyPen Bilder wie diese hier zeichnen (in einem Workspace oder besser noch als eigene Methoden, z. B. zum Protokoll testbilder denkt an Display restoreafter: ): Instanzen und Private Nichtprivate ketten Turtle-Grafik

Squeak verwenden. Neues Projekt starten. Werkzeuge. Einführung in die objektorientierte Programmierung

Squeak verwenden. Neues Projekt starten. Werkzeuge. Einführung in die objektorientierte Programmierung Einführung in die objektorientierte Programmierung mit Squeak Teil 2 Squeak verwenden Image unter neuem Namen speichern und verwenden - immer ein intaktes Image zur Sicherheit verfügbar alle Änderungen

Mehr

Objektorientierte Modellierung und Programmierung

Objektorientierte Modellierung und Programmierung Objektorientierte Modellierung und Programmierung Einführung im Informatikunterricht der 10. Klasse Gymnasium Untergriesbach 13. März 2015 Vorbemerkungen I Das vorliegende Unterrichtsmaterial entsteht

Mehr

Einführung in die objektorientierte Programmierung. mit Squeak Teil 5

Einführung in die objektorientierte Programmierung. mit Squeak Teil 5 Einführung in die objektorientierte Programmierung mit Squeak Teil 5 Morphic Grundidee: jedes Objekt in Morphic (Morph) wird direkt als graphische Form dargestellt und manipuliert in Klasse Object ist

Mehr

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus Vererbung Generalisierung und Spezialisierung Vererbung und Polymorphismus Wir wollen in unserem Aquarium verschiedene Arten von Fischen schwimmen lassen. In einem ersten Ansatz definieren wir nicht nur

Mehr

Umsetzung einer Klassenkarte in einer Programmiersprache

Umsetzung einer Klassenkarte in einer Programmiersprache Klassen in Java Umsetzung einer Klassenkarte in einer Programmiersprache Objektorientierte Programme bestehen (nur) aus Klassendefinitionen In Klassendefinitionen wird die Struktur der Objekte festgelegt,

Mehr

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a

Mehr

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a

Mehr

Begriffe 1 (Wiederholung)

Begriffe 1 (Wiederholung) Begriffe 1 (Wiederholung) Klasse Eine Klasse ist der Bauplan für ein oder mehrere Objekte. In einer Klasse werden Dienste (Methoden) zur Verfügung gestellt. Klassennamen beginnen mit einem Großbuchstaben.

Mehr

Im Mathe-Pool startet man Eclipse am besten aus einer Shell heraus, und zwar indem man im Home- Verzeichnis den Befehl

Im Mathe-Pool startet man Eclipse am besten aus einer Shell heraus, und zwar indem man im Home- Verzeichnis den Befehl Eclipse Eclipse ist eine IDE (Integrierte Entwicklungsumgebung), die speziell auf das Programmieren in Java zugeschnitten (und auch selbst in Java geschrieben) ist. Eine solche IDE vereint die Funktionalität

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

Inhaltsverzeichnis HÄUFIGKEITSTABELLEN... 1

Inhaltsverzeichnis HÄUFIGKEITSTABELLEN... 1 Häufigkeitstabellen Inhaltsverzeichnis HÄUFIGKEITSTABELLEN... 1 Häufigkeitstabellen Häufigkeitstabellen Neue Häufigkeitstabelle erstellen Um eine Häufigkeitstabelle zu erstellen, gehen Sie wie folgt vor:

Mehr

Algorithmen und ihre Programmierung

Algorithmen und ihre Programmierung Veranstaltung Pr.-Nr.: 101023 Algorithmen und ihre Programmierung Veronika Waue WS 07/08 Einführung Definition: Algorithmus Ein Algorithmus ist eine genau definierte Folge von Anweisungen zur Lösung eines

Mehr

FreeQDA. Eine freie Software zur Analyse qualitativer Forschungsdaten. Anleitung. von Jörg große Schlarmann. und Dirk Kitscha

FreeQDA. Eine freie Software zur Analyse qualitativer Forschungsdaten. Anleitung. von Jörg große Schlarmann. und Dirk Kitscha FreeQDA Eine freie Software zur Analyse qualitativer Forschungsdaten Anleitung von Jörg große Schlarmann und Dirk Kitscha Version vom 1. April 2011 Über FreeQDA FreeQDA ist ein freies open-source Softwareprojekt

Mehr

DAS EINSTEIGERSEMINAR

DAS EINSTEIGERSEMINAR DAS EINSTEIGERSEMINAR Microsoft Office Excel 2010 Gudrun Rehn-Göstenmeier LERNEN ÜBEN ANWENDEN Teil I: Lernen L1 Dateiorganisation Bevor wir uns mit den Excel-spezifischen Befehlen und Funktionen befassen

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

11 Objektorientierte Programmierung, Teil 2

11 Objektorientierte Programmierung, Teil 2 11 Objektorientierte Programmierung, Teil 2 Ein wesentliches Konzept der objektorientierten Programmierung fehlt uns noch: die Vererbung 203 Programmcode wiederverwenden Wenn wir einige Klassen geschrieben

Mehr

3. Die Programmiersprache Java

3. Die Programmiersprache Java 3. Die Programmiersprache Java 3.1 Arbeiten mit BlueJ 3.2 Objekte und Klassen 3.3 Klassen und Unterklassen 3.4 Daten und Operationen 3.5 Ausdrücke 3.6 Algorithmische Kernsprache 3.7 Sprachbeschreibung

Mehr

C++ - Objektorientierte Programmierung Vererbung

C++ - Objektorientierte Programmierung Vererbung C++ - Objektorientierte Programmierung Vererbung Personen Kunden Mitarbeiter Verwaltung Verkäufer Leibniz Universität IT Services Anja Aue Vererbung Definition von Klassen auf Basis von bestehenden Klassen.

Mehr

Software. Die Erste. C o m p u t e r G r u n d w i s s e n Te i l I I. S o f t w a r e. H a r d w a r e. C D / D V D B r e n n e n.

Software. Die Erste. C o m p u t e r G r u n d w i s s e n Te i l I I. S o f t w a r e. H a r d w a r e. C D / D V D B r e n n e n. C o m p u t e r G r u n d w i s s e n Te i l I I H a r d w a r e C D / D V D B r e n n e n S o f t w a r e I n t e r n e t Software Die Erste S y s t e m p f l e g e Te x t v e r a r b e i t u n g V i

Mehr

Objektorientierte Modellierung (1)

Objektorientierte Modellierung (1) Objektorientierte Modellierung (1) Die objektorientierte Modellierung verwendet: Klassen und deren Objekte Beziehungen zwischen Objekten bzw. Klassen Klassen und Objekte Definition Klasse Eine Klasse ist

Mehr

2. Vererbung und Kapselung

2. Vererbung und Kapselung 2. Vererbung und Kapselung Die Objekte der Klasse BALL werden im Gegensatz zu den Objekten von KREIS noch nicht graphisch dargestellt. Um die BALL-Objekte auch graphisch darzustellen zu können, muss BALL

Mehr

Powerpoint Inhalt. Erste Schritte

Powerpoint Inhalt. Erste Schritte Powerpoint 2003 Einführung in die Werkzeuge zur Erstellung einer Präsentation 1 Inhalt Erste Schritte Mit Präsentationen arbeiten Zeichenobjekte Organigramme und Diagramme Powerpoint effektiv nutzen Abschlusspräsentation

Mehr

Joomla Medien Verwaltung. 1)Medien auf den SERVER laden:

Joomla Medien Verwaltung. 1)Medien auf den SERVER laden: Inhalt: 1)Medien auf Server laden 2)Bilder in einem Beitrag verwenden 3)Bilder in Beitrag skalieren (Größe verändern) 4)Dateien (z.b. pdf) hochladen und verlinken Joomla Medien Verwaltung Dreh- und Angelpunkt

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

SL BKRD DECUS RESPEC GAMING MOUSE

SL BKRD DECUS RESPEC GAMING MOUSE Profilwahl & Profileinstellungen, Beleuchtung In der linken oberen Spalte können Sie zwischen 5 Profilen wechseln. Bei einer Neuinstallation des Treibers ist ein Standardprofil eingestellt. In den Zeilen

Mehr

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans Graphische Benutzungsoberflächen mit Java Einführung in NetBeans Graphische Benutzungsoberflächen! Interaktion mit dem Programm! Datenein- und ausgabe! Rückmeldungen über Verarbeitung der Daten! Visualisierung

Mehr

Seiten anlegen, ändern, verschieben und löschen

Seiten anlegen, ändern, verschieben und löschen 12 Seiten anlegen, ändern, verschieben und löschen 2.1 Seite aufrufen Im Funktionsmenü Seite aufrufen. Die Ordner und Seiten Ihres Baukastens erscheinen (= Seitenbaum). Klick auf - Symbol ermöglicht Zugriff

Mehr

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen

Mehr

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor: 4. Vererbung Grundlagen der Vererbung 4. Vererbung 4. Vererbung Grundlagen der Vererbung Idee der Vererbung Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende

Mehr

Objekt-orientierte Programmierung

Objekt-orientierte Programmierung Objekt-orientierte Programmierung Eine (sehr) kurze Einführung Daniel Lübke Gliederung Motivation Grundlagen (Objekte, Klassen, Vererbung) Interfaces Klassenvariablen

Mehr

Kurzanleitung creator 2.0

Kurzanleitung creator 2.0 Kurzanleitung creator 2.0 Mit dieser Software können Sie an Ihrem Computer Namenskarten für alle im creator enthaltenen Namensschilder-Formate erstellen. Die Vorlagen setzen sich hierfür aus 3 Komponenten

Mehr

Java Vererbung. Inhalt

Java Vererbung. Inhalt Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter

Mehr

Open Office Writer 1

Open Office Writer 1 Wolfram Hölzel Tutorial I Open Office Writer 1 Inhalt: - Neues Dokument anlegen; - Formatieren unter Nutzung der Formatvorlagen - Bild einfügen und bearbeiten Dies ist ein Tutorial für meine 7. Klasse,

Mehr

Kurzanleitung creator 2.0

Kurzanleitung creator 2.0 Kurzanleitung creator 2.0 Mit dem creator 2.0 können Sie an Ihrem Computer Namenskarten für alle bei badgepoint erhältlichen Namensschilder selbst erstellen. Die Vorlagen setzen sich hierfür aus 3 Komponenten

Mehr

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank... Methoden und Klassen Silke Trißl Wissensmanagement in der Bioinformatik Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: hat Farbe Hubraum Tank kann man Gas geben Bremsen Hoch

Mehr

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte Grundkonzepte Objektorientierter Programmierung Nicole Himmerlich FSU Jena mit Java, Oberon-2, Object-Pascal und Python Inhaltsüberblick I. Grundbegriffe 1) Kopplung 2) Datenkaspelung 3) Konstruktor 4)

Mehr

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ Arbeiten mit BlueJ Compilieren, Editieren, Objekte erzeugen, Methoden aufrufen, Objekte inspizieren, vorhandene Klassen benutzen, eigene Klassen und Methoden erstellen In BlueJ geht es einfach BlueJ durch

Mehr

Fragen zur OOP in Java

Fragen zur OOP in Java - 1 - Inhalt Was bedeutet OOP?... 2 Was versteht man unter einer Klasse?... 2 Wie nennt man die Mitglieder einer Klasse?... 2 Wie erzeugt man Objekte?... 2 Wie greife ich auf Member einer Klasse zu?...

Mehr

myavr Klassendiagramm der UML mit SiSy-AVR Schnelleinstieg für myavr Board MK3

myavr Klassendiagramm der UML mit SiSy-AVR Schnelleinstieg für myavr Board MK3 myavr Klassendiagramm der UML mit SiSy-AVR Schnelleinstieg für myavr Board MK3 Zielstellung Dieser Schnelleinstieg demonstriert das Arbeiten mit dem Klassendiagramm in SiSy AVR mit der Bibliothek für das

Mehr

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der Vererbung Vererbung ist ein Konzept der objektorientierten Programmierung,, die es ermöglicht neue Klassen von bereits vorhandenen Klassen abzuleiten. In einer abgeleiteten Klasse (subclass) muss nur spezifiziert

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 2 22.03.2017 Was bisher geschah... Klassen und Objekte Attribute und Methoden Klasse Bruch

Mehr

Ausbildungsziel: Die Nutzung der Zwischenablage -Kopieren und Einfügen-

Ausbildungsziel: Die Nutzung der Zwischenablage -Kopieren und Einfügen- Ausbildungsziel: Die Nutzung der Zwischenablage -Kopieren und Einfügen- Die Möglichkeit am Computer einmal erledigte Arbeiten beliebig oft zu duplizieren bzw wieder zu verwenden, ist wohl der größte Fortschritt

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 09: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Objektorientierte Programmierung OOP

Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel Alina Stürck WS2016/17 11. Oktober 2016 Objektorientierte Programmierung OOP 1 Was ist das? 2 Wie geht das? 3 Warum

Mehr

Benötigte Hard- oder Software. Präsentationsprogramm PowerPoint. Anmerkung: Die Anleitung ist optimiert für Microsoft PowerPoint 13.

Benötigte Hard- oder Software. Präsentationsprogramm PowerPoint. Anmerkung: Die Anleitung ist optimiert für Microsoft PowerPoint 13. Benötigte Hard- oder Software Präsentationsprogramm PowerPoint Anmerkung: Die Anleitung ist optimiert für Microsoft PowerPoint 13. Ziele Die einzelnen Folien/Präsentationen des Projekts Chemische Elemente

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren

Mehr

Einführungsbeispiel in das Programmiersystem CoDeSys

Einführungsbeispiel in das Programmiersystem CoDeSys Einführungsbeispiel in das Programmiersystem CoDeSys Um die Vorgehensweise der Projekterstellung in CoDeSys zu verstehen, soll ein ganz einfaches Programm erstellt werden: Zwei binäre Eingangssignale sollen

Mehr

Beschreibung für Import der Protokolldaten nach Microsoft Excel

Beschreibung für Import der Protokolldaten nach Microsoft Excel Beschreibung für Import der Protokolldaten nach Microsoft Excel Revision 1.0 1. Allgemeines Für die DerbyControl Messanlage gibt es Protokollierungsfunktion der Messdaten. Diese Messdaten werden im Programmverzeichnis

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus Vorlesung Programmieren Vererbung und Polymorphismus Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Bisher: Klassen und Objekte Haupteigenschaften:

Mehr

Kurzanleitung für den MyDrive Client

Kurzanleitung für den MyDrive Client Kurzanleitung für den MyDrive Client Hinweis: Prüfen Sie bei Problemen zuerst, ob eine neuere Version vorhanden ist und installieren Sie diese. Version 1.3 für MAC und Linux (29.06.2017) - Hochladen mit

Mehr

Programmieren mit Squeak-BotsInc

Programmieren mit Squeak-BotsInc Programmieren mit Squeak-BotsInc Rita Freudenberg 2. März 2007 Die BotsInc-Umgebung BotsInc ist eine in Squeak geschriebene Programmierumgebung, mit der Roboter programmiert werden, die dann graphische

Mehr

gymnasium st. meinrad Präsentationssoftware Anleitung OpenOffice Impress Teil I

gymnasium st. meinrad Präsentationssoftware Anleitung OpenOffice Impress Teil I gymnasium st. meinrad Rottenburg a.n. Präsentationssoftware Anleitung OpenOffice Impress Teil I Starte das Programm OpenOffice Impress. Übernimm bei den ersten drei Auswahlfenstern jeweils die Voreinstellungen:

Mehr

3. Das erste eigene Programm mit Greenfoot: Litte Crab

3. Das erste eigene Programm mit Greenfoot: Litte Crab Eigenes Programm: Little Crab1, Seite 1 von 5 3. Das erste eigene Programm mit Greenfoot: Litte Crab 3.1. Quelltext bearbeiten Nachdem Sie etwas Erfahrungen in der Bedienung von Greenfoot gewonnen haben,

Mehr

3.1 PowerPoint starten

3.1 PowerPoint starten Grundlagen der Handhabung MS Powerpoint 2007 - Einführung 3.1 PowerPoint starten Um mit PowerPoint zu arbeiten, müssen Sie das Programm zunächst starten. Sie starten PowerPoint. Klicken Sie nach dem Starten

Mehr

Objektorientierte Programmierung. Agenda für heute, 26. März, Eines der drei wichtigsten Programmierparadigmen

Objektorientierte Programmierung. Agenda für heute, 26. März, Eines der drei wichtigsten Programmierparadigmen Agenda für heute, 26. März, 2009 Imperatives vs. objektorientiertes Programmieren Lesen Sie den Begleittext Seite 79 85 Eines der drei wichtigsten Programmierparadigmen (Paradigma: Denkmuster) Imperative

Mehr

Eine Seite formatieren. Folien formatieren Arbeitsbereich Ausführen. Folien auswählen. Folien einfügen. Autopilot. Folienübergänge und Animationen

Eine Seite formatieren. Folien formatieren Arbeitsbereich Ausführen. Folien auswählen. Folien einfügen. Autopilot. Folienübergänge und Animationen Autopilot Folien einfügen Folien auswählen Eine Seite formatieren Folien formatieren Arbeitsbereich Ausführen Eine neue Präsentation erstellen Autopilot Folien einfügen Folien auswählen Eine Seite formatieren

Mehr

SmallTalk - Eine kurze Einführung

SmallTalk - Eine kurze Einführung SmallTalk - Eine kurze Einführung Andreas Lochbihler Lehrstuhl Programmierparadigmen Universität Karlsruhe 15. Juni 2009 SmallTalk Entwickelt seit Anfang der 70er bei XEROX PARC Alan Kay, Dan Ingalls,

Mehr

Eine Linkliste in Word anlegen und zur Startseite des Browsers machen

Eine Linkliste in Word anlegen und zur Startseite des Browsers machen Eine Linkliste in Word anlegen und zur Startseite des Browsers machen In dieser Anleitung wird beschrieben, wie man mit Word eine kommentierte Linkliste erstellt und diese im Internet Explorer bzw. in

Mehr

Scratch - Gruppenpuzzle - Grafik und Aussehen

Scratch - Gruppenpuzzle - Grafik und Aussehen Während des gesamten Moduls führen euch die Arbeitsblätter durch die Programmerstellung und geben euch Hinweise. Achtet dabei einfach auf folgende Symbole, die euer Arbeiten strukturieren und Teilziele

Mehr

eduvote Ein Umfragesystem für Lehrveranstaltungen PowerPoint Add-In

eduvote Ein Umfragesystem für Lehrveranstaltungen PowerPoint Add-In eduvote Ein Umfragesystem für Lehrveranstaltungen PowerPoint Add-In Übersicht: Nach dem Herunterladen und Ausführen des Installationsprogamms für das eduvote PowerPoint Add-In befindet sich rechts oben

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition

Mehr

Windows Forms Projekte mit C++ in Visual Studio 2017

Windows Forms Projekte mit C++ in Visual Studio 2017 Windows Forms Projekte mit C++ in Visual Studio 2017 In diesem kleinen Auszug aus dem Buch wird kurz gezeigt, wie man mit Visual Studio 2017 und früheren Versionen Windows- Programme mit einer grafischen

Mehr

Informatik 10 Objektorientiertes Modellieren und Programmieren mit Java

Informatik 10 Objektorientiertes Modellieren und Programmieren mit Java Informatik 10 Objektorientiertes Modellieren und Programmieren mit Java 1. Klassen und Objekte Zunächst wollen wir mit Hilfe eines Miniprogramms die Entwicklungsumgebung BlueJkennen lernen. Die Installation

Mehr

Vererbung und Polymorphie

Vererbung und Polymorphie Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter

Mehr

Teil 2: OOP und JAVA (Vorlesung 11)

Teil 2: OOP und JAVA (Vorlesung 11) Teil 2: OOP und JAVA (Vorlesung 11) Modul: Programmierung B-PRG Grundlagen der Programmierung II Prof. Dot.-Ing. Roberto Zicari Professur für Datenbanken und Informationssysteme (FB 12) 28.06.06 1 Teil

Mehr

Systemanalyse. - Folien zur Vorlesung für AI3 im Sommersemester Teil 5 -

Systemanalyse. - Folien zur Vorlesung für AI3 im Sommersemester Teil 5 - Systemanalyse - Folien zur Vorlesung für AI3 im Sommersemester 2010 - -Teil 5 - Hans-Jürgen Steffens (by courtesy of Prof. Dr. Thomas Allweyer) Fachbereich Informatik und Mikrosystemtechnik Fachhochschule

Mehr

Im Original veränderbare Word-Dateien

Im Original veränderbare Word-Dateien Löschen Kopieren Verschieben Einfügen Löschen Inhalte von Zellen löschst du, indem du eine oder mehrere Zellen markierst und die Entf- bzw. Del-Taste drückst. Du kannst auch eine ganze Spalte oder Zeile

Mehr

Tipps & Tricks in Excel 2010 und früher

Tipps & Tricks in Excel 2010 und früher Tipps & Tricks in Excel 2010 und früher Inhalt Tipps & Tricks in Excel 2012... 2 Spalten und Zeilen vertauschen... 2 Eine bestehende Tabelle dynamisch drehen... 3 Den drittgrößten Wert einer Datenreihe

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 39 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 39 1 Überblick:

Mehr

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck. Programmierkurs Java Vererbung Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Ähnlichkeiten zwischen Klassen? Beispiel: Klassen Auto

Mehr

Tutorium Java. Softwaretechnologie: Java I. Marco Jürgens und Mihail Atanassov.

Tutorium Java. Softwaretechnologie: Java I. Marco Jürgens und Mihail Atanassov. Tutorium Java Softwaretechnologie: Java I Marco Jürgens und Mihail Atanassov tutoren@spinfo.uni-koeln.de Themen Entwicklungsumgebung: Eclipse-Installation MrTurtle und Plugins für Eclipse Java: Klassen

Mehr

Anleitung. zum. Statistikportal der Deutschen Rentenversicherung Bund

Anleitung. zum. Statistikportal der Deutschen Rentenversicherung Bund Anleitung zum Statistikportal der Deutschen Rentenversicherung Bund Stand: 04.01.2017 1 Inhaltsverzeichnis 1 Einleitung... 3 2 Aufruf des Statistikportals... 3 3 Anzeige der Startberichte... 4 4 Interaktive

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

Einführung in die Programmierung 1

Einführung in die Programmierung 1 Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Ein Computerprogramm besteht aus Funktionen (Programmabschnitten, die etwas tun) und Variablen (Speicherplätzen für Informationen). Werden Funktionen aktiviert, verändern

Mehr

Wocheninfo auf der Webseite aktualisieren

Wocheninfo auf der Webseite aktualisieren Anleitung Wocheninfo auf der Webseite aktualisieren Wocheninfo als PDF Datei erstellen / bereitstellen Zunächst muss die Wocheninfos als PDF Datei zur Verfügung stehen. Soweit dies noch nicht der Fall

Mehr

Computergruppe Heimerdingen Grundkurs 2015

Computergruppe Heimerdingen Grundkurs 2015 Computergruppe Heimerdingen Grundkurs 2015 Karlheinz Wanja & Richard Zeitler 29.01.2015 Computergruppe Heimerdinge 1 Tastatur Tastenbelegung Funktionstasten 29.01.2015 Computergruppe Heimerdinge 2 Tastatur

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

Hans-Christoph Reitz 1. Ausgabe, Oktober Dateien, Ordner und Programme Ordnung schaffen mit Windows 7 PE-ORDW7

Hans-Christoph Reitz 1. Ausgabe, Oktober Dateien, Ordner und Programme Ordnung schaffen mit Windows 7 PE-ORDW7 Hans-Christoph Reitz 1. Ausgabe, Oktober 2011 Dateien, Ordner und Programme Ordnung schaffen mit Windows 7 PE-ORDW7 Inhalt Dateien, Ordner und Programme Das ist Ihre Ausgangslage 4 1 Ordnerstruktur anlegen

Mehr

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik Methoden und Klassen Silke Trißl Wissensmanagement in der Bioinformatik Wiederholung Jede Applikation braucht eine Klasse mit einer main-methode Eintrittspunkt in das Programm Die main-methode wird public

Mehr

Chemielabor. Benötigte Hard- oder Software. Präsentationsprogramm PowerPoint. Anmerkung: Die Anleitung ist optimiert für Microsoft PowerPoint 03.

Chemielabor. Benötigte Hard- oder Software. Präsentationsprogramm PowerPoint. Anmerkung: Die Anleitung ist optimiert für Microsoft PowerPoint 03. Benötigte Hard- oder Software Präsentationsprogramm PowerPoint Anmerkung: Die Anleitung ist optimiert für Microsoft PowerPoint 03. Ziele Die einzelnen Folien/Präsentationen des Projekts Chemische Elemente

Mehr

Allgemeine Anleitung Firefox

Allgemeine Anleitung Firefox 1. Browser-Ansicht Es wird z. B. die Internetseite Versandhandel amazon.de im Browser angezeigt. Es kann in der Adressenspalte jede x-beliebige Internetadresse eingetragen werden. 2. Menüleiste im Browser

Mehr

Objektorientierte Programmierung. Agenda für heute, 1. April, Eines der drei wichtigsten Programmierparadigmen

Objektorientierte Programmierung. Agenda für heute, 1. April, Eines der drei wichtigsten Programmierparadigmen Agenda für heute, 1. April, 2010 Imperatives vs. objektorientiertes Programmieren Lesen Sie den Begleittext Seite 79 85 Eines der drei wichtigsten Programmierparadigmen (Paradigma: Denkmuster) Imperative

Mehr

Microsoft Access Arbeiten mit Tabellen. Anja Aue

Microsoft Access Arbeiten mit Tabellen. Anja Aue Microsoft Access Arbeiten mit Tabellen Anja Aue 10.11.16 Tabellen in der Datenblattansicht Ansicht des Anwenders. Eingabe von neuen Daten. Bearbeiten von vorhandenen Informationen. Microsoft Access Einführung

Mehr

Das Anpassen der Stammdatenansichten

Das Anpassen der Stammdatenansichten Das Softwarehaus für Schulen Das Anpassen der Stammdatenansichten (Stand: 07/2010) PEDAV : Das Softwarehaus für Schulen ort : 45359 Essen-Schönebeck str : Schönebecker Straße 1 tel : (0201) 61 64 810 http

Mehr

11 Vererbung und Klassenhierarchie

11 Vererbung und Klassenhierarchie 11 Vererbung und Klassenhierarchie Bestandteile objektorientierter Programmierung: Bestehende Klassen können durch Spezialisierung und Erweiterung weiterentwickelt werden, ohne den Programmcode der alten

Mehr

Einführung in die Informatik

Einführung in die Informatik Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester

Mehr

Ausbildungsziel: Erstellung eines Briefes mit Hilfe von Vorlagen

Ausbildungsziel: Erstellung eines Briefes mit Hilfe von Vorlagen Ausbildungsziel: Erstellung eines Briefes mit Hilfe von Vorlagen 1. Grundlagen (Inhalt Menü) Einer der grundlegendsten Anwendungen des Computers ist die als Schreibmaschine! Im Gegensatz zur Schreibmaschine

Mehr

Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1

Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1 Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1 Kapitel 1: Die ersten Schritte mit Greenfoot 1 Starten Sie Greenfoot. (Wenn Sie Greenfoot das erste Mal öffnen, erscheint ein Dialogfenster,

Mehr

Präsentationstexte formatieren

Präsentationstexte formatieren 3 Präsentationstexte formatieren und gliedern 54 aufzählungen formatieren A B C Wählen Sie auf der Registerkarte Start aus den Formen das Textfeld aus. Zeichnen Sie das Textfeld in der gewünschten Größe

Mehr

Anleitung zur Erstellung der Internetseiten

Anleitung zur Erstellung der Internetseiten Anleitung zur Internetseitenerstellung mit Microsoft Expression Web4 1/6 Anleitung zur Erstellung der Internetseiten Die Erstellung erläutere ich mit dem Programm Microsoft Expression Web. Zu beziehen

Mehr

Handhabung der tabellarischen Übersichten in MAXQDA

Handhabung der tabellarischen Übersichten in MAXQDA Handhabung der tabellarischen Übersichten in MAXQDA Inhaltsverzeichnis HANDHABUNG DER TABELLARISCHEN ÜBERSICHTEN IN MAXQDA... 1 DIE SYMBOLLEISTE IN TABELLARISCHEN ÜBERSICHTEN... 1 HANDHABUNG VON TABELLARISCHEN

Mehr

3 Bibliotheken. Objekte sammeln und verwalten. Sie werden lernen, wie Sie vielbenutzte Objekte organisieren und verwalten.

3 Bibliotheken. Objekte sammeln und verwalten. Sie werden lernen, wie Sie vielbenutzte Objekte organisieren und verwalten. Objekte sammeln und verwalten Sie werden lernen, wie Sie vielbenutzte Objekte organisieren und verwalten. Oft benötigte Objekte sollten schnell bei der Hand sein, wenn man sie braucht. Sie in»normalen«indesign-dokumenten

Mehr

Diese Anleitung zeigt dir, wie du eine Einladung mit Microsoft Word gestalten kannst.

Diese Anleitung zeigt dir, wie du eine Einladung mit Microsoft Word gestalten kannst. Diese Anleitung zeigt dir, wie du eine Einladung mit Microsoft Word gestalten kannst. Bevor es losgeht Wenn du mal etwas falsch machst ist das in Word eigentlich kein Problem! Den Rückgängig-Pfeil (siehe

Mehr

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5. Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1

Mehr

Das Bundesland wechseln: (in der Demoversion nicht möglich) Klicken Sie auf Extras / Optionen Anschließend auf den Reiter Ferienordnung

Das Bundesland wechseln: (in der Demoversion nicht möglich) Klicken Sie auf Extras / Optionen Anschließend auf den Reiter Ferienordnung Wie kann ich: Das Bundesland wechseln Den Stundenplan nutzen Den Unterrichtsplaner nutzen Unterrichtplaner Einträge bearbeiten Ein RTF-Dokument importieren Schüler- und Notenliste bearbeiten Noten eintragen

Mehr