• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オブジェクト指向全般、及び、クラス設計について。)

オブジェクト指向全般、クラス設計についての質問です

axsiesの回答

  • ベストアンサー
  • axsies
  • ベストアンサー率64% (38/59)
回答No.3

私も質問者さんと同じように、原則だの設計手法だのに振り回されてコードが書けなくなった経験があります。今でもたまに手が止まってしまいます。 >ちょうど作文の最初の一文が見つから無いときのような、そんな感覚に襲われてしまします。 というのは痛いほどよくわかります。 作文で手が止まってしまうのは、そもそも文章を書き慣れていないと、どうすれば相手に自分の考えが伝わるのか、それ以前に自分が何を伝えたいのかもわからない、読んだ相手がどう思うのか想像出来ないからではないでしょうか。「何を求められているのか」という判断基準そのものが無いが故に手の付け方もわからない状態です。 ソフトウェアの設計も似たようなもので、どんな機能が必要で、どんな問題が起こりうるのか、何処が頻繁に変更され、どんなコードなら自分や他人が把握しやすく、保守しやすいか、みたいなのは、最初のうちは見当つかないものです。熟考すれば出てくるものでもありません。 知識をつけると、最初は問題ではないものまで問題に見えてきます。 そうした段階で分析を行っても、書いていてモヤモヤする、何となく気持ち悪い、違和感がある、みたいな理由しかでてきません。しかし、それは本当に取り組むべき問題ではありません。 実作業に支障を来していないコードを、問題に仕立て上げようとしているだけです。 経験豊富なプログラマなら納得出来る理由を説明し、より良い解決策を提示して設計を見直すかもしれません。 しかし、改善すべき明確な理由も方向性も見えていないのなら、手のつけようがありません。 恐らく何処まで経験を積んでもそういう霧は晴れません。そもそも何が必要になるか、何が問題になるのか、みたいな予知を完全に行うことはできないからです。常に不安はつきまといますし、想定外の仕様変更なんていくらでも出てきます。具体的な形になって使い方が解ると、新たな使い道が見える事も少なくありません。そうしてソフトウェアは進化していっています。 拭いきれない違和感との戦いは終わりがないのも問題です。これこれを達成すればひとまずOKという基準を作るのも設計の一環です。 ならば、真っ先に取り組むべき問題は、書いていてイライラする、実作業に支障が出ているところです。 ある機能を呼び出すのに長~いコード何度も書かなければならなかったり、機能を追加するたびにプロジェクト中の修正を必要としたり、一見関係ないコードを修正すると頻繁にバグったり…。 私が今のところこういう状態に陥ったとき、一番巧くやれている方法は、本やネットで得た知識は一旦シャットアウトして、形にする。そして実際に使い続けてみる。また、複数の方法で作ってみて比較する、です。 そうして問題点を洗い出し、再設計を行います。 これを何度も繰り返します。 いわゆるスパイラルモデルというやつですが、「想定される問題」ではなく、プロトタイピングで「顕在化された問題」に対して取り組むのが重要だというのが私の現在の結論です。勘のきかない経験の少ないコードほどそう感じます。逆に何度も組んだことがあるコードは、繰り返し回数が減り、結果的にウォーターフォールになります。 あるオブジェクトを何処が持つべきか、見当がつかなければ、とりあえずグローバルな場所に置いておきます。 C#ならシングルトンとして作ってクラスメソッドで取得させるとか、メインフォームに置いとくとかです。 作り込んでいくうちに、全く関与しないクラス、殆ど全ての機能からアクセスされるオブジェクトなど、関連性はある程度明確になりますし、グローバルにアクセス出来るオブジェクトの問題点もそのうち直面します。 そのとき、再び本を開いてみてください。書いてある意味がまるで違うことに気がつきます。それを何回も何回も繰り返して、ようやく理解したことになるんだと思います。 だらだらとした長文で「結局経験っすよー」みたいな話ばかりで申し訳ありません。 ですが、少しでも切っ掛けが掴めれば幸いです 参考URLは私が以前した、似たような質問のURLです。ご参考までに。

参考URL:
http://okwave.jp/qa/q4167313.html
Simula777
質問者

お礼

参考になります。 回答者さんの以前にされた質問も読ませていただきましたが まさに今の自分と同じです。 >OOPは手段であって目的ではありません。 耳が痛いです。 というやりとりは、自分もホントに耳が痛いです(笑) そしてまた そうした段階で分析を行っても、書いていてモヤモヤする、何となく気持ち悪い、違和感がある、みたいな理由しかでてきません。しかし、それは本当に取り組むべき問題ではありません。 実作業に支障を来していないコードを、問題に仕立て上げようとしているだけです。 という部分もマコトに仰る通りです。 霧はまだ晴れてはいませんが、霧の中にいる自分をはっきり見ることはできるようになった気がします。

