学习了Java和C++后,我学会了OO方式.我想开始一个相当雄心勃勃的项目,但我想用C语言做.我知道如何将问题分解为类以及如何将它们转换为类层次结构.我知道如何将功能抽象为抽象类和接口.我甚至有点精通以有效的方式使用多态.
问题在于,当我遇到问题时,我只知道如何做到这一点是以面向对象的方式.我变得过于依赖面向对象的设计理念和方法.
我想学习如何以严格的程序方式思考.如何在缺少类,接口,多态,函数重载,构造函数等的世界中做事情.
如何仅使用非面向对象的structs 表示复杂概念?你如何避免缺乏函数重载?以程序方式思考的一些提示和技巧是什么?
我认为你有一个很好的计划。在 C 中以完全面向对象的方式做事虽然很有可能,但已经足够痛苦了,你很快就会放弃它。(不要对抗语言。)
如果您想要一个关于将 OO 方式映射到 C 方式的哲学陈述,部分原因是通过将对象创建提升一个级别来实现。模块仍然可以将其对象实现为黑盒,并且您仍然可以使用合理的编程风格,但基本上真正隐藏对象太痛苦了,因此调用者分配它并将其传递下来,而不是模块分配并将其返回。您通常会押注 getter 和 setter,或者将它们实现为宏。
还要考虑到您提到的所有这些抽象都是普通之上相对较薄的一层structs,因此您离您想要做的事情并不是很远。它只是包装得不太好。