我是一名学生,我是 Java 新手,我正在做的这个作业是我必须做的第一个作业,它必须严格遵循 oop 约定。所以这可能是一个新手问题。在对菜单进行编码时,将菜单代码放在 main 方法中是否合适,还是应该放在类中并与其他所有内容一起实例化?
编辑:菜单菜单是一个简单的命令行菜单,用数字输入,没有 gui。还没有那么远。
如果您想严格遵守 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,那么这是一个不错的方法。
对于面向对象的方法,您应该在特定类中创建菜单。Main 方法是过程/命令式编程语言的遗产。Main 方法应该只运行主线程。
这取决于。这通常是人们可以提供的最糟糕的答案,但不幸的是,它非常适合。
您尚未提供完整的要求,因此很难猜测您的意图。这个菜单是特定于一个班级的吗?可以多次运行吗?它应该能够并行运行吗?
或者更确切地说,这个菜单是否只是实际程序的入口点?例如:按 1 登录,按 2 在屏幕上显示某些内容,按 3 为 ....
我给你这些问题的原因是因为它们会影响你的代码结构。在第一种情况下,如果它们是专门与类相关的菜单,并且可以从代码中的多个位置的多个位置运行,那么属于类结构本身(非静态)是有意义的。
但是,如果菜单纯粹是应用程序的入口点,则将它们放在代码的 main() 部分中,或者为清晰起见编写另一个名为 menu() 的静态方法是有意义的。但实际上,menu() 方法只会被 main 调用。
接下来要问自己的是您计划如何验证菜单选择的响应。您需要复杂/涉及的代码吗?将验证例程作为主要方法的一部分还是拥有自己的方法更有意义?让成员变量在方法类之间进行通信以进行验证等是否更有意义?
请记住,可以在不实例化类的情况下调用静态方法。话虽如此,静态 main() 方法或静态 menu() 方法仍保留在类本身中,并且是 OOP 设计的一部分。
问问自己这个 - 如果将打印菜单的代码放在主要方法中,我该如何处理多次打印?
如果将代码放入与主类相同的类中的方法中,并且我需要在另一个主类中的其他地方打印菜单,我该如何处理?
最终,您将拥有一个处理处理菜单显示的代码的类,而主类将只调用该类的方法。:)
可能对此有不同的口味,一个好的答案也可能取决于您的应用程序在做什么。
首先,对于一个小型应用程序,我不介意在主类中有菜单。
但是为了获得良好的结构,最好有一个类负责打印基于行的菜单,然后当然还负责读取用户输入并调用用户要求的操作。我认为一个好主意是调用这样一个类Controller
或Dispatcher
. 这个类将是一个单例。此外,我认为拥有一个方法displayMenu
和dispatch
. 两者都将从构造函数中连续调用。
那么如何dispatch
调用适当的操作将取决于您的应用程序的其余部分。
有些人不喜欢这种风格,因为你的主程序可能只有声明。