鲍勃·马丁(Bob Martin):“ C具有完美的封装”如何?

时间:2018-11-22 08:45:32

标签: c oop encapsulation software-design

video中的鲍勃·马丁(Bob Martin)说“ C具有完美的封装”。我不明白他为什么这么说...我知道我们可以将实现隔离在.c文件中,并在标头.h文件中声明接口,但是并没有什么真正阻止我访问这样的实现详细信息的:

main.c

#include <stdio.h>
#include "file1.h"
extern int x;
int main() {
    printf("%d\n", x);
    return 0;
}

file1.c

int x = 5;

int getnum_file1() {
    return x + 1;
}

file1.h

int getnum_file1();

在这种情况下,main.c可以访问file1.c中的实现详细信息。该代码还将编译并以预期的结果执行。这种完美的封装效果如何?

1 个答案:

答案 0 :(得分:4)

一种确保封装的方法是将x声明为static int x = 5;,因此从外部对象(即使使用extern)也看不到它。

很显然,可以从另一个对象(通过链接器,通过添加的x)访问全局变量extern。但是,这通常会导致“意大利面条”代码,其中由于没有适当的封装(而C或C ++确实提供了避免这种情况的有用方法),因此可以从任何地方访问和/或修改变量。