Боб Мартин: «C имеет идеальную инкапсуляцию» КАК? - PullRequest
0 голосов
/ 22 ноября 2018

Боб Мартин в этом видео говорит, что "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 голосов
/ 22 ноября 2018

Способ гарантировать, что инкапсуляция объявляет x как static int x = 5;, поэтому она не будет видна из внешнего объекта (даже с использованием extern).

Очевидно, что глобальная переменная какДоступ к x возможен из другого объекта (через линкер, через добавленный вами extern).Однако это обычно приводит к «спагетти» -коду, в котором к переменным обращаются и / или изменяют откуда угодно, потому что нет надлежащей инкапсуляции (а C или C ++ предоставляют полезные способы избежать этого).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...