我怎样才能练习更好的面向对象编程?

Sup*_*tux 76 oop

我已经用面向对象语言编程多年了,但我偷偷地看了一些同事们羡慕的事情.他们中的很多人似乎都有一些内心的OO本能,我没有 - 无论我怎么努力.我已经阅读了所有关于面向对象的好书,但似乎仍然无法破解它.我觉得那个让110%成为职业足球运动员但却没有天赋才能成功的人.我不知所措,想要转换职业 - 我该怎么办?

zom*_*bat 118

我会说减少对OO编程的关注,更多地关注OO 设计.拿起纸和铅笔(或者可能是UML建模工具),然后离开屏幕.

通过练习如何设计系统,您将开始对对象关系有一种自然的感觉.代码只是设计的副产品.绘制图表并以纯粹的非代码形式为您的应用程序建模.有什么关系?你的模型如何互动?甚至不要考虑代码.

一旦你花时间设计......然后将其翻译成代码.您会惊讶于从优秀的OO设计中编写代码的速度有多快.

经过大量的设计实践,您将开始看到可以模块化或抽象化的公共区域,并且您将看到设计和代码的改进.

  • 我很感激你的想法..! (2认同)

And*_*mer 37

最简单的方法是学习SOLID,DRY,FIT,DDD,TDD,MVC等概念.当你查阅这些缩略词时,它会引导你进入许多其他兔子洞,一旦你完成阅读,你应该有一个很好地理解什么是更好的面向对象编程!

SOLID播客:http://www.hanselminutes.com/default.aspx? showID = 168 ,http://www.hanselminutes.com/default.aspx? showID = 163

固体细分:http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

干:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself

FIT:http://www.netwellness.org/question.cfm/38221.htm

DDD:http://dddcommunity.org/

DDD需要阅读:http://www.infoq.com/minibooks/domain-driven-design-quickly

TDD:http://en.wikipedia.org/wiki/Test-driven_development

MVC:http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

是的,卷起袖子和编码总是一个好主意.尽可能利用当前的能力制作一个小项目.然后阅读上面的一篇文章.然后重构代码以满足您刚刚阅读的内容的需求.重复,直到你重构了你的代码.最后你不仅应该知道OO是什么,而且你应该能够解释它为什么重要以及如何第一次获得它们.学习如何重构也是良好代码的关键.现在的事情明天不对.


小智 17

太多人会想到编码,对象,最后.

你可以阅读你想要的所有书籍,但这不会教会你如何以面向对象的方式思考 - 这需要练习和某种方法.

  1. 以下是一些帮助我的方法:当你离开工作并且心胸开阔时,你可以通过将所有东西看作一个对象练习.不要看这些对象并想知道你将如何对它们进行编程,只将它们视为属性和函数以及它们如何相互关联或继承.例如,当你看到一个人时,他们就是一个对象,因此代表一个类.它们具有头发颜色,肤色,高度等特性.它们也具有某些功能.他们走路,说话,睡觉等等.这些人做的一些功能会产生结果.例如,他们的工作函数返回一个美元金额.你可以用你看到的一切来做到这一点,因为一切都是一个对象.自行车,汽车,明星等

  2. 在编写项目之前,请使用便利贴和干擦板进行设计.这将是很好的练习,直到你掌握这一点.想想你的特定对象/功能/属性.每个项目都有自己的便利贴.将它们作为层次结构放在干擦板上.在这方面,函数/属性将放在对象下.如果您有另一个对象,请对该对象执行相同操作.然后问问自己,做这些便条(对象/功能/属性)中的任何一个是否相互关联.如果两个对象使用相同的函数,则创建一个父对象(便利贴)并将其放在其他对象上,并使用新笔记下的可重用函数.使用干擦标记从两个子对象到父对象绘制一条线.

  3. 完成所有这些后,就要担心类的工作原理.


jal*_*alf 13

我的建议是学习不同的东西.

学习函数式编程,并将您从中学到的知识应用到OOP中.如果您了解C++,请使用泛型编程.

学习非面向对象的语言.

不仅因为你应该使用所有这些东西(你应该),或者因为它们应该完全取代OOP(它们可能不应该),但是因为你也可以将这些教训应用到OOP中.

OOP的秘诀在于使用它并不总是有意义的.并非一切都是一个阶级.并非每个关系或行为都应该被建模为一个类.

盲目地尝试应用OOP,或者努力编写最好的OOP代码往往导致巨大的过度工作混乱,具有太多的抽象和间接水平以及极小的灵活性.

不要试图写出好的OOP代码.尝试编写好的代码.当它有助于实现这一目标时使用OOP.


Bil*_*win 12

在许多领域都有一个"尤里卡"时刻,一切都融合在一起.

我记得在高中几何学中感到沮丧.我不知道哪个定理适用于证明的每一步.但我坚持下去.我详细了解了每个定理,并研究了它们如何应用于不同的示例证明中.我不仅理解每个定理的定义,而且理解如何使用它,我建立了一个熟悉技术的"工具箱",我可以根据需要提取出来.

我认为它在编程中是一样的.这就是研究和分析算法,数据结构和设计模式的原因.阅读一本书并获得技术的抽象定义是不够的.你必须在行动中看到它.

因此,除了练习自己编写代码外,还要尝试阅读更多代码.这是一个开源的美,你可以下载大量的代码来学习.并非所有代码都是好的,但研究不良代码可能与学习优秀代码一样具有教育意义.


Ach*_*him 10

学习不同的语言!大多数仅使用Java的开发人员(仅作为示例)对OO的理解有限,因为他们无法区分语言功能和概念.如果您还不知道,请查看python.如果您了解python,请学习Ruby.或者选择一种功能语言.


Nei*_*l N 7

aswer是你的问题;)

实践,实践,实践.

检查您自己的代码并从错误中吸取教训.


jam*_*vey 5

TDD帮助我提高了整体技能,包括OOP.