【初心者用】オブジェクト指向について初心者でもわかりやすくしてみた
公開日: 2022/8/22
更新日: 2022/8/22
オブジェクト指向とは、プログラミングの手法の一つです。
そもそも、プログラミングとは、「人間がコンピュータにやってほしいことを、コンピュータに分かる言葉を並べて指示を出す」ということです。
そして、その「指示」の出し方、表現の仕方は多岐にわたり、オブジェクト指向はその一つとなります。
オブジェクト指向、という言葉は、プログラミングの勉強をしているとよく聞くことになる言葉ですが、いざ説明するとなると、なにぶん「手法」の話なので、抽象的に、専門的になりがちです。
ここでは、そんなオブジェクト指向について、あくまで初心者の目線から分かりやすい表現で、ざっくりと説明しつつ、メリットやデメリットを説明していきたいと思います。
そもそも、プログラミングとは、「人間がコンピュータにやってほしいことを、コンピュータに分かる言葉を並べて指示を出す」ということです。
そして、その「指示」の出し方、表現の仕方は多岐にわたり、オブジェクト指向はその一つとなります。
オブジェクト指向、という言葉は、プログラミングの勉強をしているとよく聞くことになる言葉ですが、いざ説明するとなると、なにぶん「手法」の話なので、抽象的に、専門的になりがちです。
ここでは、そんなオブジェクト指向について、あくまで初心者の目線から分かりやすい表現で、ざっくりと説明しつつ、メリットやデメリットを説明していきたいと思います。
1. オブジェクト指向って何?
最初にも述べましたが、オブジェクト指向とは、プログラミングの手法の一つです。
それについて簡潔に説明するなら、
「変数(データ)やメソッド(命令)を持たせた設計図と、設計図を実体化させるメイン処理に分けるプログラミング手法」
ということとなります。
他所のサイトだともっとシンプルに表現しているところもありますし、厳密な意味合いとしては若干異なるところもありますが、初心者的に多少具体性を持たせるべきかと思ってこの言い方にしました。
大規模なアプリの開発になると、変数とメソッドの量が膨大なものになり、どのメソッドがどの変数を用いているのか分かりにくくなります。
そうなると、開発当時は問題がなくとも、後々にプログラムの追加や修正を行うのが困難になってしまいます。
このような問題を解決するために生まれたのが、「オブジェクト指向」という考え方です。
それについて簡潔に説明するなら、
「変数(データ)やメソッド(命令)を持たせた設計図と、設計図を実体化させるメイン処理に分けるプログラミング手法」
ということとなります。
他所のサイトだともっとシンプルに表現しているところもありますし、厳密な意味合いとしては若干異なるところもありますが、初心者的に多少具体性を持たせるべきかと思ってこの言い方にしました。
大規模なアプリの開発になると、変数とメソッドの量が膨大なものになり、どのメソッドがどの変数を用いているのか分かりにくくなります。
そうなると、開発当時は問題がなくとも、後々にプログラムの追加や修正を行うのが困難になってしまいます。
このような問題を解決するために生まれたのが、「オブジェクト指向」という考え方です。
2. 具体例を混ぜつつ説明
オブジェクト指向について、しばしば「設計図」とか「車」に例えられます。
ただ、ここで単にそれだけを挙げて説明すると、初心者には飲み込みづらいと思うので(実際、著者は当初「どういうこと?」と首をかしげていました)、具体的にコードを交えて説明していきます。
※オブジェクト指向は様々な言語で用いられておりますが、ここではJavaを例として説明していきます。
まず、以下のようなクラスを用意してみます。
クラス名を見るとわかりますが、車の情報についてまとめたクラスです。
このクラスには、mainメソッドがありません。
車の名前と、色と、全長の変数と、それらを表示するメソッドが一つ。
こういったものが、俗に言われる「設計図」となります。
クラスという設計図に、所持できる変数と、メソッドを用意したものです。
これだけでは動かないので、もう一つ、以下のようなメイン処理を行うクラスを作成します。
ただ、ここで単にそれだけを挙げて説明すると、初心者には飲み込みづらいと思うので(実際、著者は当初「どういうこと?」と首をかしげていました)、具体的にコードを交えて説明していきます。
※オブジェクト指向は様々な言語で用いられておりますが、ここではJavaを例として説明していきます。
まず、以下のようなクラスを用意してみます。
クラス名を見るとわかりますが、車の情報についてまとめたクラスです。
- public class Car {
- public String sName = "名無し";//車名
- public String sColor = "黒";//色
- public double dLength = 0;//全長
- public void sayProfile() {
- System.out.println("この車の名前は "+this.sName);
- System.out.println("この車の色は "+this.sColor);
- System.out.println("この車の全長は "+this.dLength+" m");
- }
- }
このクラスには、mainメソッドがありません。
車の名前と、色と、全長の変数と、それらを表示するメソッドが一つ。
こういったものが、俗に言われる「設計図」となります。
クラスという設計図に、所持できる変数と、メソッドを用意したものです。
これだけでは動かないので、もう一つ、以下のようなメイン処理を行うクラスを作成します。
- public class Practice {
- public static void main(String[] args) {
3. オブジェクト指向のメリット
プログラムが部品化されることで、把握しやすい
プログラムを小分けした部品として捉えることで、プログラム自体が見やすくなります。特定の箇所を確認する際、巨大な一塊のプログラムを見るより、小分けされたものから探す方が探しやすい、ということです。
また、プログラムが把握しやすい、ということは、後々のプログラムの管理において、修正や改修がやりやすくなる、ということでもあり、そういった点でもメリットとなります。
再利用がしやすく、総じて作業を効率化できる
オブジェクト指向の手法のもと、開発されたクラスは、明確な目的のもと小分けされたものであるため、再利用がしやすいというメリットがあります。これにより、既製品と仕組みが同じ製品を作る場合、クラスを再利用することで開発にかかる時間を大幅に削減することが可能になります。
作業者間で認識を共有しやすく、分業が捗る
オブジェクト指向に基づいて行われる開発では、部品化されたクラスを細部まで理解しつつ作業を進めることとなります。個々人のクラスに対する理解度が高ければ高いほど、それらの認識の共有がしやすくなり、作業をより効率化できるようになります。
3-1. オブジェクト指向のデメリット
手法自体の難易度による非効率化のリスク
オブジェクト指向は、それ自体が理解に時間を要する考え方です。利用する、しない以前に、取得自体が難しいことが、まず第一のデメリットとなります。
また、そういった難易度により、開発陣の個々人の理解度に差が生じた際、作業が遅延、もしくは停滞してしまうというリスクも抱えています。
オブジェクト指向に基づいた開発の管理者は、個々人の理解度についてしっかり認識したうえで、作業を指揮することが重要となります。
一から開発する場合の、開発期間の長期化する
オブジェクト指向は、開発の規模にもよりますが、多くのクラスを作成、利用します。それらは、再利用しやすい、というメリットもありますが、特性上、プログラム量は膨大なものとなります。
再利用できる既製品がない場合、それら部品の作成と管理を一から行わせねばならず、そのコードの複雑化から開発期間が長期化する恐れがあります。