プログラミングで「設計」という行為が必要だということは知っていても、「イマイチ設計の必要性が分からない…」「面倒くさい!」という方もおられるのではないでしょうか?
実際プログラミングってコードを書いている時が一番楽しいですし、すぐにどんどんコーディングを進めたくなりますよね…。
今回は基本中の基本では有りますが、オブジェクト指向プログラミングにおいては特に設計が大切だということを分かっていただきたいということもあり、「設計って何で必要なの?」「どういう風にやっていくの?」という事を簡単に紹介していきます。
今後、設計をきちんと行えるように技術的な学習を行っていきますが、そもそも何故それらを学習しておく必要があるのかを学びましょう。
この記事はオブジェクト指向についてのシリーズ第三回目になります。
以前の記事も合わせてご確認下さい。
【第一回】
【第二回】
設計とは?
そもそもオブジェクト指向における設計とは、各クラスの役割など全体の関係性を決めていくことです。
どこまで仕様を固めるかという粒度によって、基本設計・詳細設計など分けて行う場合もあります。
クラス単体など自分の意識し続けられる範囲であればすぐにコーディングも出来そうですが、「全体としてどう作るべきか」というのは時間をとってしっかり考えておかないと後で矛盾などが出てくることがあります。
また、どんなものを作りたいのかということを複数人に共有する場合や、他の人が開発に参加する際にもスムーズにプログラムを理解できるようになるというメリットも有ります。
設計の大切さ
「設計書」という成果物をしっかり残すか残さないかは置いておいて、プログラミングでは「設計」という行為を全員行っています。
まずシステムの全体を俯瞰して、それぞれのクラスなどの役割を考えて、全体最適化出来るように決めてプログラミングを進めます。
ハッカーはこれを頭の中だけでどんどん出来るので、特に時間を取らなくてもコードを量産しても美しく保てます。
設計をせずにプログラミングを行ってしまうと、さまざまな問題が発生しやすくなってしまいます。
例えば、つぎのような問題がおこりやすくなるでしょう。
「処理の意図が理解しづらい」
各クラスを使用しているルールを理解できず、誤った使い方をして思わぬバグに繋がったり、バグの回収に時間がかかったりします。
「拡張性が低い」
予め利用者数が増えることなど長い目で見た保守を想定しておらず、後々改修に改修を重ねざるを得ない状態になる場合もあります。
「セキュリティが甘い」
さまざまな外部からの攻撃などが想定しきれておらず、データを壊されたり盗まれたりしてしまう可能性もあります。
「パフォーマンスが悪い」
拡張性が低いというのにも含まれますが、利用者数が増えてだんだん特定の処理に時間がかかるようになってしまう場合などもあります。
他にもきちんと設計出来ないことによるさまざま弊害が考えられます。
前回クラスが設計図でインスタンスが実働するロボットのようなものだというお話をしました。
もしシステム要件によってインスタンス、つまり『実働するモノ』の性質を変更しなければならないとしたら、その世界でのモノの扱いに大きな影響が出そうだということも理解できるでしょう。
設計に必要なこと
少し本格的な内容にも触れて行きますが、今の段階では「そういうものがある」というレベルで理解を頂ければとりあえずは問題ありません。
設計の為の基礎知識をつけるには
オブジェクト指向での設計を、「設計の大切さ」で触れた内容をカバーして行っていくためには様々な知識が必要となります。
オブジェクト指向ではまず基礎知識を学習していくことは大前提です。
テクニカルなことにもこのシリーズでも少し触れて行きますが、大前提として知っておきたいことは次の書籍を読むと良いでしょう。
[amazonjs asin=”4621066048″ locale=”JP” title=”オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)”]
また、設計の一般的な方法としてはUML(統一モデリング言語)というものを利用すると良いでしょう。
UMLの詳細を理解するには数時間では足りないので、ここでは書き方については省きます。
興味がある方は次のようなサイトもチェックしてみてください。
UML超入門
UMLなどの図形を用いる際はdraw.ioというツールを利用するのが個人的にオススメです。
draw.ioはローカルにも保存できて、無料でいくつでも図形を作成できます。
また、なんといっても使い心地が良いですし、画像としても出力できるので是非お試し下さい。
設計を高度なレベルにするために
一番てっとり早い良いのは基礎を学習した後、自分が行った設計を経験のあるエンジニアの人にレビューしてもらって教えを請うことです。
「拡張性」や「パフォーマンス」について気を付けなければいけないことなどは、とても初心者が一朝一夕で身につけられるものではありません。
はじめはまず最低限の要件を満たすようにアプリを作って、学習しながらソースコードをキレイにしていく『リファクタリング』という行為や、よりよい状態にするための機能追加・改修を何度も行っていってください。
設計にはまず広い範囲での経験値の蓄積が必要です。
まとめ
オブジェクト指向の設計について見てきましたがいかがでしたでしょうか。
少し難しい用語が多くなってきたかと思いますが、そういうものなんだという程度でもご理解頂ければと思います。
実際にはオブジェクト指向プログラミングを何ヶ月かやっていくうちに、「あのとき言っていたのはこういうことか!」というように実感できるようになってきます。
まず土台として引き出しに入れて必要な時に調べられるようにしておきましょう。