• 締切済み

オブジェクト指向はどう利用するのですか?

オブジェクト指向はどう利用するのですか? JavaScript初心者です。 初心者から中級者になるには、このオブジェクト指向をマスターする必要があるのですが、(個人の見解です...)オブジェクト指向がさっぱりです。 まず、オブジェクトは数を代入するもので、 オブジェクト名.変数名 = 変数値; alert(↑) で、変数値が表示されることはわかりました。 しかし、利用方法が分かりません。 オブジェクトに代入しなくても、 num_aaa=123; num_bbb=456; や、 num[1] =123 ; num[2]=456; と配列を使うのもいいと思います。 オブジェクトでは、何ができるのでしょうか??

みんなの回答

回答No.12

オブジェクト指向言語を使ったからと言ってオブジェクト指向プログラミングが作成できる訳ではありません。 例えば Java でクラスを作り、クラスに「プロパティー(フィールド変数)、メソッド」を作ったからと言ってオブジェクト指向プログラミングが作成できる訳ではありません。 昔はプロのプログラマーでも(「クラス、プロパティー(フィールド変数)、メソッド」を使っているけど)全然オブジェクト指向プログラミングになっていないなどと言う笑い話のような実話もあったようです。

回答No.11

(java は変数の型が厳格ですが)JavaScript は変数に なんでも代入できて一見 便利そうですが、変数に なんでも代入できると言うのは(大きなプログラムになると)ヒューマン・エラーの温床になります。 言語固有の言語仕様は さて置き、オブジェクトとは何者か、メソッドとは何なのか、オブジェクト志向プログラミングの基本の基本を説明します。 自動車を例にすると、自動車がオブジェクトです。 「アクセル、ブレーキ」などがメソッドに対応します。 ユーザーがアクセルを踏むと自動車に対して「スピードを出せ」と言う"命令"になります。 ユーザーがブレーキを踏むと自動車に対して「減速しろ、又は停止しろ」と言う"命令"になります。 つまり、メソッドはオブジェクトに対する"命令"となります。 下記 画像は自動車部品のモジュール化(自動車部品の共通化)により、労力(開発コスト)の削減を実現していますが、これがオブジェクトの継承に対応します(この場合 多重継承になってしまってますが…)。 現存する利用可能なクラスを継承すれば労力を削減でき、その分 ヒューマン・エラーも多少 削減できます。

回答No.10

下記サイトは基本が分かりやすそうな雰囲気です。 Google流 JavaScript におけるクラス定義の実現方法 http://www.yunabe.jp/docs/javascript_class_in_google.html

回答No.9

> JavaScript初心者です。 > 初心者から中級者になるには、このオブジェクト指向をマスターする必要があるのですが、(個人の見解です...)オブジェクト指向がさっぱりです。 ああ、Java ではなくて、JavaScript でしたか。 個人的には JavaScript にオブジェクト志向は全く必要ないと思いますが…。 Java のオブジェクト指向なら分かりますが、JavaScript のオブジェクト指向は さっぱり分かりません(分かろうと言う努力をしてない訳ですけど…) 下記には「正しい継承」と「やっては いけない継承」が書かれているようです。 [JavaScript] そんな継承はイヤだ - クラス定義 - オブジェクト作成 http://qiita.com/LightSpeedC/items/d307d809ecf2710bd957

noname#221368
noname#221368
回答No.8

 ごちゃごちゃ書くのはやめました(^^;)。「オブジェクト指向狂詩曲(ラプソディー)」という本が面白いかも知れません。   http://www.amazon.co.jp/TURBO-C-BORLAND-%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E7%8B%82%E8%A9%A9%E6%9B%B2/dp/4874084842  オブジェクト指向という「設計思想」について、読みようによっては非常に具体的に書かれた本です。日本でのオブジェクト指向揺籃期のもので、著者「吉田弘一郎」は密かに、1980~1990年代の日本のオブジェクト指向設計のオピニオンリ-ダーでした。  今ではあんまり読まれない気はしますが、けっこう有名な本でもあります。   http://ci.nii.ac.jp/ncid/BN07547805  最初はマウスをカーソルキーで動かそうとしていた当時の自分は、Windowsにカルチャーショックを受けていた、DOS上Fortranの純粋培養の手続き型プログラマーでした。  イベント・ドリブン(←今では死語),オブジェクト指向,GUIなどのカルチャーショックの破壊力は甚大で、「もう撤退かな?」と思いだした頃に出会った本が上記です。読んだら、なんとなぁ~く生き残れそうな気がしてきて今にいたっています(^^;)。大げさに言えば、自分のプログラマーとしての世界観を、Windowsの世界用に作りなおしてくれた本です。  吉田さんは「JAVA」の本も書いています。この人は「設計思想」を語るのが好きです。きっと普通とは一味違った「世界観」を教えてくれると思います。そしてこの人は「語り」ます(^^)。  ・・・という訳で、「ごちゃごちゃ書いちゃいました(^^;)」。

