🙄

デザインパターン集 - その1 デザインパターンとは何か?なぜ必要か

2023/03/21に公開

結論から言うと、オブジェクト指向プログラミングで使われるクラスの再利用性が高まり、信頼性が向上するからです。

まずは、オブジェクト指向プログラミングとは何かをご説明しましょう。

オブジェクト指向プログラミングとは

我々が一般的に使用しているオブジェクト指向プログラミングとは、いくつかのオブジェクトを生成して、そのオブジェクト同士を相互作用させて、一連の処理を実現することです。

この複数のオブジェクトが互いに作用するオブジェクト指向プログラミングと、現実の人間社会の営みは非常によく似ています。

例えば、電車に乗るための切符を買う時を想像してみましょう。

券売機にお金を入れて、行き先を決めてボタンを押せば、切符が出てきます。

オブジェクト指向プログラミングで考えてみると、

「券売機クラスは、お金を引数に取りチケットを返すメソッドを持ち、その返り値は、切符である。」と説明することができます。

ただし、この説明には実体が伴っていないため、このままでは、券売機を利用することはできません。

例えば、券売機について、

  • 東京駅にある券売機で、
  • 名古屋行きに新幹線チケットを
  • 現金で買うことができる。

といった、特定の券売機としての実体を持つことで初めて券売機を使うことができます。

券売機をどこに置くか(プロパティ) や どんな機能 (メソッド) をもつのかを定義するのが「クラス」

そして、どの駅に置くかを決めて、その駅で券を販売できる機能を持つように、実際に使える特定の券売機として実体を伴うものが「オブジェクト」

と言えます。

オブジェクト指向プログラミングでは、このように「クラス」を定義し、このクラスを実体化した「オブジェクト」同士で、相互作用を実現し、一連の処理を組み立てていくのです。

オブジェクト指向プログラミングのメリットとは

オブジェクト指向プログラミングはわかりましたが、なぜ私たちはこれを使うのでしょうか?

オブジェクト指向プログラミングのメリットとして主に以下の2つがよく挙げられます。

  • 再利用性の向上
  • 生産性と信頼性の向上

再利用性が上がると言うことは、以前書いたコードを再度書く必要がなくなり、生産性が上がります。
さらに、検証済みで信頼できる既存のコードが使い回しもできます。

先ほどあげた、券売機の話でも、券売機クラスを定義しておけば、東京駅で使える券売機や、大阪駅でも使える券売機を作って使いまわせると言うわけです。

逆を言えば、再利用性の低いクラスを設計してしまうとオブジェクト指向プログラミングの恩恵を受けることはできません。(Rubyを使うだけでオブジェクト指向プログラミングになる訳ではない! )

オブジェクト指向プログラミングで、良いソフトウェアを作るためには、目の前の問題を解決するためでなく、将来の仕様変更や、使用追加にも柔軟に対応できることができる再利用性の高いクラスを設計することがとても大切なのです。

とは言うものの、現実問題、再利用性の高いクラスを設計することは非常に難しいです。

そこで、クラス設計でよく直面する問題に対する良い設計というのは、過去に先人たちによって考え抜かれてきました。

そういった先人たちによって生み出されてきた、再利用性の高いクラスを作るための設計パターンは、1995年に出版された「オブジェクト指向における再利用のためのデザインパターン」と言う本 (通称GoF本)に残されました。

(その先人とは、Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides です。この4人を合わせて、the Gang of Fourと呼び、これが GoF と略されました。この4人には感謝です。)

デザインパターン

さて、まとめるとデザインパターンとは、「よく出会う問題に対してうまく対処するための設計」をまとめたものです。

(日々の設計において、なんだいつものパターンかと言えるようになるだろう)

そして、デザインパターンを利用することで、オブジェクト指向プログラミングにおいて、再利用性が高く、柔軟な設計ができるようになるのです。

次回は、いくつかのデザインパターン (SingletonとFactory) をご説明します。

Discussion