История изменений
Исправление Apple-ch, (текущая версия) :
Если достаточно ограничения в рантайме, то в большинстве динамических языков или языков с поддержкой интроспекции сделать такое будет элементарно.
С проверкой во время компиляции всё гораздо сложнее. Тут уже сильно зависит от языка.
- В тсепепе, пожалуй, выручат френды.
- В сишарпе и жаве можно запихнуть все глобальные переменные в синглтон с protected геттерами/сеттерами и поместить его в одну сборку/пакет с классами, которые должны уметь читать/изменять переменные.
- Если нет возможности раскидывать классы по сборкам, то можно замутить следующее (на примере шарпа):
- Наследуем все классы, которые должны иметь доступ к переменным, от интерфейса, содержащего событие для изменения.
- В каждом классе подписываем синглтон на это событие.
- Обработчик в синглтоне будет иметь сигнатуру, принимающую события только от классов, реализующий указанный интерфейс.
- Когда классу нужно изменить переменную, он кидает событие. Если левый класс попробует кинуть, то обработчик не вызовется по понятным причинам.
- ?????????????
- ПРОФИТ!!!!!!1
Я не уверен, что третий пункт можно реализовать на жаве, например. И не уверен, что он сработает в компайл-тайме.
В любом случае, вопрос какой-то странный. Наверное, в самом общем случае всё равно придётся адский манагер глобального состояния городить…
Исходная версия Apple-ch, :
Если достаточно ограничения в рантайме, то в большинстве динамических языков или языков с поддержкой интроспекции сделать такое будет элементарно.
С проверкой во время компиляции всё гораздо сложнее. Тут уже всё сильно зависит от языка.
- В тсепепе, пожалуй, выручат френды.
- В сишарпе и жаве можно запихнуть все глобальные переменные в синглтон с protected геттерами/сеттерами и поместить его в одну сборку/пакет с с классами, которые должны уметь читать/изменять переменные.
- Если нет возможности раскидывать классы по сборкам, то можно замутить следующее (на примере шарпа):
- Наследуем все классы, которые должны иметь доступ к переменным от интерфейса, содержащего событие для изменения.
- В каждом классе подписываем синглтон на это событие.
- Обработчик в синглтоне будет иметь сигнатуру, принимающую события только от классов, реализующий указанный интерфейс.
- Когда классу нужно изменить переменную, он кидает событие. Если левый класс попробует кинуть, то обработчик не вызовется по понятным причинам.
- ?????????????
- ПРОФИТ!!!!!!1
Я не уверен, что третий пункт можно реализовать на жаве, например. И не уверен, что он сработает в компайл-тайме.
В любом случае, вопрос какой-то странный. Наверное, в самом общем случае всё равно придётся адский манагер глобального состояния городить…