Задачи для начинающих
Бо, всем понятно что там будет - табличка: текущее состояние, управляющие сигналы, новое состояние.
Ищется совпадение первых двух и возвращается третье. Все по теории.
Ага, вот только что-то мне подсказывает, что у тебя там будет говно код в стиле
switch (blah-blah) { case 1: break; case 2: break;
}
роль контроллера исполняет зацикленный лист
-----
У тебя "зацикленный лист" завязан на конкретную реализацию светофора и последовательность сигналов.
Изменится светофор - надо переделывать КОД, а машина состояний в контроллере никак не завязана на светофоры.
И не важно какой конфигурации перекресток - Я поленился переименовать ТТрафикЛигхт в ТРоадКросс... ну да, лентяй, каюсь...
Ну следующее состояние должно определяться через контроллер (у меня в примере это зацикленные лист), либо состояние само должно определить следующее состояние (это особенно полезно, если из текущего состояния можно перейти в одно из нескольких состояний, т.е. если есть ветвления)
что у тебя там будет говно код в стиле
-----
Нее, Я это привык делать трехколоночной табличкой.
Ну или двухколоночной если управляющих сигналов нет...
Верификацию же надо делать - 100 элементов во входящем состоянии, 20-30 управляющих, 100 в выходящем состоянии и от 20 до 5000 строк - мне его руками проверять ой как лениво...
А кейсовый говнокод иногда в мок могу сунуть - там без валидации сойдет...
Прости конечно, но это самое ужасное режение из всех возможных.прощаю конечно, ведь ты не учавствовал в беседе, поэтому не должен понимать о чем шла речь.
А вот с АлехНек и Мурр у меня была беседа в стиле Гладышева с Иваном Чонкиным, когда он объяснял ему почему у коня пальцев нет.
- Вот ты вчерась насчет лошади спрашивал.
- Насчет какой лошади? - не понял Иван.
- Ну вообще, почему, мол, она человеком не стала.
- А-а, - Иван вспомнил, что в самом деле вчера был какой-то такой разговор.
- Так вот, - с гордостью сообщил Гладышев. - Я понял, почему лошадь не становится человеком. Она не становится человеком, потому что у ней пальцев нет.
- Эка, удивил, - сказал Чонкин. - Это я с малых лет знаю, что у лошади нет пальцев.
- Да я тебе не о том. Я говорю не то, что у ней нет пальцев, а то, что она не становится человеком, потому что у нее нет пальцев.
- А я тебе говорю - это всем известно, что у лошади нет пальцев.
Тут они заспорили, как часто люди спорят между собой, доказывая один одно, а другой другое,...
Предлагаю подойти к решению задачи с другой стороны:хорошее решение, да только не подходящее для стандартных систем программирования контроллеров.
Ибо в этих языках:
- нету Sleep (поэтому надо следовать совету Мурр, и вынести Next из класса)
- нету интерфейсов
- класс имеет только одну функцию у которой есть доступ к входным, выходным и локальным данным класса. В локальных данных могут быть инстанциированны другие классы, единственную функцию которых можно вызвать, предварительно записав необходимое в их входные данные, и считав выходные после вызова их единственной функции.
- альтернатива CASEу только IF-ELSE. Никаких Action<>, которые можно было бы засунуть в таблицу, нету.
- рекурсии невозможны
Состояний у светофора не так много:таблица состояний это конечно хорошо.
Еще лучше таблица переходов (что предлагал Мурр), где для каждого состояния указаны условия переходов в другие состояния.
А еще лучше таблица переходов изображенная в виде графа.
А это ни что иное, как язык SFC из упомянутого стандарта.
Там сразу рисуешь такой граф.
...........
Единственный язык из стандарта, который по структуре подобен СиШарпу, это ST. И если соблюдать ограничения, то написанную программу на СиШарпе можно, слегка подправляя текст, преобразовать в ST и наоборот.
Что может быть проще, чем один бесконечный цикл?
У нас получается два варианта:
- Задача не для начинающих.
- Задача для начинающих. В таком случае должны быть использованы только те элементы которые им известны. Классы и интерфейсы к этому не относятся, к сожалению.
Кстати, после тестирования выявлено, что приведенный код абсолютно нерабочий. А после возможного исправления, работает не так, как ожидалось.
Pedestrian Red, Auto Green, delay 5s Pedestrian Red, Auto Yellow, delay 3s Pedestrian Red, Auto Red, delay 2s Pedestrian Green, Auto Red, delay 15s Pedestrian Red, Auto Red, delay 1s Pedestrian Red, Auto Green, delay 5s Pedestrian Red, Auto Yellow, delay 3.015s Pedestrian Red, Auto Red, delay 2s Pedestrian Green, Auto Red, delay 15s ...
Также очень бы хотелось увидеть реализацию класса TrafficLightButton для консольной проги под виндой, без каких либо извращений.
Для теста было использовано просто без нажатия кнопки.
internal class TrafficLightButton : ITrafficLightButton { private bool _isPressed = false; public bool IsPressed { get { return _isPressed; } } public void Reset() { } }
А кейсовый говнокод иногда

поддержку совместимости с существующими программами конечно надо оставить, но с обязательным предупреждением, без возможности его отключения: "говнокод".
Кто за?
Кстати, после тестирования выявлено, что приведенный код абсолютно нерабочий. А после возможного исправления, работает не так, как ожидалосьэто только теоретически таблиц достаточно.
Если задача попадётся чуть сложнее, то программист, который плевался ранее глядя на графы, сам начнёт рисовать их на бумаге и потом списывать результат в таблицы.
И если это ему часто придется делать, то и брезгливость к графам как рукой снимет.
который плевался ранее глядя на графы, сам начнёт рисовать их на бумаге
Многое зависит от решаемых задач. Тот же робот просто вынужден переходить из одного состояния в другое.
И когда программируешь исключительно роботов, начинаешь и мыслить по другому и инструменты нужны другие.
А когда, просто одна задачка попадется ее можно решить по разному. И рисунки могут вообще не понадобится.
проблема не в операторе, а в его использовании. Это как типа нож. Можно и так и так использовать.это верно, как и то, что Clean Code Development - как пиво: вещь хорошая, но можно и заболеть, а может и мозги отключить вообще, так, что кроме него ни о чем и думать не сможешь.

У нас получается два варианта
-----
У нас получается:
- одна учебная задача
- множество, в зависимости от квалификации прогера, решений
Классы и интерфейсы к этому не относятся
-----
Ну так определяйся с тем что они знают и что могут/должны пользовать.
А то - начали со средины - непонятно знают ли они переменные, выражения, операторы и т.п...
Классы и интерфейсы к этому не относятся, к сожалению.
Неверно. Этим нужно заниматься с самого начала. На обьектно-ориентированных языках нужно сразу писать обьектно-ориентировано иначе человек просто не станет переучиваться, привыкнув думать отдельными методами.
но можно и заболеть
Обычно заболевают те у кого иммунитет слабый
ССД еще никому не мешал, но в программировании роботов действительно абсолютно бесполезная вещь.
Насколько помню и у Сименса и у Кука свои собственные системы для программирования, с другими просто не сталкивался, но подозреваю что тоже самое.
У нас получается:- одна учебная задача
Это если смотреть абстрактно, а свете топика вроде однозначно - задачи для начинающих которые с программированием раньше не сталкивались.
Конечно, ничто не мешает нам поиграться и предложить самые разные решения - тоже интересно.
Ну так определяйся с тем что они знают
А ты что забыл как сам на 4-х лапах ходил и что знал при этом
Судя по тестовому объекту - знаний практически нет