OOP概念混乱?

OOP概念混乱?,oop,Oop,在阅读一些编程书籍时,我注意到作者说,在OOP中,在理解OOP的主要思想时,您可能会有一些困惑 是啊!。我有些困惑。你有没有同样的问题?是什么让程序员(甚至是有经验的程序员)感到困惑 如果你有它,你怎么能打败它 谢谢当向大多数人解释动物时,这个比喻很有效 (更多有用的链接和)我认为,特别是在面向函数语言开发方面经验丰富的程序员,在理解面向对象的概念方面遇到了困难。至少,这让我很困惑,我在使用OOP语言(Java)的时候做了很多事情来编写函数 但我也认为OOP方法对初学者来说是一件很好的事情,因为

在阅读一些编程书籍时,我注意到作者说,在OOP中,在理解OOP的主要思想时,您可能会有一些困惑

是啊!。我有些困惑。你有没有同样的问题?是什么让程序员(甚至是有经验的程序员)感到困惑

如果你有它,你怎么能打败它


谢谢

当向大多数人解释动物时,这个比喻很有效


(更多有用的链接和)

我认为,特别是在面向函数语言开发方面经验丰富的程序员,在理解面向对象的概念方面遇到了困难。至少,这让我很困惑,我在使用OOP语言(Java)的时候做了很多事情来编写函数


但我也认为OOP方法对初学者来说是一件很好的事情,因为这种方法非常“自然”。

学习OOP时,很多困惑来自于试图在对象和对象类之间选择正确的关系,特别是:

  • 对象
    包含
    其他对象
    (或
    Object1
    有一个
    Object2
  • 对象

如果我能想出一个很好的例子来说明其中任何一个可能是合适的,我会加上它…

谢谢你的回答

我认为举例最好,但不是每次都是这样,对吧


我听说C++的创建者,他说,这需要时间和耐心,你会通过尝试更好地理解它。

< P>我从来没有真正困惑过,但我学会了沿着时间轴进化编程。因此,我有汇编,C,C++,爪哇,C和其他负载,这在这里是不相关的。您必须接受的是,所有内容都应由对象表示,对象包含描述自身的信息(属性),并且可以执行与其相关的任务(方法:Car.GetAllCars();)


对于继承和多态性以及所有其他方面,我推荐实践。实践一切——因为实践使人完美。尝试开发所有书籍中给出的示例。

了解oo基础知识后,请查看设计模式和设计原则(例如通过阅读)。它将教会您如何实际使用oo提供的工具。虽然这不能取代实践经验,但它肯定可以加快学习过程。

是的,我最初有点困惑。这要追溯到OO刚刚开始成为主流的那一天,所以有很多书都介绍了它,但是没有为那些还不知道它是什么的人很好地解释它。因此,我开始认为对象和类在很大程度上是可互换的,并为我想要创建的每个对象定义一个新类


我最终通过使用面向对象的游戏内编程语言在LambdaMOO上玩“得到了它”。LambdaMOO是一种MUD(想想魔兽世界,但没有图形)。讽刺的是,MOOCode没有区分类和对象——对象直接从其他对象继承。(它确实有一个将对象作为“基类”使用的约定,将其命名为“泛型Foo”,以区别于特定(“实例”)Foo,但这与类/对象的区别一样接近。)

面向对象编程采用“面向问题”的编程方法,而不是传统的“面向机器”的编程方法在C和Pascal等语言中使用的方法。如果您广泛使用过程语言/函数语言编程,学习OOP可能会非常困难。对这些程序员来说,事情往往更令人困惑。如果你是编程新手,你可能会发现事情不那么令人困惑,因为你是以一个全新的思维开始的

话虽如此,我见过许多程序员,他们广泛使用Java等语言,声称自己是优秀的OOP程序员,而实际上他们离它还很远。确保他们使用Java语言的特性,如接口、继承等,并创建对象“类的实例”和“向对象发送消息”。大多数人使用很多面向对象的行话,因为他们接触到它。但当涉及到编写一个简单的应用程序时,他们的代码暴露了他们的理解能力差

我给你的建议是不要一个人使用行话。认真提问并学习基本概念。当您了解多态性及其给代码可重用性带来的好处时,您可能会有您的第一个半涅盘(就像我一样)。当您理解通过继承重用和通过组合重用之间的权衡时,这是另一个半涅盘。最后,如果你能够设计得很好,你就会知道你已经很好地理解了OOP,或者更确切地说,一个好的OO设计可以很容易地衡量你对OOP的理解程度


如果你对OOP很认真,你应该阅读本书的前两章。这对新程序员来说可能有点难,但它奠定了OOP背后的思想核心。这本书是任何严肃的OOP程序员都应该拥有的重要参考资料。如果你理解这本书中的概念,把自己看作是一个好的面向对象的程序员。

< P>确实,我认为过于强调“类”的概念。 在我的理解上最大的飞跃是当我读到关于“告诉,不要问”的原则时

我只是在玩(和阅读)duck类型的环境(如Ruby、JavaScript、Python等)时才开始“感觉”面向对象。。。在8年后,在C++中愉快地创建了一系列的类。 静态类型语言对于生产代码来说是非常好的,但是当您试图获得面向对象的感觉时,您会付出大量的开销

此外,除了常用的术语OOP之外,人们通常会忘记首先出现OOA