【问题标题】:The best learning route into Object Oriented Programming from C? [closed]从 C 到面向对象编程的最佳学习途径? [关闭]
【发布时间】:2011-01-18 09:06:22
【问题描述】:

如果有人用 C 进行过一些编程,那么学习 OOP 的最佳途径是什么。

我的意图是首先进行自然飞跃和“以一递增”并选择 Stroustrup。但是自从我接触到了小老 Bertrand Meyer 的 OOSC2 并且我引用了附录第 1135 页 ".. 根据 Donald Knuth 的说法,Edsger Dijkstra '一想到用 C++ 编程就会身体不适" 还有 Meyer 本人“..C++ 不是理想的 OOP 语言...”

关于这个问题的 C++ 评论:A critique of C++

如果我的目的是对现代 OOP 语言有深刻而深刻的理解,我应该跳过 C++ 并直接使用 C# 和/或 Java,还是我错过了 C++ 中关于这个主题的优点?

好吧,我知道这是一个讨论问题,但我将其标记为 wiki,您的回答可能对我未来的选择意义重大。

【问题讨论】:

  • Bertrand Meyers 并不是一个公正的证人。你所链接的批评是彻底的污点。然而,这并不意味着你应该学习 C++。
  • 你的意思是迈耶斯向另一边倾斜?
  • 迈耶斯有他自己的语言要推动 - 埃菲尔。可悲的是没有人使用它,所以他对 C++ 的成功有些苦涩(委婉地说)。
  • @Chris_45 - Meyers 是 Eiffel 的作者,它与 C++ 几乎同时创建,因此处于持续激烈的竞争中(尽管从未在任何类似的规模上被广泛采用)。当 Java 起飞时,Meyers 主要转向攻击 Java。现在他转向攻击函数式编程语言。
  • 好的,我接受了这里所说的所有有趣的东西,但是关于那篇文章“评论......”的故事是什么?它是否值得信赖,如果不是,为什么?

标签: c# java c++ oop


【解决方案1】:

忘记工具或过去(C++、oop、C##、学习、思考、尝试)。让我们鼓励创造力和动力。新的方法让我们碰撞到未来。

我喜欢技术的地方在于它才刚刚开始,就像艺术或数学一样

我相信,懒惰的严重阅读障碍者(懒得假装聪明)是进化的下一步;),之后的一步将是人工大脑。到那时,我们都将永远活下去,尽情享受吧:)

就像设计师在现实生活中观察设计以获取灵感(水壶、门、电梯或建筑物)我在现实生活中观察抽象以获取灵感(或缺失的地方),银行风险系统(流程和规则的多维拓扑)或电子表格(单元格、行和列)电子表格与软件中的一组规则,因此视觉性适用于人脑,而简单的抽象性也有助于大脑理解领域。 使用复杂而复杂的系统成为懒惰的Thicko(我)的工作

我希望在我的 API 中包含这些相同的好处

祝你好运,上帝保佑

