2012-01-23 9 views
0

"composite"という名前のクラスがあり、そこにリストが格納されています。リストの結果を計算するメソッドを記述したいと思います。計算方法はどこで行うべきですか?オブジェクト指向の方法論に基づいて、私は計算のインターフェイスを作成し、それを複合クラスで実装する必要がありますか?はいの場合、理由を説明できますか?おかげさまで OOでのユーザインタフェースの方法

package composite; 

public abstract class Component { 

private int level; 

public abstract void add(Component component); 

public abstract void remove(Component component); 

public abstract void eachChild(); 

    public int getLevel() { 
     return level; } 

    public void setLevel(int level) { 
     this.level = level; } } 



package composite; 

import java.util.ArrayList; 

public class Composite extends Component implements ILevelCalculator 
{ 

ArrayList<Component> componentList = new ArrayList<Component>(); 

@Override public void add(Component component) { 
componentList.add(component); } 

@Override public void remove(Component component) { 
componentList.remove(component); } 

@Override public void eachChild() { 
System.out.println(this.getLevel() + " excuted..."); for 
(Component component : componentList) { 
     component.eachChild(); } } 

@Override public int getLevel() { int levelResult; levelResult 
= getTheBiggestNo(componentList); return levelResult; } 

private int getTheBiggestNo(ArrayList<Component> componentList) { 
int theBiggestNo = 0; if (componentList.isEmpty()) { 
     System.out.println("The list is empty!"); } else { 
     theBiggestNo = getCompareResult(componentList); } return theBiggestNo; } 

private int getCompareResult(ArrayList<Component> componentList) { 
int result = 0; for (Component biggest : componentList) { 
     if (biggest.getLevel() > result) { 
     result = biggest.getLevel(); 
     } } return result; } } 


package composite; 

public interface ILevelCalculator { public int getLevel(); } 


package composite; 

public class Leaf extends Component { 

    @Override public void add(Component component) { 
     throw new UnsupportedOperationException("Not supported yet."); } 

    @Override public void remove(Component component) { 
     throw new UnsupportedOperationException("Not supported yet."); } 

    @Override public void eachChild() { 
     System.out.println("Leaf's name:"+this.getLevel()); } 

} 



package composite; 

public class Main { 

public static void main(String[] args) { Composite questionnaire 
= new Composite(); for(int i=0;i<4;i++){ 
     Composite dimension = new Composite(); for(int j=0;j<5;j++){ 
     Leaf question = new Leaf(); 
     question.setLevel(i); 
     dimension.add(question); } 
     questionnaire.add(dimension); 
     System.out.println("The dimension < "+i+" > result is: "+questionnaire.getLevel()); } 

    System.out.println("The final result is: 
"+questionnaire.getLevel()); } } 
+3

いくつかのコードを投稿したり、質問をもっと明確にするようにしてください。なぜなら、今話題になっていることを理解するのは難しいからです。 – Egor

+1

plsはQ –

答えて

0

OOが少し混ざっているようです。私がコンポジットと呼ばれるクラスを持っていたら、それは計算と呼ばれるメソッドを持っているインタフェースを実装することができます。次に、インターフェイスの要件によって、クラスにはcalculateメソッドが必要です。また、これについてデータベース設計にタグを付けました。あなたの質問にもっと何かがあったのですか、これは単に一般的なOOPの質問ですか?

+0

を精緻化しました。コードを添付しました。どうすればいいですか?インターフェイスを作成するのが正しいことを知りたいですか? – loql

+0

あなたは正しい方向にいると思います。私はあなたが実際にここで定義した方法からコンポーネントクラスにあなたのインターフェースを実装したいと思うと思います。コンポジットは多態的に使用されることを意味しますか?あなたが達成しようとしているものの英語版は何ですか?ビジネス上の問題?時にはそれを最初に定義し、クラス/インタフェースコードを記述するのに役立ちます。 –

+0

また最後の1つはここにあります。実際にインターフェイスが必要かどうかはまったく明らかではありません。このインタフェースを実装する他のクラスがありますか?それがこの単一のクラスの場合でも、継承は必要ないかもしれません。 –

関連する問題