Шаг 49.
Унифицированный язык моделирования UML.
Выбор реализации

    На этом шаге рассмотрим выбор реализации класса.

    Внутреннее представление класса или объекта разрабатывается только после завершения проектирования их внешнего представления. При этом необходимо принять два проектных решения: выбрать способ представления класса или объекта и определить способ их размещения в модуле.

    Представление классов и объектов почти всегда должно быть инкапсулировано. Это позволяет вносить изменения (например, модифицировать способы использования памяти и временных ресурсов), не нарушая предположения о функциональных свойствах класса или объекта, которые могут иметь их клиенты. Выбор способа представления является нелегкой задачей и не определяется одними лишь доступными техническими средствами. Он всегда должен рассматриваться с точки зрения операций над данными [Wirth, N. 1986. Algorithms and Data Structures. Englewood Cliffs, NJ: Prentice-Hall, p. 37.].

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

    Одним из наиболее трудных компромиссов является выбор между вычислением состояния объекта и хранением его в поле данных. Рассмотрим, например, класс Cone (Конус), содержащий метод Volume (Объем). Этот метод возвращает объем конуса.

    Представление конуса, как правило, хранит высоту и радиус основания в полях данных. Следует ли создать дополнительное поле данных для объема или же вычислять его по мере необходимости с помощью метода Volume [Keene, S. 1989. Object-Oriented Programming in Common Lisp. Reading, MA: Addison-Wesley, p. 68.]? Если необходимо, чтобы объем конуса вычислялся быстро, то объем следует хранить в поле данных. Если экономия памяти важнее, то лучше вычислить это значение.

    Оптимальный способ представления объекта всегда определяется спецификой решаемой задачи. В любом случае этот выбор не должен зависеть от внешнего представления класса.

    Аналогичные вопросы возникают при распределении объявления классов и объектов по модулям. Решение обычно принимается путем компромисса между взаимно противоречивыми требованиями к видимости и сокрытию информации.

    Как правило, модули должны быть функционально связными внутри и слабо связанными друг с другом. При этом необходимо учитывать многие нетехнические факторы, такие как возможность повторного использования, безопасность и документирование. Проектирование модулей не менее сложная задача, чем проектирование классов и объектов.

    На следующем шаге рассмотрим базовые понятия класса в нотации UML.




Предыдущий шаг Содержание Следующий шаг