2012-01-23 2 views
0

"composite"라는 이름의 클래스가 있으며,이 클래스에는 목록이 저장됩니다. 목록의 결과를 계산하는 메소드를 작성하려고합니다. 계산 방법은 어디에서해야합니까? OO 방법론에 따라 계산 인터페이스를 만들어 복합 클래스에서 구현해야합니까? 그렇다면 이유를 설명해 주시겠습니까? 감사합니다. .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가 약간 섞여있는 것 같습니다. 만약 composite 클래스를 가지고 있다면, calculate라는 메소드를 가진 인터페이스를 구현할 수 있습니다. 그런 다음 인터페이스 요구 사항에 따라 클래스에 calculate 메소드가 필요합니다. 또한, 데이터베이스 설계에이를 태그했습니다. 귀하의 질문에 더 많은 것이 있었습니까 아니면 그냥 일반적인 OOP 질문 이었습니까?

+0

안녕하세요, 코드를 첨부했습니다. 제발 도와 주실 수 있습니까? 인터페이스를 만드는 것이 맞는지 알고 싶습니다. – loql

+0

나는 당신이 올바른 길에 있다고 생각합니다. 난 당신이 실제로 여기에 정의 된 방식으로 구성 요소 클래스에 귀하의 인터페이스를 구현하려는 생각합니다. 복합체가 다형성으로 사용되어야합니까? 당신이 달성하고자하는 영어 버전은 무엇입니까? 비즈니스 문제? 때로는 그것을 먼저 정의하고 클래스/인터페이스 코드를 작성하는 데 도움이됩니다. –

+0

또한 마지막으로 한 가지만 있습니다. 실제로 인터페이스가 필요한지 아닌지는 분명하지 않습니다. 이 인터페이스를 구현하는 다른 클래스가 있습니까? 그것이이 단일 클래스 인 경우에도 상속이 필요하지 않을 수도 있습니다. –

관련 문제