オブジェクト指向の設計って?なぜ必要なのか解説してみた

こんにちは!インストラクターの井上(@InoIno_iesa)です。

プログラミングで「設計」という行為が必要だということは知っていても、「イマイチ設計の必要性が分からない…」「面倒くさい!」という方もおられるのではないでしょうか?

実際プログラミングってコードを書いている時が一番楽しいですし、すぐにどんどんコーディングを進めたくなりますよね…。

今回は基本中の基本では有りますが、オブジェクト指向プログラミングにおいては特に設計が大切だということを分かっていただきたいということもあり、「設計って何で必要なの?」「どういう風にやっていくの?」という事を簡単に紹介していきます。

今後、設計をきちんと行えるように技術的な学習を行っていきますが、そもそも何故それらを学習しておく必要があるのかを学びましょう。

この記事はオブジェクト指向についてのシリーズ第三回目になります。

以前の記事も合わせてご確認下さい。

【第一回】


【第二回】
オブジェクト指向のクラスって?メソッドやインスタンスの関係を解説してみた
更新日 : 2019年4月30日

設計とは?

そもそもオブジェクト指向における設計とは、各クラスの役割など全体の関係性を決めていくことです。

どこまで仕様を固めるかという粒度によって、基本設計・詳細設計など分けて行う場合もあります。

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

また、どんなものを作りたいのかということを複数人に共有する場合や、他の人が開発に参加する際にもスムーズにプログラムを理解できるようになるというメリットも有ります。

設計の大切さ

「設計書」という成果物をしっかり残すか残さないかは置いておいて、プログラミングでは「設計」という行為を全員行っています

まずシステムの全体を俯瞰して、それぞれのクラスなどの役割を考えて、全体最適化出来るように決めてプログラミングを進めます。

ハッカーはこれを頭の中だけでどんどん出来るので、特に時間を取らなくてもコードを量産しても美しく保てます。

設計をせずにプログラミングを行ってしまうと、さまざまな問題が発生しやすくなってしまいます

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

「処理の意図が理解しづらい」
各クラスを使用しているルールを理解できず、誤った使い方をして思わぬバグに繋がったり、バグの回収に時間がかかったりします。

「拡張性が低い」
予め利用者数が増えることなど長い目で見た保守を想定しておらず、後々改修に改修を重ねざるを得ない状態になる場合もあります。

「セキュリティが甘い」
さまざまな外部からの攻撃などが想定しきれておらず、データを壊されたり盗まれたりしてしまう可能性もあります。

「パフォーマンスが悪い」
拡張性が低いというのにも含まれますが、利用者数が増えてだんだん特定の処理に時間がかかるようになってしまう場合などもあります。

他にもきちんと設計出来ないことによるさまざま弊害が考えられます。

前回クラスが設計図でインスタンスが実働するロボットのようなものだというお話をしました。

もしシステム要件によってインスタンス、つまり『実働するモノ』の性質を変更しなければならないとしたら、その世界でのモノの扱いに大きな影響が出そうだということも理解できるでしょう。

設計に必要なこと

少し本格的な内容にも触れて行きますが、今の段階では「そういうものがある」というレベルで理解を頂ければとりあえずは問題ありません。

設計の為の基礎知識をつけるには

UML Diagrams
オブジェクト指向での設計を、「設計の大切さ」で触れた内容をカバーして行っていくためには様々な知識が必要となります。

オブジェクト指向ではまず基礎知識を学習していくことは大前提です。

テクニカルなことにもこのシリーズでも少し触れて行きますが、大前提として知っておきたいことは次の書籍を読むと良いでしょう。

また、設計の一般的な方法としてはUML(統一モデリング言語)というものを利用すると良いでしょう。

UMLの詳細を理解するには数時間では足りないので、ここでは書き方については省きます。

興味がある方は次のようなサイトもチェックしてみてください。

スクリーンショット 2016 06 22 15 39 20UML超入門

UMLなどの図形を用いる際はdraw.ioというツールを利用するのが個人的にオススメです。

draw.ioはローカルにも保存できて、無料でいくつでも図形を作成できます。

また、なんといっても使い心地が良いですし、画像としても出力できるので是非お試し下さい。

設計を高度なレベルにするために

一番てっとり早い良いのは基礎を学習した後、自分が行った設計を経験のあるエンジニアの人にレビューしてもらって教えを請うことです。

「拡張性」や「パフォーマンス」について気を付けなければいけないことなどは、とても初心者が一朝一夕で身につけられるものではありません。

はじめはまず最低限の要件を満たすようにアプリを作って、学習しながらソースコードをキレイにしていく『リファクタリング』という行為や、よりよい状態にするための機能追加・改修を何度も行っていってください。

設計にはまず広い範囲での経験値の蓄積が必要です。

まとめ

オブジェクト指向の設計について見てきましたがいかがでしたでしょうか。

少し難しい用語が多くなってきたかと思いますが、そういうものなんだという程度でもご理解頂ければと思います。

実際にはオブジェクト指向プログラミングを何ヶ月かやっていくうちに、「あのとき言っていたのはこういうことか!」というように実感できるようになってきます。

まず土台として引き出しに入れて必要な時に調べられるようにしておきましょう。

それではまた次回!

関連記事

オブジェクト指向のクラスって?メソッドやインスタンスの関係を解説してみた
更新日 : 2019年4月30日
非WEB系SEがWEBエンジニアに3ヶ月で転職出来た7つの理由
更新日 : 2019年4月2日
【全て無料】独学でもスキルが身につくプログラミング学習サイトTOP5
更新日 : 2019年5月29日

LINEで送る
Pocket

書いた人

井上 慎也

井上 慎也

侍エンジニア塾のインストラクター。フリーでWEB制作の受託や自身の事業の傍ら、侍ではWEBプログラミング方法の指導やプログラミング学習コミュニティの運用を行っている。
好きなショートカットキーは、command + w 。愛機はMac Book Pro。ブラウザのタブを大量に開きがち。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説