> -- slava писал(а):
> Поля должны быть скрытыми для всех сущностей вне модуля, но открытыми для всех сущностей внутри модуля. В С++ Вам этого не отобразить.

Еще раз - вам шашечки или ехать?Я говорю - что все конструкции оберона замечательно перекладываются в C++ "один в один" без потери смысла и без напряжения мозга. С точностью до синтаксиса. Конкретные возражения будут?
.h
## Код:
```
class Record1
{
    friend void f1(Record1& r);
public:
    int x;
private:
    int y;
};
```


.cpp
## Код:
```
void f1(Record1& r)
{
    r.y = 1;
}
```


Тут что-то не понятно? Но ладно, допустим вам позарез надо иметь доступ к Record1::y из функции f2, причем функция f2 должна быть внутренней функцией модуля (никто извне не может ее вызвать). Тогда можно более общий случай расписать:

.h
## Код:
```
class Record1;

class Module1
{
public:
    static void f1(Record1& r);
private:
    static void f2(Record1& r);
};

class Record1
{
    friend class Module1;
public:
    int x;
private:
    int y;
};
```


.cpp
## Код:
```
void Module1::f1(Record1& r)
{
    r.y = 1;
    f2(r);   
}

void Module1::f2(Record1& r)
{
    r.y = 3;
}
```


Хотя я бы такой прием использовал только если надо начисто отключить мозг при переводе оберон -> С++. Иначе можно использовать обычную декомпозицию на функции-члены (писанины меньше), но при этом да, "один в один" не получится.

> -- slava писал(а):
> Питон (насколько я знаю) -- тоже "нет".

В питоне с модулями почти все хорошо, особенно если использовать явный импорт.