9

我打算用 C 开发一个应用程序。我的编程经验一直是面向对象的语言。因此,在设计应用程序时,我总是从类、接口、继承、多态等方面考虑。

我看过的所有 C 书籍都涉及如何用 C 编程或专注于特定主题,我找不到任何谈论 C 应用程序架构的书籍。那么,当 OOP 特性存在时,如何构建 C 应用程序?无法使用?你如何保持一切模块化和组织良好并避免代码重复(没有 OOP 似乎会有很多代码重复)?

编辑: 我不是在寻找关于“如何在 C 中编写 OOP 代码”的答案。我正在寻找构建 C 应用程序的标准实践方法,因此它们是模块化的并且组织良好。如果标准的做法是破解一些 OOP 特性,那么这很公平,但如果不是,那么告诉我走这条路就没有意义了。

4

5 回答 5

7

It is a different way of thinking. The core philosophy of C can be summarised as:

data + algorithms = programs

So to design an application in C:

  1. You need to think carefully about what the data is, and define structs which reflect that well, and facilitate the relationships between different views on the data.

  2. You need to think about what algorhythms are going to operate on what data, and what data they produce. This helps to clarify the structs you should have, and help to show what should be blocked together to create reusable blocks of code.

  3. One way of moving to this approach from an OOP approach is to imagine that one struct + one .c file = a class, and to put in the .h file the struct definition and the externally accessible functions (public methods).

  4. You have to write a lot of code to do boring things like memory allocation and freeing and all that jazz. It's not as bad as it sounds, but factor this into your design.

于 2013-03-25T09:13:21.127 回答
4

您可以将 C 项目设计为面向对象项目,然后按结构替换类。这是在本主题和本主题中向我推荐的

于 2013-03-25T09:03:23.110 回答
2

首先,您将识别组件及其相互作用以解决问题。然后在每个组件内部,可以使用以下做法。

  1. 首先设计公共功能。
  2. 设计数据结构(即结构)功能将要工作
  3. 修改公共函数以将相应的结构作为指针参数。[ c 中没有实例变量的概念。您需要定义一个结构并在函数之间传递结构]。
  4. 将具有相关数据结构的函数分组到头文件中。
  5. 在包含您定义的头文件的单独 c 文件中提供公共函数的实现。
  6. 将所有私有/辅助方法设为静态,因此其他 c 文件将看不到它们。
  7. 由于 C 中没有命名空间概念,请确保您的公共函数与现有库函数不冲突。有些人正在使用名称修饰,例如{头文件的短名称}_{函数名称}
  8. 分配和释放内存是开发人员的责任。最好有初始化和释放函数来分配和清除内存以及设计的公共函数。
  9. 遵循您喜欢的编码风格。
  10. 将每个组件设计为共享库,这样您就不需要每次都编译它们。
于 2013-03-25T10:20:04.790 回答
2

此外,要创建可重用的 C 软件,请阅读 David R. Hanson 的这本书

https://sites.google.com/site/cinterfacesimplementations/

基本 OOP 最好使用 Alex Schriner 的OOC.pdf书中提到的技术

于 2013-03-25T09:06:30.353 回答
1

可以使用 C 来练习 TDD,请参阅C 编程和 TDD

如果您习惯于练习 TDD,您就会知道它会帮助您保持代码的良好组织和模块化。

于 2013-03-25T11:39:01.123 回答