「オブジェクト指向」に悩んでたことが嘘みたいになる記事
●結論
オブジェクト指向とは「現実世界を正しく捉えること」です。
えっ?
そして、現実世界を正しく捉えながら、複数のオブジェクトを組み合わせてプログラムを構築するという考え方です。
えっ?
では、まずそもそもオブジェクトって何よ?という所から考えていきたいと思います。
●オブジェクトとは?
直訳すると物体です。今、目の前にはどんな物がありますか?私の目の前には冷蔵庫がありましたので、これを例に考えたいと思います。
まず、私の家の冷蔵庫について思い付いたことを書き出してみます。
・色はシルバー
・扉は両開きタイプ
・2016年製
・プラズマクラスター付き
・食べ物を冷やすことができる
・飲み物も冷やすことができる
・大抵の物はなんでも冷やせる
・氷も作れる
・冷凍することができる
・野菜を新鮮に保てる機能付き
などが思い付きました。
オブジェクトとは、データの集まりとも言えます。
ただ漠然とした集まりではなく、ひとつのテーマを持った集まりです。
ここに書き出したものは、「冷蔵庫」という1つのテーマを持ったデータの集まりですよね。
このデータを書き出せれば、オブジェクト指向が分かったようなものです!
皆さんも目の前にある物について説明できたら次に進んでくださいね。
●クラス
クラスとは簡単に言うとオブジェクトをコードで書いたものです。
class 冷蔵庫 {
}
これで冷蔵庫というオブジェクトのクラスができました。OK?
はい、次。
●プロパティ
オブジェクトはプロパティ(属性)を持ちます。簡単に言うと、オブジェクトを説明するデータのことです。このプロパティはクラスの中で定義します。
冷蔵庫の例で書いてみますね。
class 冷蔵庫 { 色 = シルバー; 扉 = 両開き; 製造年 = 2017年; }
こんな感じになりました。OK?
はい、次。
●メソッド
オブジェクトはメソッドを持ちます。メソッドというのは、オブジェクトの動きを説明するもので、もーっと簡単に言うとオブジェクトが使える技みたいなことです。これもクラスに書き込んでみますね。
class 冷蔵庫 { 色 = シルバー; 扉 = 両開き; 製造年 = 2017年; 冷やす(食べ物) { //ここで食べ物を冷やします } 凍らせる(食べ物) { //ここで食べ物を凍らせます } }
こんな感じに書いてあげることができます。OK?
はい、次。
●メッセージ
オブジェクト同士はメッセージを送り合えます。例えば、冷蔵庫classの中に書いた「冷やす」とか「凍らせる」とかいうメソッドを他のオブジェクトに送ることができるのです。メッセージを送るには、「オブジェクト名.メソッド名」と書くだけです。
それでは、「冷蔵庫というオブジェクトを使って人間がジュースを冷やす」というプログラムをコードにしてみます。
class 冷蔵庫 { 色 = シルバー; 冷やす(飲み物) { //ここで飲み物を冷やします } } class 人間 { 名前 = marikotokyo; 冷蔵庫で飲み物を冷やす(飲み物) { 冷蔵庫.冷やす(飲み物) } } main() { 飲み物 = オレンジジュース; 人間.冷蔵庫で飲み物を冷やす(飲み物) }
こんな感じになりました。
●まとめ
ここでオブジェクト指向とは?の結論「現実世界を正しく捉える」に話を戻してみましょう。
現実世界を正しく捉えていないと、非現実的なコードを書いてしまうことになります。
例えば、人間が氷を凍らせていたり、冷蔵庫が勝手に飲み物を冷やし出したりしています。
これって現実世界で起きていますか?ありえないことですよね。
氷を凍らせることができるのは人間ではなく冷凍庫ですし、人間が飲み物を冷やそうとして初めて冷蔵庫は飲み物を冷やすことができます。
これが現実です。そうです、現実を見てください!笑
オブジェクト指向では、このように常に現実を見ることが大切なのです!!
「現実世界を正しく捉える」という意味、お分かり頂けたでしょうか?
私も理解するまでに時間がかかりましたが、とにかく目に入った物をオブジェクトとして捉え、プロパティやメソッドを考える癖ができると、オブジェクト指向の言語を学習する時に役立つと思います。
●独り言コラム
頭の中がオブジェクト指向になれば、ついつい現実逃避をする自分にもGood-byeできる日がくるのでしょうか...!
現実を見ろよっていう響き、つらいわ(笑)