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

And*_*sne 17 c oop

最近,我用几乎所有的练习和例子读完了K&R.我打算转到"加速C++",我遇到了Axel Schreiner用ANSI-C 编写的 OOP .

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

  1. 在C中实现OOP,是否真的使用过?还是只是为了心理锻炼?
  2. 他们的任何现有C项目是否使用OOP?
  3. 什么时候在C中使用OOP是个好主意?
  4. 我应该把时间花在它上面吗?

我认为我在这里提到我的背景是合适的,这样你们就可以更好地指导我了.我大约一年前完成了C,C++,Java和OOP理论,也找到了工作.但是后来Joel的博客和SO让我意识到我缺少很多东西.所以我再次拿起书,开始正确研究它们.

K&R,Accelerated C++,C++算法和其他一些书籍是我努力提高自己的技能.我不是OOP的新手.
那么你会建议什么?

谢谢你的时间.

Mat*_*ner 14

根据需要经常在C中使用OO.一般来说,我不同意一个人不能在C中做OOP的意见,只要你提供了一组在你有OOP的给定类型上运行的函数.例如,您决定创建数据结构.如果您提供创建,添加,删除和查找数据结构元素的函数,那么它就是OO.通常,其他语言通过自动暗示实例变量并自动在该实例的各种属性中提供范围来提供语法糖.

  1. 至于"它是否真的被使用",答案是肯定的.这不是心理锻炼,它是C语言中的有效范例.
  2. 想到的最好的例子是GObject,由GLib,GTK +和许多与GNOME无关的项目使用.GObject提供了一种用C语言构建对象的方法.但是没有必要使用第三方支持在C中使用OO.许多现有项目都有它,虽然它可能不存在于界面中(在我看来是一件好事),以及内部用于各种目的(清洁度,数据保护,所有通常的OO理由).
  3. 每当您发现需要对行为和/或数据进行分组时,最好在C中使用OOP.当您可以证明在使用对象界面时花费额外的语法费用,以及实际完成解决方案所花费的时间.不要偏离.
  4. 你不应该浪费时间学习OO,因为你认为它是优越的,而应该补充你未来的解决方案,你应该将它添加到你的工具包中.在看起来正确的事情时使用它.熟悉如何在C中使用OO,最好的方法是做一些C++,或者检查任何使用一点C风格的OO的好项目.在那之后你会觉得很自然.


Ste*_*hen 6

在C中实现OOP,是否真的使用过?还是只是为了心理锻炼?

是的,它确实被使用了,但不出所料,它不像OOP那样为它设计的语言.

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

我记得用过一对夫妇:

什么时候在C中使用OOP是个好主意?

OOP很好地模拟了一些问题.例如,GUI通常设计为在窗口类型之间继承,使用多态来覆盖和专门化行为.

每当问题有一个漂亮的OOP解决方案时,你应该使用OOP.使用脚注,您不应该在15000行项目中粘贴100行OOP代码,因为它是"kewl"!:)

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

这实际上取决于你打算用它做什么.我从不主张不学习任何东西 - 了解如何,为何以及何时使用它是很好的.很高兴看到一种不是为OOP支持OOP而设计的语言.你读过这本书,所以我认为你对C有一些亲和力,对OOP很感兴趣.试一试,也许把GTK +中的一些GUI应用程序放在一起.另一方面,如果您希望成为下一个设计模式的主Web开发人员,它可能不是最好的方法,您可以考虑更专注于该领域的其他语言.

那么你会建议什么?

我建议您使用最适合您正在尝试解决的问题的工具.决定你要解决的问题.GUI桌面应用程序,Web服务器,游戏,cmd行实用程序......一旦您确定了问题,您将能够更好地确定哪种技术适合开发解决方案.我发现你不能用"玩具"来掌握任何东西,所以你需要做一些真实的事情.