Диалог с компьютером.

Краткое предисловие. Значение значения. Поговори со мной, машина, о чем-нибудь поговори. Вот такие пироги. Ядро значения и ореолы смысла. Компьютер изучает основы семантики. Первые шаги в освоении понятийного ядра. Поиски, находки, потери. Автоматический качественный классификатор. Анализ и синтез фоносемантики. Как измерить впечатление от звука! Вычислитель, собеседник, советчик. Порознь хорошо, а вместе лучше. Звучание и значение. Не только соответствия. Анализ семантического комплекса. От слова к тексту. Фоносемантический анализ текста. ... Литературные беседы. Звукоцвет. «Мы видим звук». Цветные листы. Звуковые витражи. Теория и практика. Синтаксис любви. Синтаксический символизм. Конструкция безответной любви. Конструкция взаимной любви. Счастлив тот, кто любит и любим. Переходная конструкция. Символика полной гармонии. Конструкция неравноценности. Конструкция умеренной дисгармонии. Символика мудрого чувства. Символика несовместимости. Конструкция катастрофы. Синтсимволический ансамбль. Планета «Значение» в действии. Заключительный семантический хор. Еще один последний диалог. Итоги и перспективы. АЛЕКСАНДР ПАВЛОВИЧ ЖУРАВЛЕВ. →

Искусство программирования на языке сценариев командной оболочки.

Часть 1. Введение. Глава 1. Зачем необходимо знание языка Shell? Глава 2. Для начала о Sha-Bang. Пример 2-1. cleanup: Сценарий очистки лог-файлов в /var/log. Пример 2-2. cleanup: Расширенная версия предыдущего сценария. 2.1. Запуск сценария. 2.2. Упражнения. Часть 2. Основы. Глава 3. Служебные символы. Пример 3-1. Вложенные блоки и перенаправление ввода-вывода. Пример 3-2. Сохранение результата исполнения вложенного блока в файл. Пример 3-3. Запуск цикла в фоновом режиме. Пример 3-4. Резервное архивирование всех файлов, которые были изменены в течение последних суток. ... Глава 4. Переменные и параметры. Введение. 4.1. Подстановка переменных. Пример 4-1. Присваивание значений переменным и подстановка значений переменных. 4.2. Присваивание значений переменным. Пример 4-2. Простое присваивание. Пример 4-3. Присваивание значений переменным простое и замаскированное. 4.3. Переменные Bash не имеют типа. Пример 4-4. Целое число или строка? 4.4. Специальные типы переменных. Пример 4-5. Позиционные параметры. Пример 4-6. wh, whois выяснение имени домена. Пример 4-7. Использование команды shift. Глава 5. Кавычки. Пример 5-1. Вывод "причудливых" переменных. Пример 5-2. Экранированные символы. Глава 6. Завершение и код завершения. Пример 6-1. завершение / код завершения. Пример 6-2. Использование символа ! для логической инверсии кода возврата. Глава 7. Проверка условий. 7.1. Конструкции проверки условий. Пример 7-1. Что есть "истина"? Пример 7-2. Эквиваленты команды test -- /usr/bin/test, [ ], и /usr/bin/[ Пример 7-3. Арифметические выражения внутри (( )). 7.2. Операции проверки файлов. Пример 7-4. Проверка "битых" ссылок. 7.3. Операции сравнения. Пример 7-5. Операции сравнения. Пример 7-6. Проверка -- является ли строка пустой. Пример 7-7. zmost. 7.4. Вложенные условные операторы if/then. 7.5. Проверка степени усвоения материала. Глава 8. Операции и смежные темы. 8.1. Операторы. Пример 8-1. Наибольший общий делитель. Пример 8-2. Арифметические операции. Пример 8-3. Построение сложных условий, использующих && и || 8.2. Числовые константы. Пример 8-4. Различные представления числовых констант. Часть 3. Углубленный материал. Глава 9. К вопросу о переменных. 9.1. Внутренние переменные. Пример 9-1. $IFS и пробельные символы. Пример 9-2. Ограничения времени ожидания ввода. Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя. Пример 9-4. Ограничение времени ожидания команды read. Пример 9-5. Я -- root? Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@ Пример 9-7. Противоречия в переменных $* и $@ Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста. Пример 9-9. Переменная "подчеркивание". 9.2. Работа со строками. Пример 9-10. Вставка пустых строк между параграфами в текстовом файле. Пример 9-11. Преобразование графических файлов из одного формата в другой, с изменением имени файла. 9.2.1. Использование awk при работе со строками. Пример 9-12. Альтернативный способ извлечения подстрок. 9.2.2. Дальнейшее обсуждение. 9.3. Подстановка параметров. Пример 9-13. Подстановка параметров и сообщения об ошибках. Пример 9-14. Подстановка параметров и сообщение о "порядке использования". Пример 9-15. Длина переменной. Пример 9-16. Поиск по шаблону в подстановке параметров. Пример 9-17. Изменение расширений в именах файлов… 9.4. Объявление переменных: declare и typeset. Пример 9-20. Объявление переменных с помощью инструкции declare. 9.5. Косвенные ссылки на переменные. Пример 9-21. Косвенные ссылки. Пример 9-22. Передача косвенных ссылок в awk. 9.6. $RANDOM: генерация псевдослучайных целых чисел. Пример 9-23. Генерация случайных чисел. Пример 9-24. Выбор случайной карты из колоды. Пример 9-25. Имитация бросания кубика с помощью RANDOM. Пример 9-26. Переустановка RANDOM. Пример 9-27. Получение псевдослучайных чисел с помощью awk. 9.7. Двойные круглые скобки. Пример 9-28. Работа с переменными в стиле языка C. Глава 10. Циклы и ветвления. 10.1. Циклы. Пример 10-1. Простой цикл for. Пример 10-2. Цикл for с двумя параметрами в каждом из элементов списка. Пример 10-3. Fileinfo: обработка списка файлов, находящегося в переменной. Пример 10-4. Обработка списка файлов в цикле for. Пример 10-5. Цикл for без списка аргументов. Пример 10-6. Создание списка аргументов в цикле for с помощью операции подстановки команд. Пример 10-7. grep для бинарных файлов. Пример 10-8. Список всех пользователей системы. Пример 10-9. Проверка авторства всех бинарных файлов в текущем каталоге. Пример 10-10. Список символических ссылок в каталоге. Пример 10-11. Список символических ссылок в каталоге, сохраняемый в файле. Пример 10-12. C-подобный синтаксис оператора цикла for. Пример 10-13. Работа с командой efax в пакетном режиме. Пример 10-14. Простой цикл while. Пример 10-15. Другой пример цикла while. Пример 10-16. Цикл while с несколькими условиями. Пример 10-17. C-подобный синтаксис оформления цикла while. Пример 10-18. Цикл until. 10.2. Вложенные циклы. Пример 10-19. Вложенный цикл. 10.3. Управление ходом выполнения цикла. Пример 10-20. Команды break и continue в цикле. Пример 10-21. Прерывание многоуровневых циклов. Пример 10-22. Передача управление в начало внешнего цикла. Пример 10-23. Живой пример использования "continue N". 10.4. Операторы выбора. Пример 10-24. Использование case. Пример 10-25. Создание меню с помощью case. Пример 10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной. Пример 10-27. Простой пример сравнения строк. Пример 10-28. Проверка ввода. Пример 10-29. Создание меню с помощью select. Пример 10-30. Создание меню с помощью select в функции. Глава 11. Внутренние команды. Пример 11-1. printf в действии. Пример 11-2. Ввод значений переменных с помощью read. Пример 11-3. Пример использования команды read без указания переменной для ввода. Пример 11-4. Ввод многострочного текста с помощью read. Пример 11-5. Обнаружение нажатия на курсорные клавиши. Пример 11-6. Чтение командой read из файла через перенаправление. Пример 11-7. Смена текущего каталога. Пример 11-8. Команда let, арифметические операции. Пример 11-9. Демонстрация команды eval. Пример 11-10. Принудительное завершение сеанса. Пример 11-11. Шифрование по алгоритму "rot13". Пример 11-12. Замена имени переменной на ее значение, в исходном тексте программы на языке Perl, с помощью eval. Пример 11-13. Установка значений аргументов с помощью команды set. Пример 11-14. Изменение значений позиционных параметров (аргументов). Пример 11-15. "Сброс" переменной. Пример 11-16. Передача переменных во вложенный сценарий awk, с помощью export. Пример 11-17. Прием опций/аргументов, передаваемых сценарию, с помощью getopts. Пример 11-18. "Подключение" внешнего файла. Пример 11-19. Пример (бесполезный) сценария, который подключает себя самого. Пример 11-21. Сценарий, который запускает себя самого. 11.1. Команды управления заданиями. Пример 11-22. Ожидание завершения процесса перед тем как продолжить работу. Пример 11-23. Сценарий, завершающий себя сам с помощью команды kill. Глава 12. Внешние команды, программы и утилиты. 12.1. Базовые команды. Пример 12-1. Создание оглавления диска для записи CDR, с помощью команды ls. 12.2. Более сложные команды. Пример 12-2. Badname, удаление файлов в текущем каталоге, имена которых содержат недопустимые символы и пробелы. Пример 12-3. Удаление файла по его номеру inode. Пример 12-4. Использование команды xargs для мониторинга системного журнала. Пример 12-5. copydir, копирование файлов из текущего каталога в другое место, с помощью xargs. Пример 12-6. Пример работы с expr. 12.3. Команды для работы с датой и временем. Пример 12-7. Команда date. 12.4. Команды обработки текста. Пример 12-8. Частота встречаемости отдельных слов. Пример 12-9. Какие из файлов являются сценариями? Пример 12-10. Генератор 10-значных случайных чисел. Пример 12-11. Мониторинг системного журнала с помощью tail. Пример 12-12. Сценарий-эмулятор "grep". Пример 12-13. Поиск слов в словаре. Пример 12-14. toupper: Преобразование символов в верхний регистр. Пример 12-15. lowercase: Изменение имен всех файлов в текущем каталоге в нижний регистр. Пример 12-16. du: Преобразование текстового файла из формата DOS в формат UNIX. Пример 12-17. rot13: Сверхслабое шифрование по алгоритму rot13. Пример 12-18. Более "сложный" шифр. Пример 12-20. Пример форматирования списка файлов в каталоге. Пример 12-21. nl: Самонумерующийся сценарий. 12.5. Команды для работы с файлами и архивами. Пример 12-23. Распаковка архива rpm. Пример 12-24. Удаление комментариев из файла с текстом программы на языке C. Пример 12-25. Исследование каталога /usr/X11R6/bin. Пример 12-26. "Расширенная" команда strings. Пример 12-27. Пример сравнения двух файлов с помощью cmp. Пример 12-28. Утилиты basename и dirname. Пример 12-29. Проверка целостности файла. Пример 12-30. Декодирование файлов. 12.6. Команды для работы с сетью. Пример 12-31. Сценарий, отправляющий себя самого по электронной почте. 12.7. Команды управления терминалом. 12.8. Команды выполнения математических операций. Пример 12-32. Ежемесячные выплаты по займу. Пример 12-33. Перевод чисел из одной системы счисления в другую. Пример 12-34. Пример взаимодействия bc со "встроенным документом". Пример 12-35. Вычисление числа "пи". Пример 12-36. Преобразование чисел из десятичной в шестнадцатиричную систему счисления. Пример 12-37. Разложение числа на простые множители. Пример 12-38. Расчет гипотенузы прямоугольного треугольника. 12.9. Прочие команды. Пример 12-39. Использование seq для генерации списка аргументов цикла for. Пример 12-40. Использование getopt для разбора аргументов командной строки. Пример 12-41. Захват нажатых клавиш. Пример 12-42. Надежное удаление файла. Пример 12-43. Генератор имен файлов. Пример 12-44. Преобразование метров в мили. Пример 12-45. Пример работы с m4. Глава 13. Команды системного администрирования. Пример 13-1. Установка символа "забоя". Пример 13-2. невидимый пароль: Отключение эхо-вывода на терминал. Пример 13-3. Пример 13-4. Использование команды pidof при остановке процесса. Пример 13-5. Проверка образа CD. Пример 13-6. Создание файловой системы в обычном файле. Пример 13-7. Добавление нового жесткого диска. Пример 13-8. Сценарий killall, из каталога /etc/rc.d/init.d. Глава 14. Подстановка команд. Пример 14-1. Глупая выходка. Пример 14-2. Запись результатов выполнения цикла в переменную. Глава 15. Арифметические подстановки. Глава 16. Перенаправление ввода/вывода. 16.1. С помощью команды exec. Пример 16-1. Перенаправление stdin с помощью exec. Пример 16-2. Перенаправление stdout с помощью exec. Пример 16-3. Одновременное перенаправление устройств, stdin и stdout, с помощью команды exec. 16.2. Перенаправление для блоков кода. Пример 16-4. Перенаправление в цикл while. Пример 16-5. Альтернативная форма перенаправления в цикле while. Пример 16-6. Перенаправление в цикл until. Пример 16-7. Перенаправление в цикл for. Пример 16-8. Перенаправление устройств (stdin и stdout) в цикле for. Пример 16-9. Перенаправление в конструкции if/then. Пример 16-10. Файл с именами "names.data", для примеров выше. 16.3. Область применения. Пример 16-11. Регистрация событий. Глава 17. Встроенные документы. Пример 17-1. dummyfile: Создание 2-х строчного файла-заготовки. Пример 17-2. broadcast: Передача сообщения всем, работающим в системе, пользователям. Пример 17-3. Вывод многострочных сообщений с помощью cat. Пример 17-4. Вывод многострочных сообщений с подавлением символов табуляции. Пример 17-5. Встроенные документы и подстановка параметров. Пример 17-6. Отключение подстановки параметров. Пример 17-7. Передача пары файлов во входящий каталог на "Sunsite". Пример 17-8. Встроенные документы и функции. Пример 17-9. "Анонимный" Встроенный Документ. Пример 17-10. Блочный комментарий. Пример 17-11. Встроенная справка к сценарию. Часть 4. Материал повышенной сложности. Глава 18. Регулярные выражения. 18.1. Краткое введение в регулярные выражения. 18.2. Globbing -- Подстановка имен файлов. Глава 19. Подоболочки, или Subshells. Пример 19-1. Область видимости переменных. Пример 19-2. Личные настройки пользователей. Пример 19-3. Запуск нескольких процессов в подоболочках. Глава 20. Ограниченный режим командной оболочки. Пример 20-1. Запуск сценария в ограниченном режиме. Глава 21. Подстановка процессов. Глава 22. Функции. Пример 22-1. Простая функция. 22.1. Сложные функции и сложности с функциями. Пример 22-2. Функция с аргументами. Пример 22-3. Наибольшее из двух чисел. Пример 22-4. Преобразование чисел в римскую форму записи. Пример 22-6. Сравнение двух больших целых чисел. Пример 22-7. Настоящее имя пользователя. 22.2. Локальные переменные. Пример 22-8. Область видимости локальных переменных. 22.2.1. Локальные переменные делают возможной рекурсию. Пример 22-9. Использование локальных переменных при рекурсии. Глава 23. Псевдонимы. Пример 23-1. Псевдонимы в сценарии. Пример 23-2. unalias: Объявление и удаление псевдонимов. Глава 24. Списки команд. Пример 24-1. Проверка аргументов командной строки с помощью "И-списка". Пример 24-2. Еще один пример проверки аргументов с помощью "И-списков". Пример 24-3. Комбинирование "ИЛИ-списков" и "И-списков". Глава 25. Массивы. Пример 25-1. Простой массив. Пример 25-2. Форматирование стихотворения. Пример 25-3. Некоторые специфичные особенности массивов. Пример 25-4. Пустые массивы и пустые элементы. Пример 25-5. Копирование и конкатенация массивов. Пример 25-6. Старая, добрая: "Пузырьковая" сортировка. Пример 25-7. Вложенные массивы и косвенные ссылки. Пример 25-8. Пример реализации алгоритма Решето Эратосфена. Пример 25-9. Эмуляция структуры "СТЕК" ("первый вошел -- последний вышел"). Пример 25-10. Исследование математических последовательностей. Пример 25-11. Эмуляция массива с двумя измерениями. Глава 26. Файлы. Глава 27. /dev и /proc. 27.1. /dev. 27.2. /proc. Пример 27-1. Поиск файла программы по идентификатору процесса. Пример 27-2. Проверка состояния соединения. Глава 28. /dev/zero и /dev/null. Пример 28-1. Удаление cookie-файлов. Пример 28-2. Создание файла подкачки (swapfile), с помощью /dev/zero. Пример 28-3. Создание электронного диска. Глава 29. Отладка сценариев. Пример 29-1. Сценарий, содержащий ошибку. Пример 29-2. Пропущено ключевое слово. Пример 29-3. test24. Пример 29-4. Проверка условия с помощью функции "assert". Пример 29-5. Ловушка на выходе. Пример 29-6. Удаление временного файла при нажатии на Control-C. Пример 29-7. Трассировка переменной. Глава 30. Необязательные параметры (ключи). Глава 31. Широко распространенные ошибки. Пример 31-1. Западня в подоболочке. Пример 31-2. Передача вывода от команды echo команде read, по конвейеру. Глава 32. Стиль программирования. 32.1. Неофициальные рекомендации по оформлению сценариев. Глава 33. Разное. 33.1. Интерактивный и неинтерактивный режим работы. 33.2. Сценарии-обертки. Пример 33-1. сценарий-обертка. Пример 33-2. Более сложный пример сценария-обертки. Пример 33-3. Сценарий-обертка вокруг сценария awk. Пример 33-4. Сценарий на языке Perl, встроенный в Bash-скрипт. Пример 33-5. Комбинирование сценария Bash и Perl в одном файле. 33.3. Операции сравнения: Альтернативные решения. 33.4. Рекурсия. Пример 33-6. Сценарий (бесполезный), который вызывает себя сам. Пример 33-7. Сценарий имеющий практическую ценность), который вызывает себя сам. 33.5. "Цветные" сценарии. Пример 33-8. "Цветная" адресная книга. Пример 33-9. Вывод цветного текста. 33.6. Оптимизация. 33.7. Разные советы. Пример 33-10. Необычный способ передачи возвращаемого значения. Пример 33-11. Необычный способ получения нескольких возвращаемых значений. Пример 33-12. Передача массива в функцию и возврат массива из функции. Пример 33-13. Игры с анаграммами. 33.8. Проблемы безопасности. 33.9. Проблемы переносимости. 33.10. Сценарии командной оболочки под Windows. Глава 34. Bash, версия 2. Пример 34-1. Расширение строк. Пример 34-2. Косвенные ссылки на переменные -- новый метод. Пример 34-3. Простая база данных, с применением косвенных ссылок. Пример 34-4. Массивы и другие хитрости для раздачи колоды карт в четыре руки. Глава 35. Замечания и дополнения. 35.1. От автора. 35.2. Об авторе. 35.3. Инструменты, использовавшиеся при создании книги. 35.3.1. Аппаратура. 35.3.2. Программное обеспечение. 35.4. Благодарности. Литература. Приложение A. Дополнительные примеры сценариев. Пример A-1. manview: Просмотр страниц руководств man. Пример A-2. mailformat: Форматирование электронных писем. Пример A-3. rn: Очень простая утилита для переименования файлов. Пример A-4. blank-rename: переименование файлов, чьи имена содержат пробелы. Пример A-5. encryptedpw: Передача файла на ftp-сервер, с использованием пароля. Пример A-6. copy-cd: Копирование компакт-дисков с данными. Пример A-7. Последовательности Коллаца (Collatz). Пример A-8. days-between: Подсчет числа дней между двумя датами. Пример A-9. Создание "словаря". Пример A-10. Расчет индекса "созвучности". Пример A-11. "Игра "Жизнь"". Пример A-12. Файл с первым поколением для игры "Жизнь". Пример A-13. behead: Удаление заголовков из электронных писем и новостей. Пример A-14. ftpget: Скачивание файлов по ftp. Пример A-15. Указание на авторские права. Пример A-16. password: Генератор случайного 8-ми символьного пароля. Пример A-17. fifo: Создание резервных копий с помощью именованных каналов. Пример A-18. Генерация простых чисел, с использованием оператора деления по модулю (остаток от деления). Пример A-19. tree: Вывод дерева каталогов. Пример A-20. Функции для работы со строками. Пример A-21. Directory information. Пример A-22. Объектно ориентированная база данных. Приложение B. Маленький учебник по Sed и Awk. B.1. Sed. B.2. Awk. Приложение C. Коды завершения, имеющие предопределенный смысл. Приложение D. Подробное введение в операции ввода-вывода и перенаправление ввода-вывода. Приложение E. Локализация. Приложение F. История команд. Приложение G. Пример файла .bashrc. Пример G-1. Пример файла .bashrc. Приложение H. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки. Пример H-1. VIEWDATA.BAT: пакетный файл DOS. Пример H-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки. Приложение I. Упражнения. I.1. Анализ сценариев. I.2. Создание сценариев. Приложение J. Авторские права. Примечания. →

