Шрифт:
3.2.1. VMS
3.2.2. MacOS
3.2.3. OS/2
3.2.4. Windows NT
3.2.5. BeOS
3.2.6. MVS
3.2.7. VM/CMS
3.2.8. Linux
3.3. Все повторяется
Часть II Проектирование
4 Модульность: четкость и простота
4.1. Инкапсуляция и оптимальный размер модуля
4.2. Компактность и ортогональность
4.2.1. Компактность
4.2.2. Ортогональность
4.2.3. Правило SPOT
4.2.4. Компактность и единый жесткий центр
4.2.5. Значение освобождения
4.3. Иерархичность программного обеспечения
4.3.1. Сравнение нисходящего и восходящего программирования
4.3.2. Связующие уровни
4.3.3. Учебный пример: язык С считается тонким связующим уровнем
4.4. Библиотеки
4.4.1. Учебный пример: подключаемые подпрограммы GIMP
4.5. Unix и объектно-ориентированные языки
4.6. Создание модульного кода
5 Текстовое представление данных: ясные протоколы лежат в основе хорошей практики
5.1. Важность текстовой формы представления
5.1.1. Учебный пример: формат файлов паролей в Unix
5.1.2. Учебный пример: формат файлов .newsrc
5.1.3. Учебный пример: PNG — формат графических файлов
5.2. Метаформаты файлов данных
5.2.1. DSV-стиль
5.2.2. Формат RFC 822
5.2.3. Формат Cookie-Jar
5.2.4. Формат record-jar
5.2.5. XML
5.2.6. Формат Windows INI
5.2.7. Unix-соглашения по текстовым файловым форматам
5.2.8. Аргументы "за" и "против" сжатия файлов
5.3. Проектирование протоколов прикладного уровня
5.3.1. Учебный пример: SMTP, простой протокол передачи почты
5.3.2. Учебный пример: РОРЗ, почтовый протокол 3-й версии
5.3.3. Учебный пример: IMAP, протокол доступа к почтовым сообщениям
5.4. Метаформаты протоколов прикладного уровня
5.4.1. Классический метапротокол прикладного уровня в Internet
5.4.2. HTTP как универсальный протокол прикладного уровня
5.4.2.1. Учебный пример: база данных CDDB/freedb.org
5.4.2.2. Учебный пример: протокол IPP
5.4.3. ВЕЕР: Blocks Extensible Exchange Protocol
5.4.4. XML-RPC, SOAP и Jabber
6 Прозрачность: да будет свет
6.1. Учебные примеры
6.1.1. Учебный пример: audacity
6.1.2. Учебный пример: параметр -v программы fetchmail
6.1.3. Учебный пример: GCC
6.1.4 Учебный пример: kmwail
6.1.5. Учебный пример: SNG
6.1.6. Учебный пример: база данных Terminfo
6.1.7. Учебный пример: файлы данных Freeciv
6.2. Проектирование, обеспечивающее прозрачность и воспринимаемость
6.2.1. Дзэн прозрачности
6.2.2. Программирование, обеспечивающее прозрачность и воспринимаемость
6.2.3. Прозрачность и предотвращение избыточной защищенности
6.2.4. Прозрачность и редактируемые формы представления
6.2.5. Прозрачность, диагностика и восстановление после сбоев
6.3. Проектирование, обеспечивающее удобство сопровождения
7 Мультипрограммирование: разделение процессов для разделения функций
7.1. Отделение контроля сложности от настройки производительности
7.2. Классификация IPC-методов в Unix
7.2.1. Передача задач специализированным программам
7.2.1.1. Учебный пример: пользовательский почтовый агент mutt
7.2.2. Каналы, перенаправление и фильтры
7.2.2.1. Учебный пример: создание канала к пейджеру
7.2.2.2. Учебный пример: создание списков слов
7.2.2.3. Учебный пример: pic2graph
7.2.2.4. Учебный пример: утилиты bc(1) и dc(1)
7.2.2.5. Контрпример: почему программа fetchmail не выполнена в виде конвейера
7.2.3. Упаковщики
7.3.2.1. Учебный пример: сценарии резервного копирования
7.2.4. Оболочки безопасности и цепи Бернштайна
7.2.5. Подчиненные процессы
7.2.5.1. Учебный пример: scp и ssh
7.2.6. Равноправный межпроцессный обмен данными
7.2.6.1. Временные файлы
7.2.6.2. Сигналы
7.2.6.3. Системные демоны и традиционные сигналы
7.2.6.4. Учебный пример: использование сигналов в программе fetchmail
7.2.6.5. Сокеты
7.2.6.5.1. Учебный пример: PostgreSQL