支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • 【オブジェクト指向】カプセル化

オブジェクト指向とは

オブジェクト指向は、簡潔に言うと「どれだけ効率よく開発を行うか」という考え方です。 大規模なシステムやアプリケーションの開発では、大量のプログラムを扱います。 大量のプログラムを扱う場合、「理解のしやすさ」が重要になります。 そこを実現しているのは、”オブジェクト = モノ”という概念が重要です。 そして「オブジェクト = モノ」という概念において、「モノ同士の関係性を構築していく考え方」も重要になります。 「モノ + モノ同士の関係性」を考え作成していくプロセスを「設計」といいます。 設計する際は、オブジェクト指向の3大要素の「カプセル化」、「継承」、「ポリモーフィズム」という考え方が重要になります。

オブジェクト指向を使用する理由

大規模なシステムやアプリケーションを開発する場合、大量のプログラムから構成されます。 大量のプログラミングから構成されると、コードが読みづらかったり理解しにくかったりしますそこで生まれたのが「オブジェクト指向」の考えです。 コードが読みづらかったり理解しにくかったりすると、以下のような問題が生じます。

・関わる人が増えた場合に、第3者がどこにどういった記述がされているかわかりづらい

・同じような処理をたくさん記述する必要があり、コードが不必要に長くなりさらに 変更、修正が生じた場合、変更箇所を正確に把握することが困難で、変更が必要な部分を変更できていなかったり、 変更が不要な箇所を変更してしまったりして不具合が生じる場合がある。

・他の処理から意図と反して不必要な変更が加えられ、不具合が生じる。 オブジェクト指向は、大規模開発における様々な問題を解決するための考え方です。

Javaにおけるオブジェクト指向とは

「Java」、「Ruby」、「PHP」、「Python」、「JavaScript」など、現在、人気のあるプログラミング言語の ほとんどがオブジェクト指向を持つプログラミング言語です。 これらのプログラミング言語の共通点はWEBサイトやアプリケーションの開発に使用されている点です。 WEBサイトやアプリケーションの開発には、 ユーザーが操作するためのGUI(Graphical User Interface)と呼ばれる表示画面や操作ボタンなどの部品を持つ フレームワークが必要となります。 GUIの表示画面や操作ボタンなどの部品も「オブジェクト = モノ」になります。 これらの部品を持つフレームワークは大量のプログラムで構成されていることになります。 大量のプログラムで構成されるフレームワークを効率よく作成する為には、オブジェクト指向は不可欠な考え方になります。

カプセル化とは

簡単に言うと「カプセル化」とは、データの読み書きやメソッドの呼び出しを制御する機能です。 オブジェクト指向の代表的な考え方の1つに、「カプセル化」があります。 カプセル化とは簡潔に言うと、なりべく他のプログラムから干渉できないようにする仕組みのことです。 ”モノ同士の関係性”を安全に保つためには、 他のプログラムと関係性を持つ箇所と干渉できない箇所を明確に区別する必要があります。 カプセル化を行う事により、他のプログラムから干渉できない箇所を明確にすることが可能となります。 そもそも、「カプセル」とは物体を入れておく容器のことです。 カプセルにはモノを入れ、他のモノと混合されないようにできるといったメリットがあります。 それと同様に、プログラムをまとめてカプセル化することで、 他のプログラムから干渉できなくしたり、管理しやすくなるなどのメリットがあります。 オブジェクト指向のプログラミング言語では、カプセル化を設計図と呼ばれる「クラス」で実現しています。

カプセル化の目的

カプセル化は、悪意のある不正利用や人による操作ミスを防止することが可能です。 カプセル化の一番の目的は想定しないクラスの利用を防止することです。 また、カプセル化により想定しない利用が発生した場合に、原因の特定がしやすくなるともいえます。

カプセル化による4つのアクセス制御レベル


Javaではフィールド・メソッドそれぞれに対して以下の4種類からアクセス制御レベルを選択することが可能です。 これらはアクセス修飾子と呼び、フィールドやメソッドを定義する際、先頭に記述することでアクセス制御が可能となります。
■ private・・・・自身のクラスからのみアクセスを許可
■ package private・・・・自身と同じパッケージに属するクラスからのみアクセスを許可
■ protected・・・・自身と同じパッケージに属するか自身を継承した子クラスからのみアクセスを許可
■ public・・・・ 全てのクラスからのアクセスを許可

カプセル化による制御の基本


カプセル化を行う際、基本的に以下のような設定にしておくのが良いでしょう。 あとは必要に応じてアクセス修飾子を変更していけば問題ありません。
■ 属性(フィールド)はprivateで保護
■ 操作(メソッド)はpublicで公開