2

我是一名学生,我是 Java 新手,我正在做的这个作业是我必须做的第一个作业,它必须严格遵循 oop 约定。所以这可能是一个新手问题。在对菜单进行编码时,将菜单代码放在 main 方法中是否合适,还是应该放在类中并与其他所有内容一起实例化?

编辑:菜单菜单是一个简单的命令行菜单,用数字输入,没有 gui。还没有那么远。

4

5 回答 5

1

如果您想严格遵守 OOP 约定,您可以拥有自己的课程,例如

abstract class MenuItem {
  int index;

  protected MenuItem(int index) {
    this.index = index;
  }

  abstract void action();
}

class ExitMenuItem {
  ExitMenuItem() {
    super(3); // the index value of the menu item
  }

  void action() {
    System.exit(0);
  }
}

这样您就可以为每个具有其行为的菜单项指定一个子类。

然后你可以有一个菜单容器,比如:

class Menu {
  ArrayList<MenuItem> items;

  void executeAction(String input) {
    ..
  }
}

那应该了解根据标准输入输入选择了哪个声音并执行它。当然,您可以通过为每个菜单项等设置默认文本来丰富所有内容。然后在您的主要方法中,您只需实例化菜单并负责将标准输入输入转发给它。

请注意,这在一个简单的菜单中通常是多余的,但如果您想了解 OOP,那么这是一个不错的方法。

于 2012-10-09T14:54:17.133 回答
1

对于面向对象的方法,您应该在特定类中创建菜单。Main 方法是过程/命令式编程语言的遗产。Main 方法应该只运行主线程。

于 2012-10-09T14:58:22.100 回答
1

这取决于。这通常是人们可以提供的最糟糕的答案,但不幸的是,它非常适合。

您尚未提供完整的要求,因此很难猜测您的意图。这个菜单是特定于一个班级的吗?可以多次运行吗?它应该能够并行运行吗?

或者更确切地说,这个菜单是否只是实际程序的入口点?例如:按 1 登录,按 2 在屏幕上显示某些内容,按 3 为 ....

我给你这些问题的原因是因为它们会影响你的代码结构。在第一种情况下,如果它们是专门与类相关的菜单,并且可以从代码中的多个位置的多个位置运行,那么属于类结构本身(非静态)是有意义的。

但是,如果菜单纯粹是应用程序的入口点,则将它们放在代码的 main() 部分中,或者为清晰起见编写另一个名为 menu() 的静态方法是有意义的。但实际上,menu() 方法只会被 main 调用。

接下来要问自己的是您计划如何验证菜单选择的响应。您需要复杂/涉及的代码吗?将验证例程作为主要方法的一部分还是拥有自己的方法更有意义?让成员变量在方法类之间进行通信以进行验证等是否更有意义?

请记住,可以在不实例化类的情况下调用静态方法。话虽如此,静态 main() 方法或静态 menu() 方法仍保留在类本身中,并且是 OOP 设计的一部分。

于 2012-10-09T15:06:53.877 回答
0

问问自己这个 - 如果将打印菜单的代码放在主要方法中,我该如何处理多次打印?

如果将代码放入与主类相同的类中的方法中,并且我需要在另一个主类中的其他地方打印菜单,我该如何处理?

最终,您将拥有一个处理处理菜单显示的代码的类,而主类将只调用该类的方法。:)

于 2012-10-09T15:01:08.877 回答
-1

可能对此有不同的口味,一个好的答案也可能取决于您的应用程序在做什么。

首先,对于一个小型应用程序,我不介意在主类中有菜单。

但是为了获得良好的结构,最好有一个类负责打印基于行的菜单,然后当然还负责读取用户输入并调用用户要求的操作。我认为一个好主意是调用这样一个类ControllerDispatcher. 这个类将是一个单例。此外,我认为拥有一个方法displayMenudispatch. 两者都将从构造函数中连续调用。

那么如何dispatch调用适当的操作将取决于您的应用程序的其余部分。

有些人不喜欢这种风格,因为你的主程序可能只有声明。

于 2012-10-09T15:06:06.217 回答