如何写主要()在一个面向对象的方式?
-
11-07-2019 - |
题
当我第一次开始编程,我编写了一切主要的。但是,我学会了,我试图做到尽可能少在我的 main()
方法。
但如果你决定要得到其它类方法/方法的责任采取的程序 main()
?你怎么做到的?
我见过许多方式这样做,像这样:
class Main
{
public static void main(String[] args)
{
new Main();
}
}
和一些像:
class Main {
public static void main(String[] args) {
GetOpt.parse(args);
// Decide what to do based on the arguments passed
Database.initialize();
MyAwesomeLogicManager.initialize();
// And main waits for all others to end or shutdown signal to kill all threads.
}
}
我应该和不应该做的 main()
?或是有没有银子弹?
谢谢你的时间!
解决方案
在我看来,"主要"的相当大的项目应该包含大约3功能的电话:
- 叫一个初始化功能,设置了所有所需的设置偏好,等等。为应用程序。
- 启动主要的"控制"的程序
- 在等待的主要控制器,以终止,然后呼吁终止功能,清除任何东西需要被清了在"主要的"(虽然控制器,将有照顾的大部分清理已经).
任何庞大的应用程序将被分割成块的功能,通常是一些层次结构。主要控制器可能有几个孩子控制器,用于特定的功能。
这样做使得更容易找到具体功能,而分离的关切问题是更好的。
当然,正如其他的答复所述,没有真的没有银弹在软件开发。对于一个简短的项目,我可能会把一切都放在主要的只是让事情和快速运行。我觉得还取决于语言的某些选项可能比其他人更容易在特定的语言。
其他提示
代码中的主要功能:
- 不能单元的测试。
- 不能接收的依赖性,通过注射。
- 不能再使用其它应用程序类似于第一个你写的。
因此码的主要功能:
- 必须这么简单你很高兴与功能性/系统测试。
- 必须是负责设置的球滚动的依赖关系使用的所有其他代码(也就是说,主要的行为就像一个超级-工厂创造你的应用程序)。
- 应该只做的事情,这是特别的方式应用程序的设置(即没有任何代码的测试或演示版本将需要做的完全相同的方式)。
在实践中,这意味着,真正的应用程序没有太多在主要的。玩具的应用程序和一个拍摄计划可能会有相当多在主要的,因为你不打算测试或重新使用它们。
实际上,一些什么,我说,以上为C++特定的。Java主要方法当然可以被称为测试代码或变应用程序。但是他们仍然不采取对象为参数,唯一的命令行参数,因此它们在何种程度上可以被孤立的受测试的,或者表现良好,在条款的重新使用,是相当低的。我猜你可以通过类名称为他们的实例,并使用创建其余的应用程序。
[编辑:有人删除了"C++、Java"标签,这个问题。所以:我说什么上面C++、Java具体。其他语言可以享的主要方式是较特殊,在这种情况下可能没有特别的原因你对待它的专门。]
不管你的船浮筒,因为他们说。 :)你真的应该集中精力使代码简洁,易读和高效的使用需要做到这一点的任何工具。如果权证将大量的代码在主 - 这样做。如果你觉得对象将让事情更有条理 - 走那条路
制作class Main
的一个实例,然后调用实例方法Main()
其完成所有的工作,就像直接在main方法写的一切,好的。
我会说,这是不是在你的主要功能,但什么是不。根据项目的复杂程度,你会想它分解为功能区,如“数据库功能”,“显示功能”,“高茶与牧师”等。
这是所有关于代码的可读性。别人,谁从来没有见过你的程序之前遇到它,可以拿到第一,它没有一个良好的广义主意?
然后再很容易地看到去哪里挖得更深一些进入机制?
你用做只的处理的逻辑块的每个功能部分?它不必只做一两件事,但它不应该做的所有的加厨房水槽。
细分广告代码的方式,它是由外部源维护。
原因天知道,当谈到面对它时,如果有人能-else-修复bug,这一切都更好=)
作为一个直接回答你的问题,我会把函数调用每一个主要的主要组件,安装,过程和光洁度,使任何人谁看它会如何计划的简要概述作品。然后,他们可以进一步深入,他们应该需要。
看,“主”方法的内容和形式是非常语言和环境相关的。在Java中,每一个类可以具有public static void main()
方法,所以这是完全可行的,以具有多于一个的
但现在,让我们来考虑一下这个通过模块化尔格定律:“每一个模块隐藏一个秘密,这秘密的东西,可以改变的。”该所最初被称为模块的“秘密”是交互的过程与操作系统的详细信息:东西喜欢把自己的观点和处理不规则的终端。在Python中,这会导致这样的事情:
def main(args=None):
#argument processing
#construct instances of your top level objects
#do stuff
if __name__ == "__main__":
try:
main(Sys.Argv)
except: # everything
# clean up as much as you can
else:
# normal cleanup, no exceptions
在这里点是,你得到的一切,从环境就可以了,然后调用main()函数;你抓住所有捕获的异常和你做一些智能与他们的程序死掉之前。
我觉得主要方法应该解释,该程序的功能在启动什么。 因此,它可以调用initialzing的方法,但是逻辑应被提取到的方法。
在您的例子,我不会创建Main()方法,但把它放到一个原始
你的程序的设计将决定的形状的“主”。
有了这样说,你的主要功能应该如何,是一个“规则” - 恕我直言 - 一个无感。
请记住,如果有人想获得你的程序是如何工作的想法,他们可能会首先关注的地方是在main(至少我会)。所以,我不认为这是把尽可能少在它尽可能是个好主意。但我要说把尽可能少要得到你的程序是如何工作的鸟眼视图。
因此,我认为,在实现主要功能的一个最大关注的应该是可读性。