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