【问题标题】:OOAD book recommendation: from theory to practice [closed]OOAD书籍推荐:从理论到实践[关闭]
【发布时间】:2011-01-10 20:36:26
【问题描述】:

我正在努力成为一名优秀的 OO 开发人员。 OO 让我很感兴趣,因为我了解模式,知道为什么组合比继承给你更多的灵活性,以及​​更多这样的智慧。但是,我得出的结论是,我知道如何实现单例工厂,但我不知道如何提出稳健的 OO 设计

我有一堆书

  1. GoF 的设计模式
  2. AntiPatterns Brown 等人。
  3. Fowler 重构
  4. 代码完成 2

它们可能是非常好的书籍,但它们并没有教您构建应用程序。我经常被一些非常基本的决定所困扰(example)。我正在寻找一本书,教什么时候和为什么。有很多关于锤子和钉子的书,但我还没有找到一本能告诉你它们之间实际关系的书。

哪本书最能帮助您成为自信的 OO 架构师/设计师?

【问题讨论】:

  • 请将投票问题标记为“社区维基”。
  • 我怀疑这是否是一个真正的民意调查。有些答案有不止一个建议。也许让系统来决定会更好?
  • “系统决定这个”?什么?作为所有者,您可以将问题标记为社区 wiki。您编辑问题,单击社区 wiki,我们可以更轻松地编辑答案以创建出色的响应列表。
  • 我在 meta 上查找了“社区 wiki”。据说除了版主或原作者之外,系统可以根据某些特征自动将问题转换为 wiki。尽管如此,我认为其中一个没有任何危害,因此我根据您的要求将其变成了社区 wiki :-)
  • 只是一个精度:您列出的书籍根本不是关于 OOAD 的,而是关于 OOP 的。具体来说,它们是解决与您正在使用的语言相关的特性的解决方法,并且由于它们的缺点,在从 OOAD 转换为 OOP 时,有很多事情在这些语言中无法轻松完成。大多数设计模式都是解决 3GL 缺陷的方法。我对推荐 Meyer 的“面向对象的软件构建”的人投了 +1 票:this 是关于 OOAD。并不是说它们不是好书,而是您已经注意到:它们根本不是关于 OOAD 的。

标签: oop architecture ooad


【解决方案1】:
  1. Object-oriented software construction”,作者:Bertrand Meyer

有关面向对象的最基础著作已发表。这绝对是每个“面向对象”程序员必备的书。

2。 Grady Booch 等人的“Object-Oriented Analysis and Design with Applications

不像 Meyer 的书那么正式,但这本书可以让您了解面向对象世界和一般软件开发中的许多问题

3。 Erich Gamma 等人的“Design Patterns: Elements of Reusable Object-Oriented Software”。

这是关于设计模式的著名“四人帮”书

4。 Martin Fowler 等人的“Refactoring: Improving the Design of Existing Code”。

这是另一本经典书籍。第一部分完美地描述了现代软件开发人员在工作中可能面临的许多问题:代码异味、可读性与性能、过早的优化缺陷以及许多其他主题。

5。 布鲁斯·埃克尔的“Thinking in Java

这本书不仅可以帮助许多Java语言初学者,还可以帮助他们了解面向对象的思维方式。

6。 伯特兰·迈耶的“Touch of Class: Learning to Program Well with Objects and Contracts

著名作家的优秀教科书。

【讨论】:

  • 关于 Booch 的警告。这本书以一种高雅的方式写成,(在这本书中,他倾向于使用旨在给知识分子留下深刻印象的语法和词汇来写作。)这使得它很难阅读。内容更多是关于设计问题的布局,而不是展示解决问题的实际技术。所以它没有很多启发式方法。
  • @HandyGandy:这就是你推荐“使用 Booch 方法设计面向对象的 C++ 应用程序”的原因,因为它可以填补这个空白吗?
【解决方案2】:

我读过的关于 OO 的最好的书是 Bertrand Meyer Object Oriented Software Construction

它很大,但对我来说非常有用。它涵盖了 OO 设计 IMVHO 的各个方面。

【讨论】:

  • 您能告诉我对 Bertrand Meyer 的书有何期待吗?我读到您可以将其视为埃菲尔语言的基本原理。我不了解 Eiffel,但例如,他是否展示了代表的重要性以及他们如何成为 Eiffel 的一流公民,或者他是否真的对待诸如发现课程和责任之类的主题?
  • 埃菲尔在他的书中是非常次要的话题。尽管大多数示例都是用 Eiffel 编写的,但我认为您在阅读它时应该不会遇到任何困难。当然,有些功能是 Eiffel 特有的(尤其是按合同设计的内置功能),但它们非常易读,并且在您正在使用的任何语言中都很有用。 (顺便说一句,我也不认识埃菲尔)。
【解决方案3】:

我完全理解你的情况。还拥有其中三本书;)我建议使用 Head First 版本。面向对象的分析和设计。这将使您走上正确的轨道。 GoF 书很棒,但在您通过头脑掌握基础知识之前毫无用处,而 Head First 书会解决这个问题。干杯:)

【讨论】:

  • Thnx,这让我觉得我并不孤单。我一直认为 Head First 系列旨在给出一个过于基本但温和的介绍。我会研究这个建议!
  • 是的,首先通过 Head First OOAD。你最后买了哪本书?
【解决方案4】:

实际上做编程比阅读做编程的帮助更大。

“因一些非常基本的决定而瘫痪”是一个更深层次问题的症状——过度设计。直到你构建了很多东西,你才真正知道哪些决定重要,哪些不重要。

获得必要经验的最佳方式是构建大量内容。

代码 Kata 非常非常重要。 http://slott-softwarearchitect.blogspot.com/search/label/code-kata

另外,我收集了一堆我在一个大型项目中使用过的代码 kata。 http://homepage.mac.com/s_lott/books/oodesign.html

【讨论】:

  • 虽然这不是一本书,但它们看起来像是有据可查且动机良好的用例。 thnx 为指针
  • @S.Lott:我想知道您对 OOAD 的看法(记住 OP 的问题)。你认为 OO 有生命了吗?我认为最终一切都在发挥作用。而且,人们仍然没有一种编写 OO 代码的好方法。这让人们为 OO 的风格而争吵。关注点/OCP 等的分离似乎非常适合函数式风格(注意:我在函数式编程语言方面根本没有任何经验。但这是我的直觉,在编写了一段时间的“OO”代码之后&认为它正在失去价值)。您的发言会有所帮助:)
  • 功能软件系统也面临着大规模设计和信息隐藏的问题。 《设计模式》一书被一些人描述为在 OO 中执行 FP 的方法。嗯,还在等FP中实现OO信息隐藏和受控重用的对应书……
  • OO 不会被功能性取代。函数式 OO 编程是我所做的。我是 Python 中无状态对象的重度用户。没有“一种好方法”可以做任何事情,所以这不是对 OO 的反对意见。 OO 在任何意义上都不是“失去价值”。您正在学习函数式,但您仍然了解对象,并且仍会以函数式风格使用它们。
  • @Exception e:代码 kata 的“书”很愚蠢。它每隔几个小时就会过时。另一个链接一本书。我没有得到你的评论,我不明白为什么“书”如此重要。书籍是压在纸上的网站,不是吗?
【解决方案5】:

Robert C. Martin “敏捷软件开发:原则、模式和实践”向您解释了 OO 的原则

Eric Evans:“领域驱动设计”涉及如何根据您的业务问题做出好的设计

Martin Fowler:关于企业架构基本原则的“企业应用架构模式”

【讨论】:

    【解决方案6】:
    【解决方案7】:

    确定设计是否稳健的唯一方法是实现它。没有一本书可以教你如何产生可实施的设计,它归结为经验和才能。不过,我对 Bertrand Meyer 的书投了第二票——请注意,它不会让你成为 OO 设计之神。

    【讨论】:

      【解决方案8】:

      Craig Larman 的Applying UML and Patterns 总结了很多关于我从经验中学到的东西。我喜欢它的地方在于它解决了软件设计的所有方面——包括迭代设计和开发之类的东西。不要太盯着 UML 的使用:设计描述是达到目的的一种手段,我发现 Larman 的方法相当实用。您不能只编写代码:您必须传达您的意图(并了解需要什么)。 UML 和设计简洁、注释良好的代码是实现这一目标的一些手段。

      当然,正如其他人所说:没有一本书能让你成为一名优秀的开发人员或设计师。但这可能有助于加快这一进程。

      【讨论】:

        【解决方案9】:

        首先,我建议 Head First Object Oriented Analysis and Design。 它指导您以简单直观的分步方法构建面向对象应用程序。

        【讨论】:

          【解决方案10】:

          虽然我倾向于 Rational UP,但我发现这两个提供了很多关于 OO 设计的见解。

          • 应用 UML 和模式 - Craig Larman
          • UML 2 和统一过程:实用的面向对象分析和设计 - Jim Arllow 和 Ila Neustadt

          【讨论】:

            猜你喜欢
            • 2011-10-14
            • 2011-07-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多