【オブジェクト指向講座】目次

オブジェクト指向講座の目次です。
オブジェクト指向をどの様に捉えればいいのかを普通とは違う視点で考えます。

【第1回オブジェクト指向講座】オブジェクト指向って結局何なのさ

【第2回オブジェクト指向講座】継承とかカプセル化とかの前に

【第2回オブジェクト指向講座】継承とかカプセル化とかの前に

オブジェクト指向講座目次

前回 【第1回オブジェクト指向講座】オブジェクト指向って結局何なのさ

こんにちはyoship1639です。

オブジェクト指向講座第2回になります。

前回は、オブジェクト指向の目的とか意識しなければいけないことを中心にお話ししました。

今回は、オブジェクト指向の目的を達成するための手段である継承とかカプセル化とかの前に考える大事なことの話をしようと思います。

テーマは「継承とかカプセル化とかの前に」です。

  • 手段と目的の話

いきなりですが、皆様は「手段」と「目的」についてどのようにお考えでしょうか。

もちろん、手段によって目的を達成する。目的は手段によって達成される。という関係が成り立ちますね。

私はこれに更に別の見方を入れています。

それは、「手段は目的に成り得る(逆も然り)」です。

「手段は目的に成り得る」の簡単な例として、魚を釣るために釣竿を買うを考えます。

当然、魚を釣るのが目的で釣竿を買うのが手段ですね。

少し手を加えます。

「〇〇漁港に出没した幻の魚を釣るために釣竿を買おう。しかし、釣竿にはそれぞれに良し悪しがあるため慎重に選ばないといけない。一体どれを選んだらいいんだろう。」

より良い釣竿を買うために慎重に選ぶという行動が追加されました。

これに手段と目的に当てはめると「より良い釣竿を買うという目的のために慎重に選ぶという手段」となります。

この様に「釣竿を買う」という行為は見方を少し変えると目的にも手段にも成り得てしまいます。

しかし、慎重に釣竿を選んでいる間に幻の魚は○○漁港から姿を消してしまいました。

この場合、本来の目的である幻の魚を釣る事が出来ず、慎重に釣竿を選ぶという別の目的が達成できました。

どう考えても意味ないです。幻の魚を釣ることが達成できないのですから。

 

さて、なぜこの話をするのかというと、巷のオブジェクト指向プログラミングにこれと似た状況が多発しているからです。

前回、人がプログラムを組み易く、変更し易く、拡張し易くするのがオブジェクト指向の目的で、継承・カプセル化・ポリモーフィズムはそのための手段とお話ししました。

継承とかカプセル化とかを使うことが目的になってはいけません。達成しなければならないのはプログラ厶を組み易く、変更し易く、拡張し易くすることです。

  • 継承とかカプセル化とかの前に知って欲しいこと

回りくどくオブジェクト指向の目的を念押ししました。

なぜそこまでしたかというと、これが言いたかったからです。

継承とかカプセル化とかの前に、自分が作りたいものが頭の中で整理できていないと、オブジェクト指向の恩恵は殆ど得られません。

つまり、設計力やオブジェクトの捉え方がオブジェクト指向の恩恵に直結します。

自分自身がオブジェクト指向プログラミングで作りたいものが、予め頭の中で整理整頓されているという「先読み」ができないと、いくら継承やらカプセル化やらをやったところでただのハリボテにしかなりません。

意味のないゲッターやセッター、継承になってしまうのです。

次回は、オブジェクト指向において設計や先読みがいかに重要かをプログラムの例を通して実感してもらいたいと思います。

【第1回オブジェクト指向講座】オブジェクト指向って結局何なのさ

オブジェクト指向講座目次

次回 【第2回オブジェクト指向講座】継承とかカプセル化とかの前に

こんにちはyoship1639です。

この講座では、オブジェクト指向がいまいちよくわからない方や、プログラミングで活用できている気がしない方に向け、私の経験則から考えそしてたどり着いたオブジェクト指向プログラミング(OOP)をどの様に捉え、どの様に活用していくべきかというノウハウを皆様と共有できればと考えております。
そして、この講座を通して少しでもオブジェクト指向プログラミングを知ってもらい、実際に活用出来る様になっていただければと考えております。

今回のテーマは「オブジェクト指向って結局何なのさ」です。

  • オブジェクト指向のよくある捉え方

さて、いきなりですが「オブジェクト指向」と聞いたら皆様は何が思い浮かびますか。

「クラスを継承して〇〇」とか「データのカプセル化」とか「ポリモーフィズムで抽象化」とかがよく聞くフレーズで、基本的にその辺りが思い浮かぶのではないかと思います。

そしてなぜそのフレーズばかりが思い浮かんでしまうのかというと、ほとんどのサイトがオブジェクト指向の説明をするとオブジェクト指向の3原則である「継承」「カプセル化」「ポリモーフィズム」をベースに説明をしていくためその用語ばかりが目についてしまい、オブジェクト指向が継承とかカプセル化で出来ていると錯覚し、イメージがそういうものだと定着してしまうからではないでしょうか。

上の文章を読めば分かる通り私はそのようなイメージには否定的で、オブジェクト指向の本質からかけ離れて一部分だけを見ている状態であると思っています。

オブジェクト指向は「継承」「カプセル化」「ポリモーフィズム」で成り立つものではありません。それらはただの手段です。

「継承」「カプセル化」「ポリモーフィズム」は手段で、オブジェクト指向の目的ではありません。

これらを使えばオブジェクト指向になるというのは誤った考えなので気を付けてください。

  • オブジェクト指向って何?

じゃあオブジェクト指向って何なのさと疑問に思われると思います。

簡単に結論を申しますと、オブジェクト指向は「人がプログラムを組み易く、修正し易く、拡張し易くするための手法」です。

これも結構当たり前のように言われていますがこれが私の考えるオブジェクト指向の本質です。思った以上に大事です。

何が言いたいのかというと、「継承」「カプセル化」「ポリモーフィズム」を使っても「プログラムを組み易く、修正し易く、拡張し易く」することを意識していないと、何の意味もないということです。

「プログラムを組み易く、修正し易く、拡張し易く」ということを意識しないで継承だとかカプセル化だとか使っても無駄です。見た目的にオブジェクト指向っぽくなるだけで中身は手続き指向と何も変わらなくなります。

勉強する気がないのに勉強しても内容が頭に入らないのと同じです。

少し整理します。

オブジェクト指向は、人がプログラムを組み易く、修正し易く、拡張し易くすることを目的としたプログラミング手法であり、継承・カプセル化・ポリモーフィズムはそれらを達成するための手段である。
プログラムを組み易く、修正し易く、拡張し易くすることを意識して継承・カプセル化・ポリモーフィズムを使わないとオブジェクト指向の恩恵は得られない

とても大事な概念なので、覚えておいてください。

次回 【第2回オブジェクト指向講座】継承とかカプセル化とかの前に