Применение техник «Выделение вычислений» и «Улучшение структуры действий» #
Формат проведения семинара #
Данное занятие будет проведено в формате семинара. На семинаре будут обсуждаться результаты применения техник функционального программирования к ранее реализованному императивному коду.
Первый этап: подготовка императивного приложения #
Код написан согласно объектно-ориентированной парадигме #
Вам необходимо разработать, доработать или выбрать свой предыдущий код, реализующий задачу согласно принципам классической объектно-ориентированной парадигме:
- Для описания сущностей реального мира используются объекты, порождаемые классами. Для одной сущности реального мира используется ровно один объект в рамках системы.
- Объекты должны полностью управлять собственными данными, не допускается прямая модификация данных в чужих объектах.
- Допускается использование полиморфизма, наследования и обобщённого программирования.
Отсутствует завязка кода предметной области на фреймворк #
Данное приложение должно реализовывать командный интерфейс для доступа к данным. Допускается использование кода, работающего с графическим интерфейсом, в случае, если работа с данными классов предметной области целиком отделена от логики работы библиотек и требований различных фреймворков. При желании использования такого кода, его необходимо согласовать с преподавателем не позднее чем за неделю до сдачи.
Все данные находятся в оперативной памяти #
Приложение также не должно использовать системы хранения данных.
- Должны отсутствовать запросы к базе данных во время работы приложения.
- Вся обрабатываемая информация должна находится в оперативной памяти приложения.
Удаление мусора происходит автоматически #
Удобнее всего применять предложенные подходы к языкам программирования, ориентированных на запуск в средах с функцией автоматической сборки мусора. То есть данные подходы плохо применимы к системным языкам программирования с ручным управлением памятью (Си, 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 минут. Тематика обсуждения совпадает с темой курса.
- Оценка за семинар включает в себя как качество доклада, так и качество вопросов и комментариев.