![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Enjoy |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 4.2.2006 Репутация: нет Всего: нет |
Здравствуйте!
У меня есть сложная иерархия объектов (классов), которые должны взаимодействовать между собой. То есть:
И для взаимодействия объектов я решил использовать сообщения.
К примеру команда, вызванная из CWorld: CContent.SendMessage("CCharacter", "Move", "100 100"); сначала обработается CContent, а затем он её перенаправит в CCharacter(именно такого подхода требует архитектура - CContent тоже будет выполнять кое-какие операции). Затем результат выполения передаётся в CContent, затем в CWorld. Мои вопросы: 1. Каким образом можно оптимизировать подобную схему? 2. Где можно прочитать про подобную схему взаимодействия? 3. Насколько это эффективно с точки зрения производительности? |
||||
|
|||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Насколько я понимаю, пока что взаимодействие идет не посредством сообщения, а вызовов функций членов классов. И задумка очень похожа на реализацию подобного с помощью вызовов виртуальных функций базовых классов. Хотя, могу конечно и ошибаться.
Вы покажите, собственно, чем будет заниматься функция SendMessage(), а то на словах трудно понять. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Enjoy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 4.2.2006 Репутация: нет Всего: нет |
Вот как это у меня было реализовано ранее:
То есть при получении сервером команды атаковать персонажа, эта команда пойдёт по этой цепочке вниз до самого CCharacters. По моему это не очень выгодно с точки зрения скорости выполнения. Я ещё точно не решил, каким образом можно улучшить взаимодействие, но предполагаю, что это будет приведённая выше функция SendMessage, объявленная в отдельном модуле, и имеющая доступ ко всем классам любого уровня всй структуры. Виртуальные методы безусловно будут использоваться, но не в этой структуре, поскольку наследования у меня нету. Насколько я понимаю виртуальные методы имеет смысл использовать только тогда, когда будет присутствовать наследование. С ООП я пока только знакомлюсь, поэтому прошу помочь выбрать подходящее мне решение. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Я вот главного момента понять не могу - нужно привязаться к сообщениям Windows, или это не имеет кроме названия к ней никакого отношения? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Enjoy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 4.2.2006 Репутация: нет Всего: нет |
Кроме названия никакого отношения к сообщениям Windows не имеет. Она вообще не будет называться SendMessage - это я дал просто для примера.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Не надо из C Smalltalk делать. Во-первых, конечно, будет тормозить - не сама посылка сообщений, а их интерпретация: ты ведь все - и команды и параметры - собираешься строками передавать... Во-вторых, ты сам себя лишаешь преимущества статической проверки типов и параметров функций, которая есть великое достижение C++... Т.е. анализ правильности переданных параметров тебе придется самому писать. В-третьих, будет не быстрее, чем передача "нормальных" вызовов по цепочке (даже очень длинной), а намного медленнее. Оставь как есть. Или последуй совету Mayk насчет паттерна "Команда". -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |