在阅读一些编程书籍时,我注意到作者说,在OOP中,在理解OOP的主要思想时可能会有一些混乱。
天啊,是的!我有些困惑。你有没有相同的东西,这让程序员(甚至是有经验的程序员)感到困惑?!
如果你拥有它,你怎么能打败它?!
由于
答案 0 :(得分:4)
答案 1 :(得分:3)
学习OOP时的许多困惑来自于试图在对象和对象类之间选择正确的关系,尤其是:
Object
包含 Some other Object
(或Object1
一个Object2
)Object
是Class
如果我能想出一个很好的例子来说明哪一个可能合适,我会加上它......
答案 2 :(得分:3)
OOP采用“面向问题”的方法来编程,而不是在C和Pascal等语言中使用的传统的“面向机器”方法。如果您在程序/功能语言中进行了大量编程,那么学习OOP会非常困难。对于这些程序员来说,事情往往更加混乱。如果你不熟悉编程,那么你可能会发现事情变得更加困惑,因为你开始时心情很好。
话虽如此,我见过许多程序员,他们使用像Java这样的语言进行了广泛的工作,并声称自己是一个优秀的OOP程序员。当然,他们使用Java语言功能,如接口,继承等,并创建“作为类的实例”的对象,并“向对象发送消息”。大多数人使用大量的OOP术语,因为它们暴露于它。但是当它归结为编写一个简单的应用程序时,它们产生的代码暴露了它们的不良理解。
我建议你不要单独使用行话。努力学习并深入学习基本概念。当你学习多态性及其为代码重用性带来的好处时,你可能会有你的第一个半必杀技(就像我做的那样)。当你理解通过继承重用和通过组合重用之间的权衡时,另一个半必杀技。最后,如果你能够很好地设计,你会知道你已经很好地理解了OOP,或者说,一个好的OO设计很容易衡量你对OOP的理解程度。
如果你认真对待OOP,你应该阅读GOF book on Design Patterns的前两章。对于新程序员来说,这可能有点难度,但它奠定了OOP背后思考的关键。本书是任何严肃的OOP程序员都应该具备的重要参考书。如果你很好地理解了本书中的概念,那就认为自己是一个优秀的OO程序员。
答案 3 :(得分:2)
是的,我最初经历了一些困惑。这是在OO刚刚开始成为主流的那一天,因此有很多书都覆盖了它,但对于那些还不知道它是什么的人来说并没有很好地解释它。结果,我开始认为对象和类在很大程度上是可以互换的,并为我想要创建的每个对象定义一个新类。
我终于通过使用面向对象的游戏内编程语言的MUD(想想魔兽世界,但没有图形)玩LambdaMOO来“得到它”。具有讽刺意味的是,MOOCode不区分类和对象 - 对象直接从其他对象继承。 (它确实有一个用作“基类”的对象约定,被命名为“Generic Foo”,作为区分它们与特定(“实例”)Foos的一种方式,但它与类/对象的区别接近,因为它了。)
答案 4 :(得分:2)
事实上,我认为过分强调“阶级”概念。
我的理解中最大的飞跃是阅读“讲述,不要问”的原则。
在玩弄(并阅读)像Ruby,JavaScript,Python等类似鸭子的环境时,我才开始'感受'面向对象......经过8年的愉快,用C ++创建了大量的类。
静态类型语言非常适合生产代码,但是在尝试感受面向对象时会花费很多开销。
此外,在常用术语OOP旁边,通常会忘记首先是OO A 和OO D 。
答案 5 :(得分:1)
我认为特别是那些在面向功能语言开发方面经验丰富的程序员难以理解OOP的概念。至少,这对我来说真的很困惑,我在使用OOP语言(Java)时编写了很多功能来编程。
但我也认为OOP方法对初学者来说是一件好事,因为这种方法非常“自然”。
答案 6 :(得分:1)
我从来没有真正感到困惑,但我沿着时间轴学习了编程。所以我有汇编,c,c ++,java,c#以及其他与此无关的负载。你必须接受的是,一切都应该由一个对象来表达,一个对象包含描述自身(属性)的信息,并且它们可以执行与它们相关的任务(方法i.E。:Car.GetAllCars();)。
对于继承和多态性以及其他所有我建议练习。练习一切 - 因为练习是完美的。尝试开发所有书中给出的例子。
答案 7 :(得分:1)
了解oo基础知识后,请查看设计模式和设计原则(例如,阅读Head First Design Patterns)。它将教你如何实际使用oo给你的工具。虽然这不能替代实际经验,但它肯定可以加快学习过程。
答案 8 :(得分:0)
感谢您的回答。
我认为提供示例的效果最好但不是每次都是,对吧?!
我听说C ++的创造者说,需要时间和耐心,你会通过尝试来更好地理解它。