Objekte 1 - Woche 8
Aufgaben
E2: Ball
LösungDefiniere eine Klasse mit dem Namen "Ball" und Eigenschaften für Position, Durchmesser und Farbe und einer Methode, die den Ball zeichnet. Erzeuge ein Objekt mit dem Namen "redBall" und weise diesem einen zufällig gewählten Durchmesser und rot als Farbe zu. Die Position soll jeweils an der aktuellen Mausposition sein.


Variation
Variation: Erzeuge zwei weitere Bälle, die feste, zufällige Positionen haben.
Variation: Denk dir weitere Eigenschaften aus (z.B. Strichstärke).
E3: Der bewegte Ball
Lösung
Erweitere die Klasse Ball um Geschwindigkeitsvariablen. Definiere desweiteren eine
Methode move
, die die Position um die Geschwindigkeit verändert.
Es soll also solch eine Verwendung in draw()
möglich werden:
Variation: Erweitere die Methode move()
so, dass der Ball an den Ecken abprallt.
Diskussion: Wie kann man nun mehrere Bälle auf einmal animieren?
Objektorientierte Programmierung
Objektorientiertes Programmieren (OOP) ist ein Programmierkonzept, dass von den meisten höheren Programmiersprachen wie Processing oder ActionScript unterstützt wird. Objektorientierte Programme sind nicht unbedingt schneller oder schlanker, sie sind aber oft besser zu verstehen. In diesem Sinne bedeutet OOP vor allem, anders über Programmierung nachzudenken. Im Mittelpunkt des OOP steht das Objekt. Statt mit einzelnen Funktionen und Variablen zu arbeiten, bietet OOP die Möglichkeit, eine Reihe von Eigenschaften und Methoden abzukapseln und sie als eine Einheit, bzw. als ein Objekt zu behandeln. Diese Objekte können dann ein hohes Maß an Komplexität bekommen. Jedem Objekt liegt eine Klasse zugrunde, in der schon die grundsätzliche Struktur aller Objekte angelegt ist.
Eigenschaften und Methoden
Jedes Objekt hat Eigenschaften und Methoden. Die Eigenschaften bestimmen wie ein Objekt ist, die Methoden, was das Objekt tun kann. Das Konzept der Objekte wurde aus der realen Welt entlehnt, daher ist es oft eingängiger und nachvollziehbarer als etwa mit vielen Arrays zu arbeiten.

So hat vielleicht der Strandball einen Durchmesser von 20cm, ist rot-weiß gestreift und aus Plastik (Eigenschaften). Und man kann den Ball nun werfen, treten oder auch die Luft herauslassen (Methoden).
Klassen und Objekte
Eine Klasse ist eine abstrakte, ordnende Struktur, der man eine Reihe
von Eigenschaften und Methoden zuweisen kann. Ein Objekt nun ist eine konkrete Variante
dieser Klasse, eine sogennante Instanz.
Um zum Beispiel zurück zu kommen: Es gibt natürlich unzählige verschiedene Bälle auf der Welt,
aber alle haben ein paar Dinge gemein: Sie haben eine Größe, eine Farbe und ein Material.
Strukturiert sieht die Klasse dann so aus. Ein Ball hat allgemein folgende Eigenschaften:
- Größe
- Farbe
- Material
Und jeder einzelne Ball, jedes Objekt, hat eine ganz spezielle Größe und eine ganz spezielle Farbe.
Unser Strandball etwa hat folgende Eigenschaften:
- Größe: 20cm
- Farbe: rot-weiß gestreift
- Material: Plastik
OOP in Processing
Bei der objektorientierten Programmierung in Processing müssen ein Menge Dinge beachtet werden. Zum Verständnis zeige ich im Folgenden ein Programm, das ein Kreis zeichnet: Einmal im "klassischen" Verfahren und dem gegenüber gestellt das Programm in OOP.
Das nächste Programm zeigt, wie dies nun mit einem Objekt umgesetzt werden kann:
Im Beispiel haben wir eine Klasse Ball
definiert. Dies geschieht, indem man
class
und den Namen der Klasse und dann einen Programmblock
(umfasst von geschweiften Klammern) hinschreibt. In diesen Block werden die Eigenschaften und Methoden der
Klasse definiert.
Innerhalb der Klasse haben wir eine eigene Funktion definiert (drawShape). Interne Funktionen von Klassen werden in der OOP Methoden genannt.
Wir haben also die allgemeine Struktur definiert und möchten jetzt einen konkreten Ball erstellen.
Um ein Objekt dieser Klasse zu erzeugen, verwendet man new
:
Es gibt danach ein neues Objekt mit dem Namen myBall
. Über diese Variable kann danach
die Methode aufgerufen werden:
Dies führt dazu, dass die Methode aufgerufen wird und das Rechteck gezeichnet wird. Diese Verwendung von Methoden nennt man aufgrund des Punktes zwischen Objekt-Variablennamen und Methodennamen die Punktnotation.
Ablauf der OOP
Um Objekte einsetzen zu können, muss man
- Eine eigene Klasse definieren
- Objekte mit Hilfe der Klasse erzeugen (sogenannte Instanzen)
- Diese Objekte verwenden
Eigenschaften
Wie oben gesehen, kann eine Klasse nicht nur Methoden, sondern auch Eigenschaften haben. Diese werden direkt in die Klasse geschrieben.
Von aussen können die Eigenschaften nun genutzt, d.h. aktuelle Werte ausgelesen oder neue Werte gespeichert werden.
Und natürlich können die Eigenschaften auch und vor allem in der Klasse selbst verwendet werden. Innerhalb der eigenen Methoden muss nicht die Punktnotation genutzt werden: