代码之家  ›  专栏  ›  技术社区  ›  Andrew-Dufresne

我应该学习用C实现OOP吗?有没有在C中使用OOP的项目?

oop c
  •  17
  • Andrew-Dufresne  · 技术社区  · 16 年前

    Axel Schreiner's book 面向对象编程与ANSI-C。

    我很好奇,想学。但在投入时间之前,我想知道在C中实现OOP的价值。这样我就可以决定我要花多少时间在这上面。

    1. 用C语言实现OOP,真的有用吗?或者只是为了锻炼脑力?
    2. 什么时候在C中使用OOP是个好主意?

    我觉得在这里提一下我的背景是合适的,这样你们就能更好地指导我。我一年前完成了C、C++、java和面向对象编程理论,也找到了工作。但是后来呢 Joel's 博客等让我意识到我在很多事情上都欠缺。所以我又拿起书,开始好好学习。

    K&R,加速C++,C++算法和其他一些书是我努力提高我的技能的尝试。我对OOP并不陌生。
    那你有什么建议?

    谢谢你的时间。

    6 回复  |  直到 9 年前
        1
  •  14
  •   Matt Joiner    16 年前

    OO可以根据需要在C中使用。一般来说,我不同意这样的观点:一个人不能在C中进行OOP,只要你提供一组在给定类型上运行的函数,你就有了OOP。例如,您决定创建一个数据结构。如果您提供了创建、添加、删除和查找数据结构元素的函数,那么它就是面向对象的。一般来说,其他语言通过自动暗示实例变量并自动限定该实例的各种属性来提供语法上的支持。

    1. 至于“它真的被使用了吗”,答案是肯定的。这不是智力训练,这是C语言中的一个有效范例。
    2. 我想到的最好的例子是 GObject
    3. 当您发现需要对行为和/或数据进行分组时,最好在C中使用OOP。当您可以证明在使用objects接口时所花费的额外语法开销是合理的,而实际完成解决方案所花费的时间是合理的。别跑偏了。
        2
  •  6
  •   Stephen    16 年前

    用C语言实现OOP,真的有用吗?或者只是为了锻炼脑力?

    是的,它确实被使用过,但毫不奇怪,在为它设计的语言中,它不像OOP那么常见。

    他们现有的C项目是否使用OOP?

    有些问题是用OOP很好地建模的。例如,gui的设计通常带有窗口类型之间的继承,使用多态性来重写和专门化行为。

    我应该把时间花在这上面吗?

    那真的取决于你打算用它做什么。我从不主张什么都不学——了解如何、为什么以及何时使用它是一件很好的事情。很高兴看到一种不是为支持面向对象编程而设计的语言。你读过这本书,所以我假设你对C有一些亲和力,对OOP也有兴趣。试一试,也许在GTK+中集成一些GUI应用程序。另一方面,如果您希望成为下一个设计模式大师web开发人员,那么这可能不是最好的方法,您可以考虑更关注该领域的其他语言。

    那你有什么建议?

    我建议你使用最好的工具来解决你要解决的问题。决定你要解决的问题。一个GUI桌面应用程序,一个web服务器,一个游戏,一个命令行实用程序。。。一旦你决定了你的问题,你将能够更好地决定哪种技术适合开发一个解决方案。我发现,你不能真正掌握任何与“玩具”,所以你需要做一些真正的东西。

        3
  •  4
  •   SoapBox    16 年前

    我有过几个高级C项目的经验,这些项目至少使用了OOP。最著名的是Linux内核。

    内核完全是C语言(除了硬件接口汇编中特定于平台的部分)。

    file_operations struct(以及其他许多结构),并回调到它们的特定实现。

    内核还大量使用了 goto 转到 它不仅用于错误处理,而且只用于函数内的“异常”,而不用于将它们传递到函数外。)

        4
  •  3
  •   Carl Smotricz    16 年前

    真正的“OO”语言为您提供了一些实现OO设计的机制:这些语言为对象和/或类、用数据封装代码、继承等提供了内置的概念。C基本上没有这些,但是考虑到一些技术和自律(正如你的书肯定告诉你的那样),没有什么能阻止你用C进行面向对象编程。

    但你愿意吗?

    有些人会建议学习C++作为C语言的自然OO进程。我并不全心支持这一点,因为我认为C++对OO能力的一个相当糟糕的选择,是一种比优雅更实用的语言。例如,当从“标准”C编程转向OO编程时,我认为程序员应该考虑放弃直接操纵指针,当然,我会发现必须为数据管理内存是一种负担。现代OO语言将此自动化,这样程序员就有了更多的脑细胞来完成更高级别的任务。C++的吸引力当然是原始速度。因为它可以降到与C差不多的金属级别,所以它通常是OO语言中“最快”的。

    所有这些都说明:如果你有一个需要C语言的大项目,并且你想使用和实践OO技术,那么一定要继续!如果不是这样,那么在一个鼓励和支持OO的环境中学习OO可能会让您受益匪浅,也许稍后您会带着OO的知识回到C。这本书中所教的技巧对你来说是有意义的,你将处于一个更好的位置来决定你是真的想用C语言还是用一种“真正的”OO语言。

        5
  •  2
  •   ceeit    16 年前

    或许可以看看这里提到的ooc语言项目:

    http://attractivechaos.wordpress.com/2009/09/20/oop-in-c-dont-go-too-far/

        6
  •  0
  •   Puppy    16 年前