ライフをハックしたい

元エンジニアで現在フリーランサー。消しゴムはんこの記事は嫁が書いています。

オブジェクト指向が難しく、わからないときの勉強方法【分かりやすく学習を進めるコツ】

f:id:ywataru:20180727113022j:plain

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

1.オブジェクト指向とは?

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

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

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

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

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

yakst.com

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

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

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

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

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

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

スポンサーリンク

2.オブジェクト指向に関する書籍(初心者向け)

オブジェクト指向でなぜつくるのか。プログラミングの文法を覚え、入門書を1,2冊終わらせた程度の方におすすめです。

オブジェクト指向でなぜつくるのか 第2版

1人で小さい規模のプログラムを作成していると、オブジェクト指向のメリットはイメージしづらいものです。この本では、オブジェクト指向というアイデアのメリットを実践的にイメージしやすく紹介してくれています。

オブジェクト指向の”ベストアルバム”

by カエレバ

なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング

この本は、トレーニングなので、演習問題を通してオブジェクト指向を学べる形となっています。 非オブジェクト指向のプログラムからオブジェクト指向のプログラムへと、実際にコードをプログラミングすることで体系的に学べます。 また、題材もゲームとなっているので楽しみながら学習できるでしょう。

www.lifehackit.work

Javaの壁を克服する実践トレーニング

by カエレバ

Javaのオブジェクト指向がゼッタイにわかる本[第2版]

Javaのオブジェクト指向です。挿絵も多く、学習しやすい内容となっています。Javaの文法が理解できても、オブジェクト指向が理解できない。そんな悩みを解決する1冊です。

最初からそう教えてくれればいいのに!

by カエレバ

第2版はamazonのレビューが付いていないので1版のamazonレビューのリンクを貼っておきます。

by カエレバ

Amazon.co.jp:カスタマーレビュー: Javaのオブジェクト指向がゼッタイにわかる本

3.オブジェクト指向に関する書籍(中級者向け)

実務経験のあるような、中級者向け、もしくは初心者を脱したい方向けの書籍です。

アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

アジャイルソフトウェア開発というタイトルとなっていますが、サブタイトルにもあるように、オブジェクト指向でアジャイル開発をする内容となっています。ベストプラクティス、原則、デザインパターンをケーススタディに沿って学習できます。 6部構成になっており、初学者には3部以降のケーススタディは理解が難しいかもしれませんが、1部と2部の内容をおさえるだけでも初心者脱出への近道となるでしょう。

時代を超越したプログラミングの基本原則

by カエレバ

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方

なんとなくの理解でオブジェクト指向を使っていると問題に直面します。クラス設計の基本をRubyの観点から紹介しています。また、分厚く読みづらい本が多い中、この本は薄くて読みやすい点も評価ポイントです。

本書は、保守性を上げて運用コストを下げるアプリケーションをつくるために、クラス設計から基本概念、継承のテクニック、ダックタイプ、そしてテスト設計まで、幅広くカバーしています。

Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方

by カエレバ

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

オブジェクト指向に絞った内容ではありませんが、オブジェクト指向やデザインパターン、開発ツールなど、実践的な内容で紹介されています。Java8をベースにオブジェクト指向を学びたいのであればお勧めできる1冊です。

”動けばいい”で済ませるのではなく、効率的で品質の高いコードを書くために

by カエレバ

現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法

オブジェクト指向は設計のノウハウである。アプリケーションの変更という観点から具体的な実践的解決策をソースコードを示しながら紹介しています。 また、章ごとに内容が細かく分かれていますので一気に読まなくて良い点もポイントです。

トラブルを起こさないためにどう考え、何をすべきか?

by カエレバ

4.参考にしたい6つのWebサイト(無料)


オブジェクト指向とは結局何なのか あるいはプログラミングをする上で気をつけるべきたった一つのこと

qiita.com

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

スポンサーリンク

初心者向けに徹底解説!オブジェクト指向とは?

eng-entrance.com

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

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


オブジェクト指向と10年戦ってわかったこと - Qiita

qiita.com

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

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

スポンサーリンク


Java 的オブジェクト指向を 90 分で理解する

pg-kura.hatenablog.com

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

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

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


オブジェクト指向できていますか? from Moriharu Ohzu

www.slideshare.net

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

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

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


オブジェクト指向の設計と実装の学び方のコツ from 亨 増田

www.slideshare.net

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

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

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


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

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

www.lifehackit.work

www.lifehackit.work


www.lifehackit.work