Javenue logo

Javenue

Программирование на Java

Информационные технологии

UML проектирование - опыт решения задачи

Есть такой сайт - http://www.topcoder.com. Ресурс претерпел уже множество изменений, но если коротко описать его суть - здесь проводятся онлайн и оффлайн соревнования по объектно-ориентированному проектированию и программированию с использованием .NET и Java, а сейчас наверное и других языков и технологий.

В 2004 году мне тоже довелось принять участие в соревнованиях по проектированию. Результат довольно неплохой - четвертое место из более чем 30 участников. Первые 2 места даже получили денежный приз. Это был мой первый опыт в объектно-ориентированном проектировании и написании спецификаций. А опытом нужно делиться...

Пользуясь случаем, хочу сказать огромное спасибо Пекарю Дмитрию, который мне очень помогал в изучении ОО проектирования и программирования на Java.

Вернемся к статье. Задача была следующей - спроектировать hash-утилиту для кодировки входящих данных в соответствии с алгоритмами хэширования. Компонент также должен предоставлять возможность подключения новых хеш-алгоритмов. Для регистрации и переключения между алгоритмами рекомендовали обратиться к паттерну Strategy.

Полное описание требований к утилите вы сможете найти в zip-архиве в конце статьи. Приведу лишь некоторые выдержки из спецификации:

1.1 Overview

The Hash Utility provides several hashing algorithms adhering to the same interface. Each algorithm will provide functions to convert a string or byte array to a hashed byte array, string or a 32 character hex string. Since the component implements the strategy pattern, adding additional algorithms is simplified. Additional algorithms must implement the hashing algorithm interface defined by this component.

1.2 Logic Requirements

1.2.1 Strategy Pattern

The component will support the strategy pattern. The component will support adding multiple algorithms that adhere to an interface defined by this application.

1.2.2 Hashing Algorithms

The component is required to support the following hashing algorithms

  • MD5
  • SHA

1.2.3 Algorithm methods

Each algorithm must support the following interfaces

  • Calculate the hash for an array of bytes and return an array of bytes
  • Calculate the hash for a String and return an array of bytes
  • Calculate the hash for a String and return a String.
  • Calculate the hash for an array of bytes and return a 32 character hex string
  • Calculate the hash for a String and return a 32 character hex string

Результатом выполнения работы были следующие вещи:

  • Спецификация (Hashing Utility Component Specification);
  • Use Case Diagram (в архиве не приводится);
  • Sequence Diagrams (в архиве не приводятся);
  • Диаграмма классов (Hashing Utility Class Diagram).

А вот и сама диаграмма классов на UML:

Utility Class Diagram.

Не исключено, что в решении есть недочеты или даже ошибки. Я оставил все так, как оно было еще в конце 2004 года. Для создания UML диаграмм я использовал программу Poseidon for UML.

А вот собственно и архив - topcoder.zip (53 Kb).

Думаю, начинающим проектировщикам будет полезно посмотреть спецификацию и диаграмму классов.

С удовольствием отвечу на ваши вопросы.



Комментариев: 0

  Выйти

  * для публикации комментариев нужно