Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序设计布局建议?_Java_Design Patterns_Oop - Fatal编程技术网

Java程序设计布局建议?

Java程序设计布局建议?,java,design-patterns,oop,Java,Design Patterns,Oop,我已经学到了足够多的知识,可以从头开始编写程序,但是我遇到了不知道如何设计程序的布局和实现的问题。更确切地说,在我开始编程之前,我很难找到一个好的方法来制定行动计划。我真的想知道我事先需要什么样的类、方法和对象,而不是一路添加它们 我的直觉引导我使用某种图表软件,它给出了所有类和方法的层次视图。我一直在使用OmniGraffle Pro,虽然它看起来确实有些效果,但我仍然无法规划整个程序。 我应该如何处理这个问题?有什么软件可以帮助解决这个问题?关于这个问题有什么好消息吗 非常感谢 编辑:哦,是

我已经学到了足够多的知识,可以从头开始编写程序,但是我遇到了不知道如何设计程序的布局和实现的问题。更确切地说,在我开始编程之前,我很难找到一个好的方法来制定行动计划。我真的想知道我事先需要什么样的类、方法和对象,而不是一路添加它们

我的直觉引导我使用某种图表软件,它给出了所有类和方法的层次视图。我一直在使用OmniGraffle Pro,虽然它看起来确实有些效果,但我仍然无法规划整个程序。 我应该如何处理这个问题?有什么软件可以帮助解决这个问题?关于这个问题有什么好消息吗

非常感谢


编辑:哦,是的,我正在使用Eclipse,我现在主要用Java编写代码。

我不会担心图表方面的问题。我会尝试记录你需要的所有实体,以及他们要做的一切。在最简单的情况下,每个名词都是一个类,每个动词都是一个方法

这是一个非常基本的方法,你需要的是一些分析方法。整本书都是关于这一点的,这是一个重要的话题


您可以采取另一种方法并采用敏捷方法。在这种情况下,您需要解决一个特定的问题(您最终目标的子问题),然后在解决进一步的问题时进行重构(可能是大量重构)。在编写代码时,编写并维护单元测试,这样重构就不会破坏现有代码。你必须准备好扔掉你已经做过的工作,但这是一种强大的技术,意味着你可以提前启动并运行一些东西,而不是依赖于大爆炸方法。

有专门针对此类问题的工具(例如Rational Rose)。不幸的是,虽然它们比Omnigraffle好几光年,但大多数都相当昂贵。有一些免费的工具你可能想研究一下,比如,和——尽管后者是一个Eclipse插件,所以除非你正在使用(或愿意使用)Eclipse,否则它可能并不有趣。

考虑研究面向对象的设计哲学,了解如何构造程序的方法。或者,统一建模语言通常被认为是用Java和Python等语言构造OO程序的一种方法。对于像和这样的人来说,好的程序。另外,请查看上的此页,虽然它是关于代码的重组,但它也可能有助于初始结构。最后看看这些原则,最好从一些简单的故事开始,甚至列出应用程序可以做什么的需求列表。从那里,您可以考虑您可能想要使用哪些类,以及它们将如何相互交互

我喜欢创建我计划使用的各种包,并将存根类放在其中。如果愿意,您甚至可以删除这些方法并添加Javadoc注释


我不会太担心如何精确地计划它,因为它很可能会随着您的构建而改变,所以即使您在设计时得到了完美的结果,一个不断变化的需求或一些没有像您最初认为的那样工作的东西也可能会改变事情。像这样的框架布局的好处是,一旦你准备好编码,你只需要开始填充方法体。

我所认识的大多数工程师都使用Visio,它通常是公司套件的一部分

还有一些免费的webapp可以为您进行建模(对象建模是您所说内容的“关键字”)


您可以查看UML对象图——尽管严格遵循任何规范都不重要,但如果您将其作为基础,更多的人将对您所谈论的内容有所了解。

我使用一个大小合适的白板进行建模。我发现能够后退几步并查看整个设计对我来说真的很有帮助,而且能够用橡皮擦来改变某些东西的灵活性让我能够专注于手头的任务


完成后,我用相机拍摄了一张照片,并将其加载到电脑上供长期使用。

您需要了解设计方法:


我想补充一下Brian的评论,在采用敏捷方法的同时,您也采用了编写代码的方法。基本上,在编写任何实际的生产代码之前,先为代码编写测试。这确实迫使您放慢速度,认真思考您需要(和不需要)编写什么程序,需要什么数据模型以及它们将如何交互。TDD有很多优点,但更好的设计对我来说是一个很大的好处。以下是来自上述链接的相关片段:

测试驱动开发不仅提供了对正确性的简单验证,还可以驱动程序的设计。通过首先关注测试用例,您必须想象客户机将如何使用功能(在第一种情况下,测试用例)。因此,程序员在实现之前就关心接口


如果您以前从未这样做过,那么这可能会非常困难,主要是因为很难不直接开始编码。但是坚持下去,你就再也不会以其他方式写代码了。这些好处确实值得。祝你好运

虽然你已经明确回答了这个问题,但我认为布莱恩的回答总体上更有助于引导OP找到更好的方法。@stevendick:是的,在回答被问的问题和你认为可能应该被问的问题之间做出决定通常会有点有趣。Brian的答案几乎是面向对象分析的标准30秒描述,但我必须说我很少发现它非常有用。大多数人从w开始