如何构建面向对象的技能?

时间:2010-05-08 12:18:48

标签: oop

作为核心开发人员几年,编写应用程序看到类图,序列图,我决定改进自我,采取下一步设计。 由于我是OO开发人员,我有兴趣提高我的设计技能。

例如,我很难设计货币转换器。

我对SO的问题:

  • 是否通过体验设计技巧 可以被收购?
  • 将学习书籍/博客/材料 在互联网等帮助?
  • 是否需要域名 应用程序的知识 开发?
  • 了解设计模式,原则?
  • 学习“代码完整”一书?
  • 需要解决问题的能力吗?

总之,给定一个问题,我只想以面向对象的方式解决它?

9 个答案:

答案 0 :(得分:8)

在进行良好的OO设计之前,你必须做坏的OO设计。

一个梦幻般的项目将采用您的货币转换器并慢慢移动代码以使用OO概念。 OO是一个创造性的过程:没有错误的答案,但确实存在更糟糕和更好的答案。基本上,当您的代码保留功能并且更短/更容易阅读时,它会更好。当它在不增加更多代码的情况下获得灵活性时,这也会更好。但这是一个创造性的过程。使用像GIT这样的版本控制系统,可以轻松“撤消”,尝试填充,并避免误操作。 OO设计是一个过程。

  
      
  • 是否通过体验设计技巧   可以被收购?
  •   

  
      
  • 会学习   书籍/博客/互联网资料等   帮助?
  •   

  
      
  • 是否需要域名   应用程序的知识   发达?
  •   

是的,但我认为太熟悉这个领域可能搞砸了好的设计。在与航空公司程序员合作时,我注意到已知的,无疑的抽象(“票证”,“预订”)抑制了良好的OO设计。您的OO模型真实世界模型。这是你的计划的模型。

  
      
  • 了解设计模式,   原则?
  •   

是的,总是越多越好。

  
      
  • 学习'代码完成'   书?
  •   

很多人都说这是一本好书。但是,你读过Italo Calvino吗?还是豪尔赫·路易斯·博尔赫斯?各种书籍都有帮助。

  
      
  • 需要解决问题   技能?
  •   

没有。通过应用OO(或任何其他范例),您可以获得解决问题的技能。

答案 1 :(得分:4)

很明显,如果你想学点东西,你必须练习。如果您想学习如何成为更好的程序员,练习编程将有所帮助。如果你想学习如何成为一名优秀的OO程序员,那么练习OOP显然会对你有所帮助。问题解决技巧和领域知识是每个优秀的程序员需要拥有的东西,而不仅仅是OOP。那里有很多好书,如果你不是“非常专注于得到一些不合适的人”类型的人,他们可能会帮助你。

Here是一本编程书籍清单。从这个列表中,“设计模式”和“重构”似乎非常关注OOP(我没有阅读“Head first design patterns”,也许它也是如此)。我认为,我从(OOP,功能和其他概念)中学到的最多的书是“计算机程序的结构和解释”。

答案 2 :(得分:3)

我认为你有点错误,因为有些问题根本不需要面向对象的解决方案。解决方案应该与问题相匹配,而不是相反。

但是,作为一个更好的面向对象的设计师,没有灵丹妙药。在我看来,最好的方法是写一个复杂的程序,然后坚持几年。

答案 3 :(得分:3)

面向对象设计面临的最大挑战不是学习实现技术,而这些技术自然会带来时间和经验。最大的挑战是充分理解问题领域,你可以用对象模型清楚地抽象它。这是你在问题中遇到的一点,我认为这肯定是最关键的问题之一。如果问题得不到充分理解,那么您将面临为错误问题实施解决方案的风险。此外,它本身很容易陷入抽象和建筑之美,忽视原始任务。

答案 4 :(得分:2)

  • 根据经验,可以获得设计技巧吗?

经验和天生的能力 - 有些人根本做不到。

  • 通过互联网等学习书籍/博客/资料会有帮助吗?

当然。但他们不会把你变成一个OO神。

  • 是否需要正在开发的应用程序的领域知识?

您需要拥有它,或者您需要访问某人。

  • 了解设计模式,原则?

了解哪些设计模式将是一个良好的开端 - 它们只是常见的做事方式 - 没有什么神奇之处。

  • 学习“代码完整”一书?

我曾经在书店里翻过它。

  • 需要解决问题的能力吗?

显然是的,我会想到的。

答案 5 :(得分:2)

我建议你学习Smalltalk。是的......我知道它有点过时,但我认为这是实验,欣赏和“享受对象定位”的唯一环境。

在Smalltalk中,IDE中的所有内容都是一个对象。您可以在不浪费时间的情况下考虑对象,例如标题/源文件,编译等。

下载Squeak Smalltalk(http://www.squeak.org/)的副本并开始练习

答案 6 :(得分:2)

尝试学习并真正掌握“抽象”的含义。我的意思是抽象作为一般概念,至少它适用于计算机科学和软件工程。 从抽象遵循面向对象。因为,抽象是将系统中的概念与实现分离,例如系统或应用程序的任何逻辑表示都是抽象。任何应用程序/系统的建模都是抽象的。因此,在对应用程序/系统/问题进行建模的许多方法中,一种称为面向对象的方式。所以,首先是抽象。一旦你获得了抽象点,那么在大多数情况下,你会发现在许多建模方法中,面向对象的建模是优越的。这就是你如何理解OO。

然后,抽象遵循面向对象的基本原则:抽象数据类型,信息隐藏等,以及实现它们的机制,如封装,继承等。

答案 7 :(得分:0)

为你的观点编号 - 我认为2-6很棒,我认为任何编写代码的人都应该阅读完整的代码,即使它不是OO。但遗憾的是,第1点似乎是最重要的!

我认为这是我们职业中的一个问题。我们在工作中学习而不是学习优秀的代码。所以基本上每个人都在学习方面重新发明轮子。

答案 8 :(得分:0)

此外,您可以使用单元测试作为改进课程设计的工具。