Игра выходного дня
Все упомянутые бренды, компании и товарные знаки являются собственностью их соответствующих владельцев.
Здравствуйте!
Меня зовут Юрий. Я работаю программистом. В работе использую весьма экзотические языки программирования, СУБД и прочие связанные с программированием технологии. Ну, так получилось. Хотелось бы попрактиковаться в том, с чем по долгу службы я не сталкиваюсь. Для этого я выполню ряд проектов. Для каждого такого проекта будет создан репозиторий. Полное описание каждого я буду размещать на сайте https://weekend-game.github.io. Как всё это развивалось, смотрите в блоге.
Просмотрщик необычных файлов (BankViewer)
Java, Swing (Single Document Interface)
Мой знакомый получает банковские выписки в текстовом формате, где каждое поле задаётся парой ключ-значение. Эти файлы он загружает в информационную систему. Иногда возникают проблемы: то дата платежа в выписке указана в странном формате, то вместо ИНН загружается ОКАТО, а то и вовсе нужного поля в файле нет. При просмотре файла в текстовом редакторе можно найти причину любой проблемы, но это очень неудобно. Было бы гораздо удобнее открыть файл в программе и увидеть банковскую выписку в виде таблицы, где каждая строка представляет собой отдельный платёж. Сразу будет видно, какие там платежи, от кого, кому, какие значения записаны в каждой колонке таблицы.
Именно это и делает эта программа. Но кроме того, она позволяет понять, как из немного Java и немного Swing сделать: меню, инструментальную линейку, строку состояния, контекстное меню, диалог открытия файла, отображение файла в виде таблицы, поиск, Drag & Drop, использование L&F и собрать всё это вместе в виде SDI.
Подробнее тут: BankViewer.
Простая библиотека (SimpleLibrary)
Java, Swing
При создании BankViewer стало понятно, что некоторые классы, которые потребовалось создать для этой программы, будут нужны во многих других подобных программах. Всегда будет необходимо уметь выдавать пользователю сообщение, оснастить приложение статусной панелью, сделать приложение локализованным, сохранять какие-то настройки, работать с Look and Feel, помнить последние открытые файлы, иметь заготовки для часто используемых Actions, а также уметь быстро и удобно размещать поля ввода в окнах. Вот именно всё это и было сосредоточено в пакете game.weekend.simplelibrary при разработке BankViewer.
Здесь я вынесу этот пакет из BankViewer в отдельный модуль для использования в дальнейших проектах.
Подробнее тут: SimpleLibrary.
Система управления контентом (CMS)
Java, Swing, SimpleLibrary
Появляются идеи новых проектов, и они должны получать свою страничку на сайте. А добавление одного нового проекта вызывает необходимость внести изменения на все страницы сайта. Затем приходится долго проверять созданное. И да, можно, конечно, и так, но зачем?
Я делаю собственную CMS (систему управления контентом) для ведения своего сайта. Проблема решена! Конечно, можно было бы взять что-то готовое, но что? И сколько времени мне понадобилось бы для его изучения? Удалось бы сделать сайт таким, каким я его придумал, или всего лишь примерно таким? Думаю, язык программирования Java — это лучшая в мире CMS :-)
Кроме того, создание этой CMS позволяет попрактиковаться в работе с файлами на Java, в создании пользовательского интерфейса с помощью Swing, в частности: в работе с текстовыми полями, радиокнопками, комбобоксами и редактировании списка.
Подробнее тут: CMS.
Текстовый редактор (TextEditor)
Java, Swing (Single document interface), SimpleLibrary, в качестве шаблона приложения BankViewer
Итак, создан просмотрщик банковских выписок. Используя аналогичный подход, можно сделать просмотрщики ещё для многих других вещей. Но это всего лишь просмотрщики. А если попробовать сделать редактор, то окажется, что надо решить массу новых проблем. Сейчас я не делаю какой-то необычный редактор, не создаю редактор лучше, чем какой-то другой, не пытаюсь с кем-то конкурировать. Я исследую, какие проблемы понадобится решить, и ищу их решения.
Это обычный, очень простой текстовый редактор, который позволяет редактировать простые текстовые файлы. Он сохранил весь сервис, который уже есть в BankViewer. Но он не только открывает имеющиеся файлы, но и создает новые, сохраняет отредактированный текст, следит за тем, чтобы случайно не потерять результат редактирования, логично управляет активностью пунктов меню “Правка”. Он умеет не только искать текст, но и заменять один текст на другой. Позволяет установить комфортный размер шрифта, использовать моноширинный шрифт, если это будет удобно в каком-то случае.
Подробнее тут: TextEditor.
Библиотека редактора (EditorLibrary)
Java, Swing, SimpleLibrary
В различных проектах может понадобиться использование простого текстового редактора как части проекта. Текстовый редактор должен не только уметь работать с текстом, но и открывать файлы, сохранять их, а также уметь делать поиск в тексте, замену одних слов (подстрок) на другие. Вот именно всё это и было сосредоточено в пакете game.weekend.editorlibrary при разработке TextEditor.
Здесь я вынесу этот пакет из TextEditor в отдельный модуль для использования в дальнейших проектах.
Подробнее тут: EditorLibrary.
Интерпретатор языка программирования (Interpreter)
Java, Swing, SimpleLibrary, EditorLibrary, в качестве шаблона приложения (TextEditor)
Наращиваю сложность. Вообще-то, программисту со сложностью надо бороться (Стив Макконел. Совершенный код. Глава 34. Основы мастерства), но это справедливо для текстов программ. А я наращиваю сложность следующей задачи.
Создание своего языка программирования — полезное дело. Во-первых, это интересно. Во-вторых, его можно использовать, например, для приёмочного тестирования, то есть для написания приёмочных тестов (Роберт Мартин. Быстрая разработка программ. Глава 4 Тестирование. Приемочные тесты. “Обычно тесты разрабатываются с помощью специального языка подготовки сценариев, разрабатываемого для заказчиков приложения.”). Или, например… Вы пытались написать программу расчёта заработной платы? Какие-то начисления, удержания, причём все они зависят от огромного количества условий. Можно, конечно, всё это учесть, запрограммировать. А можно дать бухгалтеру простой язык для описания правил расчётов. Главное — не говорить бухгалтеру слов “язык программирования”, а называть это “настройка” начислений и удержаний. :)
Итак, я беру свой редактор и делю его центральную часть на две: в верхней части оставляю редактор, а в нижней размещаю панель, в которой будет отображаться всё, что будет выводить мой интерпретатор. Затем добавляю меню “Выполнить” с пунктами “Выполнить” и “Остановить”…
Подробнее тут: Interpreter.