【讨论】:

    【解决方案2】:

    在自己阅读书籍和尝试示例一年后,我崩溃了,并在当地社区大学上了一门“Java 中的面向对象编程”课程。我能够在我自己失败的课堂环境中学习。 (这对我来说很不寻常——我已经设法自己学习了很多技术)。我认为课堂环境有一位可以解释事情的真正老师,其他学生一起讨论事情,以及小而有用的作业和课堂项目来练习新学的材料是一个很好的组合。

    其他许多学生都是 IT 专业人士。我做了一些很好的接触。唉,这是 18 年前的事了,我几乎和他们都失去了联系。

    不利的一面——这确实要花钱,但可以负担得起,一年后我被解雇时,我能够找到一份 Java 程序员的工作。

    【讨论】:

      【解决方案3】:

      正如其他人在这里已经提到的那样,C++ 支持不止一种编程范式。可能最引人注目的是将类和对象与“全局”函数混合在一起,这很容易在同一个文件和上下文中实现。

      但在我看来,C++ 中有足够的 OOP 范式来使用该语言学习 OOP。为 OOP 本身提供一个好的指南更为重要。这样的指南将教您在 C++ 中使用面向对象的元素以及如何使用以及用于什么目的,它不会告诉您任何关于您也可以在 C++ 中创建的 C 风格函数的信息。

      对于您决定选择哪种语言,我建议您更深入地了解您在编程中真正想做的事情。如果是 Web 或富 UI 桌面开发,您将更多地使用 Java 或 C#,是否更接近系统开发,C++ 可能是更好的选择。 OOP,您也可以使用 C++ 和 Java、C# 或其他语言学习。

      对我来说,这有点像一个问题:“我想学习如何将文本从我的母语翻译成其他语言。我应该学习哪种第二语言?冰岛语还是斯瓦希里语?”对于这个决定,您是否讨厌寒冷或炎热的气候可能更重要。 (至少我认为这比某些语言学家可能不得不偏爱其中一种语言的论点更重要。)

      我认为确实,例如 C# 会比 C++ 更强迫您编写 OOP 代码,但它仅在语言语法方面这样做。但是 OOP 更多地是关于语义,这与语言无关。 sin(0.5)(C/C++ 中没有类上下文的函数)和 Math.Sin(0.5)(C# 中的类方法)之间没有语义差异。如果您最终在 C# 中创建大量静态类,那么学习 OOP 就会出现问题,尽管您遵循(必然)面向对象的语法。

      所以我的两分钱:尝试找到您在学习 OOP 之外的其他编程目标,并将这些目标添加到您想要潜入的语言的决定中。仅用于学习 OOP C++ 作为示例语言就可以了,而其他一些语言也是。

      我需要补充一点:我是从“实用”的角度说的,假设您确实想用所学的知识来工作和创建软件。如果你有一种纯粹的科学的、结构性的兴趣,我的论点可能全错了。那么也许所有 OO 语言中最纯粹的语言(Smalltalk?,可能不是 C++)是正确的选择,无论谁实际“说”这种语言以及出于什么目的。

      【讨论】:

        【解决方案4】:

        如果您从一本好书学习任何语言都可以。我从Bruce Eckel's books开始学习了C++和Java。

        在您了解 OOP 的一些基础知识后,我建议您阅读 Object-Oriented Programming with ANSI-C。它将让您深入了解 OOP 语言的工作原理,因为它从 C 中实现了一种 OOP 语言。

        【讨论】:

          【解决方案5】:

          我在 Ada95 和 C++ 中学习了 OOP,并且来自纯 C 和 Ada83。我认为用 C++ 学习 OOP 的概念并不难,因为我已经熟悉了句法元素和指针。

          你的目的是什么?成为一名优秀的 C++ 开发人员,还是仅仅了解 OOP?

          如果是后者,请选择一种您理解的语言并从那里开始。 Java、C#,甚至 C++ 都是不错的选择。如果是前者,您将不得不认真学习 C++ 以及它如何在幕后工作。成为一名优秀的 C++ 开发人员需要时间和实践。

          【讨论】:

            【解决方案6】:

            C++ 的基本思想是通过对其应用 OOP 语义来重用 C 语法习惯用法。这导致对象“在堆栈上”,将++ 用于迭代器,等等。 C 语法主要是为了便于 C 编译器的实现而开发的,而不是为了 OOP,结果是 C++ 是一种相当复杂的语言,不适合学习。

            Java 和 C# 学习起来要简单得多,同时仍然坚持 C++ 使用的基于类的 OOP 方法。 Java 比 C# 简单一点,因为 C# 的设计者了解 Java,并决定使用类似的语法和一堆额外的语法好东西。这些好东西使 C# 语法有点复杂,因此不太适合学习。

            OOP还有另一种结构方法,就是Smalltalk。使用这种方法的“现代”和广泛使用的语言是 Javascript。您可能想尝试一下。 Javascript 非常酷,您只需要一个 Web 浏览器即可试用,并且通过浏览器可以访问丰富的图形环境。同族的你不妨试试Lua,据说很简单,还挺流行的。

            【讨论】:

              【解决方案7】:

              只有在您想从事 C++、使用它的项目、维护 C++ 代码的工作(这将继续存在很多年)时才学习 C++。 C++ 远非一门死语言。

              但如今,对于任何开始新项目并执行 Web 应用程序、富客户端 GUI 等操作的人来说,它可能应该被视为一种利基语言。大多数典型的应用程序,C++ 将是一个弄巧成拙的选择,比如故意给自己添麻烦。

              但如果你喜欢真正的挑战,那就去吧。

              我对类似主题的更长回答:

              【讨论】:

              • 但是 Stroustrup 在他的网站上说,在“新”语言问世之前,他无法制作一本新书,这又如何呢?
              • 它是同一种语言,只是到处添加了几十个小东西;他可能只是意味着在委员会就最终标准达成一致之前更新他的书是没有意义的。
              • @Chris_45:C++++0x 仍然是同一种语言,只是更好。它不会改变 C++ 作为“不是真正专用的 OOP 语言”的地位。这对 C++ 程序员来说是个好消息,但它并不真正影响对您问题的回答。
              【解决方案8】:

              尽管我认为很多对 C++ 的批评是公平的,但最终 Java 和 C# 在 OOP 范式中与 C++ 并没有显着差异,这显然对它们都产生了巨大的影响。说学习 C++ 而不是 Java 会错误地学习 OOP,这有点愚蠢,因为它们的 OOP 模型非常相似。

              并且谈论该语言的程序员碰巧使用的一堆技术(模板编程),并且表现得像你必须使用的东西是愚蠢的。说你可以“退回到 C”是另一个愚蠢的理由——你可以在任何语言中避免 OOP(例如,在 Java 中,你可以在一个类中编写程序)。

              想知道通过 Java 或 C# 学习 C++ 的最佳理由之一吗?还有很多有趣的项目已经在 C++ 中,然后在其他两个中。这会随着时间而改变,但在 SourceForge 上环顾四周,似乎 C 和 C++ 仍然是我觉得有趣的项目类型(游戏、网络浏览器等)的主要语言。

              【讨论】:

              • 我确实认为 C++ 值得学习,你当然可以从中学习 OOP 模型。但我仍然认为它不是学习 OOP 的最佳语言。在基础教程之后,我通过阅读代码来学习。该语言中其他范式的流行意味着要真正阅读 C++ 代码,您必须学习的不仅仅是 OOP 的东西。您不必使用它,但您必须了解它是什么,将它与 OOP 的东西区分开来,并了解它如何使编程模型复杂化。从长远来看,这很有用,但不是学习 OOP 的最佳教学策略。
              【解决方案9】:

              我会说从 Ja​​va 开始。 Java tutorial 写得很好,有很多你可以(应该)运行和试验的例子。来到书籍我会说检查Head First系列中的Head First JavaHead First Object Oriented Analysis and Design。一旦你开始接触 Java 并且对面向对象的概念有了一个清晰的认识,你就会遇到设计模式,而这本书 Head First Design Patterns 提供了一个良好的开端。我认为所有这些都将为您探索面向对象编程提供良好的基本起点。

              【讨论】:

                【解决方案10】:

                我和其他评论者一样,在 C++ 中很容易回到 C。在结构上,Java 和 C# 与 C 相似,核心语言几乎相同。一旦你学会思考面向对象,C++ 就会变得容易得多。

                【讨论】:

                  【解决方案11】:

                  我会说 Java。一本对我有帮助的好书是this one.

                  【讨论】:

                    【解决方案12】:

                    是的。如果您的意图是“对现代 OOP 语言的深刻理解”,请选择现代 OOP 语言。 C# 绝对符合“现代”的标准,并以 OOP 为荣。像 Smalltalk 这样的东西将是 OOP 语言,但它不那么现代。两者都可以学习。

                    至于 C++,它几乎不是 OOP 语言。学习 C++ 有很多好的和正当的理由,但如果您只对 OOP 感兴趣,则不然。

                    今天,C++ 的特点不是 OOP,而是泛型编程等特性,并且在某种程度上受到函数式语言的启发。

                    从 C++ 中可以学到很多有用的经验。其中一些是:

                    • 一些非常好的管理资源生命周期的技术,C# 和 Java 等“现代”语言可以从中学到很多
                    • 通用编程范式,以及它可以使 OOP 完全没有意义的程度。对于仍然认为 OOP 是编程的圣杯的人来说,从特征和概念的角度考虑类型的整个想法,而不是它们实现的接口,以及对真正可重用的非成员函数的偏好是很有趣的。

                    如果你问你是否应该学习 C++,我会说是(以及 5-8 种其他语言。C++ 在任何方面都不是“特殊”的。它是程序员可以从学习中获益的众多语言之一) .

                    如果您要问 C++ 是否会很好地介绍 OOP,我会说 NO。这正是它值得学习的原因。

                    【讨论】:

                    • 我同意。 C++ 并不是最适合 OOP 的,因为它是如此多范式。有时它真的很混乱,这并不是说它是一种糟糕的语言,只是复杂性可能会让人不知所措。我知道 Java,我正在学习 C#。学习 Java 不会有什么坏处,它会让人觉得有点拘束,因为该语言似乎旨在强制执行最佳实践的特定想法。 C# 在风格上更接近 C,据我所知,它在某些情况下更优雅。
                    【解决方案13】:

                    【讨论】:

                    • 同意。它是 C,加上对象。
                    • 如果你选择 ObjC,请准备好被锁定在 Mac/iPhoneOS(/GNUStep) 编程中。
                    【解决方案14】:

                    我建议C#。语法是相似的,但它的不同足以让你避免回到旧的 C 习惯。在使用 C++ 时,我总是发现自己在编写 C 语言,偶尔会加入一些对象。

                    【讨论】:

                    • 我也可以推荐关于 C# 的头脑第一本书。我最近回顾了它,发现它不包括像线程这样的高级东西,但如果你喜欢单挑的学习方式,这是一个很好的方法。
                    • +1。这是让我真正理解 OOP 是什么的语言。当然,在这方面可能还有其他的比 C# 更好。
                    • c# 的优点是它漂亮、干净,像 java 一样面向对象,但它也可以让您深入了解该平台。所以你得到两全其美。这就是人们曾经喜欢 Delphi 的原因(做过 Delphi 的人也做过 c#)
                    【解决方案15】:

                    C++ 不仅是一种 OOP 语言。它是多范式(过程式、OOP、函数式、通用...)

                    所以如果你只想学习 OOP,也许它不是最好的选择。

                    【讨论】:

                      【解决方案16】:

                      对于以 Java 为中心的介绍,我强烈推荐 O'Reilly 出色的“Head First”系列中的Head First Object Oriented Analysis and Design

                      我发现这本书非常平易近人且易于理解,无论您来自哪个方向。虽然本书使用 Java,但书中讨论的 OOP 概念适用于任何 OOP 语言。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-06-05
                        • 2011-01-17
                        • 1970-01-01
                        • 2013-10-21
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多