オブジェクト指向プログラミング:基本概念とJavaでの実装

オブジェクト指向プログラミング(Object-Oriented Programming, OOP)は、プログラムを「オブジェクト」という単位で組み立てていくプログラミングパラダイムです。これにより、コードの再利用性、保守性、拡張性が向上します。

オブジェクトの構成要素

オブジェクトは、現実世界のモノや概念を模倣して、以下の2つの要素で構成されます。

  • フィールド (Field): オブジェクトが持つデータや属性(状態)を表します。変数として定義されます。
  • メソッド (Method): オブジェクトが行う処理や振る舞いを表します。関数として定義されます。

フィールドとメソッドを合わせて「メンバ (Member)」と呼びます。

クラスとインスタンス

  • クラス (Class): オブジェクトの設計図やひな形です。どのようなフィールドとメソッドを持つかを定義します。
  • インスタンス (Instance): クラスという設計図に基づいて実際にメモリ上に生成されたオブジェクトの実体です。

クラスからインスタンスを生成する操作を「インスタンス化 (Instantiation)」と呼びます。

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

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

1. カプセル化 (Encapsulation)

オブジェクトの内部構造(フィールド)を外部から直接アクセスできないように隠蔽し、公開されたメソッドを通じてのみ操作できるようにする仕組みです。

  • データの隠蔽: フィールドを private などのアクセス修飾子で宣言し、外部からの直接的な変更を防ぎます。
  • フィールド操作用のメソッドの公開: フィールドの値を設定(setter)したり取得(getter)したりするための public メソッドを提供します。

これにより、オブジェクトの整合性を保ち、意図しないデータの変更を防ぎ、コードの保守性を高めます。

2. 継承 (Inheritance)

既存のクラス(親クラスまたはスーパークラス)のフィールドやメソッドを、新しいクラス(子クラスまたはサブクラス)が引き継ぐことができる仕組みです。

  • コードの再利用性を高めます。
  • クラス間の階層構造を構築し、関連するクラスを体系的に管理できます。

3. ポリモーフィズム (Polymorphism)

「多様な形」を意味し、同じ名前のメソッドが、オブジェクトの種類(クラス)によって異なる振る舞いをすることです。

  • オーバーライド: 親クラスのメソッドを子クラスで再定義すること。
  • インターフェース: 複数のクラスが共通のメソッドを持つことを強制する仕組み。

ポリモーフィズムにより、コードの柔軟性が向上し、異なるオブジェクトを統一的に扱うことができるようになります。

UML (Unified Modeling Language)

UMLは、ソフトウェアシステムの設計や構造を視覚的に表現するための標準化された図法です。システム開発の様々な場面で利用されます。

代表的なUML図:

  • クラス図 (Class Diagram): システム内のクラス、その属性、操作、およびクラス間の関係(継承、関連など)を表現します。
  • シーケンス図 (Sequence Diagram): オブジェクト間のメッセージのやり取り(メソッド呼び出し)の時間的な順序を表現します。
  • ユースケース図 (Use Case Diagram): システムの機能(ユースケース)と、それを利用するユーザー(アクター)との関係を表現します。
  • アクティビティ図 (Activity Diagram): システムやビジネスプロセスのフロー、つまり活動の順序や条件分岐などを表現します。
  • コンポーネント図 (Component Diagram): システムを構成する物理的なコンポーネント(モジュール、ライブラリなど)とその依存関係を表現します。