関連するQ&A

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

    【オブジェクト指向について】 こんにちは。初めて質問をさせていただきます。 さて、ただいまVBを勉強中なのですが、オブジェクト指向のところで躓いてしまいました。 質問したい事は以下の点です。 (1) オブジェクト指向の理解について   オブジェクト指向とは、プログラミングをするときに変数や機能などをクラスというものに格納しておくことで、プログラミングを円滑にすすめるための概念であると理解していますが、この理解は正しいのでしょうか? ご回答お待ちしております。よろしくお願いいたします。

  • オーバーロードはオブジェクト指向プログラミングの枠組みで語られるべきか

    一部の書籍やサイトでは、オーバーロードがオブジェクト指向プログラミングの特徴であるかのような記述が見受けられるのですが、私はそれに疑問を感じます。 オーバーライドはクラス・継承に関わるためOOP特有のものであると思うのですが、オーバーロードはクラスとは全く切り離して考えられるからです。 確かにオーバーロードはクラスを作るときに有用な技術ではありますが、例えばC言語のような非オブジェクト指向言語でオーバーロードが使えたとしても、それなりに機能するはずです。 ひょっとしたら 「オーバーロードもオーバーライドもポリモーフィズムだろう」 ↓ 「ポリモーフィズムといえばオブジェクト指向」 のような話の展開でしょうか(いや、さすがに無理があるか…)。 皆様はどうお考えでしょうか。 ご意見お聞かせ下さい。

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

    オブジェクト指向設計に興味を持って、いくつかオブジェクト指向の本を読んでみたのですが、 どうもオブジェクト指向に関する基礎知識の説明ばかりで、 オブジェクト指向でどのように設計するのか、どのように生かされるのか、 肝心な部分がいまいちピンときません。 オブジェクト指向による設計に重点を置いたお薦めの書籍などありましたら是非教えてください。

  • AS3.0のオブジェクト指向プログラミング学習法について

    AS3.0のオブジェクト指向プログラミング学習法について これまでAS2.0でフルフラッシュのサイトを作ってきたのですが、 そろそろAS3.0を勉強しようかと思っております。 AS3.0ではオブジェクト指向プログラミングが重要らしいのですが、 どうやって勉強したらいいのでしょうか?いろいろ調べてみたのですが、 良い教材/WEBが見つかりません。 サイト構築を視野に入れたAS3.0のOOPの学習に参考になりそうな 書籍/WEBなどありましたら、教えて下さい! また、AS3.0に限らず、みなさんのOOP学習法も教えて頂ければ幸いです! よろしくお願いします!

  • オブジェクト指向の特徴

    プログラミングにおいて Java言語などのオブジェクト指向とは 「クラス(設計図)からインスタンス(実体)を量産できる。」がオブジェクト指向ではないプログラミング言語との決定的な違いなのでしょうか? またオブジェクト指向とオブジェクト指向ではない言語の決定的な違いや 実際に実務において経験した感覚的な違いなどがあれば教えてください。 インターネットに乗っていない些細なことでも構いません。

    • ベストアンサー
    • Java
  • オブジェクト指向の教え方

    新入社員にJavaを教えているところなのですが、オブジェクト指向プログラミングをどのように教えていいか困っています。 全員がC言語研修を受講済みで、さらにJava言語も、継承やオーバーロード、例外まで一通り教えて、一応理解しています。 そこで、次のレベルとして、C言語風のプログラミング(「プログラム=関数の集まり」の考え方)から、オブジェクト指向(「プログラム=オブジェクトの集まり」の考え方)に意識改革させたいところです。 問題領域をオブジェクトの集まりとしてとらえ、そこからクラスを抽出していく、という説明がよくありますが、 「何をオブジェクトにするのか」「どのようにクラスを抽出したらいいのか」の部分を詳しく教えたいのですが、どのように説明したらいいでしょうか。また、参考になるWebサイトなどありませんでしょうか? 自分が普段作るときは、ほぼ「勘」でクラス設計していますので、それでは教えられなくて困っています。よろしくお願いします。

    • ベストアンサー
    • Java
  • オブジェクト指向とは

    プログラミングの用語を調べていて、「オブジェクト指向」という言葉を見つけたのですが、Googleで検索してみてもしっくりくるものが見つかりません。 誰かわかりやすい説明をお願いします。🙇

  • オブジェクト指向に関して。

    Javaの解説本を読んでオブジェクト指向プログラミングという物があることをしりました。その本には「オブジェクトはデータとそのデータを扱うための機能を持っている。この機能はメソッドと呼ぶ。クラスは設計図のような物で変数とメソッドから構成されている。設計図を実際に形にした物がインスタンスである。」と書いてありました。私はオブジェクト=クラスのような感じがしたのですが、実際のところオブジェクト=クラスでいいのでしょうか?  また、友人に話したところ、オブジェクト指向はサブルーチンに似ているといっていました。私はプログラミングの知識が全くないのでサブルーチンという物が何なのかわからないのですが、サブルーチンとオブジェクト指向の考え方は違うような気がするのです。友人に説明して納得させるにはどうしたら良いのでしょうか? ぜひ、力を課してください。

  • VB.NET,2005でのオブジェクト指向、クラス設計のポイント。

    VB6ユーザでした。 これから、VisualStudio2005で、VisualBasiの開発を 新規に行う所です。 VB6ユーザの悩み所として、クラス設計があるかと思います。 オブジェクト指向の概念は理解しているのですが、 クラス設計のポイントをアドバイス頂けないでしょうか。 みなさんの、VB.NET、VisualStudio2005等での オブジェクト指向プログラミングの勘所を教えて頂けると 助かります。 思いつく事では・・・ 例1) 顧客DBがあり、いろんな画面から操作する場合、 顧客クラスを用意し、DB操作は、顧客クラスを経由して 行うとか。 例2) 出来るかどうか分かりませんが、 画面で共通部品となる部分を、クラス化し、継承して いくとか。 参考になるHPでも良いので、アドバイスをお願い致します。

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

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

    • ベストアンサー
    • Perl