※ 本コンテンツにはプロモーション(PR)が含まれています。また、詳しい最新情報については公式サイトをご確認ください。
でも「オブジェクト指向って何?」と聞かれてスラスラ答えられるくらい理解している人は少ないかもしれません。
「どうやら重要で役に立つらしい」けれども、よくわからない「オブジェクト指向」とは?
ここではその歴史や考え方、オブジェクト指向を使うメリット、知識を生かせる場面まで幅広く紹介します。
オブジェクト指向とは?
「オブジェクト指向」の定義は少し難解です。Wikipediaではこのように説明されていますが、スムーズに理解できる人は多くないでしょう。オブジェクト指向(オブジェクトしこう、英: object-oriented)は、ソフトウェア設計とプログラム記述の際に用いられる考え方である。元々は特定のプログラミング・パラダイムを説明する為に考案された言葉だった。object-oriented programmingのように修飾語として用いられるのが常であり、それ単体で扱われる事はない漠然とした設計構想でもある。「漠然とした設計構想」のオブジェクト指向とは?極力わかりやすく説明してみます。
参考:Wikipedia
プログラミングをわかりやすくしたい!
オブジェクト指向を最初に提唱したのは、1970年代にプログラミング言語SmartTalkを開発した計算機科学者アラン・ケイ氏といわれます。その背景にはコンピュータ技術が急速に発展するなかでプログラミングが複雑化する環境がありました。
目的に合ったプログラムを書くためには莫大な行数のコーディング(プログラムを書くこと)が必要となり、分業も困難となる。そうすると、プログラミングをするのに非常に時間がかかります。
この解決策として彼が打ち出したのはプログラミングを「モノの集まり」としてとらえる発想でした。
オブジェクト=モノとは?
「モノ」を示す英単語として最初に思い出すのはthingでしょう。objectもthingも日本語に訳すと「モノ」ですが、objectの場合は「さわったり見たり動かしたりする」点が強調されます。
オブジェクト指向ではプログラムを「さわったり見たり動かしたりできるる」、モノの集合体と考えていきます。
プログラムのなかのオブジェクト=モノとは?
一例として3Dモデルで一つの都市を構築する場合を考えてみましょう。ドライブゲームなどでよく見る風景です。オブジェクト指向以前の考え方では、建物や道路やその上を走る自動車などを同じ「モノ」として捉えて区別しない方法、つまり
- 四角くて白い物体にいくつかの穴が開いている物体=建物
- 幅のある平らなライン=道
- 箱に4つの可動性の輪がついている=自動車
これに対して、オブジェクト指向ではまず「建物」「道」「自動車」と名前をつけた「モノ」を用意するところから始めます。
そのあとに、「建物」には「四角い」「コンクリートでできている」「なかは部屋で分かれている」特徴がある、と定義していくのです。
オブジェクト指向が生まれる前は都市は「ひとつの連続したプログラム」で、「『自動車』だけは他の人に頼む」などの方法がとりづらい状況にありました。
一方でオブジェクト指向では、「都市」を「建物」「道路」「自動車」などの「オブジェクト化された個々のプログラムの集合」と捉え、一つ一つを切り離して作ることができます。
これが従来の方法とオブジェクト指向の違いです。プログラミングを便利かつ合理的にしていく考え方がオブジェクト指向といえるでしょう。
オブジェクト指向のメリットとは?
オブジェクト指向は特定のプログラミング言語や手法の名前ではありません。プログラミングを行う際の考え方のひとつです。オブジェクト指向にはどんなメリットがあるのでしょうか?
プログラミングの全体像を把握しやすい
「都市」の例に戻ると、従来の方法は「境目のない連続したコンピュータへの命令」としてプログラミングされるのに対し、オブジェクト指向では「建物と道路と自動車でできた場所」と認識できます。プログラム全体の構造が明確に把握でき、実際の都市を設計するようなイメージでプログラムを設計できます。
まずは全体イメージを練り、そのあとに細部を練っていく……という企画の進め方ができます。
分業や共同作業がやりやすい
さらに都市の例で考えてみます。全体のプログラムが連続していて区切りがない場合、複数のプログラマーが共同作業するのは難しくなります。
一方でオブジェクト指向なら「私は全体の構造をつくっていくので、あなたは建物をつくってください」とプログラムを切り分けながら分業作業を行うのがはるかに容易になります。
オブジェクト指向の登場は何百人ものプログラマーが関わる巨大システム実現に貢献したと言われています。
改良や修正がやりやすい
プログラミングの作業は当初計画したとおり一本道の工程で進むケースはほとんどありません。たえず修正や変更を加え、行ったり来たりをくり返しながらゴールに向かう例がほとんどです。
たとえば、完成間近になってからすべての「建物」の屋上に「アンテナ」をつけたいと修正意見が出たとします。
「一つのつながり」のプログラムなら「すでにつくったすべての建物にアンテナのプログラムを一つ一つ挿入していく」作業が発生し、膨大な作業量になってしまいます。
一方でオブジェクト指向なら「建物」の定義に「アンテナ」を追加すれば、たった一つのアクションですべての「建物」を修正できます。
プログラムのなかに横串を入れるように一気に修正できるのがオブジェクト指向の特徴です。
プロセスしだいでプログラミングを高速化や軽量化できる
オブジェクト指向のプログラミングは電子部品などの回路設計にも似ています。「パーツとパーツをつなげて全体の機能を生み出していく」回路設計と同様に「全体プログラムをどのようにグルーピングして切り分けていくか」、つまり構造をつくっていくのがプログラマーの重要な役割になります。
この考え方をすると、計算を大幅に高速化でき、メモリの軽量化も可能になります。
事実、「普通の人なら100行かかるプログラムを5行で書いてしまう」天才プログラマーも世の中には存在しているそう。
こんなことが可能になるのはオブジェクト指向のおかげといえます。
オブジェクト指向の主なプログラミング言語
オブジェクト指向の考え方があらわれて50年近くが経過し、現在ではほとんどすべてのプログラミング言語がオブジェクト指向に対応しています。ここではその代表例を紹介します。
C++
1983年、以前の主流だったC言語にオブジェクト指向的な考え方を付け加えた言語です。もとがC言語なのでオブジェクト指向によらないプログラミングと共存できる特徴があります。
Python
1994年に開発されたPythonはさまざまなタイプのプログラミングに柔軟に対応でき、現在ではJavaをしのぐ人気になっています。Java
1995年開発された言語で、C++を基本に堅牢性とセキュリティを重視したオブジェクト指向の言語です。オブジェクト指向でプログラミングするための機能が多数用意されたハイブリッド言語として現在も第一線で活躍中です。
Ruby
1996年に日本で開発されたオブジェクト指向のプログラミング言語で、Pythonによく似たプログラミングができ、日本人の思考にマッチしていると言われます。JavaScript
1996年に開発されたwebアプリケーションに特化したオブジェクト思考プログラミング言語で、現在では人気No.1になっています。Scratch
マサチューセッツ工科メディアラボが2006年に開発した教育用ビジュアルプログラミング言語です。パーツや機能をカード(ブロック)で示し、これらを並べて機能させます。
Scratch自体がオブジェクト思考のプログラミング言語なのですが、これをマスターしながらオブジェクト思考の概念も理解できる理想的な教材にもなっています。
小学校でのプログラミング教育必修化を前に、家庭で何かさせてみようかな?と考える方もいるでしょう。無料で使えるMITメディアラボ開発の「Scratch(スクラッチ)」はその一歩に最適!どんなことができるのかまとめました。
2024/12/20 12:22
オブジェクト指向を学ぶポイントとは?
オブジェクト指向に関する書籍は数多く出版されていますが、しっかりと身につけるには読書だけでなく、JavaScript、Python、Rubyなどのオブジェクト指向に対応したプログラミング言語を学ぶなかで体得していくのが近道と言われます。Amazon.co.jp: オブジェクト指向でなぜつくるのか 第2版 : 平澤 章: 本
https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B-%E7%AC%AC2%E7%89%88-%E5%B9%B3%E6%BE%A4-%E7%AB%A0/dp/4822284654/ref=as_li_ss_tl?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=19RPQPWBCBU25&dchild=1&keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91&qid=1586840002&sprefix=%E3%81%8A%E3%81%B6%E3%81%98%E3%81%87%E3%81%8F%E3%81%A8%E3%81%97%E3%81%93%E3%81%86,aps,-1&sr=8-1&linkCode=ll1&tag=coeteco-22&linkId=2aee5740de8044a134d0988941db49a8&language=ja_JP >
理解して、使いこなすことができればプログラミングを圧倒的な効率よく行えるオブジェクト指向。学習に取り組んでみる意義は大いにあるのではないでしょうか。
まずは気にせずに学習を進めよう
オブジェクト指向の概要を説明してきましたが、とは言えよく分からないという方も多いのではないでしょうか。オブジェクト指向は他のプログラミング手法との差別化を目指して考えられたものです。そのため、プログラミングのことが何も分からないうちに説明を受けても難しいのは当然です。
ですから、まずはオブジェクト指向のことを考えずに特定のプログラミング言語の勉強を進めていくのがおすすめです。多くのプログラミング言語では、自然とオブジェクト指向の考え方でプログラミングを進めていきます。
そしてある程度プログラミング言語についての知識がついてきた頃に、またオブジェクト指向のことを学んでみましょう。すると、自分が使っている言語でどのようにオブジェクト指向が使われているのか、他の手法と比べてどのような利点があるのか、といったことが分かってくるでしょう。
オブジェクト指向が身につくプログラミングスクール
SAMURAI ENGINEER
SAMURAI ENGINEERの特徴はオリジナルサービス開発を行う点です。自分のアイデアを元にWebサービスを作る中で、自然とオブジェクト指向が身についていくでしょう。スクールのカリキュラムを修了するとオリジナルサービスの開発実績ができるため、エンジニアとしての能力を示すのに有効なポートフォリオ作りにも役立ちます。
また履歴書や職務経歴書などの書類作成や、自己PR対策のサポートも用意しています。一人ひとりに合う求人の紹介も行っており、転職サポートも万全です。
DMM WEBCAMPエンジニア転職
DMM WEBCAMPエンジニア転職は実務に近いカリキュラムを導入しているのが特徴です。現場ではひとりで開発をすることはほぼありません。エンジニアやデザイナー・ディレクターなど複数人がチームで協力し合いながら開発を進めます。現場と同じようにチームでの開発を経験することで、オブジェクト指向の育成につながるスクールです。また時間割が設けられていないため自分のペースで学習でき、仕事をしながらでも続けやすいでしょう。
転職はもちろん副業のサポートもあるため、スキルを活かし理想の働き方の実現を目指せます。
TECH CAMP
開発の過程をひと通り経験できるのが特徴のTECH CAMPは、現場で求められる知識を幅広く学べるスクールです。企画からリリースまでに必要なすべての工程を実際にやることで、オブジェクト指向の理解につながります。あわせてグループワークによる開発も実施。他の受講者とチームで開発することで、現場に近い環境も経験できます。マンツーマンのサポートもあり、未経験からしっかり技術を身につけていける体制です。
またカリキュラム修了後の進路として、転職はもちろんフリーランスとしての独立もサポートしています。
まとめ|オブジェクト指向は経験しながらつかみ取るのが最短距離!
オブジェクト指向は概念(考え方)であるため、ズバリと一言で説明するのは難しいのが実情です。インターネット上でも「10年かかってやっとわかった」「プログラミングの入門書を読んで、むしろ混乱してしまった」などの意見が多く見つかります。
本来は「プログラミングを目で見るようにわかりやすくする」ためのオブジェクト指向が「よくわからないので苦闘する人が多い」といったパラドックスにつながっているのはなんだか皮肉なことですね。
オブジェクト指向を理解するには、とりあえずPythonやRubyなど「わかりやすい」と言われるオブジェクト指向のプログラミング言語に取り組んでみて、経験のなかで感じとるのが最短距離かもしれません。
プログラミングは実践が一番!気長に取り組んでみてはいかがでしょうか。