- PR -

別クラスのメソッドを使用する場合についての質問

投稿者投稿内容
taka
常連さん
会議室デビュー日: 2003/09/22
投稿数: 46
投稿日時: 2003-11-18 15:06
例えば、クラスA(Class_A)が有り、その中でクラスB(Class_B)をコンストラクトしていて、
クラスAには"A_Method()"というメソッドが有る。
public class Class_A {
 public Class_A {
  Class_B clsB = new Class_B(this);
 }
 
 void A_Method(){
 
 }
}

上記の設定の場合、クラスBの中でクラスAの"A_Method()"を使いたい場合、
下記のようにクラスBのコンストラクタの引数にクラスAを与えて、
下記のようにクラスAのメソッドを使っていますが、正しいのでしょうか?
public class Class_B {
 Class_A clsA;
 public Class_B(Class_A cls) {
  clsA = cls;
  clsA.A_Method();
 }
}

いたち
常連さん
会議室デビュー日: 2003/04/25
投稿数: 27
投稿日時: 2003-11-18 15:21
Class_AでもClass_Bでも使っているメソッドで、Class_AとClass_Bに関連があるなら、A_MethodはClass_AとClass_Bの外で定義したほうが良いのではないでしょうか?

あるいは、Class_AとClass_Bを継承関係にしたほうが良いかもしれませんね。

A_Methodの中身にもよるかと思いますが・・・。
taka
常連さん
会議室デビュー日: 2003/09/22
投稿数: 46
投稿日時: 2003-11-18 15:51
いたちさん、ご意見ありがとうございました。
条件の説明が不足していました。

>A_Methodの中身にもよるかと思いますが・・・。
例えば、A_Method()内でクラスAの変数を変更しているとします。
public class Class_A {
 boolean blnA = false;

 public Class_A {
  Class_B clsB = new Class_B(this);
 }
 
 void A_Method(){
  blnA = true;
 }
}

また
>あるいは、Class_AとClass_Bを継承関係にしたほうが良いかもしれませんね。
との事ですが、なぜ継承関係にしたほうが良いと思われますか?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-18 15:53
文法的には正しいと思いますよ。
taka
常連さん
会議室デビュー日: 2003/09/22
投稿数: 46
投稿日時: 2003-11-18 16:00
おばけさん、ご意見ありがとうございました。

>文法的には正しいと思いますよ。
との事ですが、このようなメソッドの使い方は通常行われてはいないのでしょうか?
また、おばけさんならどうしますか?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-18 16:01
引用:

との事ですが、このようなメソッドの使い方は通常行われてはいないのでしょうか?
また、おばけさんならどうしますか?


上記のClass_AとClass_Bの関連がどのようなモデリングから導かれたか、が問題であると思います。差し支えなければどのようなモデルなのか教えていただけませんか?そうすれば、より良いモデルの代替案が提示できる可能性もあります。
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2003-11-18 16:08
「コンストラクタ=初期化作業」ですからコンストラクタが終わらない内に他のクラスからメソッドを呼ぶのは止めた方が良いですよ。
初期化作業が終わっていないので想定外の動きをする危険があります。
taka
常連さん
会議室デビュー日: 2003/09/22
投稿数: 46
投稿日時: 2003-11-18 16:44
おばけさん、ぽんさんご意見ありがとうございました。

>上記のClass_AとClass_Bの関連がどのようなモデリングから導かれたか
特に考えずにClass_AとClass_Bの例を書き、モデリングの意味さえよくわかっていません・・・
これでは、おばけさんも答えようがありませんね、すみません。

>「コンストラクタ=初期化作業」ですからコンストラクタが終わらない内に他のクラスからメ
>ソッドを呼ぶのは止めた方が良いですよ。
はい、わかりました。注意します、ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)