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

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

lv4uの回答

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

No.1です。 他に回答が付かないようですので、追加で回答してみます。 >>その中でも、特に戸惑ってしまうのが、「何をクラスにするのか」という最も基本的な部分です。 まずは、C#が手本としたC++、そしてC++の前身である C with Classesが生まれた背景には、「複雑で巨大なソフトウエア開発を行う」という目的がありました。 ですので、"Hello, World!”を1行表示するプログラムのように短くてシンプルなプログラムでは、クラスなんてものの出る幕はありません。 そして、2ch用ブラウザのコードは、それよりもコードは大きく、複雑になると思いますが、まずはオブジェクト指向以前の、構造化プログラミングや複合設計の考え方でデータ構造やモジュール構成、どんな処理が必要か?などを洗い出すところから始めたらいいように思います。 それらの考え方・分析手法を行えば、「責務」「単一責任の原則」「高凝集度」「疎結合」等を考慮したモジュール設計(モジュール分割)ができると思います。 それらのモジュール群とデータ構造で関連の深いものをまとめてクラスにすれば、第一段階のクラス設計ができるように思います。 ここから、さらにポリモーフィズムや継承など、オブジェクト志向からの考え方を取り入れて、さらにクラスを洗練すれば、いいのではないかと思います。 なお、継承は多用すると、共通結合的な弱さがプログラムに持ち込まれるので、できれば使わないほうがいいかもしれませんね。 (昔、継承を使いまくったプロジェクトがあり、開発メンバーの皆が苦しみました・・・) >>個々のオブジェクトの関連において、あるオブジェクトを保持するのはどのオブジェクトであるべきか? >>また、あるオブジェクトにメッセージパッシングするのはどのオブジェクトであるべきなのか? オブジェクト指向の書籍では、しばしば「オブジェクトにメッセージパッシング」という表現を使っていますが、C++やC#では、構文としては、関数呼び出しの変形です。 なので、モジュール呼び出しの親子関係やデータ管理責任はどこが持つべきか?と考えれば、「あるオブジェクトを保持するのは、どのオブジェクトであるべきか?」の答えは自然に決まると思います。 そして、これらの構造化/複合設計の知識があって、初めてクラス設計ができるのだと私は思っています。 ちなみに2ch用ブラウザといった通信系のプログラムは、オブジェクト指向でアプローチするのもいいのですが、その前に、状態遷移図、ステートマシンの考え方で設計するほうがロジックがすっきりすると思います。 構造化/複合設計の参考図書としては以下のものをあげておきます。 ・ソフトウエアの複合/構造化設計-/マイヤーズ(1976年発行の本で古いのですけど、今でも十分に通用する内容だと思います。) ・ソフトウエアの信頼性-ソフトウエア・エンジニアリング概説/マイヤーズ (発行 1977年) ・ソフトウエア作法/Brian W.Kernighan、P.J.Plauger(1981年)

Simula777
質問者

お礼

参考になります。 OOPが決してある日突然誕生した新しい概念ではなく、連綿と続くソフトウェア技術の進化の形であって 必然的に生まれたものである。 というのは、前に挙げた書籍の文言ですが、真にこの意味を理解できてないように思います。 ・・・と、十数年前に買ったC言語の、日焼けして黄色くなったテキストをめくりながら感じました。

関連する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