Benutzer-Werkzeuge

Webseiten-Werkzeuge


techniken:objektorientjava2

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:objektorientjava2 [2016/07/14 14:43]
c.jaedicke [Tabs in Processing]
techniken:objektorientjava2 [2016/07/21 15:02] (aktuell)
c.jaedicke [Exception Handling]
Zeile 1: Zeile 1:
 ====== Objektorientiert Programmieren in Java mit Processing - Teil II: Praktisches====== ====== Objektorientiert Programmieren in Java mit Processing - Teil II: Praktisches======
- 
- 
-===== Konventionen ===== 
- 
- 
-Bei der Benennung von Methoden sollte man sich an zwei grundsätzliche Konventionen halten: ​ 
-  - Der Name der Methode fängt mit einem kleinen Buchstaben an und Namen welche mehrere Worte beinhalten fangen beim zweiten Wort mit einem Großbuchstaben an.  
-  - Der Name sollte beschreiben wie die Methode mit dem Objekt interagiert. 
- 
-Unsere Klasse bekommt zwei weitere Methoden, eine um den Roboter an seiner aktuellen Position zu zeichnen und eine um den Roboter um einen gewissen Winkel zu drehen. 
- 
-<code java> 
-class Robot { // Deklaration der Klasse Robot 
- 
-  int dRobot = 50;    //Der Durchmesser des Roboters in Pixel 
-  float direction = PI;  //Die Richtung in die der Roboter schaut ​ 
-                      //(PI (links), da der Winkel in Bogenmaß angegeben wird) 
-  float posX = 100;   //Die x-Position des Roboters in Pixel 
-  float posY = 100;   //Die y-Position des Roboters in Pixel 
-  ​ 
-  //Diese Methode zeichnet einen Roboter ​ 
-  //an seiner aktuellen Position und Ausrichtung. 
-  void drawRobot(){ //"​void"​ bedeutet dass es keinen Rückgabewert gibt 
-    // Zeichne einen Kreis an der Position des Roboters. 
-    ellipse(posX,​posY,​dRobot,​dRobot);​ 
-    // Zeichne eine Linie welche die Orientierung des Roboters angibt. 
-    line(posX,​posY,​posX+cos(direction)*50,​ posY+sin(direction)*50);​ 
-  } 
-  ​ 
-  //Die moveForward-Funktion verändert die Position so, wie es einen Schritt nach vorne entspricht. 
-  void moveForward(float distance){ 
-    posX = posX+cos(direction)*distance;​ // Innerhalb der Funktion kann direkt auf die Klassenvariablen ​ 
-    posY = posY+sin(direction)*distance;​ // zugegriffen werden. (Sie sind im Objekt quasi "​lokal"​) 
-  } 
-  ​ 
-  //Diese Methode dreht den Roboter um einen gewissen Winkel ​ 
-  //welcher von "​winkelaenderung"​ vorgegeben wird. 
-  // Die Methode bekommt einen Übergabeparameter vom Typ "​float"​. 
-  void turnRobot(float angle){ ​ 
-    this. direction += angle; 
-  } 
-  ​ 
-} 
- 
-</​code>​ 
  
  
Zeile 165: Zeile 120:
  
 Eine ausführliche Beschreibung wie Vererbung funktioniert findet ihr hier: [[http://​www.java-tutorial.org/​vererbung.html|http://​www.java-tutorial.org/​vererbung.html]] Eine ausführliche Beschreibung wie Vererbung funktioniert findet ihr hier: [[http://​www.java-tutorial.org/​vererbung.html|http://​www.java-tutorial.org/​vererbung.html]]
 +
 +===== Exception Handling =====
 +In diesem Abschnitt geht es um Fehlerbehandlung von Fehlern die zur Laufzeit eures Programmes auftreten. Das sind alle Fehler die nicht schon beim Kompilieren eures Codes auftreten. Dazu gehören Fehler wie versuchter Zugriff auf bisher nicht erzeugte Objekte oder Division durch Null. \\
 +Im Gegensatz zu anderen Programmiersprachen,​ wie etwa C, muss in Java ein Fehler nicht gleich zum Programmabsturz führen. Solche Fehler werden in Java als //​Exceptions//​ behandelt und können abgefangen werden. Am Beispiel der Roboter-Klasse führen wir eine Null-Pointer-Exception herbei, indem wir das Robot-Objekt nicht initialisieren und trotzdem versuchen die drawRobot-Methode aufzurufen:
 +<code java>
 +Robot myRobot;
 +
 +void setup() {
 +  size(199,​199);​
 +}
 +
 +void draw() {
 +    myRobot.drawRobot();​
 +}
 +</​code>​
 +Dieser Code führt zum Abbruch des Programms und es wird der Hinweis //​NullPointerException//​ ausgegeben. Der Vorteil des sogenannten try-catch-Blocks ist das der Fehler nicht zum Absturz führt und eine detaillierte Fehlerausgabe mit Angabe der fehlerhaften Programmzeile generiert wird.
 +<code java>
 +Robot myRobot;
 +void setup() {
 +  size(199,​199);​
 +}
 +void draw() {
 +  try
 +  {
 +    myRobot.drawRobot();​
 +  }
 +  catch(Exception e)
 +  {
 +    println("​Exception:​ " + e.getMessage());​
 +    e.printStackTrace();​
 +  }
 +}
 +</​code>​
 +Die Ausgabe zeigt euch den Pfad in dem der Fehler aufgetreten ist, wobei die erste Zeile eure Message ist, die zweite der Exception-Typ und die dritte gibt euch am Ende der Zeile die entsprechende Zeile in eurem Code:
 +<​code>​
 +Exception: null
 +java.lang.NullPointerException
 + at sketch_160720a.draw(sketch_160720a.java:​24)
 + at processing.core.PApplet.handleDraw(PApplet.java:​2402)
 + at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:​1527)
 + at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:​316)
 +</​code>​
 +
 +<note important>​Processing fügt eurem Code vor dem Kompilieren noch einige Zeilen Code hinzu, daher verschiebt sich die Zeilenangabe etwas. Die Verschiebung müsst ihr experimentell feststellen!</​note>​
techniken/objektorientjava2.1468500207.txt.gz · Zuletzt geändert: 2016/07/14 14:43 von c.jaedicke