Пособие по практике программирования


         

Пример 4.37






Таким образом, реализация получается абсолютно прозрачной, при ; этом, несмотря на то что stdin, stdout и stderr выглядят как переменные, присваивать им никаких значений нельзя. Специфическое имя__iob основано на соглашении ANSI С, гласящем, что два подчеркивания используются в начале тех имен служебных переменных, которые должны | быть видны. Таким образом, выбранное нами имя, скорее всего, не будет I конфликтовать с именами внутри самой программы.

Классы в C++ и Java — еще более удачные механизмы для сокрытия информации; их можно считать центральными средствами правильного I использования этих языков. Классы-контейнеры из ЗТЬдля C++, которые мы использовали в главе 3, заходят еще дальше: за исключением некоторых данных о производительности, никакой информации о деталях | реализации не имеется, — следовательно, разработчики библиотеки могут использовать абсолютно любые механизмы.

Ограничьтесь небольшим набором независимых примитивов. Интерфейс должен предоставлять все необходимые возможности, но не более того; части интерфейса по возможности не должны перекрывать друг друга в плане функциональности. С одной стороны, лучше иметь большое количество функций в библиотеке —.тогда можно подобрать любую необходимую комбинацию. С другой стороны, чем больше интерфейс, тем труднее его написать и поддерживать в дальнейшем, а кроме того, неоправданно большие размеры могут привести к тому, что его будет трудно изучить и, следовательно, использовать оптимально. "Интерфейсы прикладных программ" (Application Program Interfaces, или API) зачастую настолько велики, что ни один смертный, похоже, не в состоянии освоить их целиком.

Для удобства использования некоторые интерфейсы предоставляют несколько способов для выполнения той или иной операции; с этой тенденцией надо бороться. Стандартная библиотека ввода-вывода С предоставляет как минимум четыре разные функции для вывода символа в выходной поток:




Содержание  Назад  Вперед