Benutzer-Werkzeuge

Webseiten-Werkzeuge


techniken:objektorient

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
techniken:objektorient [2014/04/11 21:21]
fbonowski
techniken:objektorient [2016/01/21 12:45] (aktuell)
Zeile 1: Zeile 1:
-===== Einführung ins objektorientierte Programmieren mit Arduino===== +====== Einführung ins objektorientierte Programmieren mit Arduino======  
-==== Motivation ====+===== Motivation ​=====
 Schon bald nach Beginn der Programmierarbeiten an eurem Roboter werden euch einige typische Probleme begegnen: Schon bald nach Beginn der Programmierarbeiten an eurem Roboter werden euch einige typische Probleme begegnen:
   * **Übersichtlichkeit**:​ Das Programm wird immer größer und es wird schwer, den Überblick zu behalten. ​   * **Übersichtlichkeit**:​ Das Programm wird immer größer und es wird schwer, den Überblick zu behalten. ​
Zeile 10: Zeile 10:
 Fast immer hilft es jedoch, **das Programm in sinnvolle Untereinheiten aufzuteilen,​ die relativ unabhängig voneinander sind**. Fast immer hilft es jedoch, **das Programm in sinnvolle Untereinheiten aufzuteilen,​ die relativ unabhängig voneinander sind**.
  
-==== Praktisches Beispiel: Motorsteuerung ====+===== Praktisches Beispiel: Motorsteuerung ​=====
  
 Mit dem Konzept der [[http://​arduino.cc/​de/​Reference/​FunctionDeclaration|Funktion]] habt ihr bereits ein enorm nützliches Werkzeug zur Strukturierung eures Codes kennengelernt. Mit ihnen lässt sich eine Tätigkeit bzw. Operation, die aus mehreren anderen Operationen besteht unter einem neuen Namen zusammenfassen,​ so dass sie immer wieder durchgeführt werden kann, ohne dass der Code dafür kopiert werden oder auch nur bekannt sein muss. Mit dem Konzept der [[http://​arduino.cc/​de/​Reference/​FunctionDeclaration|Funktion]] habt ihr bereits ein enorm nützliches Werkzeug zur Strukturierung eures Codes kennengelernt. Mit ihnen lässt sich eine Tätigkeit bzw. Operation, die aus mehreren anderen Operationen besteht unter einem neuen Namen zusammenfassen,​ so dass sie immer wieder durchgeführt werden kann, ohne dass der Code dafür kopiert werden oder auch nur bekannt sein muss.
Zeile 37: Zeile 37:
 </​code>​ </​code>​
  
-Das spart schon eine Menge Tipperei, aber eines stört immernoch: ​+Das spart schon eine Menge Tipperei.
  
-**Jedes Mal, wenn wir die Geschwindigkeit ändern wollen, müssen wir die //​Pinnummern//​ wissen!**+**Aber eines stört immernoch: ​Jedes Mal, wenn wir die Geschwindigkeit ändern wollen, müssen wir die //​Pinnummern//​ wissen!**
  
 Das ist besonders lästig, wenn die Funktionsaufrufe quer über das Programm verteilt sind, oder wir Programmmodule erstellen wollen, die auf beliebige Motoren zugreifen können sollen, ohne vorher zu wissen, welche dies sein werden. So könne es z.B. eine H-Brücke geben, die statt 3 nur 2 Pins als Eingänge (Richtung, PWM) hat. Wegen einer kleinen Hardwareänderung wie dieser an vielen Stellen Code ändern zu müssen, der sich mit ganz anderen Dingen (z.B. der Navigation in einem Labyrinth) beschäftigt,​ führt zu viel verschwendeter Zeit... Das ist besonders lästig, wenn die Funktionsaufrufe quer über das Programm verteilt sind, oder wir Programmmodule erstellen wollen, die auf beliebige Motoren zugreifen können sollen, ohne vorher zu wissen, welche dies sein werden. So könne es z.B. eine H-Brücke geben, die statt 3 nur 2 Pins als Eingänge (Richtung, PWM) hat. Wegen einer kleinen Hardwareänderung wie dieser an vielen Stellen Code ändern zu müssen, der sich mit ganz anderen Dingen (z.B. der Navigation in einem Labyrinth) beschäftigt,​ führt zu viel verschwendeter Zeit...
Zeile 49: Zeile 49:
 Die Sprache C++ und damit auch Arduino stellt dafür ein geeignetes Werzeug bereit: //Klassen// und //​Objekte//​. Die Sprache C++ und damit auch Arduino stellt dafür ein geeignetes Werzeug bereit: //Klassen// und //​Objekte//​.
  
-Eine Klasse legt die gemeinsamen Eigenschaften einer Gruppe von Objekten fest. In unserem Fall also ist darin z.B. festgelegt, dass alle Motoren die Möglichkeit haben, unterscheidlich viel Gas zu geben.+Eine Klasse legt die gemeinsamen Eigenschaften einer Gruppe von Objekten fest. In unserem Fall also ist darin z.B. festgelegt, dass alle Motoren die Möglichkeit haben, unterscheidlich viel Gas ('​throttle'​)zu geben.
 Im Programm sieht das dann z.B. so aus: Im Programm sieht das dann z.B. so aus:
  
Zeile 206: Zeile 206:
 <code c++>#​include "​MotorControl.h"​ </​code>​ <code c++>#​include "​MotorControl.h"​ </​code>​
 an den Anfang. an den Anfang.
 +===== Teil 2: Mehr Details zum Konzept =====
 ==== Klassen können aufeinander aufbauen (Vererbung) ==== ==== Klassen können aufeinander aufbauen (Vererbung) ====
 +Zu Beginn des Artikels hatten wir versprochen,​ dass es Möglich sein sollte, verschiedene Motortreibervarianten gegeneinander auszutauschen,​ ohne am Rest des Programmes etwas zu ändern.
 +
 +
 ==== Klassen können andere Objekte als Membervariablen enthalten ==== ==== Klassen können andere Objekte als Membervariablen enthalten ====
 ==== In C++ können Klassendeklarationen und der Code für die darin angekündigten Funktionen in unterschiedlichen Dateien liegen ==== ==== In C++ können Klassendeklarationen und der Code für die darin angekündigten Funktionen in unterschiedlichen Dateien liegen ====
techniken/objektorient.1397244081.txt.gz · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)