Benutzer-Werkzeuge

Webseiten-Werkzeuge


skript:klassen

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
skript:klassen [2018/11/08 14:05]
d.golovko [1. Steuerung eines Roboters mit Hilfe einer Klasse]
skript:klassen [2018/11/08 14:13] (aktuell)
d.golovko
Zeile 6: Zeile 6:
 Es gibt aber auch die Möglichkeit,​ Variablen für kompexere Zusammenhänge zu erstellen. Z.B. ist ein Datentyp denkbar, welcher die Studierenden des Robotiklabors repräsentiert. Ein_e Student_in könnte folgende Eigenschaften haben: Name, Matrikelnummer,​ Name des Projektteams,​ Noten usw. Oder, um ein Beispiel aus dem Bereich der Robotik zu geben, ein Datentyp, welcher einen Schrittmotor repräsentiert. Ein Motor könnte die Eigenschaften Pinnummer, Drehrichtung und Schrittwinkel haben. Darüber hinaus könnte man bestimmte Funktionalität mit diesem Datentyp verbinden, z.B. kann ein Motor eine vorgegebene Anzahl an Schritten in eine oder in die andere Richtung machen. Solche Datentypen heissen **Objektdatentypen** oder abstrakte Datentypen. ​ Es gibt aber auch die Möglichkeit,​ Variablen für kompexere Zusammenhänge zu erstellen. Z.B. ist ein Datentyp denkbar, welcher die Studierenden des Robotiklabors repräsentiert. Ein_e Student_in könnte folgende Eigenschaften haben: Name, Matrikelnummer,​ Name des Projektteams,​ Noten usw. Oder, um ein Beispiel aus dem Bereich der Robotik zu geben, ein Datentyp, welcher einen Schrittmotor repräsentiert. Ein Motor könnte die Eigenschaften Pinnummer, Drehrichtung und Schrittwinkel haben. Darüber hinaus könnte man bestimmte Funktionalität mit diesem Datentyp verbinden, z.B. kann ein Motor eine vorgegebene Anzahl an Schritten in eine oder in die andere Richtung machen. Solche Datentypen heissen **Objektdatentypen** oder abstrakte Datentypen. ​
  
-Die Modellierung der Welt mit Hilfe von Objekten entspricht dem Paradigma der **objektorientierten Programmierung**.  Fast alle modernen Programmiersprachen (C++, Java, Python, C#) unterstützen sie. Die Beispiele in diesem Artikel wurden in Java/​Processing erstellt. ​+Die Modellierung der Welt mit Hilfe von Objekten entspricht dem Paradigma der [[https://​de.wikipedia.org/​wiki/​Objektorientierte_Programmierung|objektorientierten Programmierung]].  Fast alle modernen Programmiersprachen (C++, Java, Python, C#) unterstützen sie. Die Beispiele in diesem Artikel wurden in Java/​Processing erstellt. ​
  
 Einen Objektdatentyp definiert man mit Hilfe einer **Klasse**. Ihr habt schon in den ersten Kurswochen mit Klassen/​Objekten gearbeitet, z.B. ''​Servo'',​ ''​Serial'',​ ''​String''​. Ein Objekt (eine Variable) eines bestimmten Objektdatentyps nennt man auch eine **Instanz** dieser Klasse. In der Regel schreibt man eine Klasse in einer eigenen Datei. Eine Klasse hat folgende Bestandteile:​ Einen Objektdatentyp definiert man mit Hilfe einer **Klasse**. Ihr habt schon in den ersten Kurswochen mit Klassen/​Objekten gearbeitet, z.B. ''​Servo'',​ ''​Serial'',​ ''​String''​. Ein Objekt (eine Variable) eines bestimmten Objektdatentyps nennt man auch eine **Instanz** dieser Klasse. In der Regel schreibt man eine Klasse in einer eigenen Datei. Eine Klasse hat folgende Bestandteile:​
Zeile 44: Zeile 44:
    * Konstruktor    * Konstruktor
    */    */
-   ​Robot(int radius, float paramXPos, float paramYPos, float paramAngle) {+   ​Robot(int radius, float x, float y, float angle) {
      ​this.radius = radius; // hier muss man "​this"​ nutzen, um die Attributvariable vom gleichnamigen Parameter zu unterscheiden      ​this.radius = radius; // hier muss man "​this"​ nutzen, um die Attributvariable vom gleichnamigen Parameter zu unterscheiden
-     ​this.xPos = paramXPos; // alternativ: xpos=paramXPos;  +     ​this.xPos = x; // alternativ: xpos = x;  
-     ​this.yPos = paramYPos; // alternativ: yPos = paramYPos+     ​this.yPos = y; // alternativ: yPos = y
-     ​this.angle = paramAngle; // alternativ: angle=paramAngle;​+     ​this.angle = angle; // '​this'​ muss sein
    }    }
 } }
Zeile 101: Zeile 101:
    * Konstruktor    * Konstruktor
    */    */
-   ​Robot(int radius, float paramXPos, float paramYPos, float paramAngle) { +   ​Robot(int radius, float x, float y, float angle) { 
-     ​this.radius = radius; +     ​this.radius = radius;  
-     ​this.xPos = paramXPos+     ​this.xPos = x; // alternativ: xpos = x;  
-     ​this.yPos = paramYPos+     ​this.yPos = y; // alternativ: yPos = y
-     ​this.angle = paramAngle;+     ​this.angle = angle
    }    }
  
Zeile 160: Zeile 160:
   robot2.move(2);​   robot2.move(2);​
   // Falls die beiden zu nah sind, sollen sie sich umdrehen:   // Falls die beiden zu nah sind, sollen sie sich umdrehen:
-  if (robot1.radius + robot2.radius >= robot1.distance(robot2)) {+  if (robot1.distance(robot2) ​<= 0) {
     robot1.turn(PI);​     robot1.turn(PI);​
     robot2.turn(PI);​     robot2.turn(PI);​
Zeile 179: Zeile 179:
    * Konstruktor    * Konstruktor
    */    */
-  ​Robot(int ​paramRadius, float paramXPos, float paramYPos, float paramAngle) { +   Robot(int ​radius, float x, float y, float angle) { 
-    this.radius = paramRadius+     ​this.radius = radius;  
-    this.xPos = paramXPos+     ​this.xPos = x; // alternativ: xpos = x;  
-    this.yPos = paramYPos+     ​this.yPos = y; // alternativ: yPos = y
-    this.angle = paramAngle+     ​this.angle = angle
-  }+   ​}
  
   // Methoden:   // Methoden:
   /*   /*
-   * Berechnet die Entfernung zwischen ​dem Zentrum von diesem Roboter und vom anderen Roboter+   * Berechnet die Entfernung zwischen diesem Roboter und einem anderen Roboter
    */    */
   float distance(Robot other) {   float distance(Robot other) {
-    float deltaX = this.xPos - other.xPos;​ +    float deltaX = this.xPos - other.xPos; // optional: float deltaX = xPos - other.xPos;​ 
-    float deltaY = this.yPos - other.yPos;​ +    float deltaY = this.yPos - other.yPos;  
-    float dist = sqrt((sq(deltaX) + sq(deltaY)));​+    float dist = sqrt((sq(deltaX) + sq(deltaY))) ​- this.radius - other.radius;
     return dist;     return dist;
   }   }
skript/klassen.1541682336.txt.gz · Zuletzt geändert: 2018/11/08 14:05 von d.golovko