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?

オブジェクト指向とは何か

Last updated at Posted at 2024-10-19

オブジェクト指向とは何か

はじめに

 はじめまして.Yasuと申します.プログラミング未経験(趣味レベルでVBAやPythonの経験はある)からWeb系エンジニアへの転職を目指して,学習しています.
 少なくとも2週間ごとに学習成果をアウトプットする目的で記事を作成します.自分のための記事にはなりますが,同じように学習している初学者の方にも参考になれば嬉しいです.

1. オブジェクト指向とは?

 オブジェクト指向は「現実の物事のようにプログラムで表現する方法」と言えます.例えば「車」というオブジェクトには,色や属性(モデル),メソッド(走る・止まる)といった特徴があります.プログラムでも,このように物事をオブジェクトとして表現し,扱うことができます.

2. オブジェクト,クラス,メソッドについて

 オブジェクト指向では,まずクラスと呼ばれる設計図を作ることで,そこから具体的なオブジェクト(実態)を作り出します.クラスの中には,オブジェクトが持つ属性やメソッド(動作)が定義されます.
 クラスから生成された具体的なオブジェクトをインスタンスともいいます.

class Car
  def initialize(model)
    @model = model
  end

  def drive
    puts "#{@model}が走ります."
  end
end

car = Car.new("Toyota")
car.drive # => Toyotaが走ります.

 このコードでは,Carクラス(設計図)から「Toyota」というインスタンス(実際の車)を作って「drive」メソッドを実行して(走らせて)います.

3. カプセル化

 カプセル化とは,オブジェクトの内部の情報を隠すことを指します.例えば,車のエンジンの中身を知らなくても,アクセルを踏めば走るように,外部から操作できる部分だけを公開します.

class Car
  def initialize(model)
    @model = model
  end

  def drive
    start_engine
    puts "#{@model}が走ります."
  end

  private

  def start_engine
    puts "エンジンを始動します."
  end
end

 例えば,start_engineメソッドは外から直接呼び出せないようにprivateで隠しています.
 こうすることで不必要な情報を公開したり,外部から不正にアクセスされたりすることを防ぐことができます.これを隠蔽といいます.

4. 単一責任の原則

 単一責任の原則は,クラスやメソッドが1つの役割だけを持つべきだという考え方です.1つのクラスにいろいろな機能を詰め込んでしまうと,そのクラスが何をしているのかわかりにくくなってしまうし,仕様変更が生じた際にどこを修正すればよいかわからなくなってしまいます.

class Engine
  def start
    puts "エンジンを始動します."
  end
end

class Car
  def initialize(model)
    @model = model
    @engine = Engine.new
  end

  def drive
    @engine.start
    puts "#{@model}が走ります."
  end
end

 これで,「車」と「エンジン」の役割が分かれ,それぞれの責任が明確になりました.

5. 継承

 継承とは,あるクラス(親クラス)から別のクラス(子クラス)が機能を引き継ぐことをいいます.例えば,車やバイクというクラスが共通して持つ動作を「乗り物」という親クラスにまとめることで,コードを再利用できます.

class Vehicle
  def initialize(model)
    @model = model
  end

  def drive
    puts "#{@model}が走ります."
  end
end

class Car < Vehicle
end

class Bike < Vehicle
end

 こうすることで,CarBikeはそれぞれが固有の機能を持ちつつ,Vehicleから共通の機能を継承できます.

6. ポリモーフィズム(多態性)

 ポリモーフィズムとは,同じメソッド名でも異なるクラスで異なる動作をさせることができる仕組みのことです.

class Car
  def drive
    puts "車が走ります."
  end
end

class Bike
  def drive
    puts "バイクが走ります."
  end
end

def start_vehicle(vehicle)
  vehicle.drive
end

start_vehicle(Car.new) # => 車が走ります.
start_vehicle(Bike.new) # => バイクが走ります.

 この例では,同じdriveメソッドでも,CarBikeで異なる動作をしていることがわかります.

7. モジュールとミックスイン

 Rubyにはモジュールという機能があり,これを使うとクラスに共通の機能を簡単に追加できます.Rubyでは複数の親クラスを持つことはできませんが,モジュールを使うことで多重継承(親クラスを複数持つ状態)のようなことができます.

module Wash
  def wash
    puts "洗濯します."
  end
end

class Car
  include Wash
end

car = Car.new
car.wash # => 洗濯します.

 この例では,WashというモジュールをCarクラスにミックスインして,車を洗濯しています.

8. DRY原則とオブジェクト指向

 同じコードを繰り返し書かないという,DRY(Don`t Repeat Yourself)原則という考え方があります.オブジェクト指向では,共通の動作をクラスやモジュールにまとめることで,コードの重複を避けることができます.

9. まとめ

 オブジェクト指向とは,現実の物事をプログラムで表現する方法です.クラスからオブジェクトを生成し,カプセル化や単一責任の原則を活用して保守性を高めます.また,継承やポリモーフィズムによりコードの再利用と柔軟性を実現し,モジュールを用いて共通の機能を追加することも可能だということがわかりました.
 大規模なプログラムになるほど,可読性や保守性,柔軟性が重要になってくるので,これからもオブジェクト指向を意識してプログラミングしていきます.

0
0
3

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?