Objektorientierte Programmierung



Ähnliche Dokumente
PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Arbeitsblatt 6: Programmierung geometrischer Figuren

Bru ckenkurs Programmieren

Diana Lange. Generative Gestaltung Die Processing Bibliothek

PROCESSING STRUKTUR UND INPUT. Created by Michael Kirsch & Beat Rossmy

Vorkurs Informatik WiSe 16/17

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Eingeben, Ausgeben, Übergeben, Zurückgeben

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Vorkurs Informatik WiSe 17/18

PROCESSING ELTERN UND KINDER. Created by Michael Kirsch & Beat Rossmy

PROCESSING EINE EINFÜHRUNG IN DIE INFORMATIK. Created by Michael Kirsch & Beat Rossmy

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen

PROCESSING KLASSEN UND OBJEKTE. Created by Michael Kirsch & Beat Rossmy

Tag 8 Repetitorium Informatik (Java)

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Einführung in die Programmierung

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

JAVA-Datentypen und deren Wertebereich

Angewandte Mathematik und Programmierung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Projekt 3 Variablen und Operatoren

Übungsblatt 1. Java Vorkurs (WS 2017)

Processing Info zu Variablen und Bedingungen

Programmiervorkurs Einführung in Java Tag 1

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Programmieren 1 C Überblick

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Die Programmiersprache C Eine Einführung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Programmieren! Meine ersten Schritte als ProgrammiererIn! Prolog 2014 Stefan Podlipnig, TU Wien

Hello World! Eine Einführung in das Programmieren Variablen

Java Zusammenfassung. Basisdatentypen ganzzahlig: Byte, Short, Integer, Long Fließkomma: Float, Double Zeichen: Character Wahrheitswerte: Boolean

Informatik Vorkurs - Vorlesung 2

Kapitel 3: Variablen

TAG 1: EINSTIEG, PROCESSING VARIABLEN UND VERZWEIGUNGEN Brückenkurs Programmierung WiSe 16/17

7. Objektorientierung. Informatik II für Verkehrsingenieure

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Einführung in die Programmierung für NF MI. Übung 07

Workshop Grafik-Progammiersprache Processing

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Einfache Rechenstrukturen und Kontrollfluss

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Tag 2 Repetitorium Informatik (Java)

5.3 Auswertung von Ausdrücken

Java Einführung Operatoren Kapitel 2 und 3

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Objektorientiertes Programmieren (Java)

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Probeklausur: Programmierung WS04/05

Grundlagen der Informatik 2. Operatoren

Greenfoot: Verzweigungen

Repetitorium Programmieren I + II

Primitive Datentypen und Felder (Arrays)

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Bru ckenkurs Programmieren

Grundlagen der Informatik 0

JAVA für Nichtinformatiker - Probeklausur -

Computeranwendung und Programmierung (CuP)

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

2.2 Einfache Datenstrukturen

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

3.4 Strukturierte Datentypen

AuD-Tafelübung T-B5b

Fragen zur OOP in Java

EPROG 2.Teilprüfung. Aufgabe 1:

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Transkript:

Unterlagen zur Veranstaltung Einführung in die Objektorientierte Programmierung Mit Processing Alexis Engelke Sommer 2012

Alexis Engelke Inhalt Level 1: Geometrie Hintergrundfarben Punkte, Linien und deren Größe Kantenglättung Umrandungsfarben Füllfarben Dreiecke, Rechtecke, Vierecke und Ellipsen als geometrische Formen Die Modi von Rechtecken und Ellipsen Level 2: Animation und Interaktion Variablen und deren Operatoren Fall-Unterscheidungen Debug-Möglichkeit durch Ausgeben Setup-Draw-Konzept Verwendung von Maus und Tastatur Verschiebungen und Drehungen Methoden und Funktionen Kontrollstrukturen Level 3: Objekte Einführung Instanzen Definition Verwendung und Interaktion Vererbung und Erweiterung Level 4: Dateien, Zeiten und Listen Listen Zeitmessungen Bilder und Texte Mathematische Funktionen Level 5: Shapes & Vertices Einfache Shapes und Vertices wird nicht vorgetragen by Alexis Engelke 2012 Seite 2

by Alexis Engelke 2012 Seite 3

Grafisch LEVEL 1 by Alexis Engelke 2012 Seite 4

by Alexis Engelke 2012 Seite 5

by Alexis Engelke 2012 Seite 6

by Alexis Engelke 2012 Seite 7

by Alexis Engelke 2012 Seite 8

by Alexis Engelke 2012 Seite 9

by Alexis Engelke 2012 Seite 10

by Alexis Engelke 2012 Seite 11

by Alexis Engelke 2012 Seite 12

by Alexis Engelke 2012 Seite 13

by Alexis Engelke 2012 Seite 14

