0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オブジェクト指向プログラミングにおける4つの基本概念

Posted at

【超入門】オブジェクト指向プログラミングの4つの基本概念をわかりやすく解説!

プログラミングを学んでいるとよく出てくる「オブジェクト指向プログラミング」。
その中でも特に重要な 4つの基本概念 について、初心者でもイメージしやすいように解説します!


① カプセル化(Encapsulation)

🔒 「データを守る」仕組み

カプセル化とは、データ(変数)とそれを扱う処理(メソッド)を1つのまとまりとして管理し、外から勝手にいじらせない仕組みです。

📌 たとえ話:

ゲームのキャラクターがHPを持っていたとして、外から直接HPを変更できないようにして、「ダメージを受ける」という操作だけを許すイメージ。

💻 例(Ruby):

class Character
  def initialize
    @hp = 100
  end

  def take_damage(amount)
    @hp -= amount
  end

  def show_hp
    puts "HPは #{@hp}"
  end
end

② 継承(Inheritance)

🧬 「親の性質を子に受け継ぐ」こと

継承とは、あるクラス(親)から別のクラス(子)が性質(メソッドや変数)を引き継ぐことです。
共通の機能を親クラスにまとめることで、子クラスで繰り返し書かずに済み、コードの再利用がしやすくなります。

📌 たとえ話:

「動物」という親クラスが「動く」という機能を持っていれば、犬や猫などの子クラスはその機能を引き継いで使える。
親の機能を受け継いで、自分なりに追加・変更もできる。

💻 例(Ruby):

class Animal
  def move
    puts "動きます"
  end
end

class Dog < Animal
  def bark
    puts "ワン!"
  end
end

dog = Dog.new
dog.move  # => 動きます(親の機能)
dog.bark  # => ワン!(子の機能)

③ ポリモーフィズム(Polymorphism)

🎭 「同じ命令でも、違う動きができる」こと

ポリモーフィズムとは、同じ名前のメソッドでも、クラスによって中身(動作)が異なることです。
この仕組みにより、複数のクラスに同じ「インターフェース(操作)」を使えるようになり、コードの統一性と柔軟性が高まります。


📌 たとえ話:

「鳴け!」という命令を出すと、犬は「ワン!」、猫は「ニャー!」と鳴きます。
命令は同じでも、動物によって結果が違う
それがポリモーフィズム(多様性)です。


💻 例(Ruby):

class Dog
  def speak
    puts "ワン!"
  end
end

class Cat
  def speak
    puts "ニャー!"
  end
end

# 共通のspeakメソッドを持つが、動作は異なる
animals = [Dog.new, Cat.new]
animals.each { |animal| animal.speak }

# 出力結果:
# ワン!
# ニャー!

④ 抽象クラス(Abstract Class)

📐 「設計図だけあって、実体は子クラスで作るクラス」

抽象クラスとは、処理の中身は持たず、「このメソッドを子クラスで作ってね」という設計だけを定義するクラスです。
直接使うことはできず、継承した子クラスが実際の機能を実装します。

Rubyには Java や C++ のような「正式な抽象クラス」の構文はありませんが、raise を使って**「このメソッドは必ずオーバーライドしてください」と伝える設計**ができます。


📌 たとえ話:

「楽器」というクラスが「音を鳴らす」機能を持っていたとしても、
ギター・ピアノなどの種類によって音は異なります。
楽器(Instrument)クラスは「鳴らす」という設計だけしておき、実際の音は子クラスが決める。
これが抽象クラスの考え方です。


💻 例(Ruby):

# 抽象的な楽器クラス
class Instrument
  def play
    raise NotImplementedError, "このメソッドは子クラスで実装してください"
  end
end

# 具象クラス:ギター
class Guitar < Instrument
  def play
    puts "ジャーン♪"
  end
end

# 具象クラス:ピアノ
class Piano < Instrument
  def play
    puts "ポロロン♪"
  end
end

# 共通の操作で鳴らす
instruments = [Guitar.new, Piano.new]
instruments.each { |i| i.play }

# 出力結果:
# ジャーン♪
# ポロロン♪

📝 おわりに:情報系の学生へ伝えたいこと

今回この記事を書いたのは、情報系の学生が学校でオブジェクト指向を学ぶ中で、
「正直、よくわからない」「なんとなく聞いたことはあるけど、腑に落ちない」
と感じることが多いだろうと思ったからです。

実際、僕自身も最初はカプセル化や継承、ポリモーフィズムといった言葉だけが一人歩きして、
イメージがわかずに苦しんだ経験がありました。

だからこそ、この記事が少しでも同じような壁にぶつかっている学生の助けになればという気持ちと、
自分自身の理解を深めるためのアウトプットとしてまとめています。


🚀 家でアプリケーションを作ってみよう

情報系の学生にはぜひ、
**「授業で習ったことを、実際に手を動かして確かめる」**という体験をしてほしいと思っています。

それはアプリケーションの開発でもいいし、簡単なツールでも構いません。
理由はシンプルで、大学の授業だけでは「なぜそれが大事なのか」がピンとこないことが多いからです。

自分で実際に作ってみると、

  • 「このコードは再利用しづらいな」
  • 「継承を使えばもっと楽に書けたのか」
  • 「なるほど、カプセル化しないとバグりやすいんだ」

…といった気づきが自然と得られます。


💬 最後に

「何を作っていいかわからない」という人もいると思いますが、
最初は授業で出たテーマをそのまま改良してみるのでもOKです。

  • 成果物を1つ作れば、それが自信になります。
  • 作ったものを誰かに見せることで、新しい視点も得られます。
  • 何より、就職活動でも「実際に手を動かした経験」は大きな強みになります。

自分の興味のある分野で、1つでも多く手を動かしてみてください。
この記事が、そんな一歩のきっかけになれば嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?