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

  • TOP
  •   
  • コラム
  •   
  • オブジェクト指向について

初めに

日常生活を送っている中ではあまり触れる機会はないですが、プログラミングの勉強をし始めた時にオブジェクト指向という言葉を耳にする人は多いことでしょう。オブジェクト指向はプログラミング言語の構成、特徴を表した言葉で、それ以外の言語もたくさん存在していますが、オブジェクト指向の言語はメリットも多いことから近年のシステム開発等でよく使われる傾向にあります。

勉強し始めはその特徴や考え方を捉えることが難しい面もありますが、習得できるとその他のオブジェクト指向言語にも応用が利くので、プログラマーを目指している方はぜひ概要だけでも把握しておくことをおすすめします。この記事ではそんなオブジェクト指向の全体像が見えてくる内容を紹介していきます。

オブジェクト指向とは

オブジェクト指向について調べてみても、プログラムを経験したことがある人だけが理解できるような言葉が並べられているものや、全体像が見え辛いものが多く、結局理解までたどり着けないことが良くあります。端的にオブジェクト指向を表すと、細かく分けられた部品を組み合わせてシステムを構築していくプログラミングのタイプとなります。

オブジェクト指向の言語は、ある動作を構成するひとまとまりのプログラムをオブジェクトという単位で分けていきます。そしてそれらのオブジェクトが別のプログラム内で必要になった際に、各言語独自の記述によって呼び出します。場合によっては同じシステム内で何度も呼び出しが必要になることもありますが、すでにオブジェクトとして出来上がっているプログラムの内容を再度記述する手間が省けます。

大規模なシステムになればなるほどコードの量は増えていくため、一つのプログラムで構築してしまうと改修が必要になった際にどこまで修正が必要かということを特定し辛くなります。またプログラマー同士で担当を分割することも難しくなります。オブジェクト指向はこれらの課題をクリアするために様々な仕様を設けており、それらはそのままオブジェクト指向の特徴となっています。

オブジェクト指向の3つの特徴

オブジェクト指向としてよく挙げられるのは、カプセル化(隠ぺい)、継承(インヘリタンス)、多態性(ポリモーフィズム)の3つです。この3点を抑えることでオブジェクト指向の概要が見えてくるので、一つ一つ紹介していきます。

カプセル化(隠ぺい)

カプセル化は様々な捉え方があり、定義しているものが少しずつ異なっています。一つはオブジェクト指向でのシステムの構築方法そのものを表している内容で、たとえ中身の構成が理解できないオブジェクトであっても、別のプログラムで呼び出すだけで簡単に利用できるという仕組みを指します。この仕組みは特にフレームワークやライブラリ、APIの利用に特徴が表れています。今回それぞれの細かい説明はしませんが、いずれもある目的のシステムを作る際に必要となる要素があらかじめプログラミング済みとなっている便利なものです。これらは言語の開発元や有志の開発者等が作成してインターネット上で公開していて、無料で利用できるものがほとんどです。あまりプログラミングに詳しくなくても、目的に沿ったものを選んで呼び出すだけで簡単に構築ができ、開発スピードのアップにも繋げられます。

もう一つカプセル化として説明されているのが、プラグラムに対してのアクセス制御、セキュリティ対策としての仕組みです。中身を知らなくても利用できる状態というのは、中身を頻繁に確認して書き換え等を行う必要が無い状態を自ずと作り出します。また言語によっては修飾子というアクセス範囲を指定する仕組みがあり、アクセス制御によってオブジェクトに対する不要なアクセスを防ぎます。以上の特徴によってカプセル化されたオブジェクトは安全性を保ちます。日本語で「隠ぺい」と訳されるのは後者の特徴があるためです。

継承(インヘリタンス)

継承は比較的イメージしやすい仕組みです。オブジェクト指向では、一つの目的に沿ったプログラムの小さなまとまりをオブジェクトと呼ぶ以外にクラスとも呼びます。クラスには様々な分類方法がありますが、継承を理解するにはまず親クラス、子クラスという分類が必要となります。子クラスは親クラスの内容を引き継いで新たなプログラムを作成できます。

親クラス、子クラスの関係は生き物の遺伝に似ている考え方と言えます。子は親の遺伝を受け継いで同じような特徴を持っていますが、完全なコピーでは無いので性格や趣味等で異なる部分もあります。親クラスの内容を引き継ぎつつ、それぞれオリジナルな子クラスを作成していくという仕組みが継承です。
具体的な例で言うと、例えば「教科」という親クラスがあったとします。「教科」は学校で教える、担任がいる、授業がある、テストがある等の共通点があり、この特徴は親クラスに書かれています。しかしこれだけでは単に概念が書かれているだけです。これを継承して、子クラスを作成していきます。「国語クラス」には国語の担当、授業内容を、「数学クラス」には数学の担任、授業内容というように具体化していきます。類似した子クラスをたくさん作成しなければいけない場合に、継承はとても役に立つ仕組みです。

多態性(ポリモーフィズム)

最後に紹介する多態性は、継承ですでに説明している部分と重なりますが、親クラスを継承しつつ、全く違った子クラスを作っていくことを指します。概念であったものを具現化していくこととも言えます。多態性という日本語に訳されることがあるのは、親クラスを引き継ぎながらもそれぞれ全く違う個性を持ったクラスを作り出せるという観点からきている可能性があります。

オブジェクト指向言語のメリット

オブジェクト指向は考え方が身についていないと、コーディングしていく際にもまず考え方を思い出さなければいけないので、かえって時間がかかると言うデメリットが存在することは事実です。それでも一度習得すると物事を整理立てて合理的に考えられるようになる面があります。

実際の業務面でもメリットは多く、現在多くのシステムで利用されているプログラミング言語の多くがオブジェクト指向であるため、扱う言語が変わって新たに勉強しなければいけなくなったとしても、大枠の仕組みは同じなので習得までにかかる時間が短くて済みます。Java、JavaScript、Rubyといった言語がオブジェクト指向です。

またプログラムは一度記入して終わりではありません。システムを運用していると、改修や機能追加が必要になることがあります。プログラムをオブジェクトに分けていることで、修正や追記の必要な箇所の特定がしやすく、一部の書き換えのみで作業が終えられるという効率の良さがあります。一つのプログラムに膨大な量のコーディングをしなくて済むため、プログラムの可読性も上がります。それぞれのオブジェクトに細かく分けることで、システム開発時に担当ごとの業務分担がしやすいというメリットもあります。

まとめ

今回紹介した内容はオブジェクト指向の全体像でしたが、実際にオブジェクト指向の言語でプログラミングを行う場合はさらに細かい仕様を理解していく必要があります。それでもオブジェクト指向は汎用性のある仕組みであり、ITシステムを理解するには必要な事項の一つです。プログラマーというわけではなくIT業界への就職を検討している方は今回の内容を踏まえたうえで、興味を持った内容を深堀してみることをお勧めします。プログラマーを目指している方は、ぜひこれをきっかけとして、Java等の具体的なオブジェクト指向の言語の学習に取り掛かってみてはいかがでしょうか。