如何发展*现实生活* oop技能?

时间:2008-11-09 22:56:23

标签: oop ooad

我一直在研究OOP已经有一段时间了,我对这个理论有了很好的把握。我阅读了关于OOP的Head First书,虽然它强化了很多理论,但我发现案例研究有点微不足道。

我发现我每天都会将OOP原则应用到我的代码中,但我不确定我是否正确应用它们。我需要到达能够查看我的代码并知道我是否正确使用继承,我的对象是否足够内聚等等。

有没有人有任何好的建议(书籍,在线指南,博客,演练等),以便在开发可靠的OOP技能方面迈出下一步?

我主要在.NET(visual basic)工作,但我欢迎包含各种平台的建议。

12 个答案:

答案 0 :(得分:15)

阅读Martin Fowler撰写的Refactoring,并将其应用到您自己的工作中。

它将引导您了解一系列软件代码的恶臭特征,这些特征描述了如何检测不正确构造的类,更重要的是,如何修复它们。

答案 1 :(得分:10)

考虑研究设计模式。虽然它们似乎并不常用于企业应用程序(我已经看到它们在API和框架中更常用于嵌入到企业代码中),但它们可以应用于在很多情况下使软件更简单或更强大只有开发人员知道如何应用它们。

关键是首先要了解设计模式,然后根据经验学习如何应用它们。

有一个Head First book on design patterns非常简单地教授这个概念,虽然如果你想要一本真正涵盖设计模式的书,请查看Gang of Four design patterns book,这基本上是设计模式的主流和几乎每次提出这个话题时都会提到。

设计模式可以在某种程度上应用于任何面向对象的语言,尽管在某些情况下某些模式可能过度或过度工程。

修改
我还想补充一下,你应该查看书籍Code Complete 2。它是软件开发领域非常有影响力的书。它涵盖了许多不同的概念和理论。每次读书都会学到新东西。这是一本很好的书,如果我每6个月到一年阅读一次,我会从不同的角度来看待它,这使我成为一个更好的程序员只需重新阅读它。无论你认为自己知道多少,这本书都会让你意识到你真正知道的有多少。这真是一本好书。我不能强调你应该拥有多少本书。

答案 2 :(得分:5)

如果你已经掌握了基础知识,我相信只有经验才能让你更进一步。你说你不确定你是否正确应用这些原则,但没有一种正确的方法。你今天写的代码,你将在6个月的时间内看到,并想知道你为什么这样写它,并且可能知道一种更好,更清洁的方法。我还保证,10年后,你仍然会学习新的技巧和技巧。不要太担心它,它会来,尽可能多地阅读,并尝试应用你在小块中阅读的内容。

答案 3 :(得分:5)

我目前正在阅读以下一本书:

http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0131489062

我不能强烈推荐这本书,以便在深入研究代码之前学习一种真实的,专业级的,实用的方法来起草和应用格式良好的迭代设计策略。

我也读过“ Head First ”一书,感觉自己阅读起来要好得多。

在拥有几年的工作世界经验之后,我现在看到Craig Larman的书,我建议对我来说这是一个完美的“下一步”。

关于本书标题中“UML”的存在:

无论您对UML符号有正面感受还是消极情绪,请不要让这影响您决定以任何方向购买该书(ISBN 0131489062)。

标题中“UML”的突出性具有误导性。虽然作者确实使用并解释了UML符号,但这些解释非常适合于相关的设计讨论,并且本书在任何时候都不会像无聊的UML规范那样阅读。

事实上,这是直接从这本书中引用的引用:

  

重要的是知道如何在对象中进行思考和设计,这是一种与了解UML符号相比非常不同且更有价值的技能。在绘制图表时,我们需要回答关键问题:对象的职责是什么?谁与它合作?应该采用哪些设计模式?比了解UML 1.4和2.0之间的区别要重要得多!

这本书有时似乎是“与”主要建筑师或项目经理“交谈”。我的意思是,它假定读者可以对软件项目的规划和方向进行重要控制。

尽管如此,即使您只负责公司的一小部分项目和产品,我仍然会推荐这本书,并鼓励您对本书的建议应用一些“按比例缩小”的修改。

答案 4 :(得分:4)

很久以前,我的OOP顿悟来自Grady Booch的书。突然间,我意识到为什么对象是好的。

虽然多态性很酷,但封装是对象酷的原因的75%。它有点像接口:你看按钮而不是接线。在对象之前,只有最有纪律的编码员才能将他们的肮脏手指从其他人程序的内部位置上移开(称为“结构化编程”)。

对象可以轻松做正确的事。继承和多态是很少的奖金。

了解对象的一种方法是阅读其他人的代码。通过阅读Delphi VCL框架的源代码,我学到了很多东西。即使只是查看Java的文档,也可以帮助您了解单个对象类应该做什么以及如何将其设计为供其他对象使用。

启动你自己的项目并注意当你想要对自己的类进行子类化并发现你必须返回并拆分一些受保护的方法,这样你就可以只覆盖一个进程而不是替换所有进程它的。通过调用抽象函数来了解祖先如何与后代交谈。换句话说,要犯很多错误并从中吸取教训。

享受!

答案 5 :(得分:3)

坦率地说,重新阅读旧的David Parnas关于信息隐藏的论文可以帮助我保持正确的心态。案例研究可能无法直接应用,但您应该能够从中获得一些有用的概括。

答案 6 :(得分:3)

当我试图在VB6中实现一个非常OO问题(动态地和递归地构建SQL语句)时,我的顿悟就发生了。理解多态或继承的最好方法是需要它而不能使用它。

答案 7 :(得分:1)

一件肯定会帮助你的事情是开发一个着名的,受人尊敬的开源项目。要么深入挖掘源代码,看看事情是如何完成的,要么尝试进行一些补充/修改。您会发现大多数问题都没有一种风格或一种正确的答案,但通过查看几个项目,您将能够全面了解如何完成任务。从那里开始,你将开始发展自己的风格,并希望在此过程中为开源做出一些贡献。

答案 8 :(得分:1)

我认为您必须尝试并且未能实施OO解决方案。无论如何,我就是这样做的。我的意思是失败是你在成功提供有效的解决方案时最终编写了恶臭的代码。在写完之后,你会感觉到事情并不那么正确。你可能有一些顿悟,和/或你可能去寻找其他程序员的一个更光滑的解决方案。毫无疑问,你会偶然实现一些标准设计模式的变化。事后看来,灯会点击(哦!这就是访客的用途),然后理解会加速。

正如其他人所说,我认为通过一些优秀的OO开源代码进行工具是一个好主意。因此,与更有经验的程序员合作,他们愿意批评你的工作。然而,理解来自于做。

答案 9 :(得分:0)

你可能想尝试一段时间读取(并写入)一些Smalltalk。 Squeak是一个免费的实现,可以向您展示完全面向对象的环境(与java或.net不同)的强大功能。包含所有库代码源。语言本身非常简单。你会发现java和c#正在慢慢添加自1980年以来Smalltalk众所周知的功能。

答案 10 :(得分:0)

Tortoise HG是一个非常精心设计的OO开源软件(用Python编写)。

如果您已经了解了基础知识,那么从完全面向对象的语言开始构建一些东西将是完全理解OOP软件架构的一个很好的步骤。如果您不了解Python,Python Essential Reference将在几天到一周内完整地通过该语言。

在您理解了语言之后,请查看上面的软件,您将拥有各种各样的顿悟。

答案 11 :(得分:0)

要彻底了解任何事情,你需要对上面至少一个抽象级别和低于它的一个级别有一个很好的知识。在OO的情况下,其他人已经提到设计模式作为OO以上的层。这有助于说明OO为何有用。

就OO下面的层而言,尝试使用高阶函数/后期绑定一段时间,并了解如何使用这些相对简单的结构。另外,尝试理解OO是如何在引擎盖下实现的(vtable等)以及它如何在纯C中完成。一旦你了解了使用高阶函数和后期绑定的价值,你就会很快意识到OO是只是传递一组相关函数及其操作数据的方便语法。