• 締切済み

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

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

みんなの回答

回答No.22

> 「Brave.HP」は「Brave の HP」、「Magician.HP」は「Magician の HP」と言うように「プロパティー(フィールド変数)、メソッド」をオブジェクトと一体化して保持することにより、どのオブジェクトの「プロパティー(フィールド変数)、メソッド」なのか一目瞭然となるので、ヒューマン・エラーを少し減らせると言うメリットがあります。 > > メソッドもオブジェクトと一体化していると言う点に注意して下さい。 > 例えば「Brave.Move(10,20)」は「Brave に対する Move(10,20)」である事が一目瞭然です。 「Brave.HP」は「Brave(勇者) の HP」、「Magician.HP」は「Magician(マジッシャン) の HP」と言うように「プロパティー(フィールド変数)、メソッド」を「オブジェクト(この場合 RPG のキャラ)」と一体化して保持することにより、どの「オブジェクト(RPG のキャラ)」の「プロパティー(フィールド変数)、メソッド」なのか一目瞭然となるので、ヒューマン・エラーを少し減らせると言うメリットがあります。 メソッドも「オブジェクト(この場合 RPG のキャラ)」と一体化していると言う点に注意して下さい。 例えば「Brave.Move(10,20)」は「Brave(勇者) に対する Move(10,20)」である事が一目瞭然です。

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.21

プログラムは分数に近いと思います 4/1を2/1で割る、1/4を1/2で割る 頭ごなしに公式に当てはめると小難しくなる 本来は割り算じゃなく、分子へ分母の入り算 イメージできたら、貴方がオブジェクトかも こんな感じでオブジェクト指向はややこしいけど 面倒な事はオブジェクトに任せれば幸せになれる

回答No.20

> 全ての配列で同じ.join()などのメソッドが使えるのもそうです。 これは同じ機能は同じメソッド名にせよ、と言うオブジェクト志向プログラミングの基本の事を言ってるでしょう。 線を描画するコマンドは「drawLine(~)」だとします、四角形を描画するコマンドは「drawRect(~)」だとします、それより抽象度の高い図形オブジェクトを自作する場合には、描画するメソッドは「draw(~)」に統一せよ、と言う事になる訳です。 決して そこで「drawLine(~)、drawRect(~)」などと言うメソッド名は使ってはいけません。

回答No.19

> 難しいことを考えなくても、あなたがドットを使って「hoge.fuga」の形で記述した時 > オブジェクト指向を活用していることになります。 > 自分で定義する段階ももっと基礎を学んでいけば自ずと訪れます。 たった それだけの事でオブジェクト志向プログラミングが出来たら苦労はしません。 知り合いが「クラス、メソッド、プロパティー」などを使ってグラフィック系のプログラムを作ってソースを見せてもらったら、全然オブジェクト志向プログラミングになっていませんでした。 その知り合いに それとは全く別の僕が作ったグラフィック系のオブジェクト志向プログラムを見せた所、全く理解できない様子で、(全く理解できないとバレるのがプライドが許さないのか)全く質問してきませんでした(結局、オブジェクト志向プログラミングは あきらめてしまったみたいです)。 誰でも あなたみたいに「難しいことを考えなくても」出来るようになる訳ではありません。

回答No.18

> クラス。 > class RPGCharacter{ > int X, Y; // 座標 > int HP, MP; > String Job; // 職業 > RPGCharacter(String J){ // コンストラクター > Job = J; > } > void Move(int x, int y){ // メソッド > X = x; > Y = y; > } > } > > オブジェクト(インスタンス)の作成。 > Brave = new RPGCharacter("勇者"); > Magician = new RPGCharacter("魔法使い"); > Monk = new RPGCharacter("僧侶"); > Healer = new RPGCharacter("ヒーラー"); クラス(設計図)を作っておけばオブジェクト(インスタンス)を いくらでも量産できます。 例えば Brave001 = new RPGCharacter("勇者"); Brave002 = new RPGCharacter("勇者"); Brave003 = new RPGCharacter("勇者"); のように"勇者"を2体でも3体でも いくらでも量産できます。

回答No.17

RPG のキャラで具体的な例で説明した方が もっとわかりやすいかもしれません(構文は java です)。 クラス。 class RPGCharacter{ int X, Y; // 座標 int HP, MP; String Job; // 職業 RPGCharacter(String J){ // コンストラクター Job = J; } void Move(int x, int y){ // メソッド X = x; Y = y; } } オブジェクト(インスタンス)の作成。 Brave = new RPGCharacter("勇者"); Magician = new RPGCharacter("魔法使い"); Monk = new RPGCharacter("僧侶"); Healer = new RPGCharacter("ヒーラー"); 例えば「Brave.HP」は「Brave の HP」、「Magician.HP」は「Magician の HP」と言うように「プロパティー(フィールド変数)、メソッド」をオブジェクトと一体化して保持することにより、どのオブジェクトの「プロパティー(フィールド変数)、メソッド」なのか一目瞭然となるので、ヒューマン・エラーを少し減らせると言うメリットがあります。 メソッドもオブジェクトと一体化していると言う点に注意して下さい。 例えば「Brave.Move(10,20)」は「Brave に対する Move(10,20)」である事が一目瞭然です。

回答No.16

> (ASIMO君には いくつもの「プロパティー(フィールド変数)、メソッド」がある事でしょう) ASIMO君クラスが有ったとして、ASIMO君クラスから複数のASIMO君オブジェクトを作った場合を考えて見て下さい。 > ASIMO_001 = new ASIMO(); > ASIMO_002 = new ASIMO(); > ASIMO_003 = new ASIMO(); > > 例えば、「ASIMO_001、ASIMO_002、ASIMO_003」は全部 同じ向きで同じ位置に居たとして、「ASIMO_001.Move(10,20)」で ASIMO_001 オブジェクトを移動させたとします、「ASIMO_002.Move(30,50)」で ASIMO_002 オブジェクトを移動させたとします。 > ASIMO_003 は移動してません、当然「ASIMO_001、ASIMO_002、ASIMO_003」は違う位置に居ます。 ASIMO_001 オブジェクトの座標・プロパティー(フィールド変数)は「x=10、y=20」になっています。 ASIMO_002 オブジェクトの座標・プロパティー(フィールド変数)は「x=30、y=50」になっています。 ASIMO_003 オブジェクトの座標・プロパティー(フィールド変数)は「x=0、y=0」になっています。 このように「プロパティー(フィールド変数)、メソッド」をオブジェクトと一体化して保持することにより、どのオブジェクトの「プロパティー(フィールド変数)、メソッド」なのか一目瞭然となるので、ヒューマン・エラーを少し減らせると言うメリットがあります。

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.15

難しいことを考えなくても、あなたがドットを使って「hoge.fuga」の形で記述した時 オブジェクト指向を活用していることになります。 全ての配列で同じ.join()などのメソッドが使えるのもそうです。 自分で定義する段階ももっと基礎を学んでいけば自ずと訪れます。

  • Degi-Cat
  • ベストアンサー率32% (16/49)
回答No.14

オブジェクト指向プログラミングはエラーが発生しにくいことと効率的にプログラミングすることを目的とした設計思想です。 機能的強度と情報的強度を合わせ持ったモジュールを構築できます。 大ざっぱに書くと、機能とデータを分類してまとめる入れ物です。 ここを理解しないと、形はオブジェクト指向風だけど中身がさっぱり、という結果になります。

回答No.13

> オブジェクトに代入しなくても、 > num_aaa=123; > num_bbb=456; > や、 > num[1] =123 ; > num[2]=456; > と配列を使うのもいいと思います。 RPGの説明でも示唆していますが、「プロパティー(フィールド変数)、メソッド」をキャラ(オブジェクト)と一体化して保持できると言うメリットがあります。 ASIMO君を例に説明します(ASIMO君に関しては次のリンクを参照の事)。 あの、ホンダ「ASIMO」が更なる進化を遂げた! http://autoc-one.jp/honda/special-1510890/ (ASIMO君には いくつもの「プロパティー(フィールド変数)、メソッド」がある事でしょう) ASIMO君クラスが有ったとして、ASIMO君クラスから複数のASIMO君オブジェクトを作った場合を考えて見て下さい。 ASIMO_001 = new ASIMO(); ASIMO_002 = new ASIMO(); ASIMO_003 = new ASIMO(); 例えば、「ASIMO_001、ASIMO_002、ASIMO_003」は全部 同じ向きで同じ位置に居たとして、「ASIMO_001.Move(10,20)」で ASIMO_001 オブジェクトを移動させたとします、「ASIMO_002.Move(30,50)」で ASIMO_002 オブジェクトを移動させたとします。 ASIMO_003 は移動してません、当然「ASIMO_001、ASIMO_002、ASIMO_003」は違う位置に居ます。 オブジェクトと「プロパティー(フィールド変数)、メソッド」を一体化して保持しない場合と比較して、「プロパティー(フィールド変数)、メソッド」をオブジェクトと一体化して保持することにより、ヒューマン・エラーを少し減らせると言うメリットがあります。 後、メソッドのオーバー・ライドも可能です(これもオブジェクト指向プログラミングの根幹の1つですね)。

関連するQ&A