オブジェクト指向の入門サイトを読み終わった、ヒヨっ子です
いきなり質問します ごめんなさい
初心者用サイトでよく見かける「クラス同士の命令のやり取り」とはなんでしょうか?
クラスAからクラスBに情報を与えるためにはクラスAがクラスBのポインタや実体を
持っていないとできないと思うのですが、これだと両クラスは対等な関係とは言えない気がします
UMLでいう「関連」というものを概念ではなくC++の実際のコードの書き方が知りたいのです
だいたいの入門サイトはC++の部品までは教えてくれますが組み立て方は教えてくれません
私自身としても、しっかり理解を深めたいので質問の丸投げはしません
ヒントや"きっかけ"だけでもくださいませんか?
(質問が分かりづらければ後で補足します)
「クラス同士の命令のやり取り」とは
Re: 「クラス同士の命令のやり取り」とは
どのような文脈で「クラス同士の命令のやり取り」と言っているのか知りたいのでその入門サイトを教えて欲しいです。
Re: 「クラス同士の命令のやり取り」とは
すいません!
「命令のやり取り」ではなく「メッセージのやり取り」でした!
この表現がなされているサイトは例えば、このサイトです
http://marupeke296.com/OOD_No2_CS1_HalloWorld.html
「命令のやり取り」ではなく「メッセージのやり取り」でした!
この表現がなされているサイトは例えば、このサイトです
http://marupeke296.com/OOD_No2_CS1_HalloWorld.html
Re: 「クラス同士の命令のやり取り」とは
そのサイトにもこう書かれていますが、
http://marupeke296.com/OOD_No2_CS1_HalloWorld.html
C/C++においては、基本的には「メッセージのやり取り」をメソッドの呼び出しで代用することになります。
あるいは一般的な方法ではないですがQtのSingal/SlotやBoost.Signalsなどのライブラリを使う方法もあります。
一方でSmalltalkやObjective-Cといったメッセージのやりとりをサポートしている言語もあり、
オブジェクト指向でいうところの「メッセージ」というのはこういった言語を意識した上での用語なので、C/C++には当てはまらないこともあります。
http://marupeke296.com/OOD_No2_CS1_HalloWorld.html
実際にはC/C++にはメッセージを送信する機能はありません。ですから、実際のプログラムではメッセージを飛ばすことは難しいので、代わりに相手の関数を呼び出すことになります。
それはその通りで、厳密に言えばC/C++のメソッドの呼び出しは「メッセージのやり取り」とは言えません。ちばくら さんが書きました: クラスAからクラスBに情報を与えるためにはクラスAがクラスBのポインタや実体を
持っていないとできないと思うのですが、これだと両クラスは対等な関係とは言えない気がします
C/C++においては、基本的には「メッセージのやり取り」をメソッドの呼び出しで代用することになります。
あるいは一般的な方法ではないですがQtのSingal/SlotやBoost.Signalsなどのライブラリを使う方法もあります。
一方でSmalltalkやObjective-Cといったメッセージのやりとりをサポートしている言語もあり、
オブジェクト指向でいうところの「メッセージ」というのはこういった言語を意識した上での用語なので、C/C++には当てはまらないこともあります。
Re: 「クラス同士の命令のやり取り」とは
御回答ありがとうございます
メッセージという単語がしっくりきませんでしたが他の言語に影響を受けた表現だったとは知りませんでした・・・
私は今、小さいプログラムを制作していて主にクラス階層のことについて悩んでいます
一部でしか使わないクラスなら問題ないのですが頻繁に使いたいクラスをどこで宣言していいものか分からず行き詰っています
昨日の質問に続いて、もう一つ質問したいのですが
Aクラスを複数のクラスが使用したい場合には複数のクラスにAクラスのポインタを配るのが正解なのでしょうか?
メッセージという単語がしっくりきませんでしたが他の言語に影響を受けた表現だったとは知りませんでした・・・
私は今、小さいプログラムを制作していて主にクラス階層のことについて悩んでいます
一部でしか使わないクラスなら問題ないのですが頻繁に使いたいクラスをどこで宣言していいものか分からず行き詰っています
昨日の質問に続いて、もう一つ質問したいのですが
Aクラスを複数のクラスが使用したい場合には複数のクラスにAクラスのポインタを配るのが正解なのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 「クラス同士の命令のやり取り」とは
> Aクラスを複数のクラスが使用したい場合には複数のクラスにAクラスのポインタを配るのが正解なのでしょうか?
ある意味正解ですが、本当に配る必要があるかは凄く考えないといけません。
こういうのは唯一解がないのでハマると先に進めなくなる典型パターンです。
今出来る最善を行っていけば、経験を積むことで将来は更に設計が良くなるって行くと思いますので、今こだわり過ぎると完成しない病にかかりますよ。
悩まれている方々のトピック。
「キー入力クラスの設計 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=15685
「変数のカプセル化を守りながらのデータの受け渡しについて • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=15592
ある意味正解ですが、本当に配る必要があるかは凄く考えないといけません。
こういうのは唯一解がないのでハマると先に進めなくなる典型パターンです。
今出来る最善を行っていけば、経験を積むことで将来は更に設計が良くなるって行くと思いますので、今こだわり過ぎると完成しない病にかかりますよ。
悩まれている方々のトピック。
「キー入力クラスの設計 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=15685
「変数のカプセル化を守りながらのデータの受け渡しについて • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=15592
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 「クラス同士の命令のやり取り」とは
>一部でしか使わないクラスなら問題ないのですが頻繁に使いたいクラスをどこで宣言していいものか分からず行き詰っています
頻繁に使いたいクラスとは、
A. 1つの実体(オブジェクト・インスタンス)を指しているのですか?
B. クラスの型を指しているのですか?
A.の場合は、話が早いです。プログラムが起動してから、何よりも早くその実体を持って下さい。そして、その実体のポインタを使いたい後続のクラスオブジェクトに渡して下さい。
B.の場合は、話が長くなる場合があるので、取り敢えず個々に頻繁に使いたいクラスのオブジェクトを持ってみてはいかがでしょうか?
>Aクラスを複数のクラスが使用したい場合には複数のクラスにAクラスのポインタを配るのが正解なのでしょうか?
上のA.の事だと解釈できますが、いかに?
クラス単位でプログラムを組んでいると後で楽に修正しやすいと思いますので、クラスの取り扱い初心者の時は、迷わず悩まずちゃんと動作する物を作って行きましょう。
頻繁に使いたいクラスとは、
A. 1つの実体(オブジェクト・インスタンス)を指しているのですか?
B. クラスの型を指しているのですか?
A.の場合は、話が早いです。プログラムが起動してから、何よりも早くその実体を持って下さい。そして、その実体のポインタを使いたい後続のクラスオブジェクトに渡して下さい。
B.の場合は、話が長くなる場合があるので、取り敢えず個々に頻繁に使いたいクラスのオブジェクトを持ってみてはいかがでしょうか?
>Aクラスを複数のクラスが使用したい場合には複数のクラスにAクラスのポインタを配るのが正解なのでしょうか?
上のA.の事だと解釈できますが、いかに?
クラス単位でプログラムを組んでいると後で楽に修正しやすいと思いますので、クラスの取り扱い初心者の時は、迷わず悩まずちゃんと動作する物を作って行きましょう。