Применение техник «Выделение вычислений» и «Улучшение структуры действий» #
Формат проведения семинара #
Данное занятие будет проведено в формате семинара. На семинаре будут обсуждаться результаты применения техник функционального программирования к ранее реализованному императивному коду.
Первый этап: подготовка императивного приложения #
Код написан согласно объектно-ориентированной парадигме #
Вам необходимо разработать, доработать или выбрать свой предыдущий код, реализующий задачу согласно принципам классической объектно-ориентированной парадигме:
- Для описания сущностей реального мира используются объекты, пораждаемые классами. Для одной сущности реального мира используется ровно один объект в рамках системы.
- Объекты должны полностью управлять собственными данными, не допускается прямая модификация данных в чужих объектах.
- Допускается использование полиморфизма, наследования и обобщённого программирования.
Отсутствует завязка кода предметной области на фреймворк #
Данное приложение должно реализовывать командный интерфейс для доступа к данным. Допускается использование кода, работающего с графическим интерфейсом, в случае, если работа с данными классов предметной области целиком отделена от логики работы библиотек и требований различных фреймворков. При желании использования такого кода, его необходимо согласовать с преподавателем не позднее чем за неделю до сдачи.
Все данные находятся в оперативной памяти #
Приложение также не должно использовать системы хранения данных.
- Должны отсутствовать запросы к базе данных во время работы приложения.
- Вся обрабатываемая информация должна находится в оперативной памяти приложения.
Удаление мусора происходит автоматически #
Удобнее всего применять предложенные подходы к языкам программирования, ориентированных на запуск в средах с функцией автоматической сборки мусора. То есть данные подходы плохо применимы к системным языкам программирования с ручным управлением памятью (Си, C++).
Объём кода, удобный для внесения изменений #
Для работы рекомендуется выбирать код длиной не более десяти тысячи строк.
Потенциально для решения задач подходит код, написанный на первых курсах бакалавриата.
Сложность предметной области #
- Предметная область должна содержать не менее трёх сложных сущностей.
- Предметная область должна предоставлять не менее десятка сложных операций.
Пример ER-диаграммы для небольшой части описания предметной области, содержащей необходимое количество сущностей.
erDiagram Publisher { int id string name } Book { int id string isbn } Edition { int id book Book string series publisher Publisher date publishedOn } Library { int id string address } Librarian { int id string name } Reader { int id string name string libraryCard } Library }o--o{ Librarian : librarians Library }o--o{ Reader : readers Library }o--o{ Edition : bookCopies Reader ||--o{ Edition : takenBooks Book ||--o{ Edition : editions Edition ||--|| Publisher : publisher
Подготовка к семинару #
Для участия в семинаре необходимо подготовить выступление, в рамках которого рассмотреть процесс изменения исходного кода. Выступление должно описывать:
- Изначальное состояние исходного кода. В описание должно входить:
- Описание назначение кода.
- Описание изначальной связи данных друг с другом.
- Описание изначальной связи методов друг с другом.
- Описание результата применения техник к коду. В описании должно быть:
- Пример применения техник к ряду методов.
- Изменение в структуре методов.
Помимо презентации также необходимо подготовить Git-репозиторий, который будет включать в себя как исходное состояние, так и фиксацию состояний во время применения данных техник.
Подготовленный набор материалов: презентация и ссылка на репозиторий загружаются в качестве ответа на задание.
Проведение семинара #
Каждому слушателю курса необходимо представить свою работу и обсудить результаты других слушателей курса.
- Каждый студент представляет свою работу в течение 5-10 минут.
- После представления работы происходит обсуждение до 5 минут. Тематика обсуждения совпадает с темой курса.
- Оценка за семинар включает в себя как качество доклада, так и качество вопросов и комментариев.