脱初心者のためのオブジェクト指向再入門

あなたはこんなことで悩んでいませんか?

オブジェクト指向ってなに?
オブジェクト指向がいまだに理解できない…
どうやったらオブジェクト指向をマスターできるの?

オブジェクト指向はプログラミングを学ぶ人たちにとってもっとも理解が難しいと言われています。

しかしオブジェクト指向が理解できれば、プログラムを効率よく書くことができるようになり、上級者への扉を開くことができます。また、大規模なシステムやアプリケーションの開発にも臆することなく取り組むこともできるでしょう。

この記事では、オブジェクト指向について

  • なぜオブジェクト指向は理解できないのか?
  • なぜオブジェクト指向を使うのか?
  • オブジェクト指向とは
  • 設計とは
  • カプセル化とは
  • 継承とは
  • ポリモーフィズムとは

などの基本的な内容から、具体的な内容に関しても解説していきます。

今回はオブジェクト指向について、体型的に理解できるようにまとめました!

オブジェクト指向とは

オブジェクト指向は、ひとことでいうと「いかに効率よく開発を行うか」を突き詰めた考え方です。

大規模なシステムやアプリケーションの開発では、大量のプログラムを扱っていきます。大量のプログラムを扱ううえでは、「わかりやすさ」が重要になってきます。

そのわかりやすさを実現しているのは、オブジェクト指向の名前にもなっている「オブジェクト = モノ」という概念が重要です。そしてこの「オブジェクト = モノ」という概念において、「モノ同士の関係性を作っていく考え方」も重要になってきます。

「モノ」と「モノ同士の関係性」を考え作っていくプロセスを「設計」と呼びます。設計するときには、オブジェクト指向の3大要素と言われる「カプセル化」、「継承」、「ポリモーフィズム」という考え方が必要になってきます。

これから先は、「設計」、「カプセル化」、「継承」、「ポリモーフィズム」について説明していきます!

なおこちらの記事で、オブジェクト指向の概念を解説していますので、ざっくりつかむことができるでしょう。

オブジェクト指向とは何か?わかりやすい例で説明してみた。
更新日 : 2019年5月3日

設計とは

開発を行う際には、最初に設計を行います。

一般的にも設計は非常に重要とされていますが、オブジェクト指向においてはもっとも重要となります。あらかじめ開発で扱うデータや振る舞いを定義しておき、それらを上手に効率よく実現するためには、設計が不可欠です。

「オブジェクト = モノ」の振る舞いや定義を設定し、「モノ同士の関係性」を上手に効率よく実現させる仕組みにすることが設計の重要なポイントとなります。

ですので設計を行わないと、全体で最適にプログラミングを行うことができません。それによって、あとから修正が入ったり、不具合が入って開発に支障が出ることになります。

設計において、特に注意を払うべき点は以下のような項目です。

・「オブジェクト = モノ」の振る舞いや定義が明確で、利用者が増えても理解しやすいものになっているか?

・利用者が増えても使える拡張性の高いものになっているか?

・ほかのオブジェクトとの関係性の中で、データを壊されるなどのセキュリティ的な破たんはないか?

・特定の処理に時間がかかってしまうなどのパフォーマンスが低い部分はないか?

こちらの記事で、設計の必要性や重要さを解説していますので、参考にしてください。

カプセル化とは

オブジェクト指向の代表的な考え方の1つに、「カプセル化」というものがあります。カプセル化とはかんたんにいうと、できるだけ他のプログラムから干渉されないようにする仕組みです。

「モノ同士の関係性」を上手に効率よく実現させるためには、他のプログラムと密に関係性を持つ部分と干渉されない部分を明確に分ける必要があります。

カプセル化によって、他のプログラムから干渉されない部分を明確にするということになります。そもそも、一般的に「カプセル」とは物を封じ込める容器のことですね。病気になった時に、粉末の薬が入ったカプセル剤を飲んだことがあるでしょう。カプセルには中の薬が外の空気に触れて科学変化しないようにできたり、他のモノと混ざらないようにできるといったメリットがあります。

それと同じように、プログラムをある程度まとめてカプセル化することで、他のプログラムから干渉しづらくなったり、管理しやすくなるなどのメリットがあります。

オブジェクト指向のプログラミング言語では、カプセル化を「クラス」というもので実現しています。クラスは、プログラミングの中心となるので、設計図とも呼ばれています。

クラスについては、こちらの記事で詳しく解説していますので、クラスやクラスに関わるインスタンスやメソッドなども理解ができるでしょう。

オブジェクト指向のクラスってなに?専門用語から設計まで徹底解説
更新日 : 2019年8月13日

継承とは

継承とは、プログラムの再利用性を高める考え方のことです。

大規模なシステムやアプリケーションの開発では、大量のプログラムを扱っていきます。大量のプログラムの中には同じようなプログラムも多く含まれるようになります。

同じようなプログラムを複数つくっていくと、大量のプログラムの中ではどのプログラムが似ているか見づらくなります。そんな状況のなかで、1つのプログラムに修正や改良を加えた場合は、他の同じようなプログラムもすべて変更する必要があります。

すると、1カ所だけ修正を間違えたり、修正を忘れたりして余計な不具合を含んでしまったり、余計な時間が必要になってしまいます。同じようなプログラムをまとめて、まとめたものを再利用することで、このような問題を防いでいるのです。

継承についてはこちらの記事で詳しく解説しています。継承が作られた理由や、実際にどうやって使うのかというイメージが湧くでしょう。

オブジェクト指向「継承」とは?わかりやすく解説してみた
更新日 : 2016年8月10日

ポリモーフィズムとは

ポリモーフィズムとは、「オブジェクト = モノ」によって振る舞いを様々に変えられる仕組みのことです。

ですのでポリモーフィズムは「多様性」と呼ばれたりします。さきほど継承の説明で、プログラムの再利用性を高める考え方と説明しました。ポリモーフィズムも再利用性を高める考え方に含まれます。

継承は同じようなプログラムをまとめて、共通化して使うような考え方でした。でも、継承ばかりだと、同じ振る舞いをするプログラムしか作成できないということになります。

同じ振る舞いをする部分は共通化しつつも、違う振る舞いにしたい部分は目的に合わせて変えられるのがポリモーフィズムです。

ポリモーフィズムによって共通化した部分を使いながら、簡単な処理から複雑な処理までパフォーマンスの異なる処理をそれぞれの目的に合わせて実行できるようになっています。

オブジェクト指向は実は簡単!?

なぜオブジェクト指向は理解できないのか?

なぜオブジェクト指向は理解が難しいのでしょうか?

それは、オブジェクト指向は「概念」や「思想」のことだからです。概念や思想は「ものごとの考え方」を表しているので、それを理解して習得することは容易ではないでしょう。

たとえば、他の人が何を考えているのか理解することは難しいですよね。ましてや、他の人が持っている考え方を完全に真似して同じ行動をとるなどといったことは至難の技でしょう。

それと同じように、オブジェクト指向の考え方を理解して実践することは難しいです。ベテランのプログラマーでも、最初から完璧にオブジェクト指向で設計しプログラミングすることはほぼ無理だと言われています。

しかし、オブジェクト指向の根底にある概念や思想を知って理解することは、プログラミング上達にかかせないことです。オブジェクト指向に限らず、抽象的な「ものごとの考え方」は一般的に理解するのが難しいと言われています。オブジェクト指向も抽象的な「ものごとの考え方」のままでは頭を悩ませるばかりです。

抽象的な「ものごとの考え方」を理解できるようになるには、具体的な事例を理解することがよいとされています。抽象的な「ものごとの考え方」は目でみて手で触れて確認することはできませんが、具体的な事例であれば目や手を使って挙動を確認することができます。ですので、オブジェクト指向を理解するためには具体的な事例に多く触れることをオススメします。

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

オブジェクト指向を理解する第一歩は、なぜオブジェクト指向というものが作られて使われるようになったのかを理解することから始めましょう!

世の中にあるものは必ず作られた理由を持っています。なぜそれが作られたのか、という理由を知ることで物事を根底から理解できるようになります。大規模なシステムやアプリケーションを開発する場合、大量のプログラムから構成されます。大量のプログラミングから構成されると、コードが読みづらくなるのは当然のことだと思います。

コードが読みづらくなると、以下のような問題が生じます。

・利用者が増えた場合に、他人がみてどこに何が書かれているかわかりにくい

・似たような処理をたくさん記述する必要があり、コードが不必要に長くなりさらにわかりにくくなる

・後で変更を加えようとしても変更部分を正確に把握することが難しく、変更が必要な部分を変更していなかったり、変更が不要な部分を変更してしまったりして不具合が発生する

・他の部分から意図とは違う不必要な変更が加えられ、不具合が発生する

オブジェクト指向は、大規模開発におけるこのようなさまざまな問題を解決するために作られた考え方です。

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

オブジェクト指向プログラミング言語はオブジェクト指向と密接に関係しています。

Java、Ruby、PHP、Python、JavaScriptなど、今人気のある言語はほとんどがオブジェクト指向を持つプログラミング言語です。これらのプログラミング言語の共通点はWEBサイトやアプリケーションの開発用に使われるという点です。

WEBサイトやアプリケーションの開発には、ユーザーが操作するためのGUI(Graphical User Interface)と呼ばれる表示画面や操作ボタンなどの部品を持つフレームワークが必要となってきます。

GUIの表示画面や操作ボタンなどの部品もまさに「オブジェクト = モノ」ということになります。

これらの部品を持つフレームワークは大量のプログラムで構成されています。大量のプログラムで構成されるフレームワークを効率よく作り上げるためにも、オブジェクト指向は大切で不可欠な考え方です。具体的に、プログラミング言語でどのようにオブジェクト指向が使われているのかを知ると理解がしやすいでしょう。

こちらの記事で、Javaを例にして、オブジェクト指向がどのように実現されているのかを詳しく解説しています。

Javaでプログラミングを効率よく行う方法がわかるでしょう。

【10分でわかる】Javaにおけるオブジェクト指向を徹底解説
更新日 : 2019年4月30日

オブジェクト指向訴求文

オブジェクト指向を理解して仕事に繋げたい方は

この記事を読んでいる人の中では、オブジェクト指向をしっかり理解することによって、仕事獲得や転職などに繋げたいと考えている人もいるのではないでしょうか?

そんなあなたは、プログラミングスクールに通って学習を進める事をオススメします。オブジェクト指向は初心者には難解な部分も多く、非常に奥の深いものなので、完全に理解しようと思ったら案外大変です。

仕事などに繋げる事を考えると、独学だけでなくプロの力を借りた方が確実なのです。

例えば弊社「侍エンジニア塾」では、現役エンジニアがあなただけのオリジナルカリキュラムを作成し、完全なマンツーマンで指導させていただいています。

また、転職サポートはもちろん、独立支援もしているのでフリーランスとして仕事を獲得したいという人にも最適です。

もちろん、いきなり入会するのは不安もあるかと思うので、まずは無料体験レッスンを活用してみてください。弊社随一のコンサルタントがあなたの学習における不安や悩みを解消し、学習プランなどを提供します。

【月500名以上が受講】1時間で人生が変わる無料体験レッスン
更新日 : 2019年6月25日

対面(渋谷)での無料体験はもちろん、オンラインでも受け付けているので遠方の方でもご利用いただけます。下記のカレンダーから直接予約が可能となっているので、まずはお気軽にご相談ください。

侍エンジニア塾
無料体験レッスンを受ける

まとめ

ここでは、オブジェクト指向について説明しました。

オブジェクト指向は大きく4つの考え方がありました。

  • 設計
  • カプセル化
  • 継承
  • ポリモーフィズム

の4つです。

設計がもっとも重要で、効率よく開発を行うためには不可欠な要素です。設計をカプセル化や継承、ポリモーフィズムなどの考え方を駆使して行い、読みやすく書きやすいプログラミングを実現していきます。

最初から完璧なオブジェクト指向でプログラミングを行うことは非常に難しいので、理解できた部分から実践して覚えていくことが重要です。

実践で身につけることが必要なので、焦らずゆっくり1つ1つ理解していくといいでしょう。

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

佐野裕史

佐野裕史

侍エンジニア塾インストラクター。
主に技術担当をしています。

【経歴】
力仕事、接客業、営業職など様々な業界を経てIT業界に参入。
IT未経験からスタートし、1ヶ月で仕事獲得に奇跡的に成功。
1年半後にフリーランスに転身。

Web開発を主に行っており、得意とするのはRails、Ruby。
【技術スキル】
Rails、Ruby、Swift、Java(Android)、JavaScript

【趣味、趣向】
麻雀
MTG(マジックザギャザリング)
ダーツ、卓球、野球、ボウリングなどの球技

【Facebookページ】
https://www.facebook.com/hiroshi.sano.7
【Twitter】
プログラミング講師@佐野裕史
自分でプログラミングができない人のために情報を発信しています。
お気軽にフォローください。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説