私は現在C++を絶賛勉強中なわけでありますが、継承って難しいですよね?
ネットでは知ってることを前提で書かれてたり、継承は簡単な方とかって書かれてますけど、そんなことはないです😰
難しいです。
めっちゃ難しいです。😡
そういった方々でも分かるような継承の説明を頑張ってみます!
自分も頭よわよわなので理解できているのかどうかすら分からないレベルなので、つよつよの人は間違っているところは是非ご指摘ください!
この説明で分からないところがあればそれも是非コメントください!
コードを書くと、難しく感じるかもしれないので、猫でも分かるシリーズははなるべくコードは使わずに解説しています!1
最終的な目標は道端にいる野良猫に継承を教える事です!🙀
###継承って...?
継承ってオブジェクト指向プログラムしてるとよく聞きますよね!
でも、実際に何をするのか、どうすればできるのかよくわからないのが現実で、初心者には難しい記事ばかりです😢
Wikipediaによると、
コンピュータプログラミングで用いられる概念であり、任意のオブジェクトの特性を、他のオブジェクトの特性の基礎にするためのメカニズムと定義されている。
とのこと
つまるところ、何らかのオブジェクトの機能を他のオブジェクトに引き継げるよ~
といった感じ
そもそも継承っていう単語の意味が受け継ぐっていう意味だからこの辺はまぁ読んで字のごとくですね!
###じゃあ実際にどんな感じ?
今の説明だけ聞いても全然イメージわかないですよね
私だって字を見ればこれぐらいは分かります😑
オブジェクト指向って空間上に存在するすべてのオブジェクトに対してそれぞれプログラミングするもの(のはず)ですよね
結構現実世界に基づいているような気がします(なんかそういうこと言ってる人がいた気がする)
多分、継承の概要を説明するとめちゃくちゃ難しいので、極力分かりやすい例を挙げますね!
####例)猫と人と鳥の場合
猫と人と鳥がその空間にいるときに、それらを動かそうと思ったらそれぞれ別々のプログラムを書きますよね
C++だと、cat.h
,cat.cpp
,human.h
,human.cpp
,bird.h
,bird.cpp
という感じで、それぞれのヘッダファイルとソースファイルを用意するはずです。
ほかの言語でも、ファイルは分かれていないにせよ、それぞれ別々のクラスにしたりしますよね!(C++とC#以外のオブジェクト指向あんまり分からない...😱)
でも、この3つのオブジェクトって共通している処理っていくつかありますよね
例えば、体力(寿命)がある、食べ物を食べる、歩く、などです!
ここら辺の同じ処理をいちいち全部のファイルに書くのってコピペしたとしても面倒だし、何よりプログラマ的にはムズムズすると思います😟
forとかwhileを使う理由だって同じ処理を何回も書くのが面倒くさいからですよね
それと同じです!!
だから同じ処理を複数ファイルに書かない方法を考えたんですよね~
そこで、現実世界を見てみてください!
猫、人、鳥って現実世界だとあるまとまりに属しているのが分かると思います!
そう!生き物なんですよ!!
だから、「生き物」という生きているものに共通した機能を持つオブジェクト(クラス)をあらかじめ用意しておいて、その中にある機能をそのまま猫や人や鳥に引き継いじゃえ!って考えるに至ったんですよ!
これだけ聞いても、そんなことできるの??って思う方がいるとは思いますが、こればかりはできるとしか言いようがないんですよ~🙇
そして、そのための機能こそが「継承」なんですね~
この継承を使って猫、人、鳥を実装すると、
猫は生き物クラスを継承して、猫クラスには、鳴く関数を実装して完成
人は生き物クラスを継承して、人クラスには、喋る、作る関数を実装して完成
鳥は生き物クラスを継承して、鳥クラスには、鳴く、飛ぶ関数を実装して完成
という感じで、重複しているところは継承するだけでいいんですね~
(鳴くはもっとスマートに実装できるはず)
本当はさらにこの猫クラスを使ってムギ、ソラ、レオ(猫の名前ランキング2021トップ3の名前)というオブジェクトを作ることができるのですが、これに関してはまた後程記事を書きます
###さいごに
継承についてできる限り分かりやすく説明したつもりですがどうでしたでしょうか?
私自身も継承完全に理解したわけじゃないので不備は少なからずありますが、できる限り自分と近いレベルの人にも伝わるような書き方をしてみました!
これからも猫でもわかるシリーズを書いていくつもりなので、ご期待ください!
コメント待ってます!!
-
これはあくまで継承に関するイントロで、実用的な知識というよりは外のサイトで継承に関する記事を見たときに理解できるようにするための踏み台のような記事です。もちろんコードがあった方が分かりやすいという方も多く見えるでしょうし、そもそもコードを書いてなんぼのプログラミングでなにを甘いことを言ってるんだと思うかもしれませんが、ご理解ください。<(_ _)> ↩