![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
guram |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 21.6.2007 Где: Киев Репутация: нет Всего: нет |
Здравствуйте,
Требуется реализовать протокол передачи данных от компьютера к устройству. Передача данных может осуществлятся при помощи COM порта или USB. Вопрос возник следующего содержания: Если я все правильно понимаю в оснавах ООП, то должен быть некий класс Protocol, реализующий методы основного протокола. Также должны быть описанны классы COMPort и USBTransfer для передачи данных. Механизм передачи (COM порт или USB) задается пользователем. Также, если же я все правильно понимаю, нам необходим некий класс Communication для связки классов COMPort и USBTransfer. Но как ето все более правильно описать, чтобы при изменении транспортного уровня не требовалось значительно переделывать весь проект? Спасибо! |
|||
|
||||
triclosan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
На самом деле единственного правильного подхода реализации задачи посредством ООП не существует.
если ИЛИ, то не понимаю зачем нужен класс Communication Предложу свою модель того, что ты описал:
Это сообщение отредактировал(а) triclosan - 10.6.2009, 16:00 |
||||
|
|||||
andrew_121 |
|
||||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
С чего бы ему там взяться? ![]()
Где должны быть? Кем должны быть описаны?
Выше, тебе предложили правильную структуру. Тебе осталось только реализовать протоколы COM и USB. Тут тебе поможет гугл. -------------------- Удалил аккаунт. Прощайте! |
||||||
|
|||||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Возможно более гибкое взаимодействие:
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
math64 дык можно и еще гибче.... использовать RAII для read\write, используя общий теплейтный класс. Нечто вроде видел в блоге Lazin: http://evgeny-lazin.blogspot.com/2008/08/blog-post.html
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Ух ты ![]() ![]() Lazin-у респект! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Разрежте ваш протокол обмена на уровни - приложение, транспорт, физика (и пр). Для каждого уровня определитесь с набором данных и сервисов по их пересылке. Затем для каждого уровня делается абстрактный базовый класс, содержащий чисто виртуальные методы для общения с вышестоящим уровнем, и указатель на имплементацию нижестоящего уровня.
Затем делаются наследники для конкретных реализаций каждого уровня, потом уже инстансы конкретных объектов провязываются в стек (через те самые указатели на имплементацию). Все, с верхушкой стека можно работать из приложения. |
|||
|
||||
guram |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 21.6.2007 Где: Киев Репутация: нет Всего: нет |
Допустим транспортный уровень будет описан абстрактным классом "Transport". Теперь определим два класс "COMPort" и "USB", которые наследуют "Transport". Класс протокола "Protocol" будет содиржать ссылку на класс "Transport", но каким образом определить какую из реализаций использовать "COMPort" и "USB"? |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
Полиморфизм путем виртуальных функций
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
При инициализации стека содадите (через new) экземпляр COMPort или USB (в зависимости от пожеланий пользователя) и подадите указатель на созданный экземпляр в Protocol как нижний уровень (транспортный) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |