公開日2022.09.05
最終更新日2022.09.05
1、はじめに
みなさんは「オブジェクト指向」という言葉を聞いたことがありますでしょうか?初めて耳にした言葉という方ももしかしたらいるかもしれません。
私自身、プログラミングの学習を始めてから知った言葉です。
この言葉を聞いただけでは「なんだか難しそうだな」とか「複雑そうだな」と思うかもしれませんが、オブジェクト指向は私たちがソースコードを書いていく上で欠かすことのできない重要な「概念」です。
今回はこのオブジェクト指向についてできるだけ噛み砕いて解説していきたいと思います。
2、オブジェクト指向とは
まずはこの言葉の意味を考えてみます。辞書で「オブジェクト/object」と調べると「もの・対象」などと出てきます。
オブジェクト指向はざっくり説明するとソースコード内で「もの」と「操作」を分けて作っていき、組み立てて完成させる・関連する関数をひとまとめにする考え方です。
この説明でもなかなかイメージが湧きづらいかと思うので、次の項からもっとイメージしやすいように解説していきます。
3、オブジェクト指向のメリット・デメリット
この章ではオブジェクト指向を学ぶことのメリット・デメリットを考えていきます。
メリット
①効率よくプログラムを設計・開発できる
プログラムを作っていると、同じ処理を何度も書かなければいけないことがあります。
こういった場面で1度書いた処理を再利用して、同じコードを何度も書くことを防ぐことができます。
②不具合の原因を特定しやすくなる
例えば、急に部屋が停電した場合その原因はさまざまなことが考えられます。
雷が落ちたのか、漏電したのか、電気を同時に使いすぎたのか、、、など。
そんな時、電子レンジ・エアコン・ドライヤーを同時に使っていたと分かれば「同時に電気を使いすぎだな」と問題となった原因の予想を立てることができます。
この例えのようにオブジェクト指向を使ったプログラミングでは「操作」ごとにコードが分かれているので、どこで不具合が起こったのか、どんな処理をしたときにエラーが出たのか原因を特定しやすくなるのです。
③プログラムの仕様が変わっても対応しやすい
3つ目のメリットは①の効率化と関連している部分があります。
例えば、30個の「ボタン」がプログラムされているwebアプリケーションがあるとします。
このボタンの使用を変更しなければいけないとき、オブジェクト指向を使っていないソースコードだと変更のための同じ処理を30回書かなければいけなくなります。
そんな時にオブジェクト指向で「ボタン」を定義していれば、その「ボタン」を1回修正するだけで全てのボタンに対応させることが可能になります。
デメリット
ソースコードが複雑になってしまうことがある
オブジェクト指向型のソースコードには各処理を行ったり来たりしないと理解できないような処理が複雑化してしまうことがあります。
このような問題を「ヨーヨーの上に乗っているかのような感じがすることがよくある」ことから「ヨーヨー問題」と呼ぶそうです。
ソフトウェア開発におけるヨーヨー問題アンチパターンとは、プログラムを読んで内容を理解しようとしたときに、継承関係が深すぎる・複雑すぎるなどの理由で、たくさんのクラスを行ったり来たりしないと処理フローが追えない状況のことである。
wiki | ヨーヨー問題 より引用
概念を理解することが難しい
オブジェクト指向は「概念」のため始めから完璧に理解することは難しいかもしれません。そこに明確な”答え”があるわけではないからです。
しかし私は最初から完全理解する必要はないと思っています。
コードを書くときは「見やすくてシンプル」・「効率的」・「エラーが少ない」これらを意識してオブジェクト指向型のプラグラミングに近づけていくことが大切だと思っているからです。
4、オブジェクト指向を構成する3つの要素
ここではオブジェクト指向型プログラミングを書く際の主な要素を紹介します。
カプセル化
現在書いているプログラムが他のプログラムから干渉(邪魔)されないように保護することを言います。例えば先ほど例に挙げた「ボタン」ではボタンの形や大きさは全て同じです。この形・大きさを他のプログラムから変更されないように保護する役割がカプセル化です。
継承
一言で説明すると、同じようなプログラムを1箇所にまとめて、コードを再利用しやすくする仕組みと言えます。
アプリ開発を進めていくと、データ登録処理など、似たような処理を作るケースが出てきます。
この時、コードを別々に書いてしまうと、その仕様が変更された時にそれぞれのコードを変更することになり時間がかかってしまうことがあります。また開発が進むと、重複したコードが多くなっていき、目的のコードを見つけるのが困難になってきます。
そんな時「継承」を使っていれば、カテゴリー分けした【登録】、【更新】、【削除】などから似たような処理がないか確認しやすくなります。
ポリモーフィズム
ポリモーフィズムは継承したコードの一部を変更して利用するための仕組みです。
先ほどあげた「ボタン」を例に【登録】、【更新】、【削除】など似たような見た目で色が異なるボタンを作るケースがよくあります。オブジェクト指向を使わないと同じプログラムを3回書かなければいけません。
メリット③で紹介した「仕様変更の対応のしやすさ」がまさにポリモーフィズムです。
5、基本情報技術者試験におけるオブジェクト指向
基本情報技術者試験でもオブジェクト指向の問題はよく出題されます。
基本情報技術者試験ドットコムで解答できるいくつか過去の問題の例を紹介します。
正解は(ア)
正解は(エ)
上記の問題のように、オブジェクト指向の基本的概念が問われることが多いようです。
まとめ
いかがでしたでしょうか。私自身この記事を書き始めてから初めてオブジェクト指向を色々と調べてみました。正直難しかったです。。。
これからコードを書きながら徐々にオブジェクト指向に近づけたプログラミングを目指してきたいと思います。
私同様、初心者の方はまず「インデントを揃える」だったり「終了タグのつけ忘れを減らす」など基本的なことを意識してコードを書いていくのがいいと思います。