Coder Social home page Coder Social logo

03-design-hw's Introduction

Домашняя задача по проектированию

Сделайте fork этого репозитория и работайте в нем.

Вам нужно сделать генератор облака слов по произвольному тексту. Примеры.

В облаке не должно быть повторяющихся слов, размер слова должен быть тем больше, чем чаще встречается слово, не должно быть "скучных" слов (предлогов, местоимений, ...).

Дополнительные ограничения

Точки расширения

В промышленном программировании при разработке далеко не всегда разумно создавать точки расширения "на будущее". Чаще руководствуются принципами YAGNI и KISS, поддерживая код как можно проще, а абстракции создаются и внедряются в код только в момент, когда понадобилось расширить функциональность.

Тем не менее для учебных целей в этой задаче мы требуем заранее предусмотреть точки расширения для наиболее вероятных потенциальных изменений в вашем продукте. Результат вашей работы должен быть расширяем без модификации уже имеющегося кода (Принцип OCP).

Полиморфизм вместо условных операторов

Вам запрещено использовать операторы if, switch, ?: и прочие условные операторы, если их можно заменить полиморфизмом.

Dependency injection

Для сборки зависимостей используйте DI Container.

Тесты

Все нетривиальные части покройте модульными тестами. Добавьте несколько более крупных тестов, проверяющих работу всей программы в сборе.

Функциональные требования и их возможные изменения

Ниже описаны обязательные пункты и возможные. Выполните обязательные требования, а потом выберите и реализуйте несколько понравившихся пункты из перспективы.

Даже если требование из перспективы не выполнено, соответствующая точка расширения в вашем коде уже должна быть.

Исходный текст

  • Источником данных должен быть файл со словами по одному в строке.
  • В перспективе — поддерживать ввод данных из литературного текста, с приведением слов в начальную форму.
  • В перспективе — поддерживать разные форматы файлов (txt, doc, docx, ...)
  • В перспективе — дать возможность влиять на список скучных слов, которые не попадут в облако.

Формат результата

  • В качестве результата программа должна генерировать png-файл.
  • Должна быть возможность задать цвета, шрифт и размер изображения.
  • В перспективе — поддерживать разные форматы изображений.
  • В перспективе — поддерживать разные способы расцветки слов.

Алгоритм

  • Придумайте или найдите алгоритм формирования облака тегов.
  • Сделайте так, чтобы по одному тексту можно было сгенерировать несколько облаков тегов с помощью разных алгоритмов или одного алгоритма с разными настройками.
  • В перспективе — реализовать несколько алгоритмов формирования облака тегов.

GUI или Console

  • Организуйте код так, чтобы было легко сделать оба вида клиентов — и клиента командной строки, и GUI приложение с вводом параметров и интерактивным просмотром.
  • Реализуйте одного клиента по вашему выбору.

Дополнительные ссылки

03-design-hw's People

Contributors

dqkrait avatar xoposhiy avatar

Watchers

James Cloos avatar antrdima avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.