初心者向けにできるだけ噛み砕いてみるオブジェクト指向 vol.0 プログラマーはどのようにソフトを作りたいのか

はじめに

TECH DRIVEの佐藤正志です。こんにちは。

この文章やそれに繋がる一連の連載は、プログラミングを少しやってみたけどまだこれからの人たちへ「オブジェクト指向ってこんなもの?」というのを伝えられないかと思って頑張って書いてみているものです。そのため専門的な言葉やニュアンスが多少実情と違っている可能性をご理解ください。

書いてる私としては、結構繊細な内容でもあるので多少の緊張もありますね。お手柔らかにお願いします。 最初はコードの話が出てきませんが、回を追うごとにだんだん出てくる想定で進めています。

そして今回は vol.0 ということで、まだオブジェクトの話は出てきません。期待してくださった方、vol.1 以降を楽しみにしていてください。

「新たな要望を短時間で実現する」という目標のために

物事を考える時に、目指している理想の姿や目標を知ることは理解する手助けになるはずです。そこでまずは「より良いソフトウェアを開発しようとする際にどんなことを目標にしているのか」について、意識を合わせさせてください。

ソフトウェアの世界にはオブジェクト指向に限らず多くの考え方・方法論がありますが、大きな目標としては「新たな要望を短時間で実現する」ということに集約されると考えて良いと思います。

要望は大きく分けると新規開発、追加開発、保守対応などあると思います。「短時間で実現」という言葉から新規開発でのリリースまでの時間をイメージした方がいるかもしれませんが、その後の追加や保守の時間も減らすべき目標になっていると理解してください(ぐちゃぐちゃなソフトをとっととリリースすると、その後の追加開発や保守がとても遅くなります。これでは目標を達成できません)。

f:id:ms2sato:20161128154456p:plain

そしてよく聞く「品質」という言葉はこの目標の達成しやすさの度合いを表していると思います。「品質の高いソフトウェア」は新規開発のみならず、追加や保守への要望に素早く対応できるものと言っても良いのではないでしょうか。

目標を達成するには何を心がけたら良いのか

目標を達成したい技術者の心の声を要望として分解して示してみます。私は下記のような感じです。おそらくある程度の技術者が賛同してくれるのではないかと思っています(性能等についても考えていますが、主題と外れるので外しました)。

f:id:ms2sato:20161128152142p:plain

これは要望をまとめたものですが、逆に考えると、広く受け入れられている方法論はこういう要望を実現しやすいもののはずです。今回話題にしたいオブジェクト指向も上記のような多くの要望を実現するための「道具の一つ」であると考えて良いでしょう。

実際にやるのは「わかりやすくまとめて分割する」だけ

前項で見たような様々な要望があるにもかかわらず、ソースコードの扱いという切り口から考えると「わかりやすくまとめて分割する」ということしかしていないように思います。例えば下記のようなまとめ方があったりします。

  • 関数を作る: ある処理に名前をつけてまとめてしまうことで、名前を呼ぶだけで一連の処理を呼べるようになります。呪文を作る、のような感じですね。
  • ファイルを分ける: 一つのファイルにたくさんのことが書いてあるとわかりにくくなっていきます。ある一定の単位でファイルを分けるということをします。長くなってしまった呪文の書を章ごとに複数の本に分けたりするようなイメージですね。
  • モジュール化する: 複数の関連するファイルをまとめて、コードの関連をわかりやすくします(言語や環境によってモジュールという言葉の指す意味が違ったりしますが、設計で広く知られていそうな表現で示しました)。呪文の書が増えてきた時に、「xx編」のようなまとまりを作るような感じでしょうか。

オブジェクト指向でよく出てくるクラスもこの「ソースコードのまとめ方」の一つです。また「何をどのようにまとめるか」の上手下手で、ソフトウェアの品質はかなり変わってしまいます。整理整頓が上手であれば、ソフトウェアは素早く変更に対応しやすくなる、というイメージが伝われば幸いです。

上手なまとめ方の強い武器であるオブジェクト指向について、これから少しずつお送りしていきたいと思います。 続きはこちら

PR

TECH DRIVE協賛企業のサークルアラウンド株式会社では、プログラマーの成長を加速させるためのトレーニングを行なっています。フロントサイドからバックエンドまで各種バリエーションがございますので、ご興味がある方は是非以下のリンクより詳細をご覧ください。

JavaScript Climbing

JavaScriptに特化したトレーニング「JavaScript Climbing」を行なっています。
this、クロージャ、Class等、中〜大規模のフロントエンドの開発に臨にあたり、必須となるスキル習得を現役のWEBエンジニアが徹底してサポートします。
2週間の無料体験期間がございますので、ご興味がある方は是非以下のリンクより詳細をご覧ください。

circlearound.co.jp

Ruby Climbing

週1からはじめられる「Ruby」でWEB開発の基礎が習得できる塾です。現役のプログラミング講師&Rubyエンジニアがプログラミング入門からフレームワーク(Sinatra/Ruby on Rails)を使用した本格的なWEB開発の学習までをしっかりとサポートします。

ruby climbing

個別トレーニング

短期間でぐっと成長したい方は弊社主催の個別トレーニングがおすすめです。 トレーニング内容は、受講者の方の課題/要望をお伺いした上で、フルオーダメイドで作成させていただきます。 詳細は以下のリンクよりご確認ください。(応募者多数の場合には時間を別途ご用意する予定です)。

WEBプログラミング個別トレーニング

チーム開発トレーニング

既にある程度コーディングが可能なのでチーム開発を経験してみたいという方にはチーム開発トレーニングがおすすめです。 GitHub Flowを使用し、実践の開発フローを体験していただきながらスキルアップ可能なトレーニングとなっています。

WEBサービスチーム開発トレーニング

TECH DRIVEについて

TECH DRIVEは「技術者の成長を加速させる」をキーワードに都内で活動をしているコミュニティです。
TwitterやFacebookにて技術ネタやイベント情報の発信を行っていますので、ご興味があれば、いいねやフォローをお願いいたします。