Интерфейсы
Проектирование интерфейсов
И до того, как буду строить стену, я должен знать, | Что огораживаю я: внутри или снаружи, – | И что не нарушаю чьих-то прав. | Есть нечто, что не терпит ограждений, | Ломая их. | Роберт Фрост | Починка стены | (Перевод В. Кириллова) | Суть проектирования – сбалансировать конфликтующие цели и ограничения.Значения, разделенные запятой
Значения, разделенные запятой (Comma-Separated Values – CSV), – так называется естественный и широко распространенный способ представления табличных данных. Каждая строка таблицы соответствует строке текста; поля в строке разделены запятыми.Прототип библиотеки
Вряд ли нам удастся получить удачный проект библиотеки интерфейса с первой попытки. Как написал однажды Фред Брукс (Fred Brooks), "заранее планируйте выкинуть первую версию – все равно придется". Брукс писал о больших системах, но суть остается той же и для любой нормальной программы.Библиотека для распространения
Теперь с учетом того, чему мы научились на опыте прототипа, попробуем создать библиотеку общего назначения. Наиболее очевидные требования такие: csvgetline должна быть более устойчива, то есть уметь обрабатывать и длинные строки, и большое количество полей;Реализация на C++
В этом разделе мы напишем версию библиотеки CSV на C++, в которой постараемся преодолеть некоторые ограничения, имеющиеся в С~версии. Нам придется внести некоторые изменения в спецификацию, главным из которых станет то, что функции будут теперь обрабатывать строки C++ вместо массивов символов С.Принципы интерфейса
В предыдущих параграфах мы прорабатывали детали некоего интерфейса. Сформулируем теперь в общих чертах, что же такое интерфейс. Интерфейс – это детализированная, описанная граница взаимодействия между кодом, предоставляющим некоторые возможности, и кодом, который эти возможности использует.Управление ресурсами
Одна из наиболее серьезных проблем, требующих решения при проектировании интерфейса библиотеки (а также класса или пакета), – это управление ресурсами, которыми библиотека распоряжается самостоятельно или совместно с вызывающим ее окружением.Abort, Retry, Fail?
В предыдущих главах мы использовали для обработки ошибок функции вроде eprintf и estrdup – просто выводили некие сообщения перед тем, как прервать выполнение программы. Например, функция eprintf ведет себя так же, как fprintf (stderr,…), но после вывода сообщения выходит из программы с некоторым статусом ошибки.Пользовательские интерфейсы
До сих пор мы говорили главным образом об интерфейсах между компонентами программы или несколькими программами. Но есть же и еще один, очень важный, вид интерфейса – между программой и ее пользователями-людьми.Дополнительная литература
Несмотря на то что ряд технических деталей, описанных в книге "Мистический человекомесяц" Фредерика Брукса (Frederick P. Brooks, Jr. The Mythical Man Month. Addison-Wesley, 1975; Anniversary Edition, 1995) уже устарел, она не перестала быть захватывающе интересной.