第4章 継承
これはもう、モンハン2Gでいうところの「イアンクック」先生ですね。
オブジェクト指向を何度か勉強したときに、最初に出てくる特徴的な機能。いや、機能じゃなくて考え方か?
なぜ継承を使うのか
継承そのものは、自分でも結構わかっているつもり。あえてこれを説明するまでもないっしょ。
今回は「なぜ継承を使うのか」ということが書かれていたので「おぉっ!」と思えた。まずは「ソースコードの量を減らすこと」で、これはどの言語でも同じように価値のある考え方です。でも、少なくともわたしはC言語の文法書でこの一文を読んだことがない。あれ、もしかしてC&Rをちゃんと読んでないだけか?
C言語でプログラミングしていたときは、「共通化」によってコード量を減らすことをやっていました。でも、これは似たようなコードを切り出して、いろんなところから呼び出すから、その呼び出し元が何らかの理由で、この共通化したコードを改変したいと思っても、他の呼び出し元に影響がでるから、共通化コードをコピペして、必要な部分だけ直して使うとか。あーあ。かえってめんどくさい。
でも継承にはオーバーライドがあって、このコピペ問題も解消してくれる。だからソースコード量を減らすことに躊躇なく継承を使える。
そっかー。継承はそういうことなんだ。と、継承について深く納得した。
リファクタリング
この本を読んでいて、画期的だと思ったことはリファクタリングの例と、用語の説明が書いてあること。
かつてわたしは「動いてるコードはいじるな」という先輩の教えを忠実に守っておりました。何か変更して、動かなくなってはいけない、と。
でも、リファクタリングは早い段階でやりつづけていれば、本来は「動かなくなる」なんてないはずですよね。そして、リファクタリングが可能な設計になっていれば。
プログラミング言語はやはり「言語」
つくづく「言語」なんだと思いました。英語やフランス語、日本語と同じ言語であると。どこがかというと、言語はその背景となる文化や思想をどこかで象徴するものがあること。例えば、継承の機能がなぜ存在するかといえば、リファクタリングなどの「シンプルに作るための仕組み」を持たせることを考えて作られているんじゃないかと。
オブジェクト指向そのものを感じることができる章でした。
今日学んだこと
- Objective-Cは単独継承。多重継承はサポートしていない。
- でもカテゴリやプロトコルという機能で、多重継承に似たようなことはできちゃう。
- ソースコードの量を減らせばバグの棲家が減るってこと。
- メソッドのディスパッチは、サブクラスから順に上位へ探しにいく。
- 継承元のメソッドを呼び出すときはsuperを使う。