✨オブジェクト指向の基本的な概念

オブジェクト指向とは、プログラムを現実世界の「モノ」(オブジェクト)とその「振る舞い」(メソッド)として捉え、組み合わせてシステムを構築する考え方です。


🏢 1. オブジェクト指向の基本的な要素

オブジェクト指向のプログラミングには、以下の主要な概念があります。

1.1. クラス (Class) と オブジェクト (Object)

  • クラス:モノを生成するための「設計図」です。オブジェクトが持つべきデータ(変数/フィールド)と振る舞い(メソッド)を定義します。
  • オブジェクト:クラスという設計図に基づいてメモリ上に実際に作成された「実体」です。

例え: 「自動車」という**クラス(設計図)を基に、「赤いセダン」や「青いトラック」といったオブジェクト(実体)**が作られます。

1.2. カプセル化 (Encapsulation)

  • 定義: データ(フィールド)と、それを操作するメソッドを一つのクラス内にまとめ、外部からのデータの直接的な変更を防ぐ仕組みです。
  • 目的: オブジェクトの内部状態が予期せぬ方法で変更されるのを防ぎ、データの安全性を高めます。
  • 実現方法: フィールドをprivateにして直接アクセスできないようにし、publicgetter(値取得)やsetter(値設定)メソッドを通してのみアクセスを許可します。

✨ 2. オブジェクト指向の三大要素

オブジェクト指向を特徴づける、より高度な3つの重要な概念です。

2.1. 継承 (Inheritance)

  • 定義: 既存のクラス(親クラスまたはスーパークラス)の持つプロパティやメソッドを、新しいクラス(子クラスまたはサブクラス)が受け継ぐ仕組みです。
  • 目的: 共通するコードを親クラスに集約し、子クラスで再利用することで、重複を減らし、効率的に開発を進められます。
  • Javaでの実現: extendsキーワードを使用します。

: 「動物」クラスを親とし、「犬」クラスや「猫」クラスがそれを継承し、「食べる」や「眠る」といった共通の振る舞いを受け継ぎます。

2.2. ポリモーフィズム (Polymorphism) / 多態性

  • 定義: 同じ名前のメソッドでも、呼び出すオブジェクトの種類(クラス)によって異なる動作をする性質です。「一つの名前で多種の振る舞い」という意味です。
  • 目的: プログラムの記述をシンプルにし、コードの拡張性(新しいクラスを追加しやすい)を高めます。
  • Javaでの実現: 主にオーバーライド(親クラスのメソッドを子クラスで上書き)によって実現されます。

: 親クラスである「動物」の持つ鳴く()メソッドを、「犬」クラスでは「ワンワン!」と、「猫」クラスでは「ニャーニャー!」と定義(オーバーライド)することで、呼び出し側は気にせず鳴く()と命令できます。

2.3. 抽象化 (Abstraction)

  • 定義: 複雑な内部の仕組みを隠蔽し、必要な情報や機能だけを外部に公開することです。
  • 目的: ユーザーが操作する側は、メソッドの使い方(インターフェース)だけを知っていればよく、内部で何をしているかを意識する必要がなくなります。
  • Javaでの実現: 抽象クラス (abstract class) や インターフェース (interface) を使います。

: 自動車の運転手は、ハンドルやアクセルの操作方法(必要な機能)だけを知っていればよく、エンジン内部の燃焼プロセス(複雑な仕組み)を知る必要はありません。