|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Наследование классов и интерфейсов |
|
.NET - Наследование классов и интерфейсов
|
Ветеран Сообщения: 1384 |
Профиль | Отправить PM | Цитировать Здравствуйте.
Есть некоторое устройство подключаемое по COM-порту к компьютеру. Я написал класс Module который описывает внутреннюю структуру этого устройства (линии ввода-вывода, реле, линии входа АЦП). Этот модуль физически управляет движением автомобиля, к примеру. И вот для того, что бы автомобиль поехал вперёд нужно на трёх определённых линиях модуля установить заданные значения, что бы поехал влево нужно установить другие значения и т.д. Мне хочется сделать некоторый класс (или что-то ещё), который будет служить некоторой прослойкой. Я создал интерфейс и класс-наследник. public interface IState { void Stop(); void Forward(); void Back(); void Left(); void Right(); } public class Bot : Module, IState { public void Stop() { this.lineIO[0].Off(); this.lineIO[1].Off(); } public void Forward() { this.lineIO[0].On(); this.lineIO[1].On(); } public void Back(){ } public void Left() { } public void Right() { } } Что нужно сделать, что бы можно было делать это сопоставление на уровне конструктора объекта класса Bot? |
|
------- Отправлено: 18:19, 05-07-2012 |
Старожил Сообщения: 154
|
Профиль | Отправить PM | Цитировать тут стоит смериться - код уменьшить не получится и либо в forward указывать все возможные варианты с выбором на основе некой приватной(публичной или защищенной) переменной внутри класса Bot, которая выставляется по входному параметру конструктора (или еще как), либо в самом классе bot предусмотреть некие приватные подфункции, множество которых способно описать все разнообразие возможных действий в forward и ему подобных, а в самом forward только описать условия по той же приватной(публичной или защищенной) переменной.
а... есть еще вариант- так называемые директивы препроцессора. но тут конкретный способ будет определен при компиляции программы, а не в ходе ее исполнения. |
Последний раз редактировалось Beyound, 09-07-2012 в 20:35. Отправлено: 20:25, 09-07-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать Beyound, спасибо что отозвались... а то подумал что вообще даже идей не будет
В принципе я могу смириться с тем, что код станет неуменьшаемым, но как обходятся с этим конструкторы игоромобилей или программисты игр. Есть интерфейс пользователя, клавиши нажимает - мышкой двигает. Создаются события. И мне сильно кажется, что исходя из этих событий не пишутся команды в контролеры, а создаются другие события или есть некоторый класс, который связывает эти вещи (в моём случае это Bot). |
------- Отправлено: 20:45, 09-07-2012 | #3 |
Старожил Сообщения: 154
|
Профиль | Отправить PM | Цитировать ну незнаю кто как делает, но вообще игры пишутся так - есть некоторый цикл глобальной прорисовки, работающий ну грубо говоря циклично, как закончился начинается с начала. этот цикл сам вызывает в классах (деревьях, машинках и т.п.) функции прорисовки, которые по состоянию этого класса и поступающих внешних прерываний определяют как изменяется этот объект во времени. ясное дело что скажем машинка как класс может состоять из класса колесо, кабина и т.д. и тогда функция прорисовки машинки не что иное как вызов в подклассах функций прорисоки их. в итоге все сводится к тому что в самом глубоко классе написато что (грубо) исходя из "обстаноки" такая то фигурка с такими то текстурами имеет такие то координаты.
как же на все это влияет нажатие кнопок мышки или клавы - а легко - эти события чаще всего фиксируются по факту, а вот в функциях прорисовки описывается, что делать при обнаружении прерывания с клавы и т.п. оно наглядно видно - когда игра очень грузит комп то следующий кадр - это суммарно все то, что нажал игрок между предыдущим кадром и расчетом следующего. |
Отправлено: 19:02, 10-07-2012 | #4 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать Beyound, фактически сейчас у меня похожая реализация работы. По таймеру в контролеер пишутся значения некоторых переменных. События, нажатия клавиатуры - меняют эти значения, и соответственно они попадают в контроллер.
Я хотел некоторым образом съэкономить на трафике между компьютером и контроллером. В начальный момент времени в контролер попадают значения по-умолчанию. При нажатии на кнопку "Up", к примеру, происходит изменение переменной, генерируется событие изменения, обработчик события записывает текущее состояние переменных в контроллер. И пока я не отпустил кнопку "Up" другое событие не будет генерироваться и данные не будут писаться в контроллер. |
|
------- Отправлено: 23:14, 10-07-2012 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Выбор классов | Glorh | Программирование и базы данных | 3 | 05-03-2011 10:11 | |
C/C++ - Наследование и иерархия классов | Wwe2012 | Программирование и базы данных | 4 | 08-02-2011 14:30 | |
C/C++ - Возникла непонятка с виртуальными методами классов | Oleg_SK | Программирование и базы данных | 5 | 12-06-2010 09:35 | |
C/C++ - Порядок построения классов | pva | Программирование и базы данных | 13 | 23-03-2009 14:36 | |
Наследование интерфейсов | netmax | Программирование и базы данных | 2 | 02-09-2003 20:08 |
|