「オブジェクト指向プログラミング」という言葉はよく聞きますが、いまいち理解できていなかったので調べて見ましたが、あくまでプログラミング初心者の備忘録になるので間違いなどありましたら、どんどんご指摘願います。
またオブジェクト指向について説明している技術書やWebサイトは数多く存在し、どの説明もバラバラ、答えはエンジニアによってもバラける。
明確な答えがないのだから、ざっくり雰囲気を理解しておけばいい100%理解しようとするとよくわからなくなるし、あとは自分の成長と共に、理解が進んでいき、自分の中で定義ができるようになる。
というスタンスなので、現時点では100%理解を求めていないです。
以上宜しくお願いいたします。
オブジェクト指向とは
まず始めに、オブジェクト指向とは、特定のプログラミング言語や手法の名前ではなく、プログラミングを行う際の考え方。「概念」ということである。
※概念→物事や対象を丸ごとひっくる見たときの大まかな理解のこと。思考において把握される、物事の「何たるか」という部分。
wikipediaで調べると
オブジェクト指向プログラミング(オブジェクトしこうプログラミング、英: object-oriented programming、略語:OOP)とは、互いに密接な関連性を持つデータとメソッドをひとつにまとめてオブジェクトとし、それぞれ異なる性質と役割を持たせたオブジェクトの様々な定義と、それらオブジェクトを相互に作用させる様々なプロセスの設定を通して、プログラム全体を構築するソフトウェア開発手法である。
とある。
また、オブジェクト指向が生まれた背景には、コンピュータ技術が急速に発展し、目的に合ったプログラムを書くためには膨大な行数のコーディングが必要となり、プログラミングの複雑化があったこと。
そして、この解決策として生まれた発想が、プログラミングを「モノの集まり」としてとらえる考え方だった。
さらに噛み砕いて、わかりやすく説明したいが、現時点の私のレベルでは説明できないので、下記は「オブジェクト指向とは?」の記事を参考にさせていただきました。
####プログラムの中のオブジェクト=モノとは?
例として、「3Dモデルでひとつの都市を構築する場合」を考えてみる。
※ドライブゲームなどで出てくる風景と思っていただければOK。
「オブジェクト指向以前の考え方」と「オブジェクト指向」の考え方をそいれぞれ説明します。
■オブジェクト指向以前の考え方
建物や道路やその上を走る自動車などを「モノ」として捉えない方法
つまり、
- 四角くて白い物体にいくつかの穴が開いている物体 = 建物
- 幅のある平らな白いライン = 道路
- 箱に4つの可動性の輪がついている = 自動車
を羅列するような方法がとられていた。
■オブジェクト指向
まず「建物」、「道路」、「自動車」と名前をつけた「モノ」を用意するところから始める。
その後に、「建物」には、「四角い」、「コンクリートでできている」、「中は部屋で分かれている」などの特徴があると、定義していく。
以上のように、オブジェクト指向が生まれる前は、都市を「ひとつの連続したプログラム」で、『「自動車」だけを人に頼む』という方法がとりづらかった。
一方でオブジェクト指向では、「都市」を「建物」、「道路」、「自動車」などの「オブジェクト化された個々のプログラムの集合」と捉え、一つ一つを切り離して作ることができる。
これが従来の方法とオブジェクト指向との違い。
プログラミングを便利かつ合理的にしていく考え方がオブジェクト指向と言える。
###オブジェクト指向のメリットとは
オブジェクト指向には下記のようなメリットがある。
- プログラミングの全体像を把握しやすい
- 分業や共同作業がやりやすい
- 改良や修正がやりやすい
- プロセスしだいでプログラミングを高速化や軽量化できる
一つずつ見ていきましょう。
■プログラミングの全体像を把握しやすい
上記「都市」の例に戻ると、従来の方法は「境目のない連続したコンピュータへの命令」としてプログラミングされるのに対し、オブジェクト指向では「建物と道路と自動車でできた場所」と認識できる。
プログラム全体の構造が明確に把握でき、実際の都市を設計するようなイメージでプログラムを設計できる。
まずは全体のイメージを練り、そのあとに細部を練っていく...という企画の進め方ができる。
■分業や共同作業がやりやすい
全体のプログラムが連続していて区切りがない場合、複数のプログラマーが共同作業することは難しくなる。
一方でオブジェクト指向なら「わたしは全体の構造を作っていくので、あなたは建物を作ってください」とプログラムを切り分けながら、分業作業を行うのがはるかに容易になる。
オブジェクト指向の登場は、何百人ものプログラマーが関わる巨大システム実現に貢献したと言われている。
■改良や修正がやりやすい
プログラミングの作業は、たえず修正や変更を加え、繰り返しながらゴールへ向かう例がほとんどである。
たとえば、完成間近になってから、すべての「建物」の屋上に「アンテナ」を付けたいと修正意見がでたとする。
「一つのつながり」のプログラムなら「すでに作ったすべての建物にアンテナのプログラムを一つ一つ挿入していく」作業が発生し、膨大な作業量になってしまう。
一方でオブジェクト指向なら「建物」の定義に「アンテナ」を追加すれば、たった一つのアクションですべての「建物」を修正できる。
プログラムの中に横串を入れるように、一気に修正できるのがオブジェクト指向の特徴である。
■プロセスしだいでプログラミングを高速化や軽量化できる
オブジェクト指向のプログラミングは、電子部品などの回路設計にも似ている。
「パーツとパーツをつなげて全体の機能を生み出していく」回路設計と同様に「全体プログラムをどのようにグルーピングして切り分けていくか」、つまり構造を作っていくのがプログラマーの重要な役割になる。
この考え方をすると、計算を大幅に高速化でき、メモリの軽量化も可能になる。
事実、「普通の人なら100行かかるプログラムを5行で書いてしまう」天才プログラマーも世の中に存在しているという。
こんなことが可能になるのはオブジェクト指向のおかげと言える。
###おわりに
オブジェクト指向について、複数の記事を拝見しましたが、今回参考にさせていただいた記事が自分にとってはすんなりと理解できた感じがします。そして、プログラミング 初心者には、とてもわかりやすい記事だったと思いますが如何だったでしょうか。
100%の理解はできていないですが、これから経験をつんでもっと理解を深めていきたいと思いますので、宜しくお願いいたします!!