「クラス同士の命令のやり取り」とは

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ちばくら

「クラス同士の命令のやり取り」とは

#1

投稿記事 by ちばくら » 9年前

オブジェクト指向の入門サイトを読み終わった、ヒヨっ子です
いきなり質問します  ごめんなさい
初心者用サイトでよく見かける「クラス同士の命令のやり取り」とはなんでしょうか?

クラスAからクラスBに情報を与えるためにはクラスAがクラスBのポインタや実体を
持っていないとできないと思うのですが、これだと両クラスは対等な関係とは言えない気がします

UMLでいう「関連」というものを概念ではなくC++の実際のコードの書き方が知りたいのです
だいたいの入門サイトはC++の部品までは教えてくれますが組み立て方は教えてくれません

私自身としても、しっかり理解を深めたいので質問の丸投げはしません
ヒントや"きっかけ"だけでもくださいませんか?
(質問が分かりづらければ後で補足します)

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 「クラス同士の命令のやり取り」とは

#2

投稿記事 by h2so5 » 9年前

どのような文脈で「クラス同士の命令のやり取り」と言っているのか知りたいのでその入門サイトを教えて欲しいです。

ちばくら

Re: 「クラス同士の命令のやり取り」とは

#3

投稿記事 by ちばくら » 9年前

すいません!
「命令のやり取り」ではなく「メッセージのやり取り」でした!

この表現がなされているサイトは例えば、このサイトです
http://marupeke296.com/OOD_No2_CS1_HalloWorld.html

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 「クラス同士の命令のやり取り」とは

#4

投稿記事 by h2so5 » 9年前

そのサイトにもこう書かれていますが、

http://marupeke296.com/OOD_No2_CS1_HalloWorld.html
実際のプログラムではメッセージを飛ばすことは難しいので、代わりに相手の関数を呼び出すことになります。
実際にはC/C++にはメッセージを送信する機能はありません。ですから、
ちばくら さんが書きました: クラスAからクラスBに情報を与えるためにはクラスAがクラスBのポインタや実体を
持っていないとできないと思うのですが、これだと両クラスは対等な関係とは言えない気がします
それはその通りで、厳密に言えばC/C++のメソッドの呼び出しは「メッセージのやり取り」とは言えません。
C/C++においては、基本的には「メッセージのやり取り」をメソッドの呼び出しで代用することになります。
あるいは一般的な方法ではないですがQtのSingal/SlotやBoost.Signalsなどのライブラリを使う方法もあります。

一方でSmalltalkやObjective-Cといったメッセージのやりとりをサポートしている言語もあり、
オブジェクト指向でいうところの「メッセージ」というのはこういった言語を意識した上での用語なので、C/C++には当てはまらないこともあります。

ちばくら

Re: 「クラス同士の命令のやり取り」とは

#5

投稿記事 by ちばくら » 9年前

御回答ありがとうございます
メッセージという単語がしっくりきませんでしたが他の言語に影響を受けた表現だったとは知りませんでした・・・

私は今、小さいプログラムを制作していて主にクラス階層のことについて悩んでいます
一部でしか使わないクラスなら問題ないのですが頻繁に使いたいクラスをどこで宣言していいものか分からず行き詰っています

昨日の質問に続いて、もう一つ質問したいのですが
Aクラスを複数のクラスが使用したい場合には複数のクラスにAクラスのポインタを配るのが正解なのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 「クラス同士の命令のやり取り」とは

#6

投稿記事 by softya(ソフト屋) » 9年前

> 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
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ThroughTheMorning

Re: 「クラス同士の命令のやり取り」とは

#7

投稿記事 by ThroughTheMorning » 9年前

>一部でしか使わないクラスなら問題ないのですが頻繁に使いたいクラスをどこで宣言していいものか分からず行き詰っています

頻繁に使いたいクラスとは、
A. 1つの実体(オブジェクト・インスタンス)を指しているのですか?
B. クラスの型を指しているのですか?

A.の場合は、話が早いです。プログラムが起動してから、何よりも早くその実体を持って下さい。そして、その実体のポインタを使いたい後続のクラスオブジェクトに渡して下さい。
B.の場合は、話が長くなる場合があるので、取り敢えず個々に頻繁に使いたいクラスのオブジェクトを持ってみてはいかがでしょうか?



>Aクラスを複数のクラスが使用したい場合には複数のクラスにAクラスのポインタを配るのが正解なのでしょうか?

上のA.の事だと解釈できますが、いかに?

クラス単位でプログラムを組んでいると後で楽に修正しやすいと思いますので、クラスの取り扱い初心者の時は、迷わず悩まずちゃんと動作する物を作って行きましょう。

閉鎖

“C言語何でも質問掲示板” へ戻る