【事例にみるオブジェクト指向プログラミングの利点】
カップの中身の判定、満たす処理は、誰に関連した機能?

記事イメージ

お疲れ様です。

オブジェクト指向とは何ぞや?というのはとかく学問的になりやすい話題ですが、関連してTwitterで「理解するのにいい題材だなぁ」と思うものを見つけました。

せっかくですので、共有しつつオブジェクト指向のメリットを解説してみたいと思います。

コーヒーカップが空なら一杯に満たし、そうでないならコーディングし続ける?

そのツイートがこちら。

コードに書かれたコードにご注目。引用:https://twitter.com/PR0GRAMMERHUM0R/status/1490943503605637124?s=20&t=CNKw4FXdy5vysTw1gw6L5w
コードに書かれたコードにご注目

カップに書かれているコードがこちら。


if (☕.isEmpty()) 
{
    keepCoding();
}
else
{
    ☕.fill();
}

デバッグし忘れたようだ?

ツイートに"Someone forgot to debug their coffee cup design"とある通り、ちょっとコードが変ですね。

これでは無限に注ぎ続けることになりそうです。

そこで、次の通り修正してみましょう。(今回議論したい本質はここではありません。)


if (☕.isEmpty()) 
{
    //カップが空なら、カップを満たします。
    ☕.fill();
}
else
{
    //そうでない場合、コーディングを続けましょう。
    keepCoding();
}

尚、念のため意味を解説しておきますと、isEmptyというのはカップが空か否かの判定をBool値で返す関数(Emptyは空っぽという意味です)、fillはカップを満たすルーチンという意味合いで使われています(fillは満たすという意味です)。

オブジェクトごとに整理整頓:☕に含まれる機能、ローカルに含まれる機能を分けることで、生産性が向上する

上記のコードでは、☕というオブジェクトにisEmpty()、fill()という機能、ローカルにkeepCoding()という機能が含まれていることが分かります。

オブジェクト指向プログラミングが優れている点の一つは、このように責務や意味論的に機能や値を整理できることです。

画像に書かれたコードは、☕に関する機能は☕オブジェクトにきちんと収納されていることが分かります。

逆に、オブジェクトの責務を無視してしまえば、次の通りisEmpty()、fill()といった機能もローカルで実装してしまうことも可能です。


if (isEmpty(☕)) 
{
    fill(☕);
}
else
{
    keepCoding();
}

//以下、実装部。オブジェクト指向を考慮せず、全部ローカルに詰め込むパターン。

bool isEmpty(☕) {
    // 引数が空か否かを判定する、何らかの処理・・・
}
void fill(☕) {
    // 引数(カップ)を満たすための、何らかの処理・・・
}
void keepCoding() {
    //Coding...
}

これをあえて☕クラス(オブジェクト)に実装するということは、isEmpty()、fill()が☕に関連する機能、責務であることを明示していることになります。

後から見た人も、このコードの意味が把握しやすくなるはずです。


if (☕.isEmpty()) 
{
    ☕.fill();
}
else
{
    keepCoding();
}

//以下、実装部。オブジェクト指向を意識して書いてみる。

//コーヒーカップの機能は、☕クラスにまとめて実装
class ☕ {
    bool isEmpty() {
        // 空か否かを判定する、何らかの処理・・・
    }
    void fill() {
        // カップを満たすための、何らかの処理・・・
    }
}

// その他の処理はローカルに書いておく。
void keepCoding() {
    //Coding...
}

このようにオブジェクトごとに整理整頓して機能などを実装しておくことが、オブジェクト指向プログラミングが生産性をあげる所以といえるでしょう。

こういった整理整頓は、小規模コードならまだしも、チームで開発するプロジェクトなどでは、後からの可読性なども考慮する意味で非常に重要になってきます。

【社内PR】チーム・ウォーク

オブジェクト指向プログラミングの利点、より詳しくはぜひ専門書籍で

オブジェクト指向プログラミングは、理解できればコーディングの質が確実に上がります。ご興味がある方は、以下のような定番書籍もあります。本質を理解したいという方は是非ご参考ください。

結び:ちょっとしたコードからも、筆者のこだわりを感じる事例

こういった落書きの様なコードでも、オブジェクト指向の理解があるとコードが読みやすいことが分かる面白い事例でした。

是非、オブジェクト指向プログラミングの理解を深め、プログラミングの質向上にお役立てください。

今回もお目通しいただきありがとうございました。

記事筆者へのお問い合わせ、仕事のご依頼

当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。

この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。

皆様のご投稿をお待ちしております。

記事筆者へ問い合わせする

※ご相談は無料でお受けいたします。

この記事へのコメント

ニックネーム(任意)

返信通知先Emailアドレス(任意)

本文


* 感想やご意見等、お気軽にコメントください。但し、公序良俗に反するコメントはお控えください。
* 管理者が承認したコメントはこの箇所に公開させていただく可能性がございます。
* 返信通知先Emailアドレスは、筆者のみに通知され、公開されることはありません。返信通知先Emailを入力された場合は、コメントへの返信をこちらに掲載した際に通知させていただきます。その他の目的には使用いたしません。
* スパム対策のため、コメントは日本語のみ受け付けております。

堺財経電算合同会社 小規模IT構築サービス