Animiert LEVEL 2 by Alexis Engelke 2012 Seite 15

Datentypen: Ganze Zahlen (int): int i; i = 12; Gleitkomma Zahlen (float) float f = 12.3; Hinweis: Komma ist hier der Punkt Zeichen (char) char c; c = '5'; Zeichenketten (String) String s; s = "Hallo Welt"; Wahrheitswerte (Boolean) boolean b; b = false; Werte sind nur true und false! Zahlen (Ganze und Gleitkomma) + Addition i = k + 10; - Subtraktion * Multiplikation / Division % Modulo (Divisionsrest) ++ Inkrement (+1) i++ entspricht i = i + 1 -- Dekrement (-1) i-- entspricht i = i - 1 += Addition zur Variable i += 10 entspricht i = i + 10 -= Subtraktion zur Variable *= Multiplikation zur Variable /= Division zur Variable %= Modulo der Variable Zeichen + Addition zum ASCII-Wert i = k + 10; - Subtraktion vom ASCII-Wert += Addition zum ASCII-Wert des Zeichens i += 'a' entspricht i = i + 'a' -= Subtraktion vom ASCII-Wert des Zeichens Zeichenketten + Zusammenfügen s = k + "1"; += Zur Zeichenkette Anfügen s += "H" entspricht s = s + "H" Boolean && true, wenn beide Seiten true sind (Und) if (a && b) true, wenn min. eine Seite true ist (Oder) if (a b)! true, wenn der Wert false ist (Negation) if (!a) by Alexis Engelke 2012 Seite 16

by Alexis Engelke 2012 Seite 17

by Alexis Engelke 2012 Seite 18

Probiere den Code doch mal aus und wandle ihn ab! Hiermit kannst du schon eine Menge machen: Dieses Wissen reicht aus, um z.b. ein Ball-Spring-Programm oder um ein Diagramm zu zeichnen. by Alexis Engelke 2012 Seite 19

Translation und Rotation Wie sieht es aus, wenn wir gedrehte Rechtecke zeichnen wollen? Der Schlüssel zur Lösung ist die Translation (Verschiebung) und Rotation (Drehung). Der Befehl zur Translation lautet translate(xtrans, ytrans). Hiermit wird der Null-Punkt des Koordinatensystems um xtrans und ytrans verschoben. Diese Werte können auch negativ sein. Bogenmaß Winkelmaß QUARTER_PI 45 HALF_PI 90 PI 180 TWO_PI 360 Um das Koordinatensystem um seinen Nullpunkt zu drehen, gibt es die Funktion rotate(winkel), wobei der Winkel im Bogenmaß angegeben wird. Um dies umzuwandeln, kann man das auch so schreiben: rotate(radians(winkel)), wobei hier der Winkel in unserem bekannten Winkelmaß (0 bis 360 ) angegeben wird. Auch dieser Wert kann negativ sein, dies wird jedoch nicht benötigt, da -90 270 entsprechen. Die Funtkion float radians(float deg) wandelt die Winkel-Zahl deg in das radial- System um. Um Werte wieder in unser Winkel-System umzurechnen, gibt es die Funktion float degrees(float rad). Wenn man Translation und Rotation mischt, sieht dies zum Beispiel so aus: Translation Rotation In diesem Fall wurde erst eine Translation nach rechts durchgeführt, dann eine Rotation und anschließend erneut eine Translation nach rechts. Damit wir uns die Reihenfolge der Änderungen nicht merken müssen, kennt Processing zwei sehr wertvolle Methoden: pushmatrix() speichert den aktuellen Zustand, popmatrix() stellt den gespeicherten Zustand wieder her. Diese Aufrufe können auch verschachtelt werden. by Alexis Engelke 2012 Seite 20

this ist das Objekt selbst ( ich ) by Alexis Engelke 2012 Seite 21

Zur For-Schleife: Der Übergang kann auch i += 23 oder i *= 6 oder i-- oder i -= 12 heißen. Auch die sogenannte Zählvariable muss nicht i heißen (dabei ist es üblich einen Ein-Buchstaben- Namen zu nehmen). by Alexis Engelke 2012 Seite 22

Objekte LEVEL 3 by Alexis Engelke 2012 Seite 23

by Alexis Engelke 2012 Seite 24

Variablen in einer Klasse heißen Feld. Der Code der Klasse wird direkt ins Programm geschrieben. Klassen können auch andere Klassen verwenden. by Alexis Engelke 2012 Seite 25

