在设计C项目时,有哪些已知的设计原则、最佳实践和设计模式可以遵循?或者说,在设计过程式(命令式)编程的时候有哪些有用的设计原则呢?
(我是“面向对象的一代”,第一次设计一个大型的C项目)
在设计C项目时,有哪些已知的设计原则、最佳实践和设计模式可以遵循?或者说,在设计过程式(命令式)编程的时候有哪些有用的设计原则呢?
(我是“面向对象的一代”,第一次设计一个大型的C项目)
信息隐藏-如Parnas所提倡(软件基础)。
仔细管理标头和可见性:
标头是自我保护的,因此无论是否多次包含都没有关系。
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...rest of header contents, including other #include lines if necessary
#endif /* HEADER_H_INCLUDED */
设计一组可以处理“对象”(通常为结构)的函数,并在使用该对象的代码中使用这些函数,而不是直接操作结构本身。将其视为自我限制的封装。
我的三个建议:
这里是一个例子:
typedef struct Vector {
int size;
int limit;
int* ints;
} Vector;
Vector* Vector_new() {
Vector* res = (Vector*) malloc(sizeof(Vector));
res->limit = 10;
res->size = 0;
res->ints = (int*) malloc(sizeof(int) * res.limit);
return res;
}
void Vector_destroy(Vector* v) {
free(v->ints);
free(v);
}
void Vector_add(Vector* v, int n) {
if(v->size == v->limit) {
v->limit = v->limit * 2 + 10;
v->ints = realloc(v->ints, v->limit);
}
v->ints[v->size] = n;
++v->size;
}
int Vector_get(Vector* v, int index) {
if(index >= 0 && index < v->size)
return v->ints[index];
assert false;
}
malloc
的结果。有一本好的、免费的在线书籍,名为《Object-Oriented Programming With ANSI-C》,介绍了在C语言中编写面向对象代码的主题。通过谷歌搜索“面向对象C”,还可以找到许多其他好的例子和资源。
如果您的项目是安全关键型的,则MISRA-C是一个不错的规则集。虽然它主要是针对嵌入式C语言的,但在其他领域也可能很有用。
我认为自己是个面向对象的程序员,并且经常使用嵌入式C进行开发。我能给出的最好建议,特别是对于大项目,就是不要过度做。在ANSI C之上创建完整的面向对象框架可能会非常诱人,但要想做得正确需要花费大量的时间和精力。你越是追求花哨的东西,你花在调试框架上的时间就越多而非真正开发项目。务必冷静思考,并牢牢掌握YAGNI。祝您好运!
{ }
块的顶部)声明你的变量。这个问题总是会咬我一两次 :)
- e.JamesOOP是一种方法论而不是技术。所以我的第一条建议是停止将其视为过程式编程。
针对e.James的观点,你不想尝试重新创建面向对象的语言或者假装你有这样的能力。你仍然可以通过坚持几个简单的原则来做到正确的事情: