パパの勉強部屋

勉強の記録をつけています。Java、ネットワーク、Excel、etc.

スッキリわかるJava入門 第7章 オブジェクト指向をはじめよう①

第7章 オブジェクト指向をはじめよう①

オブジェクト指向を学ぶコツ

  • 基本文法とオブジェクト指向とでは、そもそも学ぶものも学び方もまったく違う。
  • 基本文法は書き方の「正解自体を学ぶ」ため、単に丸暗記して習ったとおりに使えばよい。
  • オブジェクト指向は「正解に辿り着くための考え方」を学ぶ。
  • つまり、オブジェクト指向の学習においては、理解する事やイメージする事を、より大事にする必要がある。

オブジェクト指向の定義

  • オブジェクト指向とは、ソフトウェアを開発する時に用いる部品化の考え方のこと。
  • 6章までは、ある程度大きくなって読みづらくなってきたから分割する、なんとなく意味が似ている単位で分割するなど、「こう分割した方が良いプログラムが作れるという確固たる根拠に基づいた部品化」ではなかった。
  • オブジェクト指向という考え方に沿って、1つのソフトウェアを複数に部品化すると、プログラムが把握しやすくなり、「人間の頭が追いつかない状況」を避けることができるようになる。

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

  • 根底にある目的は「人間に把握できるプログラム開発を実現する」というもの。
  • プログラムを容易に変更しやすくなる(柔軟性・保守性の向上)。
  • プログラムの一部を簡単に転用できる(再利用性の向上)。
  • 「マスターできたら嬉しい!」「絶対マスターしたい!」と心底思えるようなメリットは、ラクして、楽しく、良いもの」を作れるようになること。

オブジェクト指向と現実世界

  • そもそも開発するプログラムやシステムは、「現実世界における何らかの活動を自動化するためのもの」。
  • プログラムやシステムは、現実世界のある活動を人間に代わって機械にやらせるために作られるものであって、現実世界とは無関係に単独で存在しているものはほとんどない。

手続き型プログラミングとの違い

  • 6章までは、手続き型プログラミング(procedural programming)と呼ばれ、プログラムの先頭から順番に命令として記述していく方法。
  • オブジェクト指向で開発を行う場合、プログラマはいきなりコードを書き始めることはしない。
  • プログラムで実現しようとする部分の「現実世界」を観察しイメージ図(設計図)を描く。
  • 着目すべきは、設計図はITの知識がない普通の人に見せても理解できる「現実世界における構図」そのものである点。
  • 設計図の中の登場人物や物の1つ1つを部品ととらえ、それを「クラス」というJavaにおける部品で記述していく。
  • オブジェクト指向による部品化のルールは、現実世界にでてくる登場人物の単位で、プログラムをクラスに分割すること。

開発時に作るクラス、実行時に動くオブジェクト

  • 開発時に作られたクラスは、プログラムとして実行される際には、JVMの中で、それぞれの「仮想的な登場人物」をオブジェクトとして、その存在が生み出される。
  • ATMシステムの場合、「仮想的な口座」「仮想的な受付」「仮想的な印刷担当」などが、コンピュータ(JVM)という「電子的な仮想世界」の中に作られ、現実世界をそっくりまねた「Java仮想世界」とでもいえるような世界を形成する。

オブジェクト指向におけるプログラマの役割

  • オブジェクト指向プログラミングにおいて、プログラマはまるで「Java仮想世界における神様」のような存在。
  • 仮想世界にどんな登場人物や物を生み出し、それらをどのように連携させるかを決め、それぞれの部品を作っていく立場だから。
  • 例えば「複数の倉庫にある書籍をネットで販売するプログラムを作る」なら、本の販売業務を観察した上で「必要なもの(オブジェクト)は『本』『倉庫』『顧客』『購入記録』…」と判断し、設計図を書いていく。
  • 手続き型のプログラマのように「コンピュータが一行一行、何を実行するかという手順定める」のではなく、「オブジェクトをどう作るか、どのように連携させるか」を第一に意識しながら開発していく。
  • このことが「オブジェクト指向プログラミング」という名前の由来になっている。
  • 「~指向」というのは、「~を大切にした…」「~を中心にと捉えた…」という意味。

オブジェクト指向の本質

  • なぜオブジェクト指向の考え方を使うと、大規模で複雑なプログラムも把握でき、その結果、ラクして楽しくいいものを作れるのか?
  • 私たち人間が慣れ親しみ、よく把握している現実世界をマネして作られたプログラムもまた、私たち人間にとって把握しやすいものだから
  • オブジェクト指向には以下のメリットもある。
  • ①プログラム開発時に「頭を捻り、発想して作る」必要はない。現実をお手本に、それをマネして作ればいい。
  • ②現実世界の登場人物に変化があった場合、対応する部品(クラス)を修正、交換すれば簡単にプログラムを修正できる。
  • このようなメリットは、「現実世界をマネる」からこそ生まれてくる。
  • 現実世界の登場人物たちを、コンピュータの中の仮想世界の中にオブジェクトとして再現し、現実世界と同じように連携して動くようにプログラムを作ることこそがオブジェクト指向の本質。
  • オブジェクト指向の本質は、現実世界の登場人物とその振る舞いを、コンピュータ内の仮想世界で再現すること。