Tag 3 4.OOP

Objektorientierte Programmierung

Im Zusammenhang mit Libraries ist es sinnvoll, das Konzept der Objekte und der Objektorientierten Programmierung (OOP) einzuführen. Wir werden es zu einem späteren Zeitpunkt des Kurses vertiefen. Das erste Objekt, dass wir verwendet haben, war PImage. Wir haben es als Container für Bilddaten genutzt (vgl. Beispiel). Die zu PImage gehörige Klasse bot uns Methoden, um dieses Objekt (der Bilddaten) zu analysieren (get()) oder zu manipulieren (set()):


PImage foto;
foto = loadImage(„Dateiname.jpg“);
color c = foto.get(100,50);
image(foto, 0,0);

Bestandteile einer Klasse, Beispiel: Käfer Klasse

Klasse: Der Inhalt der Klasse dient als eine Art Blaupause für das spätere Erstellen von Objekten, die auch Instanzen genannt werden.

Attribute: Durch die Attribute sind die einzelnen Objekte (Instanzen) einer Klasse definiert.

Methoden:Funktionen als Bestandteil des Objekts um es zu verändern oder Attribute zurückzugeben.

Obwohl alle Exemplare auf obiger Abbildung der Klasse der Käfer angehören haben die einzelnen Exemplare (Instanzen) unterschiedliche Merkmale (Ausprägungen der Attribute).

OOP Biologie
Klasse Käfer
Instanz einzelnes Exemplar
Attribute Farbe, Länge der Beine, Lände der Fühler, Größe, Proportion, …
Methoden Krabbeln, Fliegen, Fühler bewegen, …

Man könnte nun eine Klasse schreiben, durch die sich einzelne Käfer-Objekte definieren lassen. Das Aussehen (Attribute) und das Verhalten (Methoden) des Käfer-Objekts könnten dabei festgelegt oder durch die Klasse für jedes entstehende Objekt durch Zufallsoberationen zufällig generiert werden.

Beispiel 2-8: Käfer Klasse „Bug“ für Processing

Programm


Bug[] bugs;
int bugAmount = 40;

void setup(){
  size(1280,720);
  background(255);
  bugs = new Bug[bugAmount];
  for (int i = 0; i < bugs.length; i++){
    bugs[i] = new Bug(random(width), random(height)); 
  }
}

void draw(){
  background(255);
  for (int i = 0; i < bugs.length; i++){
    bugs[i].walk();
    bugs[i].update();
  }
}

Klasse


class Bug {
  float x,y, radius, speed, rotation;
  color c;
  float legLength;
  float legWidth;

  Bug(float xPos, float yPos){
      x = xPos;
      y = yPos;

      radius = random(20,80);
      legLength = random(radius/3, radius+10);
      legWidth = 100/legLength;
      speed = (legLength*legLength)/200;
      ellipseMode(CENTER);
      fill(0);
      colorMode(HSB);
      c = color(random(255), 255, 100);    
  }

   void walk () {
     float stepX = random(-speed,speed);
     float stepY = random(-speed, 0);
     x += stepX;
     y += stepY;
     if (x > width){
        x = 0;
     }
     if (y > height){
       y = 0;
     }else if (y < 0){
       y = height; 
     }
   }

   void update(){
      strokeWeight(legWidth);
      fill(0,0,0);
      line(x-legLength,y+10,x+legLength,y+10);
      line(x-legLength,y,x+legLength,y);
      line(x-legLength,y-10,x+legLength,y-10);
      strokeWeight(1);
      ellipse(x, y-radius+radius/4, radius/3, radius/2);
      fill(c);
      ellipse(x, y, radius/1.5, radius);

   }
}