| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Помогите разобратся с взаимосвязью классов |
| Автор: guram 10.6.2009, 15:18 |
| Здравствуйте, Требуется реализовать протокол передачи данных от компьютера к устройству. Передача данных может осуществлятся при помощи COM порта или USB. Вопрос возник следующего содержания: Если я все правильно понимаю в оснавах ООП, то должен быть некий класс Protocol, реализующий методы основного протокола. Также должны быть описанны классы COMPort и USBTransfer для передачи данных. Механизм передачи (COM порт или USB) задается пользователем. Также, если же я все правильно понимаю, нам необходим некий класс Communication для связки классов COMPort и USBTransfer. Но как ето все более правильно описать, чтобы при изменении транспортного уровня не требовалось значительно переделывать весь проект? Спасибо! |
| Автор: triclosan 10.6.2009, 15:59 | ||||
На самом деле единственного правильного подхода реализации задачи посредством ООП не существует.
если ИЛИ, то не понимаю зачем нужен класс Communication Предложу свою модель того, что ты описал:
|
| Автор: math64 10.6.2009, 19:09 | ||
Возможно более гибкое взаимодействие:
|
| Автор: jonie 10.6.2009, 22:39 |
| math64 дык можно и еще гибче.... использовать RAII для read\write, используя общий теплейтный класс. Нечто вроде видел в блоге Lazin: http://evgeny-lazin.blogspot.com/2008/08/blog-post.html |
| Автор: andrew_121 10.6.2009, 22:57 | ||
Ух ты Lazin-у респект! |
| Автор: xvr 11.6.2009, 11:58 |
| Разрежте ваш протокол обмена на уровни - приложение, транспорт, физика (и пр). Для каждого уровня определитесь с набором данных и сервисов по их пересылке. Затем для каждого уровня делается абстрактный базовый класс, содержащий чисто виртуальные методы для общения с вышестоящим уровнем, и указатель на имплементацию нижестоящего уровня. Затем делаются наследники для конкретных реализаций каждого уровня, потом уже инстансы конкретных объектов провязываются в стек (через те самые указатели на имплементацию). Все, с верхушкой стека можно работать из приложения. |
| Автор: guram 11.6.2009, 14:50 |
Допустим транспортный уровень будет описан абстрактным классом "Transport". Теперь определим два класс "COMPort" и "USB", которые наследуют "Transport". Класс протокола "Protocol" будет содиржать ссылку на класс "Transport", но каким образом определить какую из реализаций использовать "COMPort" и "USB"? |
| Автор: triclosan 11.6.2009, 17:04 |
| Полиморфизм путем виртуальных функций |
| Автор: xvr 11.6.2009, 17:20 | ||
При инициализации стека содадите (через new) экземпляр COMPort или USB (в зависимости от пожеланий пользователя) и подадите указатель на созданный экземпляр в Protocol как нижний уровень (транспортный) |