2018.06.21
オブジェクト指向はプログラミングをする際にとても大切な要素の一つです。
オブジェクト指向は難しくてつまずいてしまったという意見をよく見かけますが、
おおまかに把握することはそんなに難しいことではありません。
UiPathのような初心者にも開発できるようなアプリケーションを使用する際にはこのような概念は必要ないように思うかもしれません。
ですが、実際はUiPathなどでメソッドやクラスを使用する際に理解しておくと調べていく中でやりやすくなると思います。
知っておいて損なことはないと思うのでしっかりと理解しておきましょう。
これで少しだけメソッドやクラスというのを理解していただければなと思います。
早速学びたいのですが、そもそもオブジェクトとは何なのでしょうか。
オブジェクトというのは日本語に直してみると「もの、こと」です。
今回用いるオブジェクトもこの「もの、こと」のことを表しています。
よくわからないなと思うかもしれませんが、オブジェクトとはそのような、もの自体のことなのです。
例えば、「そこのリンゴ」「マイクの自家用ジェット機」「ジェシカの写真」「私のパソコン」などの、
世の中の無限にある様々な「もの、こと」です。
ここで少しだけ注意しないといけないことは、「リンゴ」はオブジェクトとは言いにくいということです。
正確には「このリンゴ」のようになります。
ほんの少しの違いなのですがこの指示語が入るか入らないかで変わってくるので注意しておいてください。
少しだけでもオブジェクトについて理解できたでしょうか。
このオブジェクトを使ってこれから話をしていきます。
まだ完全に理解できていなくてもこれから話していく中でオブジェクトが何回か出てくるので大丈夫です。
オブジェクトを少しだけ理解したところで軽くオブジェクト指向について説明しておきます。
オブジェクト指向ってなんか難しい、というように感じる方が多いのは事実です。
これはオブジェクト指向が概念であるからです。
初めから具体的にオブジェクト指向を100%理解しようとすると詰まってしまいます。
ですので初めは雰囲気だけ理解しておいておけばいいと思います。
オブジェクト指向を用いる利点についてですが、実際の現実のように考えられることができる点にあります。
現実の我々は車を運転するときにどのようにタイヤが動いていて、エンジンが動いているかなどを意識しているでしょうか。
現実の私たちは、車を運転する際に車体の中の制御などのことを考えずにをアクセルを踏むことで直進しているのです。
オブジェクト指向はこれに似ています。
もっと簡単に考えるためにゲームのようにして考えてみましょう。
アクセルをAボタン。ブレーキをBボタンのようにして考えます。
では、マイクさんが自分の自動車を動かす場合を考えましょう。
マイクさんはAボタンを押すことで自分の車を発進させることができます。
マイクさんはBボタンを押すことでその自分の車を停車させることができます。
なにを当たり前のことを言っているのかと思うかもしれませんが、本題はここからです。
では、マイクさんが友達のジェシカさんの車を運転しようとする時はどうなるでしょうか。
皆さんも一度考えてみてください。
マイクさんはAボタンを押すことでジェシカさんの車を発進させることができて、
Bボタンを押すことでそのジェシカさんの車を停車させることができます。
またもや当たり前のことだと思ったかもしれません。
それは当然です。これが実世界のふるまいだからです。
これをプログラミングに導入したのがオブジェクト指向です。
プログラムを書くときに、いちいち車が変わるごとに新しいコードを書いていたのでは大変なことになります。
何万種類の車ごとに発進と停車の操作を書くことになるからです。
すべての場合について書くのではなくて、元から「車」というものを作ってしまった方が楽そうですね。
「車」を動かすときには、
Aボタンを押すと発進し、Bボタンを押すと停車する。
のように決めておくとどの車かどうかを考えなくても直感的に操作することができます。
つまり、オブジェクトがどのようなものであるかをいちいち確認しなくてもいいということです。
マイクさんは、「車」である「もの」に対してはある決まった操作をすることで発進や停車を簡単にすることができるということです。
ここからはそれらをどのように実装していくのか見ていきます。
プロパティとは日本語に訳すと「属性」です。
他のものではアトリビュートと書いてあるものもあるかもしれませんが今回はプロパティを使います。
簡単に言うとプロパティとはそれが構成されている部品のような感覚です。
車でいえば、「タイヤ」「エンジン」「バックミラー」のようなものです。
それだけではなくて、車体の色や走行距離、残りのガソリン量などもプロパティです。
どちらかと言うと後者の方がオブジェクト(その車)の特徴を表しているのでわかりやすいかなと思います。
このプロパティはその時々でいろいろな形に変化します。
走行距離などは走っていく中でもちろん更新されていきますし、ガソリンも減っていきます。
車体の色なども後々塗装することで変化することもありうるものです。
ですので変数を使って、
「車体の色」「走行距離」「ガソリンの量」
のようなものを「車」というクラスの中にプロパティとして定義しておきます。
(クラスは後ほど説明しますが、今は車というものの中にいれておく感覚でいいと思います。)
メソッドとは簡単に言うと「操作」のことです。
先ほどに述べた中だと、「車」の発進や停車というものが含まれます。
メソッドはUiPathにもあるので使ったことがある人も多いのではないでしょうか。
メソッドはそれぞれどんな操作をするかを表したものです。
オブジェクトの振る舞いとも言えるのではないでしょうか。
メソッドが作用するのはなにもオブジェクトだけではありません。
この後説明するクラスに作用させることでさらにオブジェクト指向を体現できることができます。
ここが先ほど説明したオブジェクトの中身を毎回確認しなくてもいいことにつながります。
最後に紹介するのがクラスです。
クラスは今までのプロパティやメソッドなどをいれておく箱のようなものです。
オブジェクトの集合体とも言うことができます。
クラスの中には属性のプロパティや操作のメソッドなどが入っています。
このクラスというものには継承とよばれる概念があります。
また車を例を考えてみましょう。
車の中には普通の自動車だけではなくて、トラックやタクシーなども含まれます。
他にもキャンピングカーやバスなどもありますよね。
この時に、新しくトラックやタクシーのクラスを一から作るとなると同じことを何度も行うことになります。
なぜかと言うと、発進や停車というメソッドをまた新しくそれぞれのクラスの中につくることになるからです。
このような場合に継承というものを使います。
一般的に「トラック」「タクシー」「キャンピングカー」「バス」などを総称して「車」と呼びます。
なので「トラック」「タクシー」「キャンピングカー」「バス」などは「車」の機能を持っているとも言えます。
よって「車」の機能をそのまま「トラック」「タクシー」「キャンピングカー」「バス」などに搭載できればいいのです。
これが継承です。
ある概念よりも上位に位置する概念を引き継ぐことで、同じ機能をそのまま使えるということです。
とても実世界に似ているので大人数などでコードを書くときには役に立つことになります。
ここまでオブジェクト指向について見てきましたが、これによってクラスやメソッドの位置関係が理解できたと思います。
この程度の知識でも、今後UiPathのようなアプリケーションを使用するときに使いやすくなると思います。
もっとオブジェクト指向について学びたい方は一度自分でコードを書いてみることをおすすめします。
自分でコードを書くことでどのような構成になっているのか深く理解することができると思います。