首页 > 解决方案 > Bob Martin:“C 具有完美的封装性”如何?

问题描述

Bob Martin 在此视频中说“C 具有完美的封装性”。我不明白他为什么这么说......我知道我们可以在 .c 文件中分离实现并在头 .h 文件中声明接口,但没有什么能真正阻止我访问这样的实现细节:

主程序

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

文件1.c

int x = 5;

int getnum_file1() {
    return x + 1;
}

文件1.h

int getnum_file1();

在这种情况下,main.c 可以访问 file1.c 中的实现细节。此代码还可以按照预期结果进行编译和执行。这是如何完美的封装?

标签: coopencapsulationsoftware-design

解决方案


一种确保封装的方法是声明xstatic int x = 5;,因此它不会从外部对象可见(即使使用extern)。

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


推荐阅读