Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

skript:klassen-arduino

Dies ist eine alte Version des Dokuments!




Klassen in C++

In dieser Aufgabe gehen wir davon aus, dass ihr Grundkenntnisse über Klassen in Java/Processing habt im Umfang der 3. WocheLINK des Crashkurses.

In Arduino kann man auch mit Klassen arbeiten. Im Folgenden wollen wir auf dem Piezo unterschiedliche Melodien abspielen und diese mit Hilfe einer Klasse Song modellieren. Baut eine Schaltung mit dem Piezo auf.

Die Song-Klasse

Jeder Song hat zwei Eigenschaften: die Liste von abzuspielenden Noten in Form eines int-Arrays und der Pin, welcher mit dem Piezo verbunden ist.

Eine Klasse in C++ besteht in der Regel aus zwei Dateien: einer Header-Datei .h, die alle Variablen, Konstruktoren und Methoden benannt werden, und einer .cpp-Datei, die die eigentliche Impementieriung der Methoden beihnaltet. In unserem Beispiel kann die Klasse so aussehen:

Song.h
class Song {
  public:
    Song(); // Konstruktor, muss noch mit Parametern versehen werden
    void play(); // Methode zum Abspielen der Melodie
  private:
    int notes[]; // Noten-Frequenzen in Hz
    int pin; // Piezo-Pin
};
Song.cpp
#include "Song.h"
Song::Song() {
  // TODO: Implementierung des Konstruktors fehlt
}
 
void Song::play() {
  // TODO: Implementierung der Funktion fehlt
}

Diese Aufteilung klingt vielleicht verwirrend am Anfang. Gründe dafür sind die historische Entwicklung von C++ und die Idee, die Schnittstelle von der Implementierung zu trennen. Z.B. wenn man im Team arbeitet, kann man die Header-Dateien als Schnittstellen an Andere übergeben, während an der Implementierung noch gearbeitet wird. Theoretisch kann man auch alles in einer Datei schreiben; Die Aufteilung in mehrere Dateien ist für die Übersichtlichkeit empfohlen.

Ihr sieht oben, dass die Header-Datei zwei Blöcke hat, die mit public und private anfangen. Diese Schlüsselworte weisen auf die Sichtbarkeit der Variablen und Funktionen hin. Public bedeutet, dass die Variable/Funktion nur innerhalb der Klasse sichtbar ist, protected innerhalb der Klasse und ihrer Unterklassen, public überall. (Ähnliche Ebenen gibt es übrigens auch in Java.) Der Faustregel ist, die Sichtbarkeit möglichst begrenzt zu wählen. Die Begründung ist die gleiche wie bei globalen und lokalen Variablen: Je mehr Stellen haben Zugriff auf die Variable, desto mehr fehleranfällig ist der Code. Wir machen den Konstruktor und die Funktion play() public, damit wir darauf von unserem Haupt-Tab zugreifen können. Die beiden Variablen sind private, sie sollen nur innerhalb der Klasse verfügbar sein. Es ist üblich, in der Header-Datei den public-Block ganz oben zu platzieren.

skript/klassen-arduino.1538929096.txt.gz · Zuletzt geändert: 2018/10/07 18:18 von d.golovko