回答No.7

> ★クラス(設計図)からインスタンス(実体)を量産できる > 分かりやすく例えるとクラス(設計図)からのクローニング(複製)による再利用(この場合 、オブジェクトからオブジェクトをクローニングすると言う事ではありません。) ↑これは生物的な意味でのクローニングの例えですので、下記のように訂正した方が分かりやすいですね。 ★クラス(設計図)からインスタンス(実体)を量産できる。 分かりやすく生物で例えるとDNAを再利用してクローン(複製)を量産できる(この場合 、オブジェクトからオブジェクトをクローニングすると言う意味ではありません。)

回答No.6

> 単純に言うとオブジェクト志向プログラミングの肝は"再利用"です。 > > ★クラス(設計図)からインスタンス(実体)を量産できる > 分かりやすく例えるとクラス(設計図)からのクローニング(複製)による再利用(この場合 、オブジェクトからオブジェクトをクローニングすると言う事ではありません。) > > ★クラスを継承し機能を拡張できる。 > この場合、当然ゼロから作るのではなく継承元のクラスを活用する事ができるので、その分 労力の削減でき、手間が少なくなるので その分 プログラミング上のヒューマン・エラーも多少 減らせます。 > > ★ラップ(分かりやすく例えるとプラグイン)によるオブジェクトの再利用。 > 様々なオブジェクトを乗せ変えて活用させる事ができます(実際の PC で分かりやすく例えるなら高性能グラフィック・ボードを挿す、高音質サウンド・ボードを挿す、高速LANボードを挿す、みたいな感じで機能を拡張できる)。 > > ★オブジェクト志向プログラミングのデメリットは肥大化です。 > つまり、上記のように再利用できないモノはオブジェクト化のメリットがなく、デメリットだけだと言って良い程です。 (蛇足ですが)コンパイラーによる型チェックでヒューマン・エラーを減らす、と言うオブジェクト志向プログラミングの理念みたいなモノがあった訳ですが、以前は その理念に反し自作のノード・リストは Object 型にして何でもブチ込めるようにしていた訳ですが、Java の場合 「Java 5(JDK1.5)」から"総称型"(ジェネリクス)がサーポートされ、今まで お題目だったコンパイラーによるクラス型のチェックが実用的なレベルになったと言えるでしょう(実行時エラーが出てデバックするよりは非常に簡単)。

回答No.5

> まず、オブジェクトは数を代入するもので、 > オブジェクト名.変数名 = 変数値; > alert(↑) > で、変数値が表示されることはわかりました。 プロパティー(フィールド変数)だけのオブジェクトも有って良いのですが、オブジェクトは「プロパティー(フィールド変数)、メソッド(関数)、他のオブジェクト」を内包する事ができます。 RPG で具体的な例で説明すると、 (オブジェクト)キャラA:『(プロパティー)「<職業>:勇者、<HP>:100、<MP>:50、<経験値>:200」、(メソッド)「<コマンド>:{打撃、魔法、治癒}」』 (オブジェクト)キャラB:『(プロパティー)「<職業>:魔法使い、<HP>:60、<MP>:100、<経験値>:210」、(メソッド)「<コマンド>:{打撃、魔法、治癒}」』 (オブジェクト)キャラC:『(プロパティー)「<職業>:僧侶、<HP>:50、<MP>:60、<経験値>:220」、(メソッド)「<コマンド>:{打撃、魔法、治癒}」』 などのような感じで、(オブジェクトなら)キャラごとに (この場合はプロパティー、メソッドを)キャラと一体化して保持できます(正確に言うと「キャラA、キャラB、キャラC」はインスタンス(実体)です)。 オブジェクト化しない場合は「プロパティー、メソッド」などが一体化しておらず、プログラミング上のヒューマン・エラーが(オブジェクト化した場合に比べ、相対的に多少)発生しやすくなってしまいます。 単純に言うとオブジェクト志向プログラミングの肝は"再利用"です。 ★クラス(設計図)からインスタンス(実体)を量産できる 分かりやすく例えるとクラス(設計図)からのクローニング(複製)による再利用(この場合 、オブジェクトからオブジェクトをクローニングすると言う事ではありません。) ★クラスを継承し機能を拡張できる。 この場合、当然ゼロから作るのではなく継承元のクラスを活用する事ができるので、その分 労力の削減でき、手間が少なくなるので その分 プログラミング上のヒューマン・エラーも多少 減らせます。 ★ラップ(分かりやすく例えるとプラグイン)によるオブジェクトの再利用。 様々なオブジェクトを乗せ変えて活用させる事ができます(実際の PC で分かりやすく例えるなら高性能グラフィック・ボードを挿す、高音質サウンド・ボードを挿す、高速LANボードを挿す、みたいな感じで機能を拡張できる)。 ★オブジェクト志向プログラミングのデメリットは肥大化です。 つまり、上記のように再利用できないモノはオブジェクト化のメリットがなく、デメリットだけだと言って良い程です。 (クラスの継承は機能の拡張なので、実際の意味合いは違いますが、分かりやすく例えるなら)クラスの継承は系統樹のようなイメージです。 添付画像の名前が付いてる部分がクラスに対応します。

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.4

