オブジェクト指向とは

広告

Java はオブジェクト指向と呼ばれるプログラミング手法を採用した言語のひとつです。オブジェクト指向では、特定の役割を持つ「モノ」(=オブジェクト)を作成し、それぞれに処理を任せながらプログラムを組み立てていきます。オブジェクトとはデータと処理をひとまとめにしたものです。ここでは Java におけるオブジェクト指向の基本的な考え方解説します。

オブジェクト指向とは

Java は、オブジェクト指向と呼ばれるプログラミング手法を使用する言語のひとつです。 Java の他にも Python や JavaScript、 C++ など多くのプログラミング言語でオブジェクト指向を使用しています。オブジェクト指向では、プログラムを「モノ(=オブジェクト)」の集まりとして考え、それぞれのオブジェクトに役割を持たせながら処理を行うのが特徴です。

従来のプログラミングでは、処理の手順を順番に記述し、その順番に沿って実行されているというものでした。一方、オブジェクト指向では、データと処理をひとまとめにしたオブジェクトを作成し、そのオブジェクト同士が協力しながら動作するようにプログラムを構成していきます。

Java のプログラムは、基本的にすべてクラスとオブジェクトを中心として作成されます。そのため、Java を学ぶうえでオブジェクト指向の考え方を理解することは非常に重要となってきます。

オブジェクトとは

オブジェクトとは、データ(状態)と処理(振る舞い)をまとめたものです。オブジェクト指向でよく使用される例として「自動車」の場合で考えてみます。自動車におけるデータと処理は次のように考えることができます。

・色や速度などの情報(データ)
・走る、止まる、曲がるといった動作(処理)

このようにオブジェクトがどんなデータを持っているのか、どんな処理を行うのかを定義していくことになります。そしてプログラムの中で、自動車やユーザー、商品などをそれぞれ独立したオブジェクトとして扱い、それぞれに必要なデータと処理を定義します。

オブジェクト指向の考え方

オブジェクト指向では、プログラム全体をひとつの大きな処理として作るのではなく、役割ごとにオブジェクトを分けて設計します。次の例を見てください。

・ユーザーを管理するオブジェクト
・商品を表すオブジェクト
・注文を処理するオブジェクト

オブジェクト毎にそのオブジェクトの役割を担当します。そして必要に応じて他のオブジェクトと連携することになります。

このように役割を分担することで、プログラムは(1)構造が分かりやすくなる、(2)修正がしやすくなる、(3)機能の追加が容易になる、などのメリットがあります。

オブジェクト指向の主な特徴

オブジェクト指向には、代表的な考え方として次の要素があります。それぞれの詳細な内容については、次のページ以降で順次解説していきます。

1. カプセル化(Encapsulation)

オブジェクトのデータを外部から直接変更できないようにし、安全に操作できるようにする仕組みです。必要な操作だけを公開し、内部の詳細を隠します。

2. 継承(Inheritance)

既存のクラスをもとに、新しいクラスを作成します。共通する機能を再利用することで、コードの重複を減らすことができます。

3. ポリモーフィズム(Polymorphism:多態性)

同じ名前のメソッドを呼び出しても、オブジェクトごとに異なる振る舞いをさせる仕組みです。機能の追加や変更が容易になります。例えばオブジェクトに対して「鳴く」という処理を行った場合、オブジェクトが犬と猫では振る舞いがことなります。

・オブジェクトが犬なら「わんわん」
・オブジェクトが猫なら「にゃーにゃ―」

4. 抽象化(Abstraction)

中身の複雑なルールは隠して、使う人が知っておくべき最低限のルール(操作方法)だけをまとめる考え方です。これにより、中身を詳しく知らなくても簡単に扱えるようになります。

なぜオブジェクト指向を使うのか

プログラムが小さいうちは、単純に処理を書き並べる方法でも問題ありません。しかし、プログラムが大きくなるにつれて次のような問題が発生します。

・修正すると別の部分が壊れる
・処理の関係が分かりにくくなる
・再利用が難しい

オブジェクト指向では、機能をオブジェクト単位で分割することで、これらの問題を解決しやすくなります。そのため、現在の多くのソフトウェア開発ではオブジェクト指向が広く利用されています。

-- --

Java におけるオブジェクト指向の基本的な考え方解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。