gijyutsu-keisan.com

コラム

%E3%81%96%E3%81%A3%E3%81%8F%E3%82%8A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91

作成日:20200630  テーマ1:%E6%83%85%E5%A0%B1%E7%B3%BB  テーマ2:  テーマ3:

オブジェクト指向プログラミングとは?といわれても、何ともピンとこない。
ただ、次のように順を追っていけば、オブジェクト指向とはこんなもんだ、というのが見えてくる(かもしれない)。

そこでまずは“クラス”という概念から入ろう。
クラスとは「(複数の)変数と(複数の)関数をひとまとめにしたもの」である。

Series:一次配列
Series:一次配列
クラスの中にある変数をメンバ変数、関数をメンバ関数と呼ぶ。

クラスそのものは「変数と関数によって構築されたただの箱、あるいはひな形」と思ってもらえばよい。 例えば、クラスを学級と見立てると、変数は生徒、関数は運動会のリレー選抜、テストのクラス平均点計算などが当てはまる。

Series:一次配列
Series:一次配列
今は、学級というものの構造を定義しただけなので、生徒A、B・・・に誰が当てはまるかまでは決まっていない。
< このようにクラスとは、あくまで構造を定義したものであって、実体はない。
先ほどの例でいえば、学級は構造であって実体はない。A組、B組・・・という具体的なものができて初めて実体が備わる。 プログラミングにおけるクラスもこれと同じで、classA、classB・・・といった名前のものにクラスをあてはめて初めて実体化され、変数に値を格納できる。

Series:一次配列
Series:一次配列
このclassA、classBといった実体を“オブジェクト”と呼ぶ。

ところで唐突で申し訳ないが、私はプログラミングが苦手だ。というのも人が作ったルールに則る、というのが苦手だからだ。 なので英語や国語なども苦手だ。 さらにプログラミングが苦手な理由に、訳の分からないカタカナ言葉の乱発にある。その最たるものが、オブジェクト指向に関わる言葉だ。 クラス、オブジェクト、インスタンス、プロパティ、メソッド・・・は!?・・・「日本語で言ってくれ」といった感じである。 でも、ここまででクラスとオブジェクトはイメージできるようになった(と思う)。

“インスタンス”って何?
インスタンスを辞書で調べると“実体”と出てくる...。あれ?オブジェクトも実体やったけど...?オブジェクトとインスタンスって同じ???
そこでオブジェクトを辞書で調べると“物、物体”と出てくる。インスタンスとは若干ニュアンスが違う。

結局、プログラミングにおいてオブジェクトとインスタンスはどう使い分けられているの?
これについてはGoogleせんせーで検索をかけるといろいろな人が解説してくれているので詳細はそちらに委ねる。ただざっくり言えば、オブジェクトはあらゆるプログラミングの対象を指し、“インスタンス”はクラスの実体を指す、といった違いがある。 つまり、オブジェクトはクラスという概念がなくても存在するし、クラスもインスタンスもオブジェクトの一つとして扱う。またインスタンスは、クラスから生成されたオブジェクトであるから、インスタンスとオブジェクトはループした関係になっている。

以上、オブジェクト指向を知る上で重要な言葉、クラス、オブジェクト、インスタンスについて説明した。
ここでオブジェクト指向とはどういったものか?に迫ってみようと思う。

プログラムをだらだらと、構造を定義せず書き連ねると、難解で修正や使いまわしが困難なものになってしまう。 また、いろんな人との共同作業によってシステムを組むことも難しくなる。 そこで、関連性のあるデータと処理を組み合わせて一つのまとまりにし(これがまさにクラス)、それらを組み合わせながら関連性をはっきりさせてプログラムを構築していく方法がオブジェクト指向プログラミングである(ん~、クラス指向じゃないの?)。
なぜオブジェクト指向と呼ぶか?といえば、クラスという概念がない時代、クラスの概念をオブジェクトと呼んでいたことによるものらしい(正確性に欠けるので、Googleせんせーに助けを求める)。

ここではオブジェクト指向のだいたいのイメージがつかめれば十分なので、詳細については別サイト等で理解を深めていただければ、と思う。

コラムページトップへ

参考文献