オブジェクト指向ってなあに?


どうもmumvallです。
今日はオブジェクト指向について書きます。

プログラミング初心者には難しい概念ですよね?
できるだけわかりやすく簡単にお教えします。

今日のアジェンダはこんな感じです。

オブジェクト指向とは?


まずここですよね?
まずは用語から考えてみましょう!

日本語で「もの」を表す漢字は何個ありますか?
「者」「物」と2つあると思います。

これらを包含した言い方として、「モノ」があります。
つまり、何かを特定せずに概念的に「モノ」というわけです。
これを英語では、「Object」というわけですね!

オブジェクト指向とは、「モノ」を中心に考えられる考え方です。

オブジェクト指向のメリット

ソフトウェアの開発をイメージしてください。
プログラマーが一生懸命にプログラムを組んでいます。
残業してまで、必死に組んでます。バカですね~
プログラマーは効率的でないといけないのに残業なんて・・・

そんなとき、オブジェクト指向が役に立つわけです。
まず同じようなコードを何度も書いてる時間がもったいないですよね?
これを排除しましょう。(DRY原則)

次にプログラマーが残業増しになる原因は仕様変更ですね。
これにもオブジェクト指向は役に立ちます。

担当している部分の変更箇所が1か所で済むように設計されているので、
時間が短縮されています。

そして、オブジェクト指向の有用性のもう一つが、
部品を組み合わせるように作ることができるので、
再使用性が高いです。

これらからプログラマーがサボれ…いや、楽をできるわけです。

Rubyの開発者である、まつもとゆきひろさんも「プログラマーは怠惰であれ」といっていました。笑

オブジェクト指向の3つの特徴

オブジェクト指向といってもひとことで表すことは難しいです

なので、特徴を絞りましょう。

  1. カプセル化
  2. 継承
  3. ポリモフィズム

の3つです。

カプセル化

これは「公開範囲を特定できる」という特徴です。
イメージはSNSの鍵垢ですね。
NGT48で公開範囲を間違えて、研究生へ降格なんてことがありましたね笑

継承

上記スライドの通り、親クラスで必要なものをまとめておけばよいわけですね。
逆に言えば、

こういったプログラミングの方法を差分プログラミングと言ったりします。

子クラスから親クラスを考えることを、「汎化」
親クラスから子クラスを考えることを、「特化」
といいます。

ポリモ―フィズム

「手を挙げて」といっても
右手を挙げるひとも
左手を挙げるひともいますよね。

そんな感じで、同じ命令をしても個体ごとに違う動きをします。
そんな感じのものです。(雑感。。。)

クラスとインスタンス、集約

もう頭がパンパンかもしれませんが、もう1つだけ覚えましょう

クラスとインスタンス

イメージだけで大丈夫です。
javaやC++などでプログラミングをしていったらわかってきます。

集約

集合体とパーツの関係性で考えればわかりやすいと思います。
これもイメージで大丈夫です。

さいごに

じつは、オブジェクト指向って難しいように聞こえて、
中身をみれば、考え方のみなのでイメージングができれば難しくないです。

苦手意識を捨てて、僕といっしょに夢へと旅立とう笑