Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

共通の性質をもつメソッド

java初心者です。

今、「人間」というクラスを作ろうとしていて、メソッドには「歩く」「食べる」「呼吸する」などの行動を設定しているのですが、この行動を「意識的な行動」と「無意識的な行動」に分けたいと考えています。

この先、「ここでは意識的な行動ができない」などの用途で使いたいです。

クラスならばスーパークラスを設定すればいいのですが、メソッドの場合はどのようにして共通の性質をもつものをグループ分けできるのでしょうか?


5

回答

79114

閲覧

5件の回答

評価

0

インターフェースでまとめたらいいのでは。

評価

0

メソッドがよばれてから、その冒頭で、
「ここでは意識的な行動ができる」のかどうか、
判断するってのは、どう?

評価

0

(1)
「ここでは意識的な行動ができない」っていう条件が
ついてるんだったら不良社員氏の言っている方法も
ありかな。各振る舞いに対して状態を引数に渡すかして
判断するってのもありだし。

(2)
「意識的な行動」と「無意識的な行動」ってのを
メソッドで持って、各振る舞いをコールするかしないかをラップするのもあり。

設計的には(2)の方が意図していると思います。
各振る舞いに対しては簡潔にするべきという意味では。

1:interface OperationIF
(歩く,食べる,呼吸する):abstract

2:abstract ActionAbs implements OperationIF
(意識的行動,無意識的行動):final public 実装
※テンプレーメソッド[デザインパターン]を使用して
上記(歩く,食べる,呼吸する)を呼ぶシーケンスは
実装する。各メソッドは実装クラスに任せる。

3:Human extends ActionAbs 
歩く,食べる,呼吸するを実装。

評価

0

1.
public void 歩く
public void 食べる
private void 呼吸する

2.
@意識的
public void 歩く
@意識的
public void 食べる
@無意識
public void 呼吸する

評価

0

クラス数は増えるけどStateパターンを使う方法もある。

1.状態interface
  public void 歩く
  public void 食べる
  public void 呼吸する

2.人間class
 状態 state;
  void 起きる{
    state = 有意識;
  }
  void 寝る{
    state = 無意識;
  }
  void 歩く{
     state.歩く
  }
  void 食べる{
     state.食べる
  }
  void 呼吸する{
     state.呼吸する
  }

3.無意識 implements 状態
  void 歩く
  void 食べる
  void 呼吸する

歩くと食べるはIllegalStateExceptionをthrowする

4.有意識 implements 状態
  void 歩く
  void 食べる
  void 呼吸する

もしくは、

有意識 extends 無意識
  void 歩く
  void 食べる

※アクセス識別子は、省いてあります。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。