オブジェクト指向におけるモデル化(モデリング)とは

オブジェクト指向でプログラミングを行う場合、現実世界にあるモノをもとに設計します。ただし、現実のモノをそのまますべて再現するわけではなく、目的に必要な要素だけを取り出して表現します。このような考え方をモデル化(モデリング)といいます。ここでは、オブジェクト指向におけるモデル化について解説します。

オブジェクト指向におけるモデル化

冒頭で書いた通り、オブジェクト指向でプログラミングを行う場合、現実にあるモノをもとに設計します。ただし、現実世界をそのまま完全に再現するわけではなく、プログラムでは目的に関係のある要素だけを取り出して表現します。これをモデル化(モデリング)といいます。

例えば「商品」を扱うプログラムを作る場合、現実の商品にはさまざまな情報が含まれています。しかしプログラムでは、すべての情報が必要になるわけではなく、目的に合わせて商品名や価格などの一部の情報だけを扱います。このように、目的に応じて必要な情報を選び出し、できるだけシンプルに表現することがモデル化における重要な考え方です。

スーパーマーケットに関するプログラムを作成する場合を考えてみましょう。この場合、「商品」「お客さん」「従業員」などをそれぞれオブジェクトとして考えます。

・商品
・お客さん
・従業員

それぞれのモノには、現実の世界では多くの情報があり、またそれに関連するさまざまな動作があります。ただし、プログラムではそれらすべてを定義する必要はなく、目的に必要なデータや操作だけを抽出します。

商品 (Product)
  データ:名前、価格、賞味期限、在庫数
  動作:価格を計算する、在庫を減らす

お客さん (Customer)
  データ:所持金、カゴの中身、会員カードの有無
  動作:商品を選ぶ、カゴに入れる、支払う

従業員 (Employee)
  データ:名前、役割(レジ・品出し)、シフト
  動作:レジを打つ、品出しをする、接客する

場合によってはレジや棚といったオブジェクトを追加した方がよいこともありますし、従業員についても基本となるオブジェクトをもとに役割ごとに別のオブジェクトを用意した方がよい場合もあります。

必要なデータや動作が決まったら、それらをプログラムの中で表現するための設計図を定義します。この設計図が「クラス」です。そして、そのクラスをもとに必要な数のオブジェクトを作成します。

このように、現実世界の構造を整理しながらオブジェクトとして表現していくことが、オブジェクト指向におけるモデル化の基本となります。

モデル化で注意すべき点

モデル化を行う際には、いくつか注意すべき点があります。

一つ目は、現実にあるものをそっくりそのまま再現する必要はないということです。先ほどのスーパーマーケットの例でいえば、駐車場や警備員などさまざまなモノがありますが、すべての設計図を用意する必要はありません。目的に必要なものだけを選んで設計することが重要です。

二つ目は、オブジェクトの範囲を大きくしすぎないようにすることです。例えばスーパーマーケット全体を表すオブジェクトを想定し、商品や従業員の情報もすべて同じオブジェクトで扱うように設計することも可能です。しかし、あまりに大きなオブジェクトは何をするものなのか分かりにくくなり、再利用性の低下や修正の難しさにつながります。細かすぎず大きすぎない、適切な範囲で設計することが重要です。

三つ目は、オブジェクトにはデータとそのデータを操作する処理を一緒に持たせるということです。オブジェクトのデータを外部から自由に変更できるようにするのではなく、データの変更は必ずオブジェクトが用意したメソッドを通して行うようにします。こうすることで、あとから修正を加える場合にも、関連する処理がオブジェクト内にまとまっているため、修正箇所が明確になります。

このような点に注意しながら、モデル化を行ってみてください。

-- --

オブジェクト指向におけるモデル化について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。