ライフをハックしたい

プログラミング初心者向けの記事や花粉症や就職活動、基本情報技術者試験(FE)などについて書いています。消しゴムはんこの記事は嫁が書いています。

オブジェクト指向が難しく、わからないときの解決方法とは!?繰り返しの学習の必要性

スポンサーリンク

f:id:ywataru:20171011181744p:plain

スポンサーリンク

2018年5月16日記事に追記しました

オブジェクト指向とは?

オブジェクト指向は難しい

オブジェクト指向を学ぼうと思っても、

  • なにをどう学んでよいかわからない
  • 教科書の説明がさっぱりわからない

と挫折してしまう方も多いと思います。

オブジェクト指向の理解は難しくてわかりにくいです。クラス、カプセル化、ポリモーフィズム、と新しい用語の連発で入門者の心が折れる気持ちもわかります。最初は用語の暗記になりますが、徐々に概念の理解を進めていきましょう。初心者はわからない用語を調べながら、覚えていくといいと思います。オブジェクト指向の利点やメリットを意識しながら学習してみてください。

スポンサーリンク

yakst.com

オブジェクト指向プログラミングとは? : スティーブ・ジョブズの答え

オブジェクト指向を何度勉強してもしてもわからない。いくら説明されても分からない。そんなあなたにスティーブ・ジョブズによるオブジェクト指向ソフトウェアの説明です。

オブジェクトとは人間のようなものだ。生きていて、何をどうすべきかという知識を自分の中に取り込み、物事を覚えていられるようにメモリーを持っている。非常に低いレベルの抽象度で彼らとやりとりをするというよりは、僕たちが今ここで話しているように、非常に高い抽象性を持って交流するものだ。

例えばこんなことだ。もし僕が君の洗濯屋(laundry)オブジェクトだとすると、君は僕に汚れ物を渡し、「服を洗濯してくれ」とメッセージを送ることができる。たまたまサンフランシスコで一番いいクリーニング屋がどこかを僕は知っている。僕は英語をしゃべり、ポケットにはお金も入っている。僕はタクシーを拾い、運転手にサンフランシスコのその場所へ行ってくれと伝える。服が洗濯されたらタクシーに飛び乗り、ここに戻って来る。きれいになった服を君に渡して「こちらが洗濯済みの服です」と僕は言う。どうやって僕が洗濯したかは君はわからない。クリーニング屋の場所もわからない。もしかしたら君はフランス語しかしゃべれなくて、タクシーを捕まえることもできないかもしれない。ポケットにはドルが入ってなくて代金を払えないかもしれない。一方で僕はやり方を全部知っている。君はそのやり方を知る必要はないんだ。すべての複雑なことは僕の中に隠されていて、僕たちは非常に高い抽象度でやりとりができる。これがオブジェクトが何かということだ。複雑さをカプセル化し、その複雑な部分とのインターフェースは高レベルなものなんだ。

スティーブ・ジョブズはイメージを伝える技術が秀でていた

スティーブ・ジョブズは、製品を利用しているイメージを伝える技術が秀でていました。ガラケーを使っている人に、iphoneを使用しているイメージを持たせることは非常に難しいと思います。オブジェクト指向も同じで、手続き型プログラミングをしている人にメリットを伝えることは難しいでしょう。それを、実生活のイメージに落とし込んで非常に上手に説明できています。 教育者として「伝える技術」の大切さ、難しさを改めて実感しました。

スポンサーリンク

参考にしたい6つのサイト


qiita.com

オブジェクト指向とは「他人(将来の自分含む)が読み書きしやすいコードを書く」ためにカプセル化などのルールを守った上でデータや機能のまとまり(クラス)を作ることです。 クラスの中身を見なくてもコードの意味していることがわかることが重要

スポンサーリンク

eng-entrance.com

オブジェクト指向は「概念」だ、ということだ。物事や対象を丸ごとひっくる見たときの大まかな理解のことだ。 明確な答えがないのだから、ざっくり雰囲気理解しておけばいい。 「ベテランエンジニアは色々とごちゃごちゃ言っているけど、なんとなくこんなもんかな?」くらいの理解で構わない。その状態になれただけで十分な成長だ。 あとは自分の成長と共に、理解が進んでいくし、自分の中で定義ができるようになるだろう。

なんとなくの状態で、次の学習に進むことが大切だと思います。完璧に理解できていないと次の学習に進みたくないという気持ちもわかりますが、次の学習を終えた後に、わからなかった箇所に戻ってみると途端に理解が出来ることがあります。


qiita.com

オブジェクト指向で書く理由、それは変更に対して柔軟に対応するためです。 オブジェクト指向は、予め変更の可能性が高い箇所を整理し、クラスに抽出することで変更に柔軟に対応できるようにしておくプログラミングスタイルなのです。

オブジェクト指向の目的は機能の実装ではありません。オブジェクト指向でしか実装できない機能はないと思っても良いでしょう。実装した機能を変更しやすくすることが目的です。

スポンサーリンク


pg-kura.hatenablog.com

なぜ Java 的オブジェクト指向を理解するために部品を組み合わせるということを理解しないといけないのか。 部品にすると、良いことがたくさんあります。そうした良いことを積み上げていくことで、ようやくアプリケーションが出来上がります。何がどう良いのか、その理由を知ることが、Java 的オブジェクト指向を理解するための最短距離です。

  1. 部品を利用するプログラムの見通しが良くなる。
  2. 同じ処理をいくつも書かなくて良くなる。
  3. 部品を利用するプログラムは、その部品の詳細を深く知る必要がなくなる。

オブジェクト指向を部品で説明しています。また、クラスなどの用語も説明されているので初心者にも読みやすいです。全体を読んでも90分で終わります。ぜひ読んでみましょう。


www.slideshare.net

そのクラスは巨大な1枚岩のコードで作成され・・・ 全ての機能が実装されていた・・・ 人々はそのクラスを「神クラス」と呼んだ。

非OOPなコードの特徴です。 実際にあった伝説のコード。シンプルな2Dゲームなのに1万行ありました。調べてみると、ステージごとに、まるごとコピペで作成した神クラスが5つ。1ゼウス2千行、5ゼウスで、合計1万行となっていました。

オブジェクト指向は、このような経緯をもって生まれました。内容はコーディング規約になるので少し難しいですが、雰囲気を理解しておくとコーディングが上達するでしょう。なぜ、オブジェクト指向でプログラミングするのか、このスライドで少し理解しておくとよいでしょう。


www.slideshare.net

オブジェクトを上手に設計・実装すると・バグが激減・修正・変更が簡単・早くコードが安定する オブジェクトの設計と実装の基本 小さくする

クラス 50行以内 メソッド 3行以内 パッケージ 10ファイル以内

非常にわかりやすいです。オブジェクト指向の設計と実装の学び方のコツなので、答えではないと説明しています。オブジェクト指向でコーディングすれば、何がよくなるかということを、実際に手を動かし体験しないとオブジェクト指向設計は身に付きません。


「わかったような気がする]の繰り返しが重要

オブジェクト指向は、「わかったような気がする。」ということの繰り返しです。人によって理解が違いますし、人によって説明も違います。1回で分かるはずはありませんので、繰り返し学習をすることが大切です。 また、オブジェクト指向を理解してもどのように活用してよいかわからない場合があります。なぜ、オブジェクト指向でプログラミングするのか、メリットや利点を意識して理解しておくとよいでしょう。