Как писать драйвера.

Как писать драйвера (часть 1). Предисловие. Драйвера под Windows являются для большей массы программистов, тайной за семью печатями . И вовсе не потому, что это что-то архисложное, сколько по причине абсолютной недокументированности идеологии. Начав заниматься этой темой я понял особенную необходимость не в переводе стандартного Майкрософтовского описания, а именно неких заметок, по созданию и сбору драйверов для различных устройств. Уточню, что в этих заметках, будут только те данные, которые я проверил лично, … →

Как тестируют в Google.

Предисловие к русскому изданию. Вступление от Альберто Савоя. Вступление от Патрика Коупленда. Предисловие. Об иллюстрациях. Пара слов о книге. Благодарности. Об авторах. Глава 1. Первое знакомство с организацией тестирования в Google. На заметку. На заметку. На заметку. На заметку. Качество ≠ Тестирование. На заметку. На заметку. Роли. На заметку. На заметку. Организационная структура. На заметку. На заметку. Ползти, идти, бежать. На заметку. На заметку. Виды тестов. На заметку. На заметку. На заметку. Глава 2. Разработчик в тестировании. ... На заметку. Жизнь разработчика в тестировании. Как организованы процессы разработки и тестирования. На заметку. На заметку. На заметку. Кто такие разработчики в тестировании на самом деле? На заметку. Ранняя стадия проекта. На заметку. Структура команды. Проектная документация. На заметку. На заметку. Интерфейсы и протоколы. На заметку. Планирование автоматизации. На заметку. Тестируемость. На заметку. Как появились очереди на отправку и непрерывная сборка. Джефф Карролло. Пример работы разработчика в тестировании. Выполнение тестов. Определения размеров тестов. На заметку. Как мы используем размеры тестов в общей инфраструктуре. Преимущества разных размеров тестов. Большие тесты. Средние тесты. Малые тесты. На заметку. Требования к выполнению тестов. Тестирование на скоростях и в масштабах Google. Пуджа Гупта, Марк Айви и Джон Пеникс. Тест-сертификация. Интервью с основателями программы тест-сертификации. Как мы собеседуем на позицию разработчиков в тестировании. На заметку. На заметку. Пример отличного кандидата. Джейсон Арбон. Интервью с разработчиком инструментов Тедом Мао. Интервью с создателем WebDriver Саймоном Стюартом. Глава 3. Кто такой инженер по тестированию. Тестирование, обращенное к пользователю. На заметку. Инженер по тестированию. На заметку. На заметку. Планирование тестирования. На заметку. На заметку. A — значит Attribute. На заметку. На заметку. C — значит Component. На заметку. C — значит Capability. На заметку. На заметку. Риск. Анализ рисков. Снижение рисков. Напоследок о рисках. Пользовательские сценарии. Джейсон Арбон. Краудсорсинг. Джеймс Уиттакер. Пишем тест-кейсы. Интересные факты из жизни багов. Немного подробнее о Buganizer. Жизненный путь бага. Джеймс Уиттакер. Как мы нанимаем инженеров по тестированию. Как отличить тестировщика от разработчика в тестировании. Джейсон Арбон. Собеседование с инженерами по тестированию. Управление тестированием в Google. Управление «пиратским кораблем» для чайников. Джеймс Арбон. Тестирование в режиме сопровождения. Пример режима сопровождения: Google Desktop. Джейсон Арбон. Эксперимент с Quality Bots. Сингулярность:[54] легенда о происхождении ботов. Джейсон Арбон. Bots: детство, отрочество и масштабирование на весь интернет. Теджас Шах. Эксперимент BITE. Регистрируем баги с BITE. Влияние BITE на проект Maps. Просмотр багов в BITE. Запись и воспроизведение сценариев в BITE. Слияние BITE с RPF. Джеймс Арбон. Ручные и исследовательские тесты в BITE. Уровни BITE. Google Test Analytics. Бесплатное тестирование. Инновации и эксперименты в тестировании. Джеймс Арбон. Внешние тестировщики. Интервью с инженером по тестированию Google Docs Линдси Уэбстер. Интервью с инженером по тестированию YouTube Эппл Чоу. Глава 4. Тест-менеджер. Кто такой тест-менеджер. Жонглирование людьми и дирижирование проектами. Влияние. Интервью с Анкитом Мехтой, тест-менеджером Gmail. Интервью с Хуном Даном, тест-менеджером Android. Интервью с Джоэлом Хиноски, тест-менеджером Chrome. Директор по тестированию. Интервью с Шелтоном Маром, директором по тестированию проектов Search и Geo. Интервью с директором разработки инженерных инструментов Ашишем Кумаром. Интервью с Суджаем Сани, директором по тестированию в индийском Google. Интервью с тест-менеджером Брэдом Грином. Интервью с Джеймсом Уиттакером. Глава 5. Как мы улучшали тестирование в Google. Роковые ошибки в процессе тестирования Google. Будущее разработчика в тестировании. Куда движется роль инженера по тестированию. Что станет с тест-директором и тест-менеджером. Будущее инфраструктуры тестирования. В завершение. Приложение А. Тест-план для Chrome OS. Обзор тем. Анализ рисков. Непрерывное тестирование каждой сборки. Ежедневное тестирование лучших сборок. Тестирование перед выпуском. Ручное и автоматизированное тестирование. Разработка и качество тестов. Каналы выпуска. Обратная связь. Репозитории тест-кейсов. Панели мониторинга тестов. Виртуализация. Производительность. Нагрузочное тестирование, продолжительное тестирование и тестирование стабильности. Фреймворк выполнения тестов Autotest. Производители железа. Лаборатория проверки оборудования. Фермы для сквозных автотестов. Тестирование AppManager в браузере. Тестируемость браузера. Оборудование. График. Ключевые моменты тестирования. Необходимые документы и ресурсы. Приложение Б. Тестовые туры для Chrome. Тур покупателя. Тур студента. Рекомендуемые области для тестирования. Тур международных звонков. Рекомендуемые области для тестирования. Тур ориентиров. Рекомендуемые ориентиры для Chrome. Тур «не спим всю ночь». Рекомендуемые области для тестирования. Тур предпринимателя. Инструменты в Chrome. Тур неблагополучных районов. Неблагополучные районы в Chrome OS. Тур персонализации. Способы настройки Chrome. Приложение В. Посты из блога об инструментах и коде. Охотимся на баги и потерянное время вместе с BITE. QualityBots идет в атаку. RPF: Record Playback Framework. Google Test Analytics — теперь с открытым кодом. Полнота. Скорость. Действенность. Польза. Примечания. →