Definition und Verwendung einer Klasse class Name { // Felder der Klasse hier! // Methoden der Klasse hier! } Durch diesen Code definieren wir eine Klasse Name. Hier ein Beispiel für eine Klasse Raumschiff: class Raumschiff { int x; int y; void setposition(int x, int y) { this.x = x; this.y = y; } void draw() { ellipse(x, y, 100, 10); rect(x + 5, y - 20, 15, 15); ellipse(x + 30, y - 20, 90, 10); rect(x - 40, y - 20, 15, 15); ellipse(x - 50, y - 15, 70, 5); } } Diese Klasse hat zwei Felder: x und y. Diese dienen zur Speicherung der Position. Darüber hinaus besitzt diese Klasse die Methoden setposition(int,int) zum Setzen der Position und eine Methode draw, die an die Stelle von (x,y) ein Raumschiff malt. Dieser Code funktioniert jedoch noch nicht, wir benötigen noch das übliche setup/draw. Dies könnte so aussehen: Raumschiff meinraumschiff; void setup() { size(400,300); stroke(255); fill(255,255,0); smooth(); meinraumschiff = new Raumschiff(); } void draw() { background(0); meinraumschiff.setposition(mousex, mousey); meinraumschiff.draw(); } In der ersten Zeile wird gesagt, dass es ein Objekt Raumschiff mit dem Namen meinraumschiff gibt, welches jedoch noch nicht initialisiert ist. In Setup wird dann ein Raumschiff erzeugt: meinraumschiff = new Raumschiff(); Ab diesem Moment steht uns das Raumschiff zur Verfügung, wir haben es instanziiert. In der Draw-Methode setzen wir das Raumschiff an die Position (x,y), in dem wir die Methode setposition aufrufen, und zeichnen es durch den Aufruf von draw. by Alexis Engelke 2012 Seite 26

Sichtbarkeit Als das Setup-Draw-Konzept eingeführt wurde, wurde gesagt, dass die Variable, die außerhalb einer Methode definiert wurde, überall sichtbar ist. Wenn wir jetzt eine Klasse definieren, gilt etwas Ähnliches: Alle Felder, die in einer Methode definiert werden, sind nach wie vor sicher. Alle Felder, die wir in einer Klasse außerhalb von Methoden definieren, sind innerhalb der Klasse sichtbar. Auch kann man auf diese zugreifen (objekt.feld). Dies ist jedoch nicht empfohlen! Stattdessen sollte man eine Methode zum Setzen eines bzw. mehrerer Felder definieren (Mutator, Setter) und eine Methode zum Lesen eines Feldes (Akzessor, Getter). Wenn man ein Feld nicht verändern soll, wird kein Setter definiert. Ähnliches gilt für das Auslesen eines Feldes. Für Getter und Setter gibt es Konventionen, an die wir uns halten wollen: Alle Setter beginnen mit set-, alle Getter mit get-. Feld Feld Feld Feld Methode Sieht alles Feld Feld Klasse Das Programm Sieht Methoden der Klasse und eigene Variablen by Alexis Engelke 2012 Seite 27

Erweiterung von Klassen (Vererbung) Ziel der Erweiterung ist es, denselben Code nicht fünfmal zu schreiben, sondern nur ein einziges mal. by Alexis Engelke 2012 Seite 28

Listen, Dateien und Mathematik LEVEL 4 by Alexis Engelke 2012 Seite 29

Ein Beispiel für dist: println(dist(2,2,5,4)) gibt die Distanz zwischen den Punkten (2,2) und (5,4) aus. Hinweis: Um Zahlen in Listen zu speichern, kann man eine eigene Klasse Zahl schreiben, die ein Feld var o.ä. hat (eine sogenannte Wrapper-Klasse). by Alexis Engelke 2012 Seite 30

Dieser Level wird auch aus zeitlichen Gründen nicht vorgetragen und dient zum Selbststudium. Shapes & Vertices LEVEL 5 by Alexis Engelke 2012 Seite 31

In diesem Level wird es darum gehen, eigene Figuren, wie man z.b. einen Stern oder andere nichtvorgegebene Objekte zeichnen kann. Die Lösung dazu sind die sogenannten Vertices. Der Befehl, um eine solche Figur zu beginnen lautet beginshape(). Einzelne Eckpunkte, die miteinander verbunden werden, legt man mit dem Befehl vertex(x,y) fest. Wenn alle Eck-Punkte festgelegt sind, wird die Figur mit dem Befehl endshape() beendet. Soll der letzte Punkt wieder mit dem ersten verbunden werden, so lautet der Befehl nicht endshape(), sondern endshape(close). Hier ein Beispiel: void setup() { size(400, 300); smooth(); fill(255, 120, 0); stroke(0); } void draw() { background(255); beginshape(); vertex(20, 20); vertex(80, 95); vertex(50, 90); vertex(250, 200); endshape(close); } Ohne die Figur abzuschließen, also ohne das Argument CLOSE bei endshape, würde dies das Resultat sein: by Alexis Engelke 2012 Seite 32