oop — передача данных между модулями c ++

У меня очень общий вопрос. Я пытаюсь установить связь между двумя модулями на двух уровнях OSI (предположим, что транспортный уровень реализован в классе A, а класс B реализует сетевой уровень). Я понимаю, что класс A может просто использовать класс B, вызывая его методы для пересылки полезной нагрузки данных дальше на нижние уровни. Следовательно, класс A обладает знаниями класса B, но не наоборот.

Вопрос в том, когда класс B получает данные из нижних уровней, как данные передаются в класс A (верхний уровень), поскольку он не знает о классе A. Как такая функциональность реализована в C ++? Какую важную тему выучить для такого рода задач?

1

Решение

Просто написав функции установки / получения в классе сетевого уровня. Когда класс транспортного уровня обновляется, он считывает данные сети через функцию получения.

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

Начните с составления всех классовых зависимостей пером и бумагой. Пересмотрите их пару раз, пока у вас не появится дизайн, который, кажется, имеет смысл.

0

Другие решения

В ядре работает так, что транспортный уровень регистрирует обратный вызов на сетевом уровне. Когда сетевой уровень принимает дейтаграмму, которая должна быть передана на сетевой уровень, он вызывает эту функцию обратного вызова, передавая полезную нагрузку дейтаграммы сетевого уровня. Дейтаграмма сетевого уровня знает, что она должна передавать полезную нагрузку дейтаграммы в конкретный протокол транспортного уровня из-за одного конкретного поля, указывающего протокол верхнего уровня. В случае дейтаграммы IPv4 это поле протокол.

Вы можете реализовать этот обратный вызов в C ++ различными способами:

  1. Класс A регистрируется в классе B для получения сообщений, предназначенных для протокола X. Это можно сделать с помощью Образец наблюдателя.
  2. Класс A регистрирует метод обратного вызова или лямбда в B, для протокола X.

Когда B получает дейтаграмму для протокола X, он уведомляет наблюдателей, зарегистрированных для этого протокола, или вызывает зарегистрированный обратный вызов или лямбду.

0

По вопросам рекламы [email protected]