この「オブジェクト指向入門」シリーズは、
今回で一旦締めることにしましょう。
最後に、クラスの「継承」について説明します。
これもまたクラスの肝となる概念です。
ただ、これまでオブジェクト指向に関する一連のことを説明していきましたが、
「継承」の理解やマスターとなると、
「中級の中の中級」か「中級の中の上級」ぐらいに位置するのではないか?と思います。
少なくとも「初級」には該当しないので、
初級の人がいきなり使える段階になるまで理解するより、
少しずつ理解していった方が良いと思います。
「継承」の説明
とりあえず、また自動車の例えによる説明からしていきます。
まず、自動車の設計図があります。
これが「クラス」だという話でした。
そんでもって、「自動車の設計図(クラス)を元に自動車(オブジェクト)を作っていくようにする」
というのがオブジェクト指向の基本的な考え方でした。
そして、自動車の設計図だけでものを作っていくのが物足りなくなり、
もっと違う種類のものが必要になってきたとしましょう。
例えば、軽自動車とか軽トラックとかパトカーとかが必要になったとしましょう。
この時、軽自動車とか軽トラックとかの設計図(クラス)を新たに作ることもできますが・・・
せっかくなので、自動車の設計図を使いまわしましょう。
この時、自動車の設計図を「継承」して、軽自動車とか軽トラックとかパトカーの設計図を作ることができます。
これが「継承」の基本的な考え方です。
「継承」して作ったクラスは、「派生クラス」と呼び、
継承元にあったプロパティやメソッドを使いまわすことができます。
例えば、自動車クラスを継承して作ったクラスは、
自動車が持ってる「燃料」というプロパティとか、
「エンジンを動かす」というメソッドとかを使いまわすことができるわけです。
「継承」の書き方
次に、プログラミング言語で「継承」を使う場合、
実際にどういうソースコードを書いていけば良いか?についてです。
これはプログラミング言語によって結構違うので、
C# ,Java ,Visual Basic ,JavaScriptの場合をそれぞれ見ていきましょう。
(派生クラスを「PatrolCar」、継承元クラスを「Car」とした場合)
C#
public class PatrolCar : Car { **(内容)** //親クラスのメソッドを呼び出す場合 base.ExecuteEngine(); }
Java
public class PatrolCar extends Car{ **(内容)** //親クラスのメソッドを呼び出す場合 super.ExecuteEngine(); }
Visual Basic
Public Class PatrolCar Inherits Car **(内容)** //親クラスのメソッドを呼び出す場合 MyBase.ExecuteEngine(); End Class
JavaScript
class PatrolCar extends Car { **(内容)** //親クラスのメソッドを呼び出す場合 super.ExecuteEngine(); }
以上が「継承」の使い方の基本です。
あと、修飾子「abstract」を使うと、クラスが「抽象クラス」になり、
継承しないと使えないクラスになるといった仕様があったりします。
Javaに関しては「final」という修飾子があり、
これを使うと逆に継承して使うのを防ぐことができます。
そんな感じで、継承の書き方はプログラミング言語によって違かったり、
細かい仕様がそれぞれ違っていたりしてややこしい所なので、
詳細が知りたい場合は適宜調べつつ使っていきましょう。
いつものように、「[プログラミング言語] [プログラミング用途]」と検索すれば出てきます。
「継承」の具体的な使い方、その1
「継承」が難しいのはその使い方です。
とりあえず一例について説明します。
よくあるのは、業務ソフトウェアなどでたくさんの画面が必要になったとしましょう。
そうなると、画面の一つ一つに対して、一つ一つ「クラス」を作っていくことになります。
ここでもし、「全ての画面に共通する処理」を作りたい場合はどうすれば良いでしょうか?
そんなとき、画面専用の「共通クラス」というものを作って、
それを継承して一つ一つの画面クラスを作っていきます。
これが「継承」の使い方の典型例です。
こうすることによって、
「画面全体の共有部品」を上手く使いまわすことができるし、
基幹となる部分を変えることで全体を変えることができる作りになります。
「継承」の具体的な使い方、その2
「継承」の使用例として、
「既存で用意されているクラスに継承が使われている」というケースもあります。
例えば、「C#」と「.NET Framework」を使って
業務系ソフトウェアの画面を作っていく場合、
画面作りには「コントロール」と呼ばれる部品が必要になります。
それぞれ、文字表示はLabelというコントロールを使い、
テキスト入力にはTextBoxというコントロールを使い、
ボタンにはButtonというコントロールを使います。
これらはそれぞれクラスになっていて、インスタンス化することで画面に表示します。
そんでもって、これらのクラスはControleというクラスを継承して作られています。
例えば、サイズとか色とか表示非表示などの情報は、
全てのコントロールで持つような情報だし、
LabelやTextformやButtonは「コントロール」というカテゴリーの部品として共通しているから、
それぞれ、Controleクラスを継承して作られているわけです。
以上のように、既存で用意されている部品でも、
「継承」が使われていることがあるのを覚えておいてください。
とりあえず、先人が作ったものを読む所から
「継承」の使い方で重要なのは、
継承元のクラスは「あらゆる処理の元」に該当することです。
「樹」の例えで言うと、より「根本」に近い部分に該当します。
なので、「継承」を使ってシステムを作るには、
システム全体の「根本」を意識していく必要があります。
以上のような「継承」の使い方を完璧に理解することは、
少なくとも初級プログラミングのレベルは逸脱しているでしょう。
というか、「継承」をちゃんと使ったシステムを設計するとなると、むしろ上級まで行くかもしれません。
なので、とりあえずは先人の誰かが「継承」を使って作ったプログラムが書いていて、
それを読む所から始めることになるでしょう。
「継承」に関しては現場で実際に使われている例を読む所から・・・で良いと思います。
そんでもって、「継承」についても含めて、
オブジェクト指向が使われているソースコードが読めるようになったら、
「オブジェクト指向入門」の学習として十分ということにしましょう。
あとは、場数をこなして中級マスターを目指していく
という話になると思います。
- クラスを「継承」して新たなクラスを作ることができる
- 「継承」して作ったクラスは「派生クラス」と呼ばれ、
継承元にあったプロパティやメソッドを使いまわすことができる - 修飾子「abstract」を使うと、クラスが「抽象クラス」になり、
継承しないと使えないクラスになる - 継承の細かい仕様はプログラミング言語によって微妙に違うので、
適宜調べつつ使っていこう - 業務系ソフトウェアで使う「コントロール」など、
既存で用意されてるものでも継承が使われてるものがある。 - 「継承」は初級プログラミングでは難しいので、
まずは先人が作ったコードを読むことから始めよう
コメント