О чём не пишут в книгах по Delphi.

Введение. Глава 1. Windows API и Delphi. 1.1. Основы работы Windows API в VCL-приложениях. 1.1.1. Что такое Windows API. 1.1.2. Как получить справку по функциям Windows API. Примечание. Примечание. Листинг 1.1. Синтаксис описания функции на C++ Примечание. Примечание. 1.1.3. Дескрипторы вместо классов. 1.1.4. Формы VCL и окна Windows. Примечание. Примечание. Листинг 1.2. Создание кнопки, не имеющей родительского окна. Примечание. 1.1.5. Функции обратного вызова. Листинг 1.3. Вызов функции EnumWindows с функцией обратного вызова. ... Листинг 1.4. Вызов функции EnumWindows в 16-разрядных версиях Windows. 1.1.6. Сообщения Windows. Листинг 1.5. Простейшая петля сообщений. Примечание. Примечание. Листинг 1.6. Петля сообщении с обработкой "горячих" клавиш главного меню и системного меню MDI-окон. Примечание. Листинг 1.7. Создание подкласса для особой обработки сообщения WM_KILLPFOCUS. Примечание. 1.1.7. Создание окон средствами VCL. Листинг 1.8. Реализация метода TWinControl.GetHandle. Листинг 1.9. Реализация метода CreateWnd. Листинг 1.10. Запись TCreateParams. Листинг 1.11. Перекрытие метода CreateParams. Примечание. Листинг 1.12. Оконная процедура InitWndProc. Примечание. 1.1.8. Обработка сообщений с помощью VCL. Примечание. Примечание. Примечание. Примечание. Примечание. Листинг 1.14. Описание типа TMessage. Листинг 1.15. Тип TWMNCMouseMove. Листинг 1.16. Объявление и реализация метода для обработки сообщения WM_MOUSEMOVE. Примечание. 1.1.9. Сообщения, определяемые пользователем. 1.1.10. Особые сообщения. Примечание. 1.1.11. Графика в Windows API. Листинг 1.17. Использование класса TCanvas для работы с произвольным контекстом устройства. Примечание. Листинг 1.18. Рисование разными перьями с использованием GDI. Примечание. Примечание. 1.1.12. ANSI и Unicode. Примечание. Примечание. Листинг 1.19. Импорт функции RegisterWindowMessage. 1.1.13. Строки в Windows API. Примечание. Листинг 1.20. Вызов функции с параметром типа LPCTSTR. 1.2. Примеры использования Windows API. 1.2.1. Пример EnumWnd. Листинг 1.21. Обработчик нажатия кнопки BtnBuild. Листинг 1.22. Функция обратного вызова EnumWindowsProc (первый вариант). Примечание. Листинг 1.23. Функция обратного вызова EnumWindowsProc (второй вариант). 1.2.2. Пример Line. Листинг 1.24. Базовая часть класса TLine. Листинг 1.25. Метод WMPaint. Листинг 1.26. Обработка сообщений мыши. Листинг 1.27. Пример кода, вызывающего ошибку. Примечание. 1.2.3. Пример CoordLabel. Листинг 1.28. Компонент TCoordLabel. 1.2.4. Пример PanelMsg. Примечание. Листинг 1.29. Перехват обработчика сообщений панели. Листинг 1.30. Метод-перехватчик сообщений панели. Примечание. 1.2.5. Пример NumBroadcast. Листинг 1.31. Модуль главного окна программы NumBroadcast. Примечание. 1.2.6. Пример ButtonDel. Листинг 1.32. Неправильный вариант удаления кнопки в обработчике ее нажатия. Примечание. Листинг 1.33. Модуль главной формы программы ButtonDel. 1.2.7. Пример GDIDraw. Листинг 1.34. Вывод надписи Delphi Kingdom. Примечание. Листинг 1.35. Рисование звезд. Листинг 1.36. Рисование рамки с использованием PolyPolygon. Листинг 1.37. Пример использования функции InvertRect. Листинг 1.38. Пример использования функции GrayString. Листинг 1.39. Вывод текста под углом средствами GDI. Примечание. 1.2.8. Пример BitmapSpeed. Листинг 1.40. Метод DoTest, выполняющий тесты скорости. Листинг 1.41. Обработчик нажатия кнопки BtnStart. 1.3. Обобщающие примеры. 1.3.1. Обобщающий пример 1 — Информация о процессах. 1.3.1.1. Получение списка процессов. Примечание. Листинг 1.42. Получение списка процессов с помощью Tool Help. 1.3.1.2. Получение списка и свойств окон. Листинг 1.43. Получение всех окон, относящихся к данному процессу. Примечание. Листинг 1.44. Получение заголовков "чужих" окон. Листинг 1.45. Получение реального класса окна. Примечание. 1.3.2. Обобщающий пример 2 — Ассоциированные файлы и предотвращение запуска второй копии приложения. Примечание. 1.3.2.1. Ассоциирование расширения с приложением. Листинг 1.46. Занесение в реестр информации, необходимой для ассоциирования файла с приложением. 1.3.2.2. Командная строка. Листинг 1.47. Анализ командной строки. 1.3.2.3. Поиск уже запущенной копии приложения. Примечание. Листинг 1.48 Создание почтового ящика в главном файле проекта. Примечание. Листинг 1.49. Реакция формы на поступление данных в почтовый ящик. Примечание. 1.3.2.4. Перевод приложения на передний план. Листинг 1.50. Перевод приложения на передний план. 1.3.3. Обобщающий пример 3 — "Дырявое" окно. 1.3.3.1. Сообщение WM_NCHCHITTEST. 1.3.3.2. Регионы. 1.3.3.3. Сообщения WM_SIZE и WM_SIZING. 1.3.3.4. А теперь — все вместе. Листинг 1.51. Константы примера WndHole. Листинг 1.52. Метод SetRegion, устанавливающий регион окна. Листинг 1.53. Обработчик сообщений панели, образующей "дырку". Листинг 1.54. Обработчик сообщения WM_SIZE главного окна. Листинг 1.55. Расчет координат стрелок. Листинг 1.56. Рисование стрелок на форме. Листинг 1.57. Обработчик WM_NCHITTEST формы. 1.3.4. Обобщающий пример 4 — Линии нестандартного стиля. 1.3.4.1. Получение координат точек прямой. Листинг 1.58. Рисование линии сложного стиля. 1.3.4.2. "Резиновая" линия и растровые операции. Примечание. Листинг 1.59. Рисование "резиновой" линии инверсным методом. 1.3.4.3. Кривые Безье. 1.3.4.4. Траектории. Листинг 1.60. Работа с траекторией на основе кривой Безье. 1.3.4.5. Интерактивная кривая. Листинг 1.61. Реализация интерактивной кривой. Глава 2. Использование сокетов Delphi. 2.1. Стандартные сокеты. 2.1.1 Соглашения об именах. 2.1.2. Общие сведения о сокетах. 2.1.3. Сетевые протоколы. Семиуровневая модель OSI. 2.1.4. Стек TCP/IP. Примечание. 2.1.5. Протокол UDP. 2.1.6. Протокол TCP. 2.1.7. Сетевые экраны. Примечание. 2.1.8. Создание сокета. Примечание. Листинг 2.1. Типы TSockAddr и TSockAddrIn. Примечание. Листинг 2.2. Прямое присваивание IP-адреса. Примечание. Листинг 2.3. Привязка сокета к конкретному адресу. Листинг 2.4. Привязка сокета к адресу, выбираемому системой. Примечание. Листинг 2.5. Объявление констант SD_XXX для Delphi 5 и более ранних версий. 2.1.9. Передача данных при использовании UDP. 2.1.10. Пример программы: простейший чат на UDP. Листинг 2.6. Функция GetErrorString, возвращающая описание ошибки. Листинг 2.7. Код "читающей" нити. Листинг 2.8. Инициализация программы UDPChat. Листинг 2.9. Обработчик нажатия кнопки Запустить. Листинг 2.10. Обработчик нажатия кнопки Отправить. Примечание. 2.1.11. Передача данных при использовании TCP. Листинг 2.11. Код сервера. Листинг 2.12. Код клиента. Листинг 2.13. Функция ReadFromSocket, читающая из буфера сокета заданное количество байтов. 2.1.12. Примеры передачи данных с помощью TCP. Листинг 2.14. Создание сокета в программе SimplestServer. Листинг 2.15. Основная часть сервера SimplestServer. Листинг 2.16. Обработчик нажатия кнопки Соединиться. Листинг 2.17. Обработчик нажатия кнопки Отправить. Листинг 2.18. Реакция на нажатие кнопки Отсоединиться. Листинг 2.19. Инициализация многонитевого сервера. Листинг 2.20. Код "слушающей" нити. Листинг 2.21. Код нити, реализующей взаимодействие с клиентом. Примечание. 2.1.13. Определение готовности сокета. Листинг 2.22. Функции для работы с типом TFDSet. Примечание. Листинг 2.23. Пример сервера, использующего select. 2.1.14. Примеры использования функции select. Примечание. Листинг 2.24. Проверка готовности сокетов при обработке сообщения от таймера. Примечание. Листинг 2.25. Описание типа TConnection. Примечание. Листинг 2.26. Основная часть сервера SelectServer. Листинг 2.27. Функции Ceil и Min. Примечание. 2.1.15. Неблокирующий режим. Листинг 2.28. Перевод сокета в неблокирующий режим. Листинг 2.29. Установление связи при использовании неблокирующего сокета. 2.1.16. Сервер на неблокирующих сокетах. Листинг 2.30. Инициализация сервера на неблокирующих сокетах. Листинг 2.31. Типы TTransportPhase и TConnection. Листинг 2.32. Обработчик события таймера. Листинг 2.33. Метод ProcessConnection. 2.1.17. Параметры сокета. Листинг 2.34. Получение размера входного буфера сокета. Листинг 2.35. Включение возможности широковещательной рассылки. 2.1.18. Итоги первого раздела. 2.2. Сокеты Windows. 2.2.1. Версии Windows Sockets. Примечание. 2.2.2. Устаревшие функции WinSock 1. 2.2.3. Информация о протоколе. Листинг 2.36. Тип WSAPROTOCOL_INFO. Листинг 2.37. Функция WSAEnumProtocols. Примечание. 2.2.4. Новые функции. Листинг 2.38. Функция WSASocket. Листинг 2.39. Функция WSAConnect и связанные с ней типы. Листинг 2.40. Функция WSAAccept. Листинг 2.41. Тип TConditionProc. Примечание. Листинг 2.42. Включение режима ожидания реального подключения. Листинг 2.43. Функция WSAStringToAddress. Листинг 2.44. Пример использования функции WSAStringToAddress. Листинг 2.45. Функция WSAAddressToString. Листинг 2.46. Функция WSANtohl. Листинг 2.47. Функция WSADuplicateSocket. 2.2.5. Асинхронный режим, основанный на сообщениях. Листинг 2.48. Последовательный вызов функции WSAAsyncSelect. Листинг 2.49. Пример простого сервера на асинхронных сокетах. 2.2.6. Пример сервера, основанного на сообщениях. Примечание. Листинг 2.50. Инициализация сервера, основанного на сообщениях. Листинг 2.51. Сообщения, связанные с сокетами, и тип TWMSocketMessage. Листинг 2.52. Новый вариант функции GetErrorString. Листинг 2.53. Обработчик сообщения WM_ACCEPTMESSAGE. Листинг 2.54. Обработчик сообщения WM_SOCKETMESSAGE. 2.2.7. Асинхронный режим, основанный на событиях. Листинг 2.55. Функция WSACreateEvent. Листинг 2.56. Функции для управления событиями. Листинг 2.57. Функция WSACloseEvent. Листинг 2.58. Функция WSAWaitForMultipleEvents. Листинг 2.59. Функция WSAEventSelect. Листинг 2.60. Функция WSAEnumNetworkEvents. Листинг 2.61. Тип TWSANetworkEvents. Листинг 2.62. Схема нити, использующей события асинхронного сокета. 2.2.8. Пример использования сокетов с событиями. Листинг 2.63. Нить, взаимодействующая с клиентами. Листинг 2.64. Код нити, обслуживающей слушающий сокет. Листинг 2.65. Метод StopServer. Примечание. Листинг 2.66. Получение данных клиентом. Примечание. Листинг 2.67. Метод SendString, имитирующий блокирующим режим отправки. Примечание. 2.2.9. Перекрытый ввод-вывод. Листинг 2.68. Функция WSARecv. Листинг 2 69. Тип TWSAOverlapped. Листинг 2.70. Функция WSAGetOverlappedResult. Листинг 2.71. Перекрытый ввод-вывод с использованием функции WSAGetOverlappedResult. Листинг 2.72. Прототип процедуры завершения. Листинг 2.73. Перекрытый ввод-вывод с использованием процедуры завершения. Листинг 2.74. Функция WSARecvFrom. Листинг 2.75. Функции WSASend и WSASendTo. 2.2.10. Сервер, использующий перекрытый ввод-вывод. Листинг 2.76. Тип TConnection. Примечание. Листинг 2.77. Обработчик сообщения WM_ACCEPTMESSAGE. Листинг 2.78. Функции завершения. 2.2.11. Многоадресная рассылка. Листинг 2.79. Тип TIPMreq. Листинг 2.80. Функция WSAJoinLeaf. 2.2.12. Дополнительные функции. Листинг 2.81. Функция AcceptEx. Листинг 2.82. Тип TOverlapped. Листинг 2.83. Функция GetAcceptExSockAddrs. Примечание. Листинг 2.84. Функция TransmitFile. Листинг 2.85. Тип TTransmitFileBuffers. 2.3. Итоги главы. Примечание. Глава 3. "Подводные камни". 3.1. Неочевидные особенности целых чисел. 3.1.1. Аппаратное представление целых чисел. Примечание. Примечание. Примечание. 3.1.2. Выход за пределы диапазона при присваивании. Листинг 3.1. Неявное преобразование знакового числа в беззнаковое при присваивании. Примечание. Листинг 3.2. Присваивание переменной значения, выходящего за рамки диапазона. Листинг 3.3. Явное приведение типа для подавления исключений. 3.1.3. Переполнение при арифметических операциях. Листинг 3.4. Переполнение при вычитании. Листинг 3.5. Переполнение при декременте. 3.1.4. Сравнение знакового и беззнакового числа. Листинг 3.6. Сравнение "одинаковых" знакового и беззнакового числа. Листинг 3.7. Явное приведение типов при сравнении. Примечание. 3.1.5. Неявное преобразование в цикле for. Листинг 3.8. Обработчик нажатия кнопки. Примечание. 3.2. Неочевидные особенности вещественных чисел. 3.2.1. Двоичные дроби. 3.2.2. Вещественные типы Delphi. Примечание. 3.2.3. Внутренний формат вещественных чисел. 3.2.4. "Неполноценный" Extended. 3.2.5. Бесконечные дроби. Примечание. 3.2.6. "Неправильное" значение. Листинг 3.9. Пример присваивания "неправильного" вещественного значения. Примечание. 3.2.7. Сравнение. Листинг 3.10. Пример ошибки при сравнении вещественной переменной и константы. 3.2.8. Сравнение разных типов. Листинг 3.11. Пример ошибки при сравнении переменных разных типов. 3.2.9. Вычитание в цикле. Листинг 3.12. Накапливание ошибки при вычитании. 3.2.10. Неожиданная потеря точности. Примечание. 3.2.11. Борьба с потерей точности в VCL. Листинг 3.13. Функция SysUtils.SafeLoadLibrary. Листинг 3.14. Функция CreateADOObject модуля ADODB. Листинг 3.15. Импорт функции CreateWindowEx модулем Windows. Примечание. 3.2.12. Машинное эпсилон. Листинг 3.16. Поиск машинного эпсилон. Примечание. 3.2.13. Методы решения проблем. 3.3. Тонкости работы со строками. 3.3.1. Виды строк в Delphi. 3.3.2. Хранение строковых литералов. Листинг 3.17. Примеры работы со строковыми литералами. 3.3.3. Приведение литералов к типу PChar. Листинг 3.18. Приведение литералов к типу PChar. 3.3.4. Сравнение строк. Листинг 3.19. Сравнение строк типа PChar. Листинг 3.20. Сравнение строк типа PChar, заданных одинаковыми литералами. Листинг 3.21. Сравнение переменных типа AnsiString как указателей. Листинг 3.22. Сравнение переменных AnsiString и PChar как указателей. Листинг 3.23. Сравнение глобальных переменных типа AnsiString как указателей. Листинг 3.24. Сравнение глобальных переменных типа PChar. Листинг 3.25. Сравнение переменных типа AnsiString и PChar. Листинг 3.26. Ошибка при сравнении переменных типа ShortString и PChar. Листинг 3.27. Правильное сравнение переменных типа ShortString и PChar. Листинг 3.28. Равенство указателей после приведения AnsiString к PChar. Листинг 3.29. Сравнение указателя после приведения пустой строки к PChar. 3.3.5. Побочное изменение. Листинг 3.30. Побочное изменение переменной S2 при изменении S1. Листинг 3.31. Отсутствие побочного изменения переменной S2 при изменении S1. Примечание. 3.3.6. Нулевой символ в середине строки. Листинг 3.32. Потеря остатка строки после символа #0. Листинг 3.33. Некорректная работа функции AnsiPos с символом #0. 3.3.7. Функция, возвращающая AnsiString. Листинг 3.34. Неожиданное значение результата. 3.3.8. Строки в записях. Листинг 3.35. Неправильный метод записи структуры со строкой в файл. Листинг 3.36. Неправильный метод чтения структуры со строкой из файла. Примечание. Листинг 3.37. Запись в файл структуры с массивом символов. Листинг 3.38. Чтение из файла структуры с массивом символов. Листинг 3.39. Запись в файл строки отдельно от структуры. Листинг 3.40. Чтение из файла строки отдельно от структуры. Примечание. Листинг 3.41. Побочное изменение переменной после низкоуровневого копирования. Листинг 3.42. Сокрытие ошибки при низкоуровневом копировании записи со строкой. Примечание. Примечание. 3.3.9. Использование ShareMem. Листинг 3.43. Базовый. Листинг 3.44. Код функции в DLL. Листинг 3.45. Быстрый (в среднем) способ получения строки через буфер. Листинг 3.46. Неправильный способ возврата строки из DLL. 3.4. Прочие "подводные камни". 3.4.1. Порядок вычисления операндов. Листинг 3.47. "Неправильный" порядок вычисления операндов. Листинг 3.48. "Неправильный" порядок вычисления операндов при делении. Примечание. Листинг 3.49. Сложение двух операндов с побочными эффектами. Листинг 3.50. Явное управление порядком вычисления операндов. Примечание. 3.4.2. Зацикливание обработчика TUpDown.OnClick при открытии диалогового окна в обработчике. Листинг 3.51. Обработчик события OnClick компонента UpDown1. Примечание. 3.4.3. Access violation при закрытии формы с перекрытым методом WndProc. Листинг 3.52. Код класса TForm2. Листинг 3.53. Безопасный вариант метода WndProc. Листинг 3.54. Обработка сообщения CM_RELEASE объектом Application. 3.4.4. Подмена имени оконного класса, возвращаемого функцией GetClassInfo. Листинг 3.55. Подмена имени оконного класса. Примечание. 3.4.5. Ошибка EReadError при использовании вещественных свойств. 3.4.6. Ошибка List index out of bounds при корректном значении индекса. Листинг 3.56. Пример кода, вызывающего исключение EStringListError. Листинг 3.57. Получение связанного с элементом значения вручную. Листинг 3.58. Получение значения свойства Items.Object в BDS 2006 и выше. 3.4.7. Неправильное поведение свойства Anchors. Листинг 3.59. Установка значений ширины и высоты, заданных при проектировании. 3.4.8. Ошибка при сравнении указателей на метод. Листинг 3.60. Пример неправильного сравнения указателей на метод. Листинг 3.61. Правильный способ сравнения указателей на метод. 3.4.9. Возможность получения адреса свойства. Листинг 3.62. Класс со свойствами, читаемыми из переменной и из функции. 3.4.10. Невозможность использования некоторых свойств оконного компонента в деструкторе. Листинг 3.63. Компонент TWrongCombo. Листинг 3.64. Реакция на кнопку Wrong Combo. Листинг 3.65. Обработчик сообщения WM_DESTROY класса TRightCombo. Примечание. Листинг 3.66. Код фрейма. Примечание. Глава 4. Разбор и вычисление выражений. 4.1. Синтаксис и семантика. 4.2. Формальное описание синтаксиса. Примечание. 4.3. Синтаксис вещественного числа. Листинг 4.1. Синтаксис вещественного числа. Листинг 4.2. Функция для определения соответствия строки синтаксису вещественного числа. 4.4. Простой калькулятор. Примечание. Листинг 4.3. Реализация простейшего калькулятора. 4.5. Учет приоритета операторов. Листинг 4.4. Грамматика выражения с учетом приоритета операций. Примечание. Листинг 4.5. Реализация калькулятора с учетом приоритета операций. 4.6. Выражения со скобками. Листинг 4.6. Грамматика выражения со скобками (первое приближение). Листинг 4.7. Окончательный вариант грамматики выражения со скобками. Листинг 4.8. Реализация калькулятора со скобками. 4.7. Полноценный калькулятор. Примечание. Листинг 4.9. Реализация полноценного калькулятора. 4.8. Калькулятор с лексическим анализатором. Листинг 4.10. Грамматика калькулятора с лексическим анализатором. Примечание. Листинг 4.11. Тип TLexeme для хранения информации об одной лексеме. Листинг 4.12. Код лексического анализатора. Примечание. Листинг 4.13. Пример функции, использующей лексический анализатор. 4.9. Однопроходный калькулятор и функции с несколькими переменными. Примечание. Листинг 4.14. Однопроходный вариант класса TLexicalAnalyzer. Примечание. 4.10. Еще немного теории. Примечание. Примечание. Приложение 1. Сайт "Королевство Delphi". Приложение 2. Содержимое компакт-диска. Примеры к главе 1. Примеры к главе 2. Примеры к главе 3. Примеры к главе 4. Благодарности. Список литературы. →

Обратные вызовы в C++

Введение. 1. Теоретические основы обратных вызовов. 1.1. Концепция обратных вызовов. 1.1.1. Интуитивное определение. 1.1.2. Обратный вызов как паттерн. 1.1.3. Прямые и обратные вызовы. 1.2. Задачи, решаемые с помощью обратных вызовов. 1.2.1. Запрос данных. 1.2.2. Вычисления по запросу. 1.2.3. Перебор элементов. 1.2.4. Уведомление о событиях. 1.3. Модель обратных вызовов. 1.3.1. Определения и термины. 1.3.2. Контекст. 1.4. Архитектурный дизайн вызовов. 1.4.1. Синхронные и асинхронные вызовы. 1.4.2. Использование вызовов в API. ... 1.5. Итоги. 2. Реализация обратных вызовов. 2.1. Указатель на функцию. 2.1.1. Концепция. 2.1.2. Инициатор. Листинг 1.Иинициатор с указателем на функцию. Листинг 2. Инициатор с указателем на функцию в объектно-ориентированном дизайне. 2.1.3. Исполнитель. Листинг 3. Исполнитель для инициатора в процедурном дизайне. Листинг 4. Исполнитель для инициатора в объектно-ориентированном дизайне. 2.1.4. Синхронный вызов. Листинг 5. Инициатор для синхронного обратного вызова с указателем на функцию. 2.1.5. Преимущества и недостатки. 2.2. Указатель на статический метод класса. 2.2.1. Концепция. 2.2.2. Инициатор. Листинг 6. Инициатор с указателем на статический метод класса. 2.2.3. Исполнитель. Листинг 7. Исполнитель с указателем на статический метод класса. Листинг 8. Исполнитель с указателем на статический метод класса для инициатора с нетипизированным контекстом. 2.2.4. Синхронный вызов. Листинг 9. Инициатор для синхронного обратного вызова с указателем на статический метод класса. 2.2.5. Преимущества и недостатки. 2.3. Указатель на метод-член класса. 2.3.1. Концепция. 2.3.2. Инициатор. Листинг 10. Инициатор с указателем на метод-член класса. 2.3.3. Исполнитель. Листинг 11. Исполнитель с указателем на метод-член класса. 2.3.4. Управление контекстом. Листинг 12. Классы-исполнители с наследованием. Листинг 13. Настройка указателей на классы и методы. 2.3.5. Синхронный вызов. Листинг 14. Инициатор для синхронного обратного вызова с указателем на метод-член класса. 2.3.6. Преимущества и недостатки. 2.4. Функциональный объект. 2.4.1. Концепция. 2.4.2. Инициатор. Листинг 15.Объявление функционального объекта. Листинг 16. Инициатор с функциональным объектом. 2.4.3. Исполнитель. Листинг 17. Исполнитель с функциональным объектом. 2.4.4. Синхронный вызов. Листинг 18. Инициатор для синхронного вызова с функциональным объектом. 2.4.5. Преимущества и недостатки. 2.4.6. Производительность. Листинг 19. Маленькая простая программа. Листинг 20. Дизассемблерный код с выключенной оптимизацией… Листинг 21. Дизассемблерный код с включенной оптимизацией. 2.5. Лямбда-выражение. 2.5.1. Концепция. 2.5.2. Инициатор. 2.5.3. Исполнитель. 2.5.4. Синхронный вызов. 2.5.5. Преимущества и недостатки. Листинг 22. Лямбда-выражение с захватом указателя this. 2.6. Итоги. 3. Сравнительный анализ реализаций. 3.1. Методологические подходы. 3.1.1. Обобщенный алгоритм. 3.1.2. Требования как критерии. 3.2. Качественный анализ. 3.2.1. Матрица соответствия. 3.2.2. Выбор реализации. 3.3. Метод интегральных оценок. 3.3.1. Количественные оценки. 3.3.2. Коэффициенты важности. 3.3.3. Учет прогнозных показателей. 3.4. Итоги. 4. Обратные вызовы и шаблоны. 4.1. Общие понятия шаблонов. Листинг 23. Объявление шаблона и его инстанциирование. 4.2. Синхронные вызовы. 4.2.1. Инициатор. Листинг 24. Реализации инициатора для синхронных вызовов. Листинг 25. Шаблон для инициатора синхронного вызова. Листинг 26. Шаблон для инициатора с двумя параметрами. 4.2.2. Преобразование вызовов. Листинг 27. Функциональный объект для вызова функции с передачей контекста. Листинг 28. Функциональный объект для вызова метода класса. 4.2.3. Исполнитель. Листинг 29. Исполнитель для шаблона-инициатора синхронного вызова. Листинг 30. Преобразование вызовов без объявления промежуточных типов. 4.3. Вызовы в алгоритмах. 4.3.1. Описание проблемы. 4.3.2. Параметризация типов. Листинг 31. Сортировка массива методом пузырька. Листинг 32. Параметризация типов для сортировки пузырьком. 4.3.3. Объявление предикатов. Листинг 33. Шаблон с объявлением предиката. Листинг 34. Сортировка данных с использованием предикатов различных типов. 4.3.4. Предикаты по умолчанию. Листинг 35. Шаблон с предикатом по умолчанию. 4.4. Асинхронные вызовы. 4.4.1. Инициатор. Листинг 36. Реализации инициатора асинхронных вызовов для различных типов аргументов. Листинг 37. Шаблон для инициатора асинхронного вызова. 4.4.2. Хранение лямбда-выражений. Листинг 38. Лямбда-выражение и объект-замыкание. Листинг 39. Объект-замыкание с преобразованием в указатель на функцию. Листинг 40. Сохранение лямбда-выражения в локальной переменной. Листинг 41. Инициатор с дополнительными конструкторами. Листинг 42.Инстанциирование шаблона асинхронного обратного вызова для лямбда-выражения. 4.4.3. Исполнитель. Листинг 43. Исполнитель для шаблона-инициатора с различными типами аргумента. Листинг 44. Компактный способ объявлений при использовании преобразования вызовов. 4.5. Универсальный аргумент. 4.5.1. Динамический полиморфизм. Листинг 45. Класс, реализующий стирание типов. Листинг 46. Использование универсального аргумента. 4.5.2. Настройка сигнатуры. Листинг 47. Настройка сигнатуры. Листинг 48. Стирание типов с настройкой сигнатуры. Листинг 49. Использование аргумента с настройкой сигнатуры. 4.5.3. Вызов метода класса. Листинг 50. Использование универсального аргумента для вызова метода класса. 4.6. Использование стандартной библиотеки. 4.6.1. Организация вызовов. Листинг 51. Использование std::function. Листинг 52. Проверка настройки аргумента. 4.6.2. Инициатор с универсальным аргументом. Листинг 53. Инициатор с оболочкой std::function. 4.6.3. Преобразование с настройкой сигнатуры. Листинг 54. Преобразование вызовов с настройкой сигнатуры для указателей на функцию. Листинг 55. Преобразование вызовов с настройкой сигнатуры для указателей на метод класса. 4.6.4. Исполнитель. Листинг 56. Исполнитель для инициатора с оболочкой std::function. 4.6.5. Инициатор для методов класса. Листинг 57. Инициатор с оболочкой std::function для вызова методов класса. Листинг 58. Использование специализации шаблона-инициатора для вызова методов класса. Листинг 59. Использование инициатора с оболочкой std::function для вызова методов класса. 4.6.6. Перенаправление вызовов. Листинг 60. Перенаправление вызовов. Листинг 61. Перенаправление вызовов для методов-членов класса. Листинг 62. Перенаправление вызовов в исполнителе. 4.6.7. Универсальный аргумент и производительность. 4.7. Проблемы, порождаемые шаблонами. 4.7.1. Недостатки шаблонов. 4.7.2. Ограничения шаблонов. 4.8. Итоги. 5. Распределение вызовов. 5.1. Постановка задачи. 5.2. Статический набор получателей. 5.2.1. Распределение в статическом наборе. Листинг 63. Распределяющая функция для статического набора получателей. Листинг 64. Распределение вызова для статического набора. 5.2.2. Передача данных. Листинг 65. Распределяющая функция для статического набора получателей с передачей данных. Листинг 66. Распределение вызовов для статического набора получателей. 5.3. Настройка сигнатуры для передачи данных. 5.3.1. Общая концепция. Листинг 67. Пример шаблона функции с несколькими пакетами параметров. 5.3.2. Способ 1: объекты в пакет, данные в кортеж. Листинг 68. Распределение при упаковке объектов в пакет и данных в кортеж. 5.3.3. Способ 2: объекты в кортеж, данные в пакет. Листинг 69. Распределение при упаковке объектов в кортеж и данных в пакет. 5.3.4. Способ 3: объекты и данные в кортежах. Листинг 70. Распределение при упаковке объектов и данных в кортежи. 5.3.5. Сравнение способов. Листинг 71. Распределение вызовов с заданной сигнатурой. 5.3.6. Настройка сигнатуры для перенаправления. Листинг 72. Перенаправление вызовов с настройкой сигнатуры. 5.4. Возврат результатов выполнения. 5.4.1. Получение возвращаемых значений. Листинг 73. Распределение вызовов с возвратом результатов. 5.4.2. Анализ результатов. Листинг 74. Анализ возвращаемых значений. 5.5. Распределитель для статического набора. 5.5.1. Распределение без возврата результатов. Листинг 75. Распределитель для статического набора получателей. Листинг 76. Использование распределителя для статического набора. 5.5.2. Распределение с возвратом результатов. Листинг 77. Распределитель для статического набора с возвратом результатов. Листинг 78. Использование распределителя для статического набора с возвратом результатов. 5.5.3. Параметризация возвращаемого значения. Листинг 79. Условная компиляция в зависимости от типа возвращаемого значения. Листинг 80. Условная компиляция в зависимости от типа возвращаемого значения. 5.6. Динамический набор получателей. 5.6.1. Распределение в динамическом наборе. Листинг 81. Распределитель для динамического набора получателей. 5.6.2. Получение возвращаемых значений. Листинг 82. Возврат значений для динамического набора получателей. Листинг 83. Распределение вызовов для динамического набора получателей. 5.7. Адресное распределение. 5.7.1. Понятие адресного распределения. 5.7.2. Адресный распределитель. Листинг 84. Распределитель для адресного набора получателей. 5.7.3. Использование адресного распределения. Листинг 85. Использование адресного распределения. 5.8. Итоги. 6. Практическое использование обратных вызовов. 6.1. Разработка архитектуры. 6.1.1. Техническое задание. 6.1.2. Сценарий функционирования. 6.1.3. Декомпозиция системы. 6.2. Реализация классов. 6.2.1. Общие определения. Листинг 86. Общие объявления типов (SensorDef.h). 6.2.2. Обработка ошибок. Листинг 87. Исключения для обработки ошибок (Errors.h). 6.2.3. Драйвер. Листинг 88. Интерфейс для работы с драйвером (DriverInterface.h). Листинг 89. Имитируемый драйвер (DriverImpl.h). Листинг 90. Чтение текущего значения датчика в имитируемом драйвере (DriverImpl.cpp). 6.2.4. Датчик. Листинг 91. Интерфейсный класс для роботы с датчиком (SensorInterface.h). 6.2.5. Контейнер. Листинг 92. Объявление контейнера (SensorContainer.h). 6.2.6. Асинхронные запросы. Листинг 93. Класс для выполнения асинхронных вызовов (CommandQueue.h). Листинг 94. Обработка очереди запросов (CommandQueue.cpp). 6.2.7. Наблюдатель. Листинг 95. Наблюдатель – класс для отслеживания пороговых значений (Observer.h). Листинг 96. Отслеживание пороговых значений. 6.2.8. Интерфейсный класс. Листинг 97. Интерфейсный класс (ControlInterface.h). Листинг 98 Класс, реализующий интерфейс (SensorControl.h). Листинг 99. Обратные вызовы в классе, реализующем интерфейс (SensorControl.cpp). Листинг 100. Класс для анализа минимального и максимального значения (SensorControl.cpp). Листинг 101. Поиск минимального и максимального значений (SensorControl.cpp). 6.3. Разработка системного API. 6.3.1. API как оболочка. Листинг 102. Концептуальный пример реализации API как оболочки. 6.3.2. Объявления типов. Листинг 103. Объявления типов для интерфейса API (SensorLib.h). 6.3.3. Интерфейс API и обработка ошибок. Листинг 104. Интерфейс системного API (SensorLib.h). Листинг 105. Функция для получения значения датчика. 6.3.4. Многопоточная работа. Листинг 106. Объявление экземпляра класса как локального для текущего выполняемого потока (SensorLib.cpp). 6.3.5. Настройка драйвера. Листинг 107. Настройка драйвера в исходной реализации. Листинг 108. Настройка драйвера в системном API (SensorLib.h). Листинг 109. Конвертер числовых значений в перечисление (EnumConverter.h). 6.3.6. Обратные вызовы. Листинг 110. Перенаправление вызовов в реализации интерфейсной функции (SensorLib.cpp). 6.4. Итоги. Заключение. Список литературы и интернет-источников. →

Освой самостоятельно С++ за двадцать один день.

Неделя №1. Основные вопросы. Несколько слов для программистов на языке C. Что дальше. День 1-й. Первые шаги. Введение. Краткий экскурс в историю языка C++ Программы. Решение многих проблем. Процедурное, структурированное и объектно-ориентированное программирование. Язык C++ и объектно-ориентированное программирование. Инкапсуляция. Наследование и многократное использование. Полиморфизм. Эволюция языка C++ Нужно ли сначала изучить язык C. C++ и Java. Стандарт ANSI. Подготовка к программированию. Среда разработки. ... Компиляция исходного кода программы. Создание исполняемого файла с помощью компоновщика. Цикл разработки. Первая программа на языке C++ — HELLO.cpp. Осваиваем компилятор Visual C++ 6. Построение проекта приветствия. Ошибки компиляции. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 2-й. Составные части программы на языке C++ Простая программа на языке C++ Кратко об объекте cout. Комментарии. Виды комментариев. Использование комментариев. Напоследок предупреждение: осторожнее с комментариями! Функции. Использование функций. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 3-й. Переменные и константы. Что такое переменная. Резервирование памяти. Размер целых. Знаковые и беззнаковые типы. Базовые типы переменных. Определение переменной. Чувствительность к регистру букв. Ключевые слова. Создание нескольких переменных одного типа. Присваивание значений переменным. Ключевое слово typedef. В каких случаях следует использовать типы short и long. Переполнение беззнаковых целых. Переполнение знаковых целочисленных значений. Символы. Символы и числа. Специальные символы. Константы. Литеральные константы. Символьные константы. Определение констант с помощью директивы #deiine. Определение констант с помощью ключевого слова const. Константы перечислений. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 4-й. Выражения и операторы. Выражения. Символы пробелов. Блоки и комплексные варажения. Операции. Операторы. Оператор присваивания. Математические операторы. Целочисленное деление и деление по модулю. Совместное использование математических операторов с операторами присваивания. Инкремент декремент. Префикс и постфикс. Приоритеты операторов. Вложение круглых скобок. Что такое ИСТИННО. Операторы отношений. Оператор if. Использование отступов в программных кодых. Ключевое слово else. Сложные конструкции с if. Использование фигурных скобок для вложенных операторов if. Логические операторы. Логическое И. Логическое ИЛИ. Логическое НЕТ. Вычисление по сокращенной схеме. Приоритеты операторов отношений. Подробнее об истине и лжи. Условный оператор. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 5-й. Функции. Что такое функция. Возвращаемые значения, параметры и аргументы. Объявление и определение функций. Объявление функции. Прототипы функций. Определение функции. Выполнение функций. Локальные переменные. Глобальные переменные. Глобальные переменные; будьте начеку. Подробнее о локальных переменных. Операторы, используемые в функциях. Подробнее об аргументах функций. Использование функций в качестве параметров функций. Параметры - это локальные переменные. Подробнее о возвращаемых значениях. Значения параметров, используемые по умолчанию. Перегрузка функций. Дополнительные сведения о функциях. Подставляемые inline-функции. Рекурсия. Работа функций - приподнимаем завесу тайны. Уровни абстракции. Разбиение памяти. Стек и функции. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 6-й. Базовые классы. Создание новых типов. Зачем создавать новый тип. Классы и члены классов. Объявление класса. Несколько слов об используемых именах. Определение объекта. Классы в сравнении с объектами. Получение доступа к членам класса. Значения присваиваются объектам, а не классам. Что объявишь, то и будешь иметь. Ограничение доступа к членам класса. Оставьте данные класса закрытыми. Ограничение доступа к данным - это не способ защиты данных, а лишь средство облегчения программирования. Определение методов класса. Конструкторы и деструкторы. Конструкторы и деструкторы, заданные по умолчанию. Использование конструктора, заданного по умолчанию. Объявление функций-членов со спецификатором const. Чем отличается интерфейс от выполнения класса. Где следует распологать в программе объявления классов и определения методов. Выполнение с подстановкой. Классы содержащие другие классы в качестве данных-членов. Структуры. Почему два ключевых слова несут одинаковую смысловую нагрузку. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 7-й. Циклы. Организация циклов. История оператора goto. Почему следует избегать оператора goto. Организация циклов с помощью оператора while. Сложные конструкции с оператором while. Операторы break и continue. Использование конструкции while(true). Организация циклов с помощью конструкции do...while. Использование конструкции do...while. Оператор for. Сложные выражения с оператором for. Множественные инициализации и приращения счетчиков цикла. Нулевые параметры цикла for. Использование пустых циклов for. Вложенные циклы. Область видимости переменных-счетчиков циклов for. Обобщение сведений о циклах. Оператор switch. Обработка комманд менб с помощью оператора switch. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. Подведение итогов. Итоги первой недели. Неделя №2. Основные вопросы. Что дальше. День 8-й. Указатели. Что такое указатель. Использование указателя как средства хранения адреса. Имена указателей. Оператор разыменовывания. Указатели, адреса и переменные. Обращение к данным через указатели. Использование адреса, хранящегося в указателе. Для чего нужны указатели. Память стековая и динамически распределяемая. Оператор new. Оператор delete. Что такое утечка памяти. Размещение объектов в области динамической памяти. Удаление объектов. Доступ к членам класса. Динамическое размещение членов класса. Указатель this. Блуждающие, дикие или зависшие указатели. Использование ключевого слова const при объявлении указателей. Использование ключевого слова const при объявлении указателей и функций-членов. Указатель const this. Вычисления с указателями. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 9-й. Ссылки. Что такое ссылка. Использование оператора адреса (&) при работе со ссылками. Ссылки нельзя переназначать. На что можно ссылаться. Нулевые указатели и нулевые ссылки. Передача аргументов функций как ссылок. Передача указателей в функцию swap(). Передача ссылок в функцию swap(). Представления о заголовках функций и прототипах. Возвращение нескольких значений. Возвращение значений с помощью ссылок. Передача ссылок на переменные как средство повышения эффективности. Передача константного указателя. Ссылки в качестве альтернативы. Когда лучше использовать ссылки, а когда - указатели. Коктейль из ссылок и указателей. Не возвращайте ссылку на объект, который находиться вне области видимости! Возвращение ссылки на в области динамического обмена. А где же уазатель? Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 10-й. Дополнительные возможности использования функции. Перегруженные функции-члены. Использование значений, заданных по умолчанию. Выбор между значениями по умолчанию и перегруженными функциями. Конструктор, принятый по умолчанию. Перегрузка конструкторов. Инициализация объектов. Конструктор-копировщик. Перегрузка операторов. Запись Функции инкремента. Перегрузка префиксных операторов. Типы возвратов перегруженных функций операторов. Возвращение безымянных временных объектов. Использование указателя this. Перегрузка постфиксных операторов. Различия между преинкрементном и постинкрементном. Оператор суммирования. Перегрузка оператора суммирования. Основные принципы перегрузки операторов. Ограничения перегрузки операторов. Что можно перегружать. Оператор присваивания. Операторы преобразований. Операторы преобразования типов. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 11-й. Наследование. Что такое наследование. Иерархия и наследование. Царство животных. Синтаксис наследования классов. Закрытый или защищенный. Конструкторы и деструкторы. Передача аргументов в базовые конструкторы. Замещение функций. Сокрытие метода базового класса. Вызов базового метода. Виртуальные методы. Как работают виртуальные методы. Нельзя брать там, находясь здесь. Дробление объекта. Виртуальные деструкторы. Виртуальный конструктор-копировщик. Цена виртуальности методов. Резюме. Вопросы и ответы. Коллоквиум. Тест. Упражнения. День 12-й. Массивы и связанные листы. Что такое массивы. Элементы массива. Вывод данных за пределами массива. Ошибки подсчета столбцов для забора. Инициализация массива. Объявление массивов. Массивы объектов. Многомерные массивы. Инициализация многомерного массива. Несколько слов о памяти. Массивы указателей. Объявление массивов в области динамического обмена. Указатель на массив или массив указателей. Имена массивов и указателей. Удаление массива из области динамической памяти. Массивы символов. Функции strcpy() и strncpy(). Классы строк. Связанные списки и другие структуры. Общие представления о связанных списках. Делегирование ответственности. Компоненты связанных списков. Что мы узнали в этой главе. Классы массивов. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 13-й. Полиморфизм. Проблемы с одиночным наследованием. Перенос метода вверх по иерархии классов. Приведение указателя к типу производного класса. Добавление объекта в два списка. Множественное наследование. Из каких частей состоят объекты, полученные в результате множественного наследования. Конструкторы классов, полученных в результате множественного наследования. Двусмысленность ситуации. Наследование от общего базового класса. Виртуальное наследование. Проблемы с множественным наследованием. Классы-мандаты. Абстрактные типы данных. Чистые виртуальные функции. Выполнение чистых виртуальных функций. Сложная иерархия абстракций. Когда следует использовать абстрактные типы данных. Логика использования абстрактных классов. Пара слов о множественном наследовании, абстрактных типах данных и языке Java. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 14-й. Специальные классы и функции. Статические переменные-члены. Статические функции-члены. Указатели на функции. Зачем нужны указатели на функции. Массивы указателей на функции. Передача указателей на функции в другие функции. Использование typedef с указателями на функции. Указатели на функции члены. Массивы указателейна функции-члены. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. Подведение итогов. Неделя №3. Основные вопросы. Что дальше. День 15-й. Дополнительные возможности наследования. Вложение. Доступ к членам вложенного класса. Фильтрация доступа к вложенным классам. Цена вложений. Передача объекта как значения. Различные пути передачи функциональности классу. Делегирование. Закрытое наследование. Классы друзья. Функции друзья. Функции друзья и перегрузка оператора. Перегрузка оператора вывода. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 16-й. Потоки. Знакомство с потоками. Инкапсуляция. Буферизация. Потоки и буферы. Стандартные объекты ввода-вывода. Переадресация. Вывод данных с помощью cin. Строки. Проблемы, возникающие при вводе строк. Оператор >> возвращает ссылку на объект istream. Другие методы объекта cin. Ввод одного символа. Использование функции gef() без параметров. Использование функции get() с параметром. Ввод строк со стандартного устройства ввода. Использование функции cin.ignore(). Функции-члены peek() и putback(). Ввод данных с помощью cout. Очистка буфера вывода. Функции-члены объекта cout. Манипуляторы, флаги и команды форматирования. Использование функции cout.width(). Установка символов заполнения. Установка флагов. Сравнение потоков и функции printf(). Использование файлов для ввода и вывода данных. Объекты ofstream. Состояния условий. Открытие файлов для ввода-вывода. Настройка открытия файла объектом ofstream. Двоичные и тектовые файлы. Установка параметров ввода-вывода с помощью коммандной строки. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 17-й. Пространства имен. Введение. Вызов по имени функций и классов. Создание пространства имен. Объявление и определение типов. Объявление функций за пределами пространства имен. Добавление новых членов. Вложения пространства имен. Использование пространства имен. Ключевое слово using. Использование using как оператора. Использование using в объявлениях. Псевдонимы пространства имен. Неименованные пространства имен. Стандартное пространство имен std. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 18-й. Анализ и проектирование объектно-ориентированных программ. Являеться ли C++ объектно-ориентированным языком программирования. Построение моделей. Проектирование программ: язык моделирования. Процесс проектирования программ. Идея. Анализ требований. Ситуация использования. Определение пользователей. Определение первой ситуации использования. Создание модели домена. Обобщение. Вложение. Ассоциация. Разработка сценариев. Разработка путеводителей. Диаграммы взаимодействий. Создание пакетов. Анализ совместимости приложения. Анализ существующих систем. Прочая документация. Визуализация. Артефакты. Проектирование. Что такое классы. Преобразования. Другие преобразования. Обработка данных. Отчеты. Устройства. Статическая модель. Карточки CRC. Как проводить заседания с карточками. Сфокусируемся на распределении ответственности. Как сделать класс живым. Ограничения карточек CRC. Создание модели UML no картонкам CRC. Отношения между классами. Множественное наследование против вложения. Дискриминаторы и силовые классы. Динамическая модель. Диаграммы переходов состояний. Сверхсостояния. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 19-й. Шаблоны. Что такое шаблоны. Параметризованные типы. Создание экземпляра шаблона. Объявление шаблона. Использование имени шаблона. Выполнение шаблона. Функции шаблона. Шаблоны и друзья. Дружественные классы и функции, не являющиеся шаблонами. Дружественный класс или функция как общий шаблон. Использование экземпляров шаблона. Специализированные функции. Статические члены и шаблоны. Стандартная библиотека шаблонов. Контейнеры. Последовательные контейнеры. Вектор. Список. Контейнер двухсторонней очереди. Стеки. Очередь. Ассоциативные контейнеры. Карта. Другие ассоциативные контейнеры. Классы алгоритмов. Операции, не изменяющие последовательность. Алгоритмы изменения последовательности. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 20-й. Отслеживание исключительных ситуаций и ошибок. Ошибки, погрешности, ляпусы и "гнилой" код. Исключительные ситуации. Несколько слов о "гнилом" коде. Исключения. Как используются исключения. Использование блоков try и catch. Перехват исключений. Использование нескольких операторов catch. Наследование исключений. Данные в классах исключений и присвоение имен объектам исключений. Исключения и шаблоны. Исключения без ошибок. Ошибки и отладка программы. Точка останова. Анализ значений переменных. Исследование памяти. Код ассемблера. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. День 21-й. Что дальше. Процессор и компилятор. Просмотр промежуточного файла. Использование директивы #define. Использование директивы #define для создания констант. Использование директивы #define для тестирования. Комманда препроцессора #else. Включение файлов и предупреждение ошибок включения. Макросы. Зачем нужны все эти круглые скобки. Макросы в сравнении с функциями шаблонов. Подставляемые функции. Операции со строками. Оператор взятия в кавычки. Конкатенация. Встроенные макросы. Макрос assert(). Оладка программы с помощью assert(). Макрос assert() вместо исключений. Побочные эффекты. Инварианты класса. Печать промежуточных значений. Уровни отладки. Операции с битами данных. Оператор И (AND). Оператор ИЛИ (OR). Оператор исключающего ИЛИ (XOR). Оператор дополнения до единицы. Установка битов. Сброс битов. Инверсия битов. Битовые поля. Стиль программирования. Отступы. Фигурные скобки. Длинные строки. Конструкции с оператором switch. Текст программы. Имена идентификаторов. Правописание и использование прописных букв в именах. Комментарии. Организация доступа к данным и методам. Определения классов. Включение файлов. Макрос assert(). Ключевое слово const. Сделаем еще один шаг вперед. Где получить справочную информацию и советы. Журналы. Выскажите свое мнение о книге. Резюме. Вопросы и ответы. Коллоквиум. Контрольные вопросы. Упражнения. Подведение итогов. Приложение А. Приоритеты операторов. Приложение Б. Ключевые слова C++ Приложение В. Двоичные о числа. Другие системы счисления. Еще об основаниях. Двоичная система счисления. Почему именно основание 2. Биты, байты и полубайты. Что такое килобайт. Двоичные числа. Шестнадцатерична система счисления. Приложение Г - Ответы. День 1. Контрольные вопросы. Упражнения. День 2. Контрольные вопросы. Упражнения. День 3. Контрольные вопросы. Упражнения. День 4. Контрольные вопросы. Упражнения. День 5. Контрольные вопросы. Упражнения. День 6. Контрольные вопросы. Упражнения. День 7. Контрольные вопросы. Упражнения. День 8. Контрольные вопросы. Упражнения. День 9. Контрольные вопросы. Упражнения. День 10. Контрольные вопросы. Упражнения. День 11. Контрольные вопросы. Упражнения. День 12. Контрольные вопросы. Упражнения. День 13. Контрольные вопросы. Упражнения. День 14. Контрольные вопросы. Упражнения. День 15. Контрольные вопросы. Упражнения. День 16. Контрольные вопросы. Упражнения. День 17. Контрольные вопросы. Упражнения. День 18. Контрольные вопросы. Упражнения. День 19. Контрольные вопросы. Упражнения. День 20. Контрольные вопросы. Упражнения. День 21. Контрольные вопросы. Упражнения. Благодарности. Об авторе. →

Основы программирования на Java.

ВВЕДЕНИЕ. ОСНОВНЫЕ ПОНЯТИЯ. 1. ПЕРЕМЕННЫЕ. 1.1. Объявление переменных. 1.2. Область видимости переменной. 2. ТИПЫ. 2.1. Простые типы. 2.1.1. Числовые типы. 2.1.2. Символы. 2.1.3. Тип boolean. 2.2. Приведение типов. 3. МАССИВЫ. 3.1. Многомерные массивы. 4. ОПЕРАТОРЫ. 4.1. Арифметические операторы. 4.1.1. Оператор деления по модулю. 4.1.2. Арифметические операторы присваивания. 4.1.3. Инкремент и декремент. 4.2. Целочисленные битовые операторы. Таблица 4.2. Операторы битовой арифметики. 4.3. Операторы отношений. ... 4.4. Булевы логические операторы. 4.5. Тернарный оператор if-then-else. 4.6. Приоритеты операторов. 5. УПРАВЛЕНИЕ ВЫПОЛНЕНИЕМ ПРОГРАММЫ. 5.1. Условный оператор if-else. 5.2. Опреатор break. 5.3. Оператор switch. 5.4. Оператор return. 6. ЦИКЛЫ. 6.1. Цикл while. 6.2. Цикл do-while. 6.3. Цикл for. 6.3.1. Оператор запятая. 6.4. Оператор continue. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА JAVA. 7. КЛАССЫ. 7.1. Переменные класса. 7.2. Оператор new. 7.3. Объявление методов. 7.4. Вызов метода. 7.5. Скрытие переменных. 7.6. Конструкторы. 7.7. Совмещение методов. 7.8. Ссылка this. 7.9. Наследование. 7.10. Ссылка super. 7.11. Замещение методов. 7.12. Динамическое назначение методов. 7.13. Директива final. 7.14. Деструкторы. 7.15. Статические методы. 7.16. Абстрактные классы. 8. ПАКЕТЫ И ИНТЕРФЕЙСЫ. 8.1. Пакеты. 8.1.1. Оператор package. 8.1.2. Трансляция классов в пакетах. 8.1.3. Оператор import. 8.1.4. Ограничение доступа. 8.2. Интерфейсы. 8.2.1. Оператор interface. 8.2.2. Оператор implements. 9. ОБРАБОТКА ИСКЛЮЧЕНИЙ. 9.1. Основы механизма исключений. 9.2. Типы исключений. 9.3. Неперехваченные исключения. 9.4. Операторы try и catch. 9.5. Несколько разделов catch. 9.6. Вложенные операторы try. 9.7. Оператор throw. 9.8. Оператор throws. 9.9. Оператор finally. 10. МНОГОПОТОЧНОЕ ПРОГРАММИРОВАНИЕ. 10.1. Модель легковесных процессов в Java. 10.2. Подпроцесс. 10.3. Интерфейс Runnable. 10.4. Приоритеты подпроцессов. 10.5. Синхронизация. 10.6. Методы программного интерфейса легковесных процессов. 10.6.1. Методы класса. 11. ввод/вывод. 11.1. Работа с файлами. 11.2. Каталоги. 11.3. Класс InputStream. 11.5. Файловый поток FilelnputStream. 11.6. Файловый поток FileOutputStream. 12. ПРОГРАММИРОВНИЕ ГРАФИЧЕСКИХ ПОЛЬЗОВАТЕЛЬСКИХ ИНТЕРФЕЙСОВ. 12.3. Класс Canvas. 12.4. Класс Label. 12.5. Класс Button. 12.6. Класс Checkbox. 12.7. Класс CheckboxGroup. 12.8. Класс Choice. 12.9. Класс List. 12.10. Класс Scrollbar. 12.11. Класс TextField. 12.12. Класс TextArea. 12.13. Стратегии размещения компонентов. 12.13.1. Диспетчер размещения LayoutManager. 12.13.2. Стратегия FIowLayout. 12.13.3. Стратегия BorderLayout. 12.13.4. Стратегия GridLayout. 12.14. Программирование окон - Window. 12.15. Программирование меню. 12.16. Модель обработки событий от компонентов. ЗАКЛЮЧЕНИЕ. БИБЛИОГРАФИЧЕСКИЙ СПИСОК. →

Офисное программирование.

Введение. Часть I. Осноные седения о программироании на VBA. Глава 1. Типы данных, услоные операторы и массиы VBA. 1.1. Введение в VBA. Типы данных. Введение в VBA. Объектно-ориентированное программирование. Обзор типов данных VBA. Типы данных VBA. Переменные. Константы. Математические функции. 1.2. Редактор VBA. Первое знакомство. Запуск редактора VBA. Создание простейших программ. 1.3. Изменение порядка выполнения операторов. Операторы и выражения. Арифметические операторы. Символы совпадения с образцом для оператора Like. ... Логические операторы. Изменение порядка выполнения операторов. Повторение действий: циклы. Глава 2. Объект UserForm. 2.1. Свойства и методы объекта UserForm. Свойства объекта UserForm. Наиболее часто используемые свойства объектов UserForm. Методы объекта UserForm. Наиболее часто используемые методы для объектов UserForm. События объекта UserForm. События объектов UserForm. Элементы управления. Стандартные элементы управления, включенные в VBA. Свойства стандартных элементов управления. 2.2. Использование форм. Создание VBA-программ. Задачи на закрепление материала. Глава 3. Массивы, процедуры, функции. 3.1. Организация массивов. Одномерные массивы. Двумерные массивы. 3.2. Работа с различными типами данных. Тип, определяемый пользователем. Перечисляемый тип. Приведение и преобразование типов. Функции преобразования типов. Операции со строками. Функции работы со строками. 3.3. Процедуры и функции VBA. Описание процедур и функций VBA. Объявление процедуры инициализации массива. Объявление функции, подсчитывающей сумму любого числа аргументов. Вызов подпрограмм и функций. Макросы. Редактирование программного кода макроса в редакторе Visual Basic. Задачи на закрепление материала. Глава 4. Создание VBA-программ. 4.1. Элемент управления ListBox. Задачи на закрепление материала. Дополнительные задания. 4.2. Элементы управления ComboBox, OptionButton и Frame. Поле со списком. Переключатель и рамка. Задачи на закрепление материала. 4.3. Элементы управления MultiPage, ScrollBar, SpinButton[2]. Коллекция Controls. Набор страниц MultiPage. Значения свойства TabOrientation. Полоса прокрутки ScrollBar. Счетчик SpinButton. 4.4. Объект DataObject[3]. Описание объекта DataObject. Перемещение объектов. Реализация технологии DragAndDrop. Свойства Calendar. Методы Calendar. Часть II. Программирование на VBA в Word. Глава 5. Вывод текста в документ Word. 5.1. Основные объекты Word. Объект Word.Application. Свойства объекта Word.Application. Работа с документами и класс Document. События объекта Document. Документ и его части. Объекты Range и Selection. Работа с текстом. 5.2. Форматирование документа. Работа с текстом (продолжение). Создание кнопки или панели в Word. Задачи на закрепление материала. Заявление. При поездке на дачу, находящуюся на расстоянии 55 км, при цене бензина за литр 18,50 руб., потребление бензина составит 101,75 руб. Отчет о доходе. Глава 6. Автоматизация стандартных документов. 6.1. Встроенные диалоговые окна. Диалоговые окна. Значения аргумента кнопки процедуры MsgBox. Значения аргумента кнопки процедуры MsgBox. Задачи на закрепление материала. 6.2. Создание и автоматическое заполнение бланков стандартных документов. Создание VBA-программ. Задача на закрепление материала. Часть III. Программирование на VBA в Excel. Глава 7. Особенности использования VBA в Excel. 7.1. Основные объекты VBA в Excel. Использование объектов Range и Selection. Свойства объекта Range. Методы объекта Range. Методы объекта Range, использующие команды Excel. Округление чисел. Приведение данных. Создание VBA-программ. Использование методов AutoFill при заполнении таблиц. 7.2. Использование возможностей VBA при непосредственных расчетах. Создание VBA-программ. Отклонение фактического уровня издержек обращения от плана за месяц _________________ 20__ г. Задачи на закрепление материала. 7.3. Финансовые функции. Расчет амортизации. Общие параметры функций для расчетов амортизации. Создание VBA-программы. Задача на закрепление материала. Глава 8. Построение диаграмм средстами VBA. 8.1. Построение гладких диаграмм. Диаграммы в Excel. Создание VBA-программы. 8.2. Построение круговых диаграмм и гистограмм. Создание VBA-программ. Глава 9. Базы данных в Excel. 9.1. Заполнение базы данных. Элементы управления. Создание VBA-программы. Задача на закрепление материала. 9.2. Конструирование пользовательского интерфейса. Создание VBA-программы. Конструирование интерфейса. Презентация. Задача на закрепление материала. Глава 10. Создание собственного головного меню[9]. Создание меню с помощью VBA. Фрагмент таблицы идентификаторов встроенных команд меню. Литература. Примечания. →

Параллельное и распределенное программирование на С++

Введение. Этапы большого пути. Подход. Почему именно С++ Библиотеки для параллельного и распределенного программирования. Новый единый стандарт спецификаций UNIX. Для кого написана эта книга. Среды разработки. Дополнительный материал. Диаграммы UML. Профили программы. Параграфы. Тестирование кода и его надежность. Ждем ваших отзывов! Благодарности. Преимущества параллельного программирования. Что такое параллелизм. Два основных подхода к достижению параллельности. Преимущества параллельного программирования. ... Простейшая модель параллельного программирования (PRAM). Простейшая классификация схем параллелизма. Преимущества распределенного программирования. Простейшие модели распределенного программирования. Мультиагентные распределенные системы. Минимальные требования. Декомпозиция. Связь. Синхронизация. Базовые уровни программного параллелизма. Параллелизм на уровне инструкций. Параллелизм на уровне подпрограмм. Параллелизм на уровне объектов. Параллелизм на уровне приложений. Отсутствие языковой поддержки параллелизма в С++ Варианты реализации параллелизма с помощью С++ Стандарт MPI. PVM: стандарт для кластерного программирования. Стандарт CORBA. Реализации библиотек на основе стандартов. Среды для параллельного и распределенного программирования. Резюме. Проблемы параллельного и распределенного программирования. Кардинальное изменение парадигмы. Проблемы координации. Проблема № 1 : «гонка» данных. Проблема № 2: бесконечная отсрочка. Проблема №3: взаимоблокировка. Проблема №4: трудности организации связи. Отказы оборудования и поведение ПО. Негативные последствия излишнего параллелизма и распределения. Выбор архитектуры. Различные методы тестирования и отладки. Связь между параллельным и распределенным проектами. Резюме. Разбиение С++ программ на множество задач. Определение процесса. Два вида процессов. Блок управления процессами. Анатомия процесса. Состояния процессов. Планирование процессов. Стратегия планирования. Использование утилиты ps. Установка и получение приоритета процесса. Переключение контекста. Создание процесса. Отношения между родительскими и сыновними процессами. Утилита pstree. Использование системной функции fork(). Использование семейства системных функций exec. Функции execl (). Функции execv (). Определение ограничений для функций exec (). Чтение и установка переменных среды. Использование POSIX-функций для порождения процессов. Идентификация родительских и сыновних процессов с помощью функций управления процессами. Завершение процесса. Функции exit (), kill () и abort (). Ресурсы процессов. Типы ресурсов. POSIX-функции для установки ограничений доступа к ресурсам. Асинхронные и синхронные процессы. Создание синхронных и асинхронных процессов с помощью функций fork (), exec (), system () и posix_spawn(). Функция wait (). Разбиение программы на задачи. Линии видимого контура. Резюме. Разбиение C++ программ на множество потоков. Определение потока. Контекстные требования потока. Сравнение потоков и процессов. Различия между потоками и процессами. Потоки, управляющие другими потоками. Преимущества использования потоков. Переключение контекста при низкой (ограниченной) доступности процессора. Возможности повышения производительности приложения. Простая схема взаимодействия между параллельно выполняющимися потоками. Упрощение структуры программы. Недостатки использования потоков. Потоки могут легко разрушить адресное пространство процесса. Один поток может ликвидировать целую программу. Потоки не могут многократно использоваться другими программами. Анатомия потока. Атрибуты потока. Планирование потоков. Состояния потоков. Планирование потоков и область конкуренции. Стратегия планирования и приоритет. Изменение приоритета потоков. Ресурсы потоков. Модели создания и функционирования потоков. Модель делегирования. Модель с равноправными узлами. Модель конвейера. Модель «изготовитель-потребитель». Модели SPMD и МРМD для потоков. Введение в библиотеку Pthread. Анатомия простой многопоточной программы. Компиляция и компоновка многопоточных программ. Создание потоков. Получение идентификатора потока. Присоединение потоков. Создание открепленных потоков. Использование объекта атрибутов. Создание открепленных потоков с помощью объекта атрибутов. Управление потоками. Завершение потоков. Точки аннулирования потоков. Очистка перед завершением. Управление стеком потока. Установка атрибутов планирования и свойств потоков. Установка области конкуренции потока. Использование функции sysconf (). Управление критическими разделами. Безопасность использования потоков и библиотек. Разбиение программы на несколько потоков. Использование модели делегирования. Использование модели сети с равноправными узлами. Использование модели конвейера. Использование модели «изготовитель-потребитель». Создание многопоточных объектов. Резюме. Синхронизация параллельно выполняемых задач. Координация порядка выполнения потоков. Взаимоотношения между синхронизируемыми задачами. Отношения типа старт-старт (CC). Отношения типа финиш-старт (ФС). Отношения типа старт-финиш (СФ). Отношения типа финиш-финиш (ФФ). Синхронизация доступа к данным. Модель РРАМ. Параллельный и исключающий доступ к памяти. Что такое семафоры. Операции по управлению семафором. Мьютексные семафоры. Использование мьютексного атрибутного объекта. Использование мьютексных семафоров для управления критическими разделами. Блокировки для чтения и записи. Использование блокировок чтения-записи для реализации стратегии доступа. Условные переменные. Использование условных переменных для управления отношениями синхронизации. Объектно-ориентированный подход к синхронизации. Резюме. Объединение возможностей параллельного программирования и C++ средств на основе PVM. Классические модели параллелизма, поддерживаемые системой PVM. Библиотека PVM для языка С++ Компиляция и компоновка C++/PVM-nрограмм. Выполнение PVM-программы в виде двоичного файла. Запуск PVM-программ c помощью PVM-консоли. Запуск PVM-программ c помощью XPVM. Требования к PVM-программам. Объединение динамической С++-библиотеки c библиотекой PVM. Методы использования PVM-задач. Реализация модели SPMD (SIMD) c помощью PVM-и С++-средств. Реализация модели MPMD (MIMD) с помощью PVM-и С++-средств. Базовые механизмы PVM. Функции управления процессами. Упаковка и отправка сообщений. Доступ к стандартному входному потоку (stdin) и стандартному выходному потоку (stdout) со стороны PVM-задач. Получение доступа к стандартному выходному потоку (cout) из сыновней задачи. Резюме. Обработка ошибок, исключительных ситуаций и надежность программного обеспечения. Надежность программного обеспечения. Отказы в программных и аппаратных компонентах. Определение дефектов в зависимости от спецификаций ПО. Обработка ошибок или обработка исключительных ситуаций? Надежность ПО: простой план. План А: модель возобновления, план Б: модель завершения. Использование объектов отображения для обработки ошибок. Механизмы обработки исключительных ситуаций в С++ Классы исключений. Классы runtime__error. Классы logic_error. Выведение новых классов исключений. Защита классов исключений от исключительныхситуаций. Диаграммы событий, логические выражения и логические схемы. Резюме. Распределенное объектно-ориентированное программирование. Декомпозиция задачи и инкапсуляция ее решения. Взаимодействие между распределенными объектами. Синхронизация взаимодействия локальных и удаленных объектов. Обработка ошибок и исключений в распределенной среде. Доступ к объектам из других адресных пространств. . IOR-доступ к удаленным объектам. Брокеры объектных запросов (ORB). Язык описания интерфейсов (IDL):более «пристальный» взгляд на CORBA-объекты. Анатомия базовой CORBA-программы потребителя. Анатомия базовой CORBA-программы изготовителя. Базовый nроект CORBA-приложения. IDL-компилятор. Получение IOR-ссылки для удаленных объектов. Служба имен. Использование службы имен и создание именных контекстов. Служба имен «потребитель-клиент». Подробнее об объектных адаптерах. Хранилища реализаций и интерфейсов. Простые расnределенные Web-службы, использующие CORBA-спецификацию. Маклерская служба. Парадигма «клиент-сервер». Резюме. Реализация моделей SPMD и MPMD с помощью шаблонов и MPI-программирования. Декомпозиция работ для MPI-интерфейса. Дифференциация задач по рангу. Группирование задач по коммуникаторам. Анатомия MPI-задачи. Использование шаблонных функций для представления MPI-задач. Реализация шаблонов и модельБРМО (типы данных). Использование полиморфизмадля реализации MPMD-модели. Введение MPMD-модели c помощью функций -объектов. Как упростить взаимодействие между MPI-задачами. Перегрузка операторов «<<» и «>>» для организации взаимодействия между MPI-задачами. Резюме. Визуализация проектов параллельных и распределенных систем. Визуализация структур. Классы и объекты. Отображение информации об атрибутах и операциях класса. Организация атрибутов и операций. Шаблонные классы. Отношения между классами и объектами. Интерфейсные классы. Организация интерактивных объектов. Отображение параллельного поведения. Сотрудничество объектов. Процессы и потоки. Отображение нескольких потоков выполнения и взаимодействия между ними. Последовательность передачи сообщений между объектами. Деятельность объектов. Конечные автоматы. Параллельные подсостояния. Распределенные объекты. Визуализация всей системы. Визуализация развертывания систем. Архитектура системы. Резюме. Проектирование компонентов для поддержки параллелизма. Как воспользоваться преимуществами интерфейсных классов. Подробнее об объектно-ориентированном взаимном исключении и интерфейсных классах. «Полуширокие» интерфейсы. Поддержка потокового представления. Перегрузка операторов "«" и "»" для PVM-потоков данных. Пользовательские классы, создаваемые для обработки PVM-потоков данных. Объектно-ориентированные каналы и FIFO-очереди как базовые элементы низкого уровня. Связь каналов c iostream-объектами с помощью дескрипторов файлов. Доступ к анонимным каналам c использованием итератора ostream_iterator. FIFO-очереди (именованные каналы), Интерфейсные FIFO-классы. Каркасные классы. Резюме. Реализация агентно-ориентированных архитектур. Что такое агенты. Агенты: исходное определение. Типы агентов. В чем состоит разница между объектами и агентами. Понятие об агентно-ориентированном программировании. Роль агентов в распределенном программировании. Агенты и параллельное программирование. Базовые компоненты агентов. Когнитивные структуры данных. Методы рассуждений. Реализация агентов в С++ Типы данных предположений и структуры убеждений. Класс агента. Цикл активизации агента. Простая автономность. 12.6. Резюме. Реализация технологии «классной доски» с использованием PVM-средств, потоков и компонентов. Модель «классной доски». Методы структурирования «классной доски». Анатомия источника знаний. Стратегии управления для «классной доски». Реализация модели «классной доски» с помощью CORBA-объектов. Пример использования CORBA-объекта «классной доски». Реализация интерфейсного класса black_board. Порождение источников знаний в конструкторе «классной доски». Порождение источников знаний с помощью PVM-задач. Связь «классной доски» и источников знаний. Активизация источников знаний с помощью POSIX-функции spawn(). Реализация модели «классной доски» с помощью глобальных объектов. Активизация источников знаний с помощью потоков. Резюме. Приложение A. Диаграммы классов и объектов. Диаграммы взаимодейс т вия. Диаграммы сотрудничества. Диаграммы последовательностей. A.2.3. Диаграммы видов деятельности. A.3. Диаграммы состояний. A.4. Диаграммы пакетов. Приложение Б [26]. posix_spawn, posix_spawnp. posix_spawn_file_actions_addclose, posix_spawn_file_actions_addopen. posix_spawn_file_actions_adddup2. posix_spawn_file_actions_destroy, posix_spawn_file_actions_init. posix_spawnattr_destroy, posix_spawnattr_init. posix_spawnattr_getflags, posix_spawnattr_setflags. posix_spawnattr_getpgroup, posix_spawnattr_setpgroup. posix_spawnattr_getschedparam, posix_spawnattr_setschedparam. posix_spawnattr_getschedpolicy, posix_spawnattr_setschedpolicy. posix_spawnattr_getsigdefault, posix_spawnattr_setsigdefault. posix_spawnattr_getsigmask, posix_spawnattr_setsigmask. pthread_attr_destroy, pthread_attr_init. pthread_attr_getdetachstate, pthread_attr__setdetachstate. pthread_attr_getguardsize, pthread_attr_setguardsize. pthread_attr_getinheritsched, pthread_attr_setinheritsched. pthread_attr_getschedparam, pthread_attr_setschedparam. pthread_attr_getschedpolicy, pthread_attr_setschedpolicy. pthread_cancel. pthread_cleanup_pop, pthread_cleanup_push. pthread_cond_broadcast(),pthread_cond_signal(). pthread_cond_destroy, pthread_cond_init. pthread_cond_timedwait, pthread_cond_wait. pthread_condattr_destroy, pthread_condattr_init. pthread_condattr_getpshared, pthread_condattr_setpshared. pthread_create. pthread_detach. pthread_exit. pthread_getconcurrency, pthread_setconcurrency. pthread_getschedparam, pthread_setschedparam. pthread_join. pthread_mutex_destroy, pthread_mutex_init. pthread_mutex_getprioceiling, pthread_mutex_setprioceiling. pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock. pthread_mutex_timedlock. pthread_mutexattr_destroy. pthread_mutexattr_getprioceiling, pthread_mutexattr_setprioceiling. pthread_mutexattr_setprotocol, pthread_mutexattr_getprotocol. pthread_mutexattr_getpshared, pthread_mutexattr_setpshared. pthread_mutexattr_gettype, pthread_mutexattr_settype. pthread_once. pthread_rwlock_destroy, pthread_rwlock_init. pthread_rwlock_rdlock, pthread_rwlock_tryrdlock. pthread_rwlock_timedrdlock. pthread_rwlock_timedwrlock. pthread_rwlock_trywrlock, pthread_rwlock_wrlock. pthread_rwlock_unlock. pthread_rwlockattr_destroy, pthread_rwlockattr_init. pthread_rwlockattr_getpshared, pthread_rwlockattr_setpshared. pthread_self. pthread_setcancelstate, pthread_setcanceltype, pthread_testcancel. pthread_setschedprio. s. →