Smalltalk mit Squeak
|
|
- Catharina Bäcker
- vor 7 Jahren
- Abrufe
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
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
MehrObjektorientierte 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
MehrEinfü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
MehrVererbung. 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
MehrUmsetzung 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,
Mehr1 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
Mehr1 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
MehrBegriffe 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.
MehrIm 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
MehrBedienung 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
MehrInhaltsverzeichnis 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:
MehrAlgorithmen 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
MehrFreeQDA. 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
MehrDAS 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
MehrRepetitorium 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
Mehr11 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
Mehr3. 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
MehrC++ - 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.
MehrSoftware. 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
MehrObjektorientierte 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
Mehr2. 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
MehrPowerpoint 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
MehrJoomla 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
MehrKapitel 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
MehrSL 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
MehrGraphische 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
MehrSeiten 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
MehrProgrammieren 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
Mehr4. 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
MehrObjekt-orientierte Programmierung
Objekt-orientierte Programmierung Eine (sehr) kurze Einführung Daniel Lübke Gliederung Motivation Grundlagen (Objekte, Klassen, Vererbung) Interfaces Klassenvariablen
MehrKurzanleitung 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
MehrJava 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
MehrOpen 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,
MehrKurzanleitung 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
MehrSilke 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
MehrInhaltsü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)
MehrArbeiten 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
MehrFragen 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?...
Mehrmyavr 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
MehrBeispiel: 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
MehrObjektorientierte 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
MehrAusbildungsziel: 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
MehrJavakurs 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
MehrProbeklausur: 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,
MehrObjektorientierte 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
MehrBenö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
MehrObjektorientierte 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
MehrC++ - 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
MehrEinstieg 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
MehrEinfü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
MehrBeschreibung 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
MehrEinstieg 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
MehrVorlesung 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:
MehrKurzanleitung 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
MehrProgrammieren 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
Mehrgymnasium 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:
Mehr3. 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,
Mehr3.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
MehrObjektorientierte 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
MehrEine 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
MehrSmallTalk - 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,
MehrEine 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
MehrScratch - 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
Mehreduvote 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
MehrEinstieg 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
MehrWindows 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
MehrInformatik 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
MehrVererbung 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
MehrTeil 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
MehrSystemanalyse. - 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
MehrIm 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
MehrTipps & 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
MehrEinstieg 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:
MehrProgrammierkurs 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
MehrTutorium 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
MehrAnleitung. 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
MehrEinstieg 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
MehrEinfü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
MehrObjektorientierte Programmierung
Objektorientierte Programmierung Ein Computerprogramm besteht aus Funktionen (Programmabschnitten, die etwas tun) und Variablen (Speicherplätzen für Informationen). Werden Funktionen aktiviert, verändern
MehrWocheninfo 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
MehrComputergruppe 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
MehrEinstieg 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
MehrHans-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
MehrMethoden 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
MehrChemielabor. 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
MehrAllgemeine 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
MehrObjektorientierte 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
MehrMicrosoft 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
MehrDas 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
Mehr11 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
MehrEinfü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
MehrAusbildungsziel: 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
MehrKapitel 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,
MehrPrä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
MehrAnleitung 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
MehrHandhabung 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
Mehr3 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
MehrDiese 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
MehrVererbung. 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
MehrDas 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