• ベストアンサー

(初歩)インスタンス化の負担とクラス作成

お世話になっております。 毎回初歩的な質問で申し訳ありません。 プログラムを組んでいて初級者ながら毎回思うのですが、 説明を見ても分からなかったのですが、クラスをインスタンス化した時、 その部分では全く使わない変数領域やメソッドの領域を確保したりチェックしたりして、かなり非効率的なのではないかと思いました。 実際負担とかは、大きいものなのでしょうか? クラス内のメソッドを、1クラスで1メソッドにしたほうがよいのでは、 などと思ってしまいます。自分のプログラムではですが・・・。 小さなプログラムの中で、クラスに分けるようにしているのですが、 汎用性があるクラスを作るというのが難しいです。 何かアドバイスなど頂けたらありがたいです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.4

あるクラスにメソッドが多数あっても少なくても、VM内でインスタンスを生成する際の手間は変わりません(インスタンス毎にメソッドテーブルを作るわけではないから)。クラス内のstaticでないフィールドの数が多い場合は少しはインスタンス生成が遅くなる可能性がありますが、ほぼ無視できる程度でしょう。 クラス内のメソッドやフィールドの数を減らすために無理にクラスを細切れにしたほうが性能という点では不利になる場合も考えられます。 インスタンス生成時の速度を気にする前に、デザインパターンなどを学んで(再)利用しやすいクラスを作ることをまずは心がけてください。

qqtaka
質問者

補足

アドバイスありがとうございます。 そうなのですか、 staticは、どこからも呼び出せるので危険というイメージがあり 使うのが怖かったりします。 インスタンス生成が増えてしまったら、それこそ意味ないですよね。 やはり、再利用をかんがえるのが大切なのですね。 速度も無視できる程度という事で安心しました。 ありがとうございました。

その他の回答 (3)

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.3

プログラミング言語は、効率・実行速度よりも再利用性・保守性・可読性を 優先することによって、進化してきているという歴史があります。 ですから、当然、オブジェクト指向言語は、最適化されたマシン語よりも 効率・実行速度は、明らかに劣ります。 効率が気になるような計算を実行しなければいけない場合は、オブジェクト指向言語を、 その開発言語に選択している時点で正しくないでしょう。 逆に言うと、  >クラス内のメソッドを、1クラスで1メソッドにしたほうがよいのでは、  >などと思ってしまいます。自分のプログラムではですが・・・。 このような考え方は、オブジェクト指向設計の観点から、明らかに間違っています。 オブジェクト指向言語でプログラミングを書く場合に考えることは、  ”何を実行するためのクラスか誰にでも簡単に理解できるか”  ”自分以外の人も簡単にこのクラスを(再)利用できるか” を、まず第一義に想定することです。

qqtaka
質問者

補足

アドバイスありがとうございます。 再利用できるのは便利ですね。 自分も、皆さんのプログラムをお手本にして 再利用できるクラスを作りたいと思います。 ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

たぶん最初から「汎用性のあるクラスを作る」というのは難しいと思います. 業務などの「大きなプログラム」なら設計を頑張れば出てくるでしょうが, そうでなければ無駄な労力となる可能性もあります. それよりも「後で修正する」ことを前提にプログラムを書いた方がいいような気がします. 基本的に「オブジェクト」ってのは「一体となって動くデータとそのデータに対する処理の集まり」なので, 「1クラスで1メソッドにする」というのはクラスの切り分けができていないのだと思います. この辺については #1 もいわれるようにモジュール分割などを抑えておいたほうがよいでしょう. まあ確かに「非効率的」と言えばそうなんだけど, 「プログラムの見やすさ」という視点は非常に大事です. つ~か, 効率を追求するなら Java なんか使わなければいいのに.

qqtaka
質問者

補足

アドバイスありがとうございます。 簡単になるよう意識したいです。 会社の研修で教わっているものでして。。 それと、使っていると好きになってしまいました。。 とにかく、いろいろと楽しんで出来たらとおもいます。 ありがとうございました。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

プログラムのモジュール分割の基礎から勉強されたら 如何でしょうか? 多分、物によってはクラスは無意味になったりすると 思います。 クラス化によって多くの機能を入手しましたが、その 機能を使うことを考えると基本を忘れがちです。 モジュール分割を勉強するとモジュールの性質を学びます。 そして行き着くところは情報的強度を持ったモジュール なのですが、クラスの概念(オブジェクト指向)が無い時点 で欠陥に行き詰っていました。 オブジェクト指向がこれらの欠陥を解消し今日に至る訳です。

qqtaka
質問者

補足

具体的なアドバイスありがとうございます。 モジュールの性質ですか。 ネットで勉強したいと思います。 おかげさまで、少しですが理解できました。 あと、機能より基本を大切にしたいと思います。 ありがとうございます。

関連するQ&A