LINUX.ORG.RU

История изменений

Исправление Apple-ch, (текущая версия) :

Если достаточно ограничения в рантайме, то в большинстве динамических языков или языков с поддержкой интроспекции сделать такое будет элементарно.

С проверкой во время компиляции всё гораздо сложнее. Тут уже сильно зависит от языка.

  • В тсепепе, пожалуй, выручат френды.
  • В сишарпе и жаве можно запихнуть все глобальные переменные в синглтон с protected геттерами/сеттерами и поместить его в одну сборку/пакет с классами, которые должны уметь читать/изменять переменные.
  • Если нет возможности раскидывать классы по сборкам, то можно замутить следующее (на примере шарпа):
    1. Наследуем все классы, которые должны иметь доступ к переменным, от интерфейса, содержащего событие для изменения.
    2. В каждом классе подписываем синглтон на это событие.
    3. Обработчик в синглтоне будет иметь сигнатуру, принимающую события только от классов, реализующий указанный интерфейс.
    4. Когда классу нужно изменить переменную, он кидает событие. Если левый класс попробует кинуть, то обработчик не вызовется по понятным причинам.
    5. ?????????????
    6. ПРОФИТ!!!!!!1

Я не уверен, что третий пункт можно реализовать на жаве, например. И не уверен, что он сработает в компайл-тайме.

В любом случае, вопрос какой-то странный. Наверное, в самом общем случае всё равно придётся адский манагер глобального состояния городить…

Исходная версия Apple-ch, :

Если достаточно ограничения в рантайме, то в большинстве динамических языков или языков с поддержкой интроспекции сделать такое будет элементарно.

С проверкой во время компиляции всё гораздо сложнее. Тут уже всё сильно зависит от языка.

  • В тсепепе, пожалуй, выручат френды.
  • В сишарпе и жаве можно запихнуть все глобальные переменные в синглтон с protected геттерами/сеттерами и поместить его в одну сборку/пакет с с классами, которые должны уметь читать/изменять переменные.
  • Если нет возможности раскидывать классы по сборкам, то можно замутить следующее (на примере шарпа):
    1. Наследуем все классы, которые должны иметь доступ к переменным от интерфейса, содержащего событие для изменения.
    2. В каждом классе подписываем синглтон на это событие.
    3. Обработчик в синглтоне будет иметь сигнатуру, принимающую события только от классов, реализующий указанный интерфейс.
    4. Когда классу нужно изменить переменную, он кидает событие. Если левый класс попробует кинуть, то обработчик не вызовется по понятным причинам.
    5. ?????????????
    6. ПРОФИТ!!!!!!1

Я не уверен, что третий пункт можно реализовать на жаве, например. И не уверен, что он сработает в компайл-тайме.

В любом случае, вопрос какой-то странный. Наверное, в самом общем случае всё равно придётся адский манагер глобального состояния городить…