Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модель искусственного спутника 
:(
    Опции темы
Leviafan
  Дата 25.9.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 19.2.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



Возьмём автоматизированный искусственный спутник Земли.  smile  Эта железка состоит из нескольких подсистем реального времени: система навигации, датчиковая подсистема, система цифровой съёмки и т.д. Попробуем перенести эту модель в виртуальный мир. Какова должна быть структура классов, какие паттерны лучше использовать?

Допустим, я хочу визуализировать модель искусственного спутника с помощью инструментов WPF. Т.е. я хочу, к примеру, написать пользовательский интерфейс панели управления данным спутником.
В WPF есть удобный механизм связывания данных. Однако, пока трудно понять, как им воспользоваться, т.к. для привязки данных экземпляра класса необходима либо реализация интерфейса INotifyPropertyChanged, либо создание набора DependencyProperty. И очень не хочется делать это в каждом классе, представляющем собой отдельную подсистему.

В данный момент архитектура классов следующая:
Satellite - класс спутника
Код

public class Satellite
{
        public readonly ISatelliteSubsystem[] SatelliteSystem;

        public Board()
        {
            SatelliteSystem = new ISatelliteSubsystem[] {
                new SensorsSubsystem(),
                new NavigationSubsystem(),
                new MilitarySubsystem(),
                ...
            };
        }

        public void Run()
        {
            for (int i = 0; i < SatelliteSystem.Length; i++)
            {
                SatelliteSystem[i].On();
            }
            while (true)
            {
                Array.ForEach(SatelliteSystem, s => s.ExecCommand(SystemCommands.Fire));
                Thread.Sleep(100);
            }
        }
}

Интерфейс ISatelliteSubsystem:
Код

public interface ISatelliteSubsystem
{
        void On();
        void Off();
        void ExecCommand(SystemCommands cmd);
        void Pause();
        void Stop();
        void Resume();
}

Общие типы системных команд:
Код

public enum SystemCommands
{
        Nop, Test, Fire, Reset, On, Off, Stop, Pause, Resume
}

Команда Fire инициализирует полный рабочий цикл исполняющей подсистемы.
Следующий Fire подсистема будет ожидать только после завершения своего рабочего цикла. Т.е. во время работы системы, поток команд типа Fire игнорируется.
Отработав, каждая подсистема может предоставить некоторый отчёт о проделанной работе.
Рассмотрим, к примеру, датчиковую подсистему: после полного цикла опроса датчиков, до завершения следующего, показания датчиков хранятся в специальном массиве.
Однако, для каждой из подсистем формат и тип выходных данных разный, т.е. я не могу размесить требование ответа в интерфейс.
Кроме того, в этом случае, разработчик должен помнить, какому индексу массива SatelliteSystem соответствует та или иная подсистема (для приведения типов).
И что совсем не ясно в этой идеологии - как организовать отрисовку выходных значений с помощью инструментов WPF.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.