Benutzer-Werkzeuge

Webseiten-Werkzeuge


techniken:objektorientjava

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:objektorientjava [2016/07/06 15:28]
fbonowski
techniken:objektorientjava [2016/07/14 14:43] (aktuell)
c.jaedicke [Konventionen]
Zeile 103: Zeile 103:
 In der Praxis macht das insbesondere bei Zuweisungen von Variablen einen Unterschied:​ In der Praxis macht das insbesondere bei Zuweisungen von Variablen einen Unterschied:​
 === Bei primitiven Variablen... === === Bei primitiven Variablen... ===
- 
   * Wird der Inhalt der Variable kopiert. ​   * Wird der Inhalt der Variable kopiert. ​
   * Beide Variablen haben danach getrennte Kopien des selben Wertes.   * Beide Variablen haben danach getrennte Kopien des selben Wertes.
   * Veränderungen der einen Variable haben nach einer Zuweisung keinen Einfluss auf den Wert der anderen Variable   * Veränderungen der einen Variable haben nach einer Zuweisung keinen Einfluss auf den Wert der anderen Variable
-=== Bei Klassenvariablen ​... ===+=== Bei Variablen mit Klassentyp... ===
   * Wird nur die Referenz / Speicheradresse kopiert.   * Wird nur die Referenz / Speicheradresse kopiert.
   * Beide Variablen verweisen danach auf das **//​selbe//​** Objekt.   * Beide Variablen verweisen danach auf das **//​selbe//​** Objekt.
   * Veränderungen des Objektes über die eine Variable wirken sich dementsprechend auf das aus, was über die andere Referenzvariable ausgelesen werden kann.   * Veränderungen des Objektes über die eine Variable wirken sich dementsprechend auf das aus, was über die andere Referenzvariable ausgelesen werden kann.
  
 +Hier ein Beispiel, welches das unterschiedliche Verhalten von Variablen mit primitiven und Klassentypen:​
 <code Java> <code Java>
 //Primitive Variablen enthalten einen Wert, der bei Zuweisungen kopiert wird: //Primitive Variablen enthalten einen Wert, der bei Zuweisungen kopiert wird:
Zeile 123: Zeile 123:
 println(b); ​ // Ausgabe "​3"​ println(b); ​ // Ausgabe "​3"​
  
-//Klassenvariablen ​enthalten eine Referenz auf ein Objekt:+//Variablen mit Klassentyp ​enthalten eine Referenz auf ein Objekt:
 Robot robotOne=new Robot(); // ein erster Roboter Robot robotOne=new Robot(); // ein erster Roboter
 Robot robotTwo=new Robot(); // ein zweiter Roboter Robot robotTwo=new Robot(); // ein zweiter Roboter
Zeile 139: Zeile 139:
  
  
-=== Ein fertiges Programm ===+===== Ein fertiges Programm ===== 
 +Zum Abschluss nochmal ein kleines Programm, in dem alles, was bisher passiert ist, angewandt wird:
  
 <code Java> <code Java>
 class Robot { // Deklaration der Klasse Robot class Robot { // Deklaration der Klasse Robot
-  +  float posX = 100;     //Die x-Position des Roboters in Pixel 
-  ​int dRobot ​50   //Der Durchmesser ​des Roboters in Pixel +  ​float posY 100    ​//Die y-Position ​des Roboters in Pixel 
-  float direction = PI;  //Die Richtung in die der Roboter schaut ​ +  float direction= PI;  //Die Richtung in die der Roboter schaut, in Bogenmaß, gegen den Uhrzeigersinn,​ relativ zur X-Achse. 
-                      //(PI (links)da der Winkel ​in Bogenmaß ​angegeben wird) +                        // (PI  => der Roboter schaut nach links)
-  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 ​   //Diese Methode zeichnet einen Roboter ​
   //an seiner aktuellen Position und Ausrichtung.   //an seiner aktuellen Position und Ausrichtung.
   void drawRobot(){ //"​void"​ bedeutet dass es keinen Rückgabewert gibt   void drawRobot(){ //"​void"​ bedeutet dass es keinen Rückgabewert gibt
-    ​// Zeichne einen Kreis an der Position des Roboters. +    ellipse(posX,​posY,​20,20); // Zeichne ​einen Kreis an der Position ​des Roboters. 
-    ​ellipse(posX,​posY,​dRobot,dRobot); +    line(posX,​posY,​posX+cos(direction)*50,​ posY+sin(direction)*50);​// Zeichne eine Linie welche die Orientierung des Roboters angibt.
-    ​// Zeichne ​eine Linie welche die Orientierung ​des Roboters ​angibt+
-    line(posX,​posY,​posX+cos(direction)*50,​ posY+sin(direction)*50);​+
   }   }
    
Zeile 164: Zeile 161:
     posY = posY+sin(direction)*distance;​ // zugegriffen werden. (Sie sind im Objekt quasi "​lokal"​)     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>+ 
 +Robot myRobot; // deklariere eine Referenz auf einen Roboter (sie verweist in diesem Moment ins Leere) 
 + 
 + 
 +// Das Processing "​setup"​ 
 +void setup(){ 
 +  myRobot=new Robot(); 
 +
 + 
 + 
 +// Das Processing "​setup"​ 
 +void draw(){ 
 +  background(235); ​      // Male den Hintergrund des Fensters neu an... 
 +  myRobot.drawRobot(); ​  // Zeichne in das nun leere Fenster den Roboter 
 +  myRobot.moveRobot(); ​  // Diese Funktion bewegt den Roboter ein wenig. 
 +  myRobot.direction+=PI/​200;​ // drehe den Roboter ein Stück gegen den Uhrzeigersinn 
 +
 + 
 +</code> 
 + 
 +===== 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.
  
 ===== Tabs  in Processing ===== ===== Tabs  in Processing =====
Zeile 181: Zeile 197:
  
 In diesem neuen Tab speichert ihr eure Klasse. In diesem neuen Tab speichert ihr eure Klasse.
 +===== Das ist noch nicht alles... =====
 +Mit dem, was bis hierhin besprochen wurde, könnt ihr schonmal einigermaßen Ordunung in euer Programm bringen und die von einer Library bereitgestellen Klassen benutzen.
 +
 +Für ein vollständiges Verständnis von Objektorientierung in Java fehlen noch:
 +
 +  * Zugriffssteuerung auf Memberfunktionen und Variablen durch **//​private,​ public, protected//​**
 +  * Vererbung
  
 +Eure Programme werden besser lesbar, wenn ihr die folgenden "​Style-Konventionen"​ einhaltet:
 +[[http://​www.oracle.com/​technetwork/​java/​codeconventions-135099.html]]
  
  
  
techniken/objektorientjava.1467811704.txt.gz · Zuletzt geändert: 2016/07/06 15:28 von fbonowski