我已经学会了从头开始编写程序,但是我遇到了不知道如何设计程序的布局和实现的问题。更准确地说,在我深入编程部分之前,我很难找到一个好的方法来制定行动计划。我真的想知道我事先需要什么类,方法和对象,而不是一路上添加它们。
我的直觉导致我使用某种图表软件,它提供了所有类和方法的分层视图。我一直在使用OmniGraffle Pro,虽然它确实有点工作,但我仍然无法完整地规划该程序。 我该如何处理这个问题?哪些软件可以帮助解决这个问题?在这个问题上有什么好的读物吗?
非常感谢!
编辑:哦,是的,我正在使用Eclipse,我现在主要用Java编写代码。
答案 0 :(得分:12)
我不担心图表方面。我会尝试记录您将需要的所有实体,以及他们将要做的所有事情。在最简单的情况下,每个名词都是一个类,每个动词都是一个方法。
这是一种非常基本的方法,您要求的是一些分析方法。已经写了整本书,这是一个重要的主题。
您可以采用其他方法并采用敏捷方法。在这里你解决了一个特定的问题(你的最终目标的一个子问题),然后在你解决更多问题时重构(也许很重)。在编写代码时,您编写并维护单元测试,以便您的重构不会破坏现有代码。你必须准备好抛弃你已经完成的工作,但它是一种强大的技术,意味着你能早日获得一些东西,而不是依靠大爆炸的方法。
答案 1 :(得分:2)
有专门针对此类问题的工具(例如,Rational Rose)。不幸的是,尽管他们的光年好于Omnigraffle,但大多数都非常昂贵。您可能需要查看一些免费工具,例如ArgoUML和UMLet - 尽管后者是Eclipse插件,因此除非您正在使用(或者愿意使用Eclipse。
答案 2 :(得分:2)
最好先介绍一些简单的故事,甚至是应用程序可以执行的操作要求列表。从那里你可以考虑你可能想要使用哪些类以及它们如何相互作用。
我喜欢创建我计划使用的各种包,并在其中放置存根类。如果您愿意,甚至可以存根方法,并添加Javadoc注释。
我不会太担心尝试计划它,因为它很可能会随着你的构建而改变,所以即使你在设计时得到它只是完美的要求,或者一些不合适的要求正如你原先认为的那样可以改变一切。像这样的骨架布局的好处是,一旦你准备好编码,你就需要开始填充方法体。
答案 3 :(得分:1)
考虑面向对象设计哲学,了解如何构建程序的方法。 UML或统一建模语言通常被认为是用Java和Python等语言构造OO程序的方法。适用于BoUML和ArgoUML等人的优秀计划。另外,请查看re-factoring上的此页面,虽然它是关于代码的重构,但它也可能有助于初始结构。最后,请查看这些OO design主体
答案 4 :(得分:0)
我认识的大多数工程师都使用Visio - 它通常作为公司套件的一部分提供。
还有一些免费的webapps为你做建模(对象建模是你所谈论的“关键词”)
你可能会看一下UML对象图 - 虽然完全遵循任何规范并不重要,如果你以此为基础,更多的人会对你所谈论的内容有所了解。
答案 5 :(得分:0)
我使用大尺寸的白板进行建模。我发现能够向后退几步并且能够查看整个设计真的很有帮助,并且能够通过滑动橡皮擦来改变某些东西的灵活性让我专注于手头的任务。
当我完成后,我用相机拍照并将其加载到我的电脑上以供长期使用。
答案 6 :(得分:0)
答案 7 :(得分:0)
我想补充Brian的评论,即在采用敏捷方法时,您还采用Test Driven Development (TDD)方法编写代码。基本上,您在编写任何实际生产代码之前编写代码的测试。这真的迫使你放慢脚步,仔细思考你需要(并且不需要)编程的内容,你需要什么样的数据模型以及它们如何互动。 TDD有很多优点,但更好的设计对我来说是一个很大的优势。以下是上述链接中的相关摘录:
测试驱动开发不仅提供简单的正确性验证,还可以推动程序的设计。通过首先关注测试用例,必须想象客户端将如何使用该功能(在第一种情况下,测试用例)。因此,程序员在实现之前就关注了接口。
如果你以前从未这样做过,那真的很难,主要是因为很难不直接进入编码。但是坚持不懈,你永远不会再以任何其他方式编写代码。这些优点确实非常值得。祝你好运!