プログラミングの勉強を進めるとたくさんの壁にぶつかると思いますが、その中でも苦戦する人が多い「オブジェクト指向」という言葉。
日常生活では聞きなれない言葉に戸惑うかもしれませんね。なので今回は初心者にもわかりやすく「オブジェクトとは何か」の解説をしていきたいと思います。
実は、オブジェクト指向という考え方は人間にとって当然のものであるということを実感してもらいましょう。
この記事はPythonを軸に話を進めているので、他のプログラミング言語とでは異なる部分があるかもしれませんが、オブジェクト指向の考え方は同じです。
オブジェクト指向を理解するための準備
いきなりオブジェクトの説明に入るより、以下の2つの言葉の意味を理解してからの方がスムーズです。
準備1:データ型とは?
データとデータ型
日常生活でも当たり前のように使う「データ」という言葉ですが、それとは少し違う「データ型」についてみていきましょう。
データ型とは、データの種類と性質を指す言葉です。
例えば、テストの得点データがあったとしましょう。このデータの種類は「整数」です。そして、性質は「四則計算ができる」ということになります。
合計得点を求めるときは足し算、得点差を求めたいときは引き算、平均の得点を知りたいときは割り算も使うことができるというようことですね。
他にも、名前のデータなら種類は「文字列」です。文字なので「四則計算はできない」という性質があります。
このように、データ型とは種類と性質を合わせた言葉です。
データとデータ型という言葉は異なります。得点データ、名前データのように値そのものを指すのが「データ」で、その種類と性質をまとめて指す言葉がデータ型です。
データ型の例
Pythonを例に有名なデータ型を見ていきましょう。以下に示しているのは性質の一例です。
データ型 | 種類 | 性質の例 |
---|---|---|
int型 | 整数 | 四則計算できる |
str型 | 文字列 | 大文字、小文字の区別 |
list型 | リスト | 入れ替え可能 |
tuple型 | タプル | 入れ替え不可能 |
dict型 | 辞書 | キーとバリューで保存 |
整数や文字列は英語で「integer」「string」なのでその最初の文字をとってデータ型の名前を使ています。
整数や文字列は直感的に分かるけど、まだリストやタプル、辞書を聞いたことがないのであれば、そういったデータ型があるんだと考えておきましょう。
準備2:メソッドとは?
メソッドとは専用の関数
データ型とセットで覚えておかないといけないのが「メソッド」です。
メソッドとは、特定のデータを処理する関数のことを言います。
関数という言葉になじみがなければ単に「データ専用の処理」であると覚えておきましょう。
では、「データ専用の処理」の具体例をあげましょう。
例えば以下のプログラムをご覧ください。以下はPythonのコードです。メソッドを使うときはピリオド(.)に続けて書きます。
1 2 3 |
>>> moji = ' python ' >>> moji.strip() 'python' |
このプログラムでは以下のことをやっています。
- 文字列「 python 」をmoji変数に代入
- stripメソッドで両側のスペースを取り除く
ここで出てきたstripメソッドは文字列にしか使えません。つまり、文字列専用の関数ということです。
ためしに、整数に使ってみると
1 2 3 4 5 6 |
>>> kazu = 27 >>> kazu.strip() Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> kazu.strip() AttributeError: 'int' object has no attribute 'strip' |
このようにエラーが出てしまいました。最後の行に書いてある「AttributeError: ‘int’ object has no attribute ‘strip’」というのは「整数にstripメソッドは使えません」という意味です。
つまり、使うデータ型を間違えるとエラーが出ます。「違うよ!」ってパソコンが教えてくれているわけですね。
メソッドの例
ほかにも、リストやタプル、辞書のメソッドもありますが、ここですべて紹介すると膨大な量になるので以下の記事にまとめてあります。
Pythonのコンテナの一つであるリストに関して詳しく見ていきましょう。リストを自由に操作するためのメソッド11個の使い方を解説します。 メソッドとは? メソッドとはあるデータ型専用の関数のことです。なので、以下で紹介してるメ[…]
Pythonの辞書にはキーとバリューのペアでデータが格納されています。それらのデータを自由に取り出すために使えるメソッドを紹介します。 以下のメソッドを使うとfor文で辞書を自由に使うことができます。その関連記事は最後に紹介していま[…]
人間の認識=オブジェクト指向
ここまでで準備は終わりましたので、オブジェクトの解説に入ってもいいのですが、その前に人間の認識についても解説しておきます。
先にそれを解説する理由は、
人間の認識=オブジェクト指向
だからです。
オブジェクトを直訳すると「モノ」です。モノには種類や性質、できることなどの情報が含まれています。
我々の世界にもモノがあふれています。パソコンやスマホ、テレビ、包丁、ミカンなど様々です。
人間はモノを認識して生活しています。
この「モノの認識」について詳しく見ていきましょう。
例えばマグカップについて考えましょう。このモノに対してどういうイメージを持つでしょうか?
マグカップは飲み物を飲むときに使うモノとして認識しています。熱い飲み物でも入れることができます。硬い材質で作られていますが落とすと割れてしまいます。
ほかにも、ミカンは食べることができる、皮があって向くことができる、甘味や酸味がある、凍らせてもおいしい、腐ることがある。という情報が含まれています。
つまり、人間がモノを認識するときは「モノがある」という目からはいってくる情報だけではなく「モノが持つ性質」「モノに対して何ができるか」も同時に認識していることになります。
人間は生まれてからモノに触れて五感を刺激されることで、無意識にこの考え方を身に着けます。人間は経験によってオブジェクトを作ることがきるということです。
これこそがオブジェクト指向という考え方そのものなのです。
しかし、0と1の組み合わせで動くコンピュータにとって経験によって学習することは不可能です。マグカップやミカンを認識することはできませんし、ましてや味を知ることなんてできないのです。
ですから、それらの情報を教えるためにプログラミングをすることになります。
もし、このパートが分からなくても大丈夫です。オブジェクト指向のプログラミングコードの書き方を勉強して使っていけば実感できるはずです。
コードの書き方につては別記事で紹介しようと思います。
オブジェクト指向とは何か?
ここからはプログラミングのオブジェクト指向について解説していきます。
オブジェクトとは?
データ型とメソッドを理解できたらいよいよオブジェクトです。といってもほとんど説明は終わっています。
オブジェクトとはデータ型とメソッドをまとめて指す言葉です。
つまり、データの種類、性質と専用の関数のことを言います。
このように考えることで、「そのデータが何であるか」と「そのデータに対してそんな処理ができるのかを」まとめて扱うことができます。
まさに、先ほど紹介した人間の思考そのものですね。
では、プログラミングの世界でのオブジェクトとはどういうことか具体例を見ていきましょう。
例1.文字列オブジェクト
先ほど文字列のデータ型にはstripメソッドという専用の関数があると書きましたが、そのほかにもたくさんあります。
大文字と小文字を変換したり、文字列を区切ったり、書式化したりなどざまざまです。
これらのようなメソッド(専用関数)に加えて、文字列は四則計算できないという性質も持ています。
正確には、文字列同士の足し算はできますが、そのほかの計算はできないということです。
以上のことを踏まえると、文字列オブジェクトとはその性質とメソッドを指す言葉として使います。
例2.リストオブジェクト
リストとは複数の要素を順番に格納したものです。以下のように書いて一つのリストを作ります。
1 |
nums = [10, 20, 30, 40] |
リストに含まれる要素にはインデックスという番号が割り振られています。
また、リストは要素を入れ替えることが可能です。そのための要素を追加したり、削除したり、並べ替えたりできるメソッドが用意されています。
このように、データの種類・性質とメソッドをまとめて表す言葉をオブジェクトと言います。
オブジェクト指向とは
オブジェクト指向とはプログラミング手法の一つです。
その他にも手続き型や関数型と言われる手法もあります。そういった手法の一つだということです。
これらのようなプログラミングのスタイルや手法のことを「プログラミングパラダイム」と言います。
オブジェクト指向で最も重要なことはオブジェクトを自分で定義できるということです。
これまでに登場した文字列オブジェクトやリストオブジェクトは最初から定義されています。
「最初から定義されている」とは、文字列ならクォート(’)、リストなら角カッコ([])をつけて表すことでコンピューターは文字列やリストを認識してくれるという意味です。
しかし、先ほども登場したようなミカンやマグカップは定義されていません(あたまえですね)
そこで、Pythonではclass文を使うことでそういったオブジェクトを自由に定義できるわけです。
オブジェクトとは種類・性質とメソッドを指す言葉なので、class文で定義するときもそれらの情報を書き込む必要があります。
このようにしてオブジェクトを自由に定義する手法をオブジェクト指向といいます。
オブジェクト指向を理解するメリット
初心者にとってオブジェクト指向を理解するのは難しく感じるかもしれませんが、理解することで得られるメリットを2つ紹介します。
メリット1.学習効率が上がる
オブジェクトを理解できているということはデータ型(種類・性質)やメソッドも理解できているということです。
コードを見ただけで
- 何のオブジェクトに使われているメソッドなのか?
- そのメソッドの引数はどれなのか?
ということが分かるようになります。もちろん前提として他の知識は必要ですが、プログラムの読みやすさが変わります。
はじめてのプログラムに挑戦してもコードを読むだけで理解できるので、ネットで検索する機会が減りますね。
メリット2.様々なプログラミング言語に対応できる
オブジェクトは高度なプログラミングであれば必ずと言いてほど使われています。
1つの言語でオブジェクト指向まで理解できたのであれば、ほかの言語でも同じです。
コードの書き方は異なりますが、概念は変わらないのでスラスラと理解できるでしょう。
聞いた話ですが、しっかり理解していれば初めての言語でも3日で習得できるという人もいるみたいです。
それくらい「考え方の理解」が重要だということですね。
まとめ
いかがでしたか?
今回はオブジェクト指向についてまとめてみました。初心者の方向けに書いたつもりですが、長くなりすぎたかもしれません。
私も未経験のときはネットで調べて理解しようとしていましたが、実際にコードを書いたほうが理解が深まりました。
もし、たくさん調べてもピンとこないという方は手を動かして書いてみましょう。
プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]