>オブジェクトに代入しなくても、 >… >と配列を使うのもいいと思います。 そうです。誤解を恐れずに言えば問題ありません。 >オブジェクトでは、何ができるのでしょうか?? 一言でいうとグルーピングが容易にできるようになります。簡単なプログラムでは少ない変数ですみます。この場合にはオブジェクト指向は不要です。 しかし、近年は処理がどんどん複雑になり、また扱うデータ量も膨大になりました。万単位・億単位の処理も珍しくありません。すると num_aaa=123; num[1] =123 ; こういう書き方だと管理がつらくなります。それを少しでも容易にするための工夫です。 ですので、小規模で取り扱う変数の少ないプログラムだったら、オブジェクト指向で記述する必要など全くありません。頑張って書くだけ無駄です。 規模に応じてどのように書くべきか判断できる能力が必要です。

  • catpow
  • ベストアンサー率24% (620/2527)
回答No.3

>>オブジェクトでは、何ができるのでしょうか?? 以下は私の個人的な見解ですので、広く認められたものではないことを、あらかじめ断っておきます。 ソフトウエアの開発は手間も時間がかかります。 それで、仕事には主として汎用機が使われていたころのことですが、ソフトウエア部品のライブラリ整備を誰もがやろうとしました。 しかし、プログラムは、プロセス+データで構成されています。 そのため、プロセス部分とデータ部分を別のプログラムでうまく再利用するのは、割と面倒なことでした。 それで、ライブラリを整備しても、使われないことが多かったと記憶しています。 (特に、COBOLでは再利用は、やりにくかったです。 開発言語をPL/Iに変更すると、いくらか改善されたのですけど、COBOLに比較して、メモリ大量消費し、さらに実行速度も遅くなりました。大量メモリといっても、当時、私が使っていた汎用機では、最大パーティションでも、800KBでした。今から思うとかわいいものですね。) そこでプログラム(メソッド)とデータ(データ・プロパティ)をパッケージングしてしまえば、パーツの再利用が容易になるのでは?と考えた方がいたのだと思います。 (それは「C++の設計と進化」の著者のBjarne Stroustrupさんかな?) そしてC++は、STL(Standard Template Library)を整備しました。 このすばらしいSTLをうまく使いこなせば、1週間かかるプログラム作業が、バグ無しで、1日で完成することも夢ではありませんでした。 (ただし、C++を理解して、使いこなすのは、多くの人にとって大きな壁になっている気もします) 例えば、家を建築するとして、一軒ごと床材とか壁板を作っていたら工期がとても長くなりますよね?また、キッチンやお風呂、トイレなどをゼロから作っていたとしても、同様です。 ですから、多くの方は、床材、壁板は素材カタログから選びますし、キッチンはシステムキッチンのカタログから、お風呂はユニットバスのカタログから選びます。 つまりは、レゴブロックのようにソフト開発をすることで、開発期間・工数を大きく減らすことが可能になるのです。 そして、マイクロソフトのC#は、オブジェクト指向に加えて、ラムダ式やメタ・プログラミングなどの手法を駆使した膨大なdotNet Frameworkを整備しました。 これにより、以前であれば1ヶ月かかるようなソフト開発が1日で終わってしまうこともありうるようになったのです。 JavaScriptも方向性は同じだと思います。 頭のよい天才的なプログラマさんたちが整備してくれた(平凡なプログラマではとうてい作れない高度な)ライブラリー、フレームワークを再利用し、オブジェクト指向を理解して活用することで、欲しいソフトウエアを短期間でバグを最小限にして作り上げることが可能になるのです。

関連するQ&A