既然已经了解Java和C ++,我学到了面向对象的方式。 我要走上一个雄心勃勃的项目,但我想这样做在C.我知道如何突破的问题分解成类,以及如何把他们变成类层次结构。 我知道如何抽象的功能集成到抽象类和接口。 我是在一个有效的方式使用多态甚至有所精通。
问题是,当我提出了一个问题,我唯一的办法我知道如何做到这一点是在面向对象的方式。 我已经变得过于依赖面向对象的设计理念和方法。
我想学习如何在一个严格的程序思维方式。 我该怎么做事情缺乏类,接口,多态,函数重载,构造函数等世界
你怎么表示使用只非面向对象的复杂概念struct
S' 你如何让周围缺乏函数重载的? 什么是一些提示和技巧以程序的方式思考?
该程序的方法是,一方面,有你的数据结构,并且,另一方面,你的算法。 然后你把你的数据结构并传递给你的算法。 如果没有封装,它需要一个稍高量纪律要做到这一点,如果你增加了抽象层,使其更容易把事情做对,你在做C. OO相当一部分
我认为你有一个很好的计划。 做事情在C完全面向对象的方式,而很可能是够痛苦,你会很快下降也无妨的。 (不打的语言。)
如果你想在映射OO方式到C方式,部分哲学声明它发生推对象创建一个级别。 模块还可以实现它的对象作为一个黑盒子,你仍然可以用合理的编程风格,但基本上它太痛苦的真正隐藏的对象,所以调用者分配它,并将它传递下去,而不是模块分配它并返回它回来了。 通常你押注的getter和setter,或者它们实现为宏。
此外还应考虑到你所提到的那些抽象的都是普通的顶部相对较薄的层structs
,所以你是不是真的很远,你想要做什么。 它只是是不是打包相当的漂亮。
的C工具箱包含了函数,函数指针和宏。 函数指针可以用来模拟多态性。
你正在服用的反向行程老C程序员做学习OO。
甚至在C之前++是一个非标准OO techniquis是在使用C.
他们包括定义结构的指针srtuct(通常叫这个...)然后定义在结构指针功能,并在运行时初始化这些指针指向相关的功能。 作为第一paremeter收到的所有这些功能的结构指针这一点。
不要认为C的完整的面向对象的方式。 如果你必须使用C,你应该学习的过程编程。 这样做不会采取更多的时间比学习如何实现所有的OOP特征C.此外,基本封装可能是罚款,但很多其他OOP功能配备上的性能开销,当你模仿他们(不是在语言设计支持OOP)。 开销可能是巨大的,如果你严格按照C ++的设计方法来表示每一个细小的东西为对象。 程序设计语言在设计的特定目的。 当你打破边界,你总是要付出一些东西为代价。
做用C多态行为的标准方法是使用函数指针。 你会发现一个批C API(如标准的qsort(3)
和bsearch(3)
取函数指针作为参数; 一些非标准的那些,如qsort_r
采取一个函数指针和一个上下文指针( thunk
在这种情况下),其用于不大于被传递回回调函数其他目的。 上下文指针功能酷似this
指针在面向对象的语言,有功能对象(例如函子)的时候。
也可以看看:
不要以为你有搁置的面向对象的工作的知识-你可以“程序到语言” 。
我曾在面向对象的工作正在经历主要在后C到工作。 C允许为对象的概念一定程度上转危为安。 在工作,我不得不实施红黑树在C,用于在使用扫描线算法在一组段找到交叉点。 由于算法中使用不同的比较功能,我结束了使用函数指针,以实现如方案lambda表达式或代表C#中的相同的效果。 它运作良好,并且还允许平衡树是可重复使用的。
平衡树的其他功能使用空指针存储任意数据。 同样,在C无效,函数指针是一个痛苦(如果你不知道自己的底细),但它们可以被用来近似创建一个通用的数据结构。
最后一点:使用了合适的工具。 如果你想用C简单地掌握程序的技术,然后选择是非常适合的处理方式有问题。 我没有在这个问题上的选择(用C编写的遗留应用程序,和人民要求世界,拒绝进入21世纪),所以我必须有创意。 C是伟大的从机器低/中抽象,说如果你想写一个命令行包检测程序。