オブジェクト指向プログラミングの用語でいうと、『あるクラスはほかのクラスのフィールドとメソッドを”継承”できる』といいます。ほかのクラスから継承したクラスを『サブクラス』と呼びます。そして、継承されるクラスを『スーパークラス』と呼びます。サブクラスはスーパークラスを拡張します。

【Spinクラス】

class Spin{
  float x,y,speed;
  float angle=0.0;
  Spin(float xpos,float ypos,float s){
    x = xpos;
    y = ypos;
    speed = s;
  }
  void update(){
    angle += speed;
  }
}

【SpinArmクラス】

class SpinArm extends Spin{
  SpinArm(float x,float y, float s){
   super(x,y,s); 
}

void display(){
  strokeWeight(1);
  stroke(0);
  pushMatrix();
  translate(x,y);
  angle += speed;
  rotate(angle);
  line(0,0,100,0);
  popMatrix();
  }
}

【SpinArmクラス Spinクラス】

class SpinArm extends Spin{
  SpinArm(float x,float y, float s){
   super(x,y,s); 
}

void display(){
  strokeWeight(1);
  stroke(0);
  pushMatrix();
  translate(x,y);
  angle += speed;
  rotate(angle);
  line(0,0,100,0);
  popMatrix();
  }
}

【定義付けされるファイル】

SpinArm arm;
SpinSpots spots;

void setup(){
  size(100,100);
  arm = new SpinArm(width/2,height/2,0.01);
  spots = new SpinSpots(width/2,height/2,-0.02,33.0);
}

void draw(){
  background(204);
  arm.update();
  arm.display();
  spots.update();
  spots.display();
}

【まとめられたファイル】

class Spin{
  float x,y,speed;
  float angle=0.0;
  Spin(float xpos,float ypos,float s){
    x = xpos;
    y = ypos;
    speed = s;
  }
  void update(){
    angle += speed;
  }
}

class SpinArm extends Spin{
  SpinArm(float x,float y, float s){
   super(x,y,s); 
}

void display(){
  strokeWeight(1);
  stroke(0);
  pushMatrix();
  translate(x,y);
  angle += speed;
  rotate(angle);
  line(0,0,100,0);
  popMatrix();
  }
}

class SpinSpots extends Spin{
  float dim;
  
  SpinSpots(float x,float y, float s, float d){
    super(x,y,s);
    dim = d;
  }
  
  void display(){
    noStroke();
    pushMatrix();
    translate(x,y);
    angle += speed;
    rotate(angle);
    ellipse(-dim/2,0,dim,dim);
    ellipse(dim/2,0,dim,dim);
    popMatrix();
  }
}

プログラムをモジュール化していくことは重要なテクニックですが、やりすぎは禁物。
シンプルなボタンの動作を3つのクラスで定義することは現実ではないので1つか2つのクラスで実現するべきです。

Originally posted 2015-11-12 16:23:32.