• 締切済み

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

オブジェクト指向はどう利用するのですか? 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

  • オブジェクト指向Perlの勉強の仕方について

    今までPerlで掲示板などを自作した事があるのですが、オブジェクト指向をまったく取り入れていません。 オブジェクト指向でないPerlプログラミングについてはおおよそ理解しているつもりなのですが、 オブジェクト指向Perlについては全く理解できていません。 書籍を探しても、Perlについての書籍は大抵が初心者向けのものか、私にとっては難解なもの(オライリーなど)ばかりで、ちょうどいい程度の書籍が見当たらないのですが、 何かオススメの書籍がありましたらご紹介ください。 ---参考:私が理解している範囲--- 1.Perlプログラミングの基礎 変数、配列、ハッシュなどのデータ型 ループやサブルーチン、ライブラリなどの構造 2.オブジェクト指向について MacromediaFlashのActionScriptがある程度 理解できていますので、 「オブジェクト指向とは何か」 は多少理解しているつもりでいます。 (錯覚かもしれませんが) 3.目的 PerlMagickなどのパッケージを利用したいのだが、 利用方法がわからないため ------------------ 以上、身勝手な質問で恐縮ですが、 よろしくお願いします。

    • ベストアンサー
    • Perl
  • オブジェクト指向の本当の便利な点。

    オブジェクト指向の特徴は、ある程度分かりました。 が、個人で小さなソフトを作り、できるだけ自分でプログラムを作りたいため、オブジェクト指向の利点が今ひとつ分かりません。 PHPでは、構造化でできるだけグローバル変数を減らし、関数内でも関数名+変数名という変数名にしていたので、変数の名前が重複すると言ったこともなかったし。 関数名+でない場合も、関数内では不必要な変数は値を解放していたし。 過去の資産も関数を再利用する事もよくありましたし、継承のような事もしていました。 オブジェクト指向の便利さは分かるのですが、どうも実感できないというか、その便利さを持て余しているというか。 構造化プログラミングでも、さほど問題ないし。 delphiなので、JAVAのようにオブジェクト指向(クラス)が必須という訳でもないし。 逆にクラスを作ってしまうと、メモリーから解放しないといけないので、それが少し怖いです。 で、オブジェクト指向の利点をあげるとしたら何ですか? 可能なら、上位から3つくらいを詳しく書いてください。 ソフトは大規模か小規模か、制作者は大勢か少数・個人か、それは構造化プログラミングでは無理な事なのか? オブジェクト指向の利点や特徴は、分かるのですがピンとこないというか、実感できないというか・・・。

  • オブジェクト指向、理解しやすい?

     最近、Javaの解説書や解説サイトを見ていて、しばしば、「Javaは完全なオブジェクト指向だから理解しやすい」といった記述を見かけます。(「プログラムが見やすくなる」とかではなく)  Javaに限った話ではないのですが、個人的に、オブジェクト指向の概念は、プログラミング初心者の最大の関門ではないかと勝手に思っています。僕はPHPから入ったのですが、ある程度基本事項をマスターした後も、オブジェクト指向だけは長い間苦手としてきました。(最近やっと慣れてきたところです。)  そこで伺いたいのですが、最初にやったプログラミング言語がオブジェクト指向だったという方、オブジェクト指向の概念は、 1.わかりやすかった 2.そこでつまずいた 3.特に意識せずに通り過ぎた 4.その他 いずれでしょうか? ※最初にJavaについて書きましたが、これはただの例なので、オブジェクト指向言語全般についての質問であるととらえてください。

  • perlのマクロ演算子?について

    AAA変数にBBB配列名を代入し,AAA変数に配列を入れてBBB配列を使いたいのですが....どのようにするのでしょうか? 例 $count = 1 $AAA = "@BBB_no".$count; ※$AAA = ("ア","イ","ウ","エ"); ↑ここの※の部分に何か加えるのでしょうか?

  • オブジェクト指向で書いた時のフォーム値受取り

    オブジェクト指向で記述したときの、フォームの値の受取の記述方法 がわかりません。 例えば下記のようなフォームがあったとすると ---------------------- <form name="test"> <input type="text" name="name"> <input type="button" value="送信" onClick="testAlert()"> </form> ---------------------- 手続き型では ============================= function testAlert(){  var name = document.test.name.value;  alert(name); } ============================= こんな感じで値を受取りアラート出力できますが、 オブジェクト指向で記述した場合はどうなりますか? ============================= var aaa = function(name){  this.name = name; }; aaa.prototype.test = function(){  return alert(name); }; ============================= こういうような感じだとは思うのですが、ここから先が分かりません。 よろしくお願いします。

  • オブジェクト指向について

    趣味でプログラミングをしているのですが オブジェクト指向の概念がうまく理解できていないので 教えていただけませんでしょうか? 解説本などを読むと、オブジェクト指向のクラスを動物クラスを継承して犬クラスや猫クラスなどと解説してあるのですが。 どうも、僕がプログラム設計するとしっぽクラスや泣き声クラスなどといった違った動物の類似機能をまとめてのクラスをつくり各メソッドとしてしまいまっています。 動物クラスや乗り物クラスを組み合わせてプログラムを設計する事ができません。 本格的なプログラムを組む用途では無いので気にしなくても目的の機能が実装できれば問題無いと知人からは言われ(面倒なので教えたくないのかもしれませんが)そのまま来てしまいました。 最近、気になって来たので。 正しい使い方を身に着けたいと思いチャレンジしていますが、変な癖がついていて犬や猫クラスなどと思いながら設計していると思考が止まってしまいます。 そこで、下記のことを教えていただけませんでしょうか? (1)泣き声クラスなどの同機能を1つのクラスにしてしまう設計しか出来ない(発想できない)のは考え方のどこがわるいのでしょうか? (追記:一部分だけならペンギンクラス猫クラスなどと言う動物クラスの継承的な発想はできるのですが実際のプログラミングの際は動物のようなわかり易い物オブジェクトとして目に見える物体ではない事柄をオブジェクト化にする事が難しく感じるのではないかと思います。) (2)今までの小さい規模での開発なら、クラスのつくり方がおかしくても不具合は無かったのですが、どのような時に困る事があるのでしょうか?(解説などでも再利用性などと、さらっと解説されていますがイマイチぴんときません) (3)正しくオブジェクト指向がマスター出来ている方にとって、どのクラスにどのメソッド実装するか悩む事などはあるのでしょうか? また、設計で一番悩むのはどのあたりですか? (4)UMLのマスターは必須でしょうか?(現在は、なんとなくUMLぽい感じでメモ書きをつくり、えせオブジェクト指向でプログラムを組んでいます。) (5)その他アドバイスがあればお願いします。 ※乱文で問題もハッキリせず質問の整理等がうまくいっていないと思いますが1つの項目だけでも構いませんので、ご教授お願いします。

    • ベストアンサー
    • Java
  • Perl、オブジェクト指向での初期設定ファイルについて。

    Perl、オブジェクト指向での初期設定ファイルについて。 最近、Perlでのオブジェクト指向を勉強中です。 今までのプログラムをオブジェクト指向に書き直そうと思っています。 クラスを作成して呼び出す程度までは理解できたのですが、 今まで、サーバの絶対パスや、データベースの名称などを、 config.pl というファイルを作って、グローバル変数で宣言していました。 例 $local_parh = "/virtual/xxx/bbb/public_html"; $dbname = "testdb"; $dbuser = "username"; でも、オブジェクト指向では、グローバル変数を使わないようにするということで、 このあたりをふつうはどんなふうに作成するのかとおもったのですが、 なかなか検索しても見つかりません。(検索の仕方が悪いのかもしれませんが) 今思いつく方法は、config.pm などを作って -------------------------------------------------- package Config; sub new{ my $class = shift; my $self= { local_path => '/virtual/aaa/bbb/public_html', dbname => 'testdb', dbuser => 'username' }; return bless ($self,$class); } sub get_local_path { my ($self, $name) = @_; return $self->{'local_path'}; } -------------------------------------------------- use Config; $obj=new Config(); $local_path = $obj->get_local_path(); -------------------------------------------------- とするような感じなのですが、なんだかスマートじゃない気がするので 普通ははどんなふうに書くのか教えてもらえますか?

    • ベストアンサー
    • Perl
  • オブジェクト

    VBでimage(オブジェクト名:aaa)をクリックした折  aaa_click() ができます    そこでご質問なのですが、クリックしたオブジェクト名を 取得できるのでしょうか?  例えば xxx_click 関数を作成し、 (1) image(オブジェクト名:aaa)をクリックした折      xxx_click()関数に入って オブジェクト名 aaa と取得      (2) 他のimage(オブジェクト名:bbb)をクリックした折も      xxx_click()関数に入って オブジェクト名 bbb と取得 のような xxx_click 関数を作成することは可能でしょうか? 非常に困っています。教えてください

  • 多次元配列?配列のキー?変数の型?

    PHP勉強中のものです。 予定通りの動作にならんく四苦八苦しています。 どのように修正すれば予定通りになるのか考え方のアドバイスなどお願いします。 処理したいこと 変数$xxxの先頭の文字と最後の文字をsubstr()で取り出し$aaaと$bbbに別けそれぞれ代入しキーとして多次元配列に代入した配列要素を指定してechoで出力したい 試してみたこと $aaa1と$bbb1に直接整数を代入してみたところ、echoで出力された キーになる変数を整数型として変数に代入してみたが希望通りの動作にならなかった。 なにかアドバイス頂けると助かります。 $array = array( "0" =>array("あいうえお","かきくけこ"), "1" =>array("さしすせそ") ); $xxx = "0-1"; $aaa = substr($xxx,0,1); $bbb = substr($xxx,2); $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない $aaa1 = 0; $bbb1 = 1; echo $array[$aaa1][$bbb1]; //出力された $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない

    • ベストアンサー
    • PHP
  • オブジェクト指向コンパイラのインスタンスの構造について

    インタプリタやコンパイラの中身について興味があり勉強しています。といってもまだ簡単な字句解析や構文解析のレベルです。 読んだ本にはオブジェクト指向言語については書かれていませんでした、そこで一つ疑問に思ったこと点について質問させてください。 簡単な言語の場合、使用する変数が宣言されると、その領域がスタックやヒープ空間に確保されるという風に理解しました。 一方オブジェクト指向言語にて、あるクラスのインスタンスを生成した場合を考えます。インスタンスには変数の他に関数やメソッドといった処理手続きが含まれていますよね。その手続きをコンパイルしたコードは何処に置かれているのでしょうか? 手続きのコードもヒープ空間に確保された各インスタンスの領域にコピー(?)されて実行されるのでしょうか。それとも処理手続きの実体は実行プログラムに含まれていて全インスタンスで共通で利用するようになっているのでしょうか。 初心者の素朴な疑問です、ご回答いただければ幸いです。

専門家に質問してみよう