如何在OO中进行用户界面

时间:2012-01-23 07:54:56

标签: oop database-design

有一个名为“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()); } }

1 个答案:

答案 0 :(得分:0)

听起来你的OO有点混乱。如果我有一个名为composite的类,它可以实现一个有一个名为calculate的方法的接口。然后根据接口的要求,您的类需要一个计算方法。此外,您为此标记了数据库设计。您的问题还有其他问题吗?或者这只是一个通用的OOP问题?