! Warning: This repository contains russian comments and README !
Первое, что необходимо объяснить - это...
Данный проект является консольным приложением на C#.
Вдохновление на него у меня появилось от механизма ультразвукого зрения, которое заключается в том, что выпуская ультразвук мы запускаем таймер и когда данный звук вернётся обратно мы, используя знание о скорости данного звука (хотя, в действительности у меня там получилось слегка не так) и о том, за какой промежуток времени этот звук (в дальнейшем я буду называть его лазером) к нам вернулся с помощью формулы расчитываем расстояние от источника звука (отправителя) до какого - нибудь объекта.
По итогам был создан некий мир с одним вектором, где может быть два вида объектов: отправители и коробки. Отправитель может пустить лазер. Луч будет лететь в указанную отправителем сторону. С каждой пройдённой лучом координатой X будет прибавляться счётчик времени и проверяться не столкнулся ли луч с чем - нибудь. Если столкнулся, то является ли это отправившим его отправителем? Если да - то возвращаем ему проведённое в пространстве время. Если нет - то луч летит в противоположную сторону (на встречу отправившему его отправителю, соответственно). Когда вернули значение, с помощью полученного времени мы с помощью спец. формулы рассчитываем дистанцию, после, выводим её в консоль.
Как вы видите, программа очень проста, но какова же цель её создания?
Прежде всего это практика. Также должна быть ООП структура. Программа должна была быть простой в создании из - за моего низкого опыта в создании програм с ООП. Также необходимо было создать UML диаграмму по которой вплоть до методов и полей, комментариев к классам я должен был написать уже саму программу, без изменений в чём бы то ни было (но всё же по итогам ошибки были как в проектировании, так и в реализации).
Так каковы же ошибки в проектировании?
Здесь я буду разделять три вида ошибок:
- Недочёт - то, что программа компилировать не будет и влиять на её работу соответственно тоже. Это всякие ошибки в комментариях к классам или просто недописал в диаграмму что - нибудь.
- НЕзначительно - в принципе с ними программа может вполне исправно работать, но лучше было бы с точки зрения проектирования сделать по - другому.
- Значительно - с этими ошибками программа не сможет работать исправно и возможно даже скомпилироваться.
Сами ошибки:
- В Laser-е поле SenderPosX следовало бы сделать readonly, так как это значение никаким образом не сможет измениться. НЕзначительно
- Конструктор Laser-а в котором сразу планировалось запустить метод Main() не сможет вернуть время (как я по какой - то непонятной причине думал, что можно), потому этот самый метод Main() следует сделать публичным, чтобы запустить его из Sender-а. Значительно
- Для реализации Singleton-а нужно ещё одно поле, которое не было добавлено в диаграмму. Недочёт
- Правильней было бы расписать комментарий к классу Program - "Создаёт первоначальные препятствия и первоначально управляет ими.". Недочёт
- В описании класса Obstacle не "предметы", а "препятствия". Недочёт
И того 3 недочёта, 1 НЕзначительный, 1 значительный.
По пути ultrasound-project\Diagrams\png вы сможете найти Before и After диаграммы (ну, и ещё Further, но об этом потом). Before - это диаграмма до реализации, After - исправления после реализации ("добавлено" помечено красным шрифтом, "убрано" помечено зачёркиванием).
Однако, несмотря на ошибки проект был выполнен. Так что подведу итог:
Возможно, у меня есть несколько идей:
- В 1 пункте README говорилось, что скорость лазера и продвижение времени слишком условно и не реалистично. Потому я думаю это надо исправить и дополнительно добавить возможность отправителю отправлять лазер с разной скоростью.
- Программа, если запускать её просто через exe-шник не будет интересна пользователю, так как будет просто выдаваться результат, который был найден благодаря настройкам в самом коде. Потому я хочу, чтобы при входе в программу пользователю можно было самому расставлять препятствия, управлять отправителями и прочее.
Я очень рад, если у вас появилась эта мысль. Вы можете развивать проект, отправляя pull request-ы. Если нет идей можете взять их из пункта "Планируется ли дальше развивать его?". Очень желательно соблюдение поставленной в проекте стилистики и во время развития кода развивать ещё и диаграмму (для этого я специально создал новую копию диаграммы под названием FurtherDiagram). Где исходники? - по пути ultrasound-project\Diagrams\xml вы сможете найти .xml файлы с одноимёнными с .png диаграммами названиями, эти исходники вы сможете открыть с помощью редактора диаграмм, который я указал в пункте "Что использовалось для создания этого проекта?" (редактируйте FurtherDiagram.xml).
Visual Studio 2017 - используемое IDE для редактора кода. C# - используемый язык программирования. Устанавливался с помощью Visual Studio 2017.
Draw.io - сайт ( https://www.draw.io ), использовался как редактор для UML диаграмм.
Git Bash - программа, используемая для взаймодействия с git и отправкой изменений на GitHub.