Интерфейсы
И до того, как буду строить стену, я должен
знать,
Что огораживаю я: внутри или снаружи, -
И что не нарушаю чьих-то прав.
Есть нечто, что не терпит ограждений,
Ломая их
Роберт Фрост. Починка стены
(Перевод В. Кириллова)
Суть проектирования — сбалансировать конфликтующие цели и ограничения.
Когда вы пишете небольшую программу для собственного пользования, вы,
конечна, можете сами выбирать конкретные решения, этот выбор не затронет
ничего и никого, кроме вас. Но если ваш код будет использоваться кем-то
еще, каждое решение имеет более широкие последствия.
Среди проблем, которые надо решить при проектировании, стоит выделить
следующие.
- Интерфейсы: какой доступ и какой сервис предлагается?
Интерфейс, в сущности, является соглашением между поставщиком (программистом)
и потребителем. В идеале мы должны предоставлять унифицированные и удобные
средства, имеющие достаточно возможностей для того, чтобы их было легко
использовать, и в то же время не настолько большие, чтобы стать громоздкими.
- Сокрытие информации: какая информация доступна, а какая — нет? Интерфейс
должен предоставлять прямой доступ к компонентам, скрывая при этом детали
реализации, — с тем чтобы их можно было изменять, не затрагивая пользователя.
- Управление ресурсами: кто отвечает за управление памятью
и другими ограниченными ресурсами? Здесь главными проблемами являются
выделение и освобождение памяти и управление совместно используемой
информацией.
- Обработка ошибок: кто обнаруживает ошибки, кто сообщает
о них| и каким образом все это делается? Какие попытки восстановления
предпринимаются при обнаружении ошибки?
В главе 2 мы рассмотрели составные части, из которых строится система,
— структуры данных. В главе 3 мы узнали, как объединять их в небольшие
программы. Теперь наше внимание сосредоточится на интерфейсах между компонентами,
получаемыми из разных источников. В этой главе мы проиллюстрируем проектирование
интерфейсов созданием библиотеки функций и структур данных для решения
одной хорошо известной задачи. Попутно мы познакомим вас с некоторыми
принципами проектирования. Как правило, при проектировании приходится
принимать огромное количество решений, но большинство из них делается
почти бессознательно. Из-за незнания базовых принципов и возникают те
малопонятные интерфейсы, которые ежедневно так досаждают программистам. |