Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Наследование классов и интерфейсов

Ответить
Настройки темы
.NET - Наследование классов и интерфейсов

Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177


Конфигурация

Профиль | Отправить 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() { }
    }
В принципе работает, но вот есть один минус: сопоставление Forward -> lineIO[0].On() lineIO[1].On() делается в самом классе, и в ходе работы программы изменить не получится.

Что нужно сделать, что бы можно было делать это сопоставление на уровне конструктора объекта класса Bot?

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 18:19, 05-07-2012

 

Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


тут стоит смериться - код уменьшить не получится и либо в forward указывать все возможные варианты с выбором на основе некой приватной(публичной или защищенной) переменной внутри класса Bot, которая выставляется по входному параметру конструктора (или еще как), либо в самом классе bot предусмотреть некие приватные подфункции, множество которых способно описать все разнообразие возможных действий в forward и ему подобных, а в самом forward только описать условия по той же приватной(публичной или защищенной) переменной.
а... есть еще вариант- так называемые директивы препроцессора. но тут конкретный способ будет определен при компиляции программы, а не в ходе ее исполнения.

Последний раз редактировалось Beyound, 09-07-2012 в 20:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:25, 09-07-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


Beyound, спасибо что отозвались... а то подумал что вообще даже идей не будет

В принципе я могу смириться с тем, что код станет неуменьшаемым, но как обходятся с этим конструкторы игоромобилей или программисты игр. Есть интерфейс пользователя, клавиши нажимает - мышкой двигает. Создаются события. И мне сильно кажется, что исходя из этих событий не пишутся команды в контролеры, а создаются другие события или есть некоторый класс, который связывает эти вещи (в моём случае это Bot).

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 20:45, 09-07-2012 | #3


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


ну незнаю кто как делает, но вообще игры пишутся так - есть некоторый цикл глобальной прорисовки, работающий ну грубо говоря циклично, как закончился начинается с начала. этот цикл сам вызывает в классах (деревьях, машинках и т.п.) функции прорисовки, которые по состоянию этого класса и поступающих внешних прерываний определяют как изменяется этот объект во времени. ясное дело что скажем машинка как класс может состоять из класса колесо, кабина и т.д. и тогда функция прорисовки машинки не что иное как вызов в подклассах функций прорисоки их. в итоге все сводится к тому что в самом глубоко классе написато что (грубо) исходя из "обстаноки" такая то фигурка с такими то текстурами имеет такие то координаты.
как же на все это влияет нажатие кнопок мышки или клавы - а легко - эти события чаще всего фиксируются по факту, а вот в функциях прорисовки описывается, что делать при обнаружении прерывания с клавы и т.п. оно наглядно видно - когда игра очень грузит комп то следующий кадр - это суммарно все то, что нажал игрок между предыдущим кадром и расчетом следующего.

Отправлено: 19:02, 10-07-2012 | #4


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


Beyound, фактически сейчас у меня похожая реализация работы. По таймеру в контролеер пишутся значения некоторых переменных. События, нажатия клавиатуры - меняют эти значения, и соответственно они попадают в контроллер.

Я хотел некоторым образом съэкономить на трафике между компьютером и контроллером.

В начальный момент времени в контролер попадают значения по-умолчанию.

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

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 23:14, 10-07-2012 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Наследование классов и интерфейсов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход