关于如何进行OOP设计的建议

关于如何进行OOP设计的建议,oop,architecture,Oop,Architecture,我发现,每当我开始用Java/C编写一个应用程序时,一切都会好起来,但随着时间的推移,随着应用程序变得越来越复杂,它只会变得越来越复杂。我已经意识到我不太擅长设计和高级架构这一事实。我所有的类都变得相当强的耦合,设计一点也不“优雅”。我相当擅长“低级”编程。也就是说,我可以在一个函数或一个类中完成任何事情,但我的高级设计很弱,我真的很想改进它。有没有人能提供技术、书籍等方面的指导,帮助我成为一名更好的软件工程师?我会从草图开始。该草图可以是一个显示类之间关系的方框和箭头图,也可以是UML(甚至可

我发现,每当我开始用Java/C编写一个应用程序时,一切都会好起来,但随着时间的推移,随着应用程序变得越来越复杂,它只会变得越来越复杂。我已经意识到我不太擅长设计和高级架构这一事实。我所有的类都变得相当强的耦合,设计一点也不“优雅”。我相当擅长“低级”编程。也就是说,我可以在一个函数或一个类中完成任何事情,但我的高级设计很弱,我真的很想改进它。有没有人能提供技术、书籍等方面的指导,帮助我成为一名更好的软件工程师?

我会从草图开始。该草图可以是一个显示类之间关系的方框和箭头图,也可以是UML(甚至可能是标准UML)的变体。但我发现草图可以帮助我了解设计的好坏,甚至可以帮助我了解如何修复它


我还会看一本关于设计模式的书。

书:

  • 代码完成,由Steve McConnel编写
  • 设计模式,由Gamma等人编写

写一个大项目,让它尽可能地传播开来。然后研究如何改进代码

如果结构良好,也许单个大型例程也可以清晰易懂


好的设计没有一个好的答案。事实上,这是程序员可以学到的有价值的东西之一。

你的问题的答案可以自己写满一本书,但我建议你看看设计模式

关于这一主题的经典著作被称为“四人帮”著作:


在该领域也受到高度重视。

在开始之前尝试制作程序大纲和图表,并让其他人对其进行审查和评论。然后,随着程序的发展,不断更新大纲和图表以包含新功能。让别人对它进行审查和批评。最终,假设你正在从批评中学习,你将在设计程序方面变得更好


书籍和教程只能帮你做到这一点。虽然你确实需要学习可用的工具和方法,但知识本身并不能帮助你。实践会让你在设计方面做得更好,同时有一位导师会不时地指导你如何更好地应用从书中获得的一些知识。

一定要阅读这些书,但如果你编写的代码最终变得愚蠢,不要感到难过。每个人都有。问题是,你能重构你必须修复的东西吗?为了能够经常有效地完成这项工作,您需要使用和编写大量的单元测试。

您可以毫不留情地进行重构,以改进现有代码的设计

主要的想法是,在某种程度上代码是有意义的,当新的特性被引入到代码中时,可能一些特性或职责必须转移到另一个类中,这很好。然后你停止开发新的特性,开始重构你的代码

我建议您阅读:


我强烈建议您尝试测试驱动开发(TDD)。您将发现,要使代码可测试,并且不需要不断地执行测试的返工,您需要有一个可靠的设计。您会发现,当您添加\更改\删除功能时,更好的设计将需要对特定测试集进行非常小的更改。一个糟糕的设计会毁掉大量的测试——因为你有紧密的耦合,负责多个问题的对象,等等

我发现我在TDD上做得越好,我的架构就越好,最终结果也就越好

请注意,TDD需要真正的心理训练。你不应该期望你使用它1-2天,并看到立即的结果。你需要真的想去做,并且真的努力去做——否则你不会从中受益,很可能最终会讨厌它


嗯…

你可以做几件事

  • 使用工具进行高级和 低水平设计摆在您面前 实际开始编程。例如。 创建类图将 帮助你的大脑想象 图解形式的解 而不是代码形式

  • 熟悉Java 设计模式。例如使用 以多态方式开始继承 使用将使您热身,开始使用 标准Java和J2EE设计 模式


  • 我在这里指出的这两个主题都有大量的书籍和网站。

    使用面向对象的设计原则()。还考虑了一些面向对象的设计启发式方法()

    < P>浏览好的API代码。例如,Spring框架代码。 阅读一些好书,比如设计模式(就像这里提到的其他人一样)和其他一些关于良好实践的书。例如在Java中,头先设计,有效的Java系列等等。
    C++有效的C++系列

    很明显,阅读一些推荐的书籍会有所帮助。我认为这本书绝对没有GoF书那么抽象

    我问的主要问题是“这段代码是否做了一些非常具体的事情,可以在任何其他情况下重复使用?”如果是这样,请将其放入允许重复使用的程序集中的类中


    如果你真的刚刚开始,那么我曾经做过的一件事就是把每个数据库表看作一个“对象”。因此,每个数据库表代表一个类。纯粹主义者会告诉你这是一场灾难,但我发现这是一个让自己开始用对象的术语思考的好方法。

    我不同意从一本关于设计模式或重构的书开始。

    在我看来,对于一个坚实的OO设计,您应该首先熟悉主要的OO设计原则,然后理解如何在这些基本原则中表示您的问题。然后,您可以开始发现应用设计模式和重构的机会