PC初心者でも1から学ぼう

エンジニアの基礎知識を徹底解説

未分類

オブジェクト指向とは何か?オブジェクト指向のメリットとは

プログラミングを始めたばかりの方で、

オブジェクト指向プログラミングという言葉を聞いたことがあると思います。

ただ、「部品」とか「もの」だとかいう説明をされていることが多く

分かりづらく、理解するのは非常に難しい概念ですね。

ここでは、オブジェクト指向プログラミングが、

何か、どんな利点があるのか解説してしていきます。

オブジェクト指向プログラミングとは?

オブジェクト指向プログラミング(オブジェクト指向と記述します)は、

プログラムの開発手法の一種です。

オブジェクト指向プログラミングというプログラム言語は存在しません。
(多分そんなプログラム言語があれば概念を説明する必要はないんでしょうが・・・)

さてなぜこのような開発手法があるのでしょうか。

それは、オブジェクト指向が、大規模なプログラムの開発を効率化し、

さらに保守を容易にしているからです。

プログラムを効率的に開発でき、保守が容易にできるということは、

開発費用と保守費用を抑えることができるためお金がかからなくて良いですね。

オブジェクト指向でプログラムを組む目的は、
開発を効率化することと、保守性を高めることです。

オブジェクト指向を説明するには、よく「モノ」とかという説明がありますが、

プログラムの組み方の違いを説明した方が分かりやすいと思います。

以下に代表的なプログラミングの方法を記載します。

  • 手続き型プログラミング
    上から下まで順に処理を実行していくプログラミング方法
  • 関数型プログラミング
    関数を組み合わせて使って処理を実行していくプログラミング方法
  • オブジェクト指向プログラミング
    classなどを使って部品を用意し、部品を組み合わせて、
    モノ(オブジェクト)を作るプログラミング方法

上記に記載の通り、オブジェクト指向は、

部品を組み合わせて、モノを作るプログラミング方法となります。

部品をたくさん作るわけですから、

プログラムの再利用が容易になり、

ソフトウェアの生産性が高くなりますね。

オブジェクト指向によく使われるものとして、

継承、カプセル化、多様性の3つあります。

 

オブジェクト指向は、部品を組み合わせてプログラムを構築する

オブジェクト指向は、「クラス(class)」を使用します。

そして、複数のクラスを使用して、プログラムを作っていきます。

そのため、クラスは、プログラムの「コンポーネント(部品)」と呼ばれます。

クラスを理解し、上手く使えるかが、オブジェクト指向にとって重要となります。

クラスとは

オブジェクト指向プログラミングが開発される前は、

手続き型プログラミングが主流でした。

手続き型プログラミングでは、

命令を「関数」で表し、データを「変数」で表します。

プログラム自体が関数と変数の集合体となります。

ここで、大規模なプログラムを開発することを見ていきましょう。

大規模なプログラムでは、プログラムに必要とされる関数と変数の数が膨大となります。

もしも10000個の関数と20000個の変数から構成されたプログラムを作るとしたら、

ごちゃごちゃになって驚くほど開発効率が悪く、保守が困難なものとなってしまいます。

そこで、プログラムの中に関数のある関数と変数をまとめたグループを作る方法が考案されました。

このグループがすなわちクラスです。

オブジェクト指向言語(Java等)には、構文としてクラスを定義する機能があります。

プログラムの構成要素は関数と変数だけなのですから、

それらをグループに分けたクラスがプログラムの部品となるのは当然のことです。

クラスにまとめられた関数と変数を「メンバ」と総称します。

 

オブジェクト指向は、開発効率と保守性を向上させる

プログラムを構成する全てのクラスを、

手作りしなければならないとしたら、

非常に効率が悪いですね。

そこで、オブジェクト指向言語には、

様々なプログラムから利用できる数多くのクラスが用意されています。

このようなクラス群のことを「クラスライブラリ」と呼びます。

クラスライブラリを利用することで、

プログラミングを非常に効率化できます。

他のプログラムのために作った既存のクラスを再利用できれば、

ますます効率的になります。

企業向けのプログラムというものは、

運用開始後に機能修正や機能拡張などの保守が要求されるものです。

クラスを組み合わせて構築されたプログラムなら、保守作業が容易にできます。

なぜなら、保守の対象となる関数と変数が、クラスというグループにまとめられているからです。

オブジェクト指向には、継承・カプセル化・多態性

オブジェクト指向には、3つの必要な考え方があります。

  • 継承(inheritance)
  • カプセル化(encapsulation)
  • 多態性(polymorphism、多様性)

継承:既存のクラスの持つメンバを引き継いで新たなクラスを作成すること。

カプセル化:クラスのメンバの中で、クラスの利用者に見せる必要のないものを隠すこと。

多態性:同じメッセージに対してオブジェクトが複数の操作を行うこと。

既存のクラスを継承すれば、新たなクラスを効率的に作成できます。

1つのクラスが複数のクラスに継承されているなら、

継承元のクラスを修正するだけで、

継承先のすべてのクラスを修正したことになります。

カプセル化によって不要なメンバを隠せば、

クラスがブラックボックス化された使いやすい部品となり、保守も容易になります。

隠したメンバは外から使われないので自由に修正できるからです。

多態性を利用して、

同じメッセージで複数の操作が行えるクラスを作れば、

クラスを使う人は覚えることが少なく済みます。

オブジェクト指向プログラミングのメリットである開発効率と保守性の向上を実現するものなのです。

クラスとオブジェクトの違い

クラスとオブジェクトの違いを説明します。

オブジェクト指向プログラミングでは、

クラスとオブジェクトを異なるものと区別します。

クラスは、オブジェクトの定義であり、

クラスが実体を持ったものがオブジェクト(クラスのインスタンス)です。

このことを「クラスはクッキーの型であり、くりぬかれたものがオブジェクトである」と説明している解説書がよくあります。

ただ実際のイメージをつかむことはできないでしょう。

実際クラスはプログラム内で以下のように表現されます。

Myclass test;       //オブジェクトを作る

test.Inthensu=123;  //オブジェクトの持つ変数を使う

obj.intkansu=();    // オブジェクトの持つ関数を使う

オブジェクト指向言語の学習を始めたばかりの人は、

いちいちオブジェクトを作成してから使うことを面倒だと思うようです。

しかし、オブジェクト指向言語の決まりですから仕方ありません。

なぜこのようなやり方にしたのか。

それは、現実世界でもクラス(定義)とオブジェクト(実体)が区別されているからです。

例えば、企業の従業員を表すJugyoinクラスを定義したとしましょう。

定義しただけですぐにJugyoinクラスのメンバが使えたら、

プログラムの中には従業員が一人しか存在できなくなってしまいます。

Jugyoinクラスのオブジェクトを作成するきまりなら、

必要な人数だけ従業員を作る(メモリー上にJugyoin クラスをコピーを作成する)ことができます。

クラスはクッキーの型であり、くりぬかれたものがオブジェクトであるという意味になるのです。

まとめ

どうでしょうか。オブジェクト指向プログラミングの説明でよくある「部品」とか「もの」という考え方は

少し理解できましたでしょうか。

オブジェクト指向プログラミングを行う理由は、開発効率・保守性を向上させることです。

概念をつかむにもプログラミングでどんどん開発していくのが近道だと思います。

-未分類

Copyright© エンジニアの基礎知識を徹底解説 , 2019 All Rights Reserved Powered by AFFINGER5.