お疲れ様です。
オブジェクト指向とは何ぞや?というのはとかく学問的になりやすい話題ですが、関連してTwitterで「理解するのにいい題材だなぁ」と思うものを見つけました。
せっかくですので、共有しつつオブジェクト指向のメリットを解説してみたいと思います。
◇目次
コーヒーカップが空なら一杯に満たし、そうでないならコーディングし続ける?
そのツイートがこちら。
Someone forgot to debug their coffee cup design https://t.co/PqeeFbl5T5 pic.twitter.com/ufWhWvkH5Q
— Programmer Humor (@PR0GRAMMERHUM0R) February 8, 2022
カップに書かれているコードがこちら。
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...
}
このようにオブジェクトごとに整理整頓して機能などを実装しておくことが、オブジェクト指向プログラミングが生産性をあげる所以といえるでしょう。
こういった整理整頓は、小規模コードならまだしも、チームで開発するプロジェクトなどでは、後からの可読性なども考慮する意味で非常に重要になってきます。
オブジェクト指向プログラミングの利点、より詳しくはぜひ専門書籍で
オブジェクト指向プログラミングは、理解できればコーディングの質が確実に上がります。ご興味がある方は、以下のような定番書籍もあります。本質を理解したいという方は是非ご参考ください。
結び:ちょっとしたコードからも、筆者のこだわりを感じる事例
こういった落書きの様なコードでも、オブジェクト指向の理解があるとコードが読みやすいことが分かる面白い事例でした。
是非、オブジェクト指向プログラミングの理解を深め、プログラミングの質向上にお役立てください。
今回もお目通しいただきありがとうございました。
記事筆者へのお問い合わせ、仕事のご依頼
当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。
この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。
皆様のご投稿をお待ちしております。