Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

オブジェクト指向について徹底解説(3)~「設計原則」について~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210729065304p:plain

おはようございます。Shotaです。

今日も昨日に引き続き、「オブジェクト指向」について徹底解説していきます。今日の記事ではやや本格的な内容に触れていきますが、今の段階では「そういう物がある」という認識でご理解してくだされば問題ありません。



オブジェクト指向における設計とは?

そもそもオブジェクト指向における設計とは、各クラスの役割など全体の関係性を決めていくことです。どこまで仕様を固めるかという粒度で、基本設計・詳細設計などを分けて行う場合もあります。

クラス単体など自分で意識できる範囲であれば、すぐコーディングもできそうです。しかし、全体的に作るものは時間を十分にとってしっかり考えておかないと後で矛盾が出てくる可能性も十分に考えられます。


設計は非常に大事

設計書という成果物をしっかり残すかどうかは置いといて、プログラミングにおいては設計という行為をすべて行っています。

まずはシステムの全部を一通り見て、それぞれのクラスの役割を考えて全体を最適化できるように決めてプログラミングを進めていきます。設計せずにプログラミングを進めてしまうと、様々な問題が発生しやすくなります。

例えば、次のような問題が起こりやすくなるでしょう。

  • 処理の意図が理解しにくい
  • セキュリティが甘い
  • パフォーマンスが悪い


上述のような問題を起こさないようにするためにも、設計をきちんと行っておく必要があります。


主な「設計原則」

f:id:ShotaNukumizu_1000:20210729144505p:plain

本章からは、主に「設計原則」について詳細に話していきます。オブジェクト指向における設計原則は、それぞれ独立して存在しているわけではなく、お互いに強く関連しています。

「設計原則」は全部で7つありますが、全部を紹介することは難しいので個人的に重要だと感じた原則を3つほど紹介していきます。


モジュール化

複雑なソフトウェアをわかりやすく整理し、変更を楽で安全にするための基本原則がモジュール化です。

モジュールは、わかりやすく言えば一つのプログラムファイルです。

複雑で大きなソフトウェアを複数のプログラムファイルに分割し、それらを組み合わせて全体を作り上げるのがモジュール化です。

モジュール化は「設計原則」の中心にある概念です。モジュール化には2つのアプローチがあります。

  • 型によるモジュール化
  • 手続き的なモジュール化


それぞれ順番に解説していきます。

型によるモジュール化

オブジェクト指向プログラミングのモジュール化は型によるプログラムの分割です。

型とは値の種類を指します。

値の種類ごとに、その値を使った操作をグループにして一つのモジュールにまとめるのが、オブジェクト指向プログラミングの基本的な考え方です。

型には次の二種類があります。

  1. プログラミング言語に組み込まれた型(StringやIntegerのようなもの)
  2. 開発者が独自に定義する型(アプリケーションで扱いたい値や処理をプログラムの開発者がオリジナルで設計する)


型によるモジュール化は、値の種類ごとに計算や処理の操作をグルーピング化して一つのモジュールにまとめておきます。

このようにすることで、計算判断のロジックがどのモジュールに書いてあるかをわかりやすく整理できます。

手続き的なモジュール化

手続き的なモジュール化とは、入力を受け取って結果を出力するまでの一連の処理の流れを一つのモジュールにまとめます。

手続き的なモジュール構造では、同じようなデータクラスを受け取れば、同じような計算判断のロジックが複数のモジュールに重複します。


カプセル化と抽象化

カプセル化と抽象化は、型によるモジュール構造でアプリケーションを組み立てるための日本柱です。特に、複雑なビジネスロジックをわかりやすく記述するためには、カプセル化と抽象化の2つの設計原則が威力を発揮します。

カプセル化

カプセルの意味は「小さなケース」です。カプセル化とは、小さな入れ物に何かをギュッと詰め込むことです。整数データを保持する場所と、その整数データを対象にした加減乗除と比較演算の8つの操作を一つのモジュールにまとめるのが、カプセル化の考え方です。

データを保持するモジュールに、そのデータを使う計算や判断の操作を一緒に記述していきます。

抽象化

抽象化とは、様々な詳細の中から本質的な特徴だけを選んで取り出すことです。

人間の思考能力には限界があります。一度に多くのことを考えると、訳がわからなくなります。ある時点で考えるべきことを重要なことだけに限定すれば、理解しやすくなり、判断もしやすくなります。

モジュールを設計する際にも、モジュールの様々な側面を一緒に検討すると混在します。役に立つモジュールを設計するために、モジュールを抽象化して検討します。そして、モジュールの特徴をどう定義すれば役に立つかを考えるための設計原則が抽象化です。


まとめ:設計原則は、実際にソフトウェアを開発しながら学んでいこう

f:id:ShotaNukumizu_1000:20210728070041p:plain

今日の記事では、オブジェクト指向の「設計原則」について話しました。

設計原則は、言葉として覚えてもなんの役に立ちません。実際にソフトウェアを開発しながら経験的に、原則の意味と適用の仕方を学ぶことが大事です。

今日の記事はこれで終了です。

【参考サイト】

masuda220.hatenablog.com

www.sejuku.net