作为核心开发人员几年,编写应用程序看到类图,序列图,我决定改进自我,采取下一步设计。 由于我是OO开发人员,我有兴趣提高我的设计技能。
例如,我很难设计货币转换器。
我对SO的问题:
总之,给定一个问题,我只想以面向对象的方式解决它?
答案 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)
此外,您可以使用单元测试作为改进课程设计的工具。