トップページに、Processingについて書いた記事を、辞書のように見つけやすくしてみました

【Processing】継承の使い方【既存のクラス(スーパークラス)から新しいクラス(サブクラス)を作る】

【Processing】継承の使い方【既存のクラス(スーパークラス)から新しいクラス(サブクラス)を作る】
  • URLをコピーしました!
ワタタク

今回の記事の目的はProcessingの「継承」を理解し、自分なりに使ってみること。

この記事を書いた人
  • クリエイティブコーディング初心者が、アーティストとして活躍するまでの上達の過程を発信
  • コンセプトは「クリエイティブコーディング1万時間の歩き方」
  • 参考にしてもらえるブログにするため、Processingを独学で勉強して共有中

記事内のProcessingのバージョンは4.3。

目次

【Processing】継承について

継承について
  • 継承という言葉の意味:継承とは、他のものから受け継いで使うこと
  • 継承の英語は「Inheritance」
  • Processingでの継承とは、既存のクラス(例えば、動物クラス)から新しいクラス(例えば、犬クラス)を作ることです。この新しいクラスは、元のクラスの特徴や動きを受け継ぎます。
    • 既存のクラスのことをスーパークラス・元のクラス・親クラスとも言う
    • 新しいクラスのことをサブクラス・子クラスとも言う
  • 継承を使うと、例えば、動物園を作るときに全ての動物に共通の動きを持たせつつ、各動物に独自の動きを追加することができます
  • 【注意点】継承を使うときは、新しいクラス(犬クラス)が元のクラス(動物クラス)のすべての特徴を持つので、不要な特徴も引き継がないように気をつける必要がある
ワタタク

僕は親クラス・子クラスって言い方の方が分かりやすいな。

【Processing】継承の書き方【構文】

継承の書き方【構文】

class 新しいクラス extends 元のクラス {
// 独自の特徴や動きをここに追加する
}

class Dog extends Animal{
// 独自の特徴や動きをここに追加する
}

【Processing】継承の使い方【画像とコード】

【1】既存のクラスから新しいクラスを作り、コンソールに表示させる

// Animalクラスを定義。動物の基本的な動作を含む
class Animal {
  void eat() {
    println("This animal eats food."); // 食べる動作を出力
  }
}

// Animalクラスを継承したDogクラスを定義。犬の特有の動作を追加
class Dog extends Animal {
  void bark() {
    println("This dog barks."); // 吠える動作を出力
  }
}

// setup関数を定義。コードの実行部分
void setup() {
  Dog myDog = new Dog(); // Dogクラスのインスタンスを作成
  myDog.eat();  // Animalクラスから継承したメソッドを呼び出し
  myDog.bark(); // Dogクラス独自のメソッドを呼び出し
}

【2】既存のクラスから新しいクラスを作り、イラストに機能を加える

既存のBoxクラス(スーパークラス・親クラス)に、ideaというテキストを表示させる新機能(サブクラス・子クラス)を追加してみた。

// オブジェクトの宣言
Ball myball;
Box mybox;

void setup() {
  size(400, 400);
  background(0);
  noStroke();
  
  // オブジェクトのインスタンス化
  myball = new Ball();
  myball.x = 200; //(xは200ですって情報)
  myball.y = 200; //(yは200ですって情報)
  myball.diameter = 100; //(diameterは100って情報)
  
  mybox = new TextBox(); // Boxクラスのサブクラスを使います
  mybox.x = 250; //(xは250ですって情報)
  mybox.y = 250; //(yは250ですって情報)
  mybox.diameter = 100; //(diameterは100って情報)
  
  noLoop(); // draw()関数を1回だけ実行
}

void draw() {
  background(0); // 背景を再設定
  ellipse(myball.x, myball.y, myball.diameter, myball.diameter); // 円を描きます
  rect(mybox.x, mybox.y, mybox.diameter, mybox.diameter); // 四角形を描きます
  mybox.displayText(); // テキストを表示します
}

// Ballクラス
class Ball {
  int x, y; // フィールド:ボールの位置を表す変数
  int diameter; // フィールド:ボールの大きさを表す変数

  // コンストラクタ
  Ball() {
    x = 0;
    y = 0;
    diameter = 50;
  }
}

// Boxクラス
class Box {
  int x, y; // フィールド:ボックスの位置を表す変数
  int diameter; // フィールド:ボックスの大きさを表す変数

  // コンストラクタ
  Box() {
    x = 0;
    y = 0;
    diameter = 50;
  }

  void displayText() {
    // 何もしない
  }
}

// TextBoxクラス (Boxクラスのサブクラス)
class TextBox extends Box {
  void displayText() {
    fill(0); // 黒色で描画
    textAlign(CENTER, CENTER);
    textSize(32); // テキストサイズを大きく
    text("idea", x + diameter / 2, y + diameter / 2); // テキストを表示
  }
}

【Processing】継承を使ってみた感想

元のクラスに、新しい機能を付け加えることで「このクラスにこんな機能を加えているんだな」と思えて、かなり可読性があがるなぁ。と感じました。

クラスの使い方がまた1つ上達できました。

ワタタク

それでは今日もレッツワクワクコーディング。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次