- •Оглавление
- •Об авторе
- •Благодарности
- •Предисловие
- •Глава 1. Держим оборону
- •На пути к хорошему коду
- •Готовьтесь к худшему
- •Что такое защитное программирование?
- •Этот страшный, ужасный мир
- •Технологии защитного программирования
- •Выберите хороший стиль кодирования и пользуйтесь крепкой архитектурой
- •Пишите код без спешки
- •Не верьте никому
- •Стремитесь к ясности, а не к краткости
- •Не позволяйте никому лезть туда, где ему нечего делать
- •Включайте вывод всех предупреждений при компиляции
- •Пользуйтесь средствами статического анализа
- •Применяйте безопасные структуры данных
- •Проверяйте все возвращаемые значения
- •Аккуратно обращайтесь с памятью (и другими ценными ресурсами)
- •Инициализируйте все переменные там, где вы их объявили
- •Объявляйте переменные как можно позже
- •Пользуйтесь стандартными средствами языка
- •Пользуйтесь хорошими средствами регистрации диагностических сообщений
- •Выполняйте приведение типов с осторожностью
- •Подробности
- •Ограничения
- •Какие ограничения налагать
- •Снятие ограничений
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 2. Тонкий расчет
- •Да в чем проблема?
- •Знайте своих клиентов
- •Что такое хорошее представление?
- •Размещение скобок
- •Скобки в стиле K&R
- •Расширенный стиль скобок
- •Стиль Уайтсмита (с отступами)
- •Другие стили скобок
- •Единственно верный стиль
- •Внутрифирменные стили (и когда их придерживаться)
- •Установка стандарта
- •Религиозные войны?
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 3. Что в имени тебе моем?
- •Зачем нужны хорошие имена?
- •Каким объектам мы даем имена?
- •Игра в названия
- •Описательность
- •Техническая корректность
- •Идиоматичность
- •Тактичность
- •Технические подробности
- •Имена переменных
- •Имена функций
- •Имена типов
- •Пространства имен
- •Имена макросов
- •Имена файлов
- •Роза пахнет розой
- •Соблюдайте единообразие
- •Связывайте имя с содержимым
- •Извлекайте выгоду из выбора имени
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 4. Литературоведение
- •Самодокументируемый код
- •Техника написания самодокументируемого кода
- •Пишите простой код с хорошим форматированием
- •Выбирайте осмысленные имена
- •Разбивайте код на самостоятельные функции
- •Выбирайте содержательные имена типов
- •Применяйте именованные константы
- •Выделяйте важные фрагменты кода
- •Объединяйте взаимосвязанные данные
- •Снабжайте файлы заголовками
- •Правильно обрабатывайте ошибки
- •Пишите осмысленные комментарии
- •Практические методологии самодокументирования
- •Грамотное программирование
- •Инструментарий документирования
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 5. Заметки на полях
- •Что есть комментарий в коде?
- •Как выглядят комментарии?
- •Сколько комментариев требуется?
- •Что помещать в комментарии?
- •Не нужно описывать код
- •Не подменяйте код
- •Как сделать комментарии полезными
- •Не отвлекаться
- •На практике
- •Замечание об эстетичности
- •Единообразие
- •Четкие блочные комментарии
- •Отступы в комментариях
- •Комментарии в конце строки
- •Помощь в чтении кода
- •Стиль должен обеспечивать легкость сопровождения
- •Границы
- •Флажки
- •Комментарии в заголовке файла
- •Работа с комментариями
- •Помощь при написании программ
- •Заметки об исправлении ошибок
- •Устаревание комментариев
- •Сопровождение и бессодержательные комментарии
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 6. Людям свойственно ошибаться
- •Откуда что берется
- •Механизмы сообщения об ошибках
- •Без обработки ошибок
- •Возвращаемые значения
- •Переменные, содержащие состояние ошибки
- •Исключения
- •Сигналы
- •Обнаружение ошибок
- •Обработка ошибок
- •Когда обрабатывать ошибки
- •Варианты реагирования
- •Последствия для кода
- •Подымаем скандал
- •Управление ошибками
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 7. Инструментарий программиста
- •Что такое инструмент программирования?
- •А зачем они нужны – инструменты?
- •Электроинструменты
- •Выясните, каковы его возможности
- •Научитесь им управлять
- •Выясните, для каких задач он пригоден
- •Убедитесь, что он работает
- •Имейте четкие данные о том, как получить дополнительные сведения
- •Узнайте, как получить новые версии
- •Какой инструмент необходим?
- •Средства редактирования исходного кода
- •Средства построения кода
- •Инструменты для отладки и тестирования
- •Средства поддержки языка
- •Инструменты различного назначения
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 8. Время испытаний
- •Проверка на подлинность
- •Кто, что, когда, зачем?
- •Зачем тестировать
- •Кому тестировать
- •В чем состоит тестирование
- •Когда тестировать
- •Типы тестирования
- •Выбор контрольных примеров для блочного тестирования
- •Архитектура и тестирование
- •Руками не трогать!
- •Анатомия провала
- •Справлюсь ли я сам?
- •Система контроля ошибок
- •Обсуждение ошибок
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 9. Поиск ошибок
- •Реальные факты
- •Природа этого зверя
- •Взгляд с высоты птичьего полета
- •Взгляд с поверхности земли
- •Взгляд из глубины
- •Борьба с вредителями
- •Обходная дорога
- •Правильный путь
- •Охота за ошибками
- •Ошибки этапа компиляции
- •Ошибки этапа исполнения
- •Как исправлять ошибки
- •Профилактика
- •Отладчик
- •Средство проверки доступа к памяти
- •Трассировщик системных вызовов
- •Дамп памяти
- •Журналирование
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 10. Код, который построил Джек
- •Языковые барьеры
- •Интерпретируемые языки
- •Компилируемые языки
- •Делаем слона из мухи
- •Выполнение сборки
- •Что должна уметь хорошая система сборки?
- •Простота
- •Единообразие
- •Повторяемость и надежность
- •Атомарность
- •Борьба с ошибками
- •Механика сборки
- •Выбор целей
- •Уборка
- •Зависимости
- •Автоматическая сборка
- •Конфигурация сборки
- •Рекурсивное применение make
- •Мастер на все руки
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 11. Жажда скорости
- •Что такое оптимизация?
- •От чего страдает оптимальность кода?
- •Доводы против оптимизации
- •Альтернативы
- •Нужна ли оптимизация
- •Технические подробности
- •Убедитесь, что нужна оптимизация
- •Определите самую медленную часть кода
- •Тестирование кода
- •Оптимизация кода
- •После оптимизации
- •Методы оптимизации
- •Конструктивные изменения
- •Модификация кода
- •Как писать эффективный код
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 12. Комплекс незащищенности
- •Риски
- •Наши оппоненты
- •Оправдания, оправдания
- •Ощущение незащищенности
- •Опасный проект и архитектура
- •Переполнение буфера
- •Встроенные строки запросов
- •Условия гонки
- •Целочисленное переполнение
- •Дела защитные
- •Технология установки системы
- •Технология конструирования программного обеспечения
- •Технологии реализации кода
- •Технологии процедуры
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 13. Важность проектирования
- •Программирование как конструкторская работа
- •Что нужно проектировать?
- •Хороший проект программного продукта
- •Простота
- •Элегантность
- •Модульность
- •Хорошие интерфейсы
- •Расширяемость
- •Избегайте дублирования
- •Переносимость
- •Идиоматичность
- •Документированность
- •Как проектировать код
- •Методы и процедуры проектирования
- •Инструменты проектирования
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 14. Программная архитектура
- •Что такое программная архитектура?
- •План программы
- •Точки зрения
- •Где и когда этим заниматься?
- •Для чего она применяется?
- •Компоненты и соединения
- •Какими качествами должна обладать архитектура?
- •Архитектурные стили
- •Без архитектуры
- •Многоуровневая архитектура
- •Архитектура с каналами и фильтрами
- •Архитектура клиент/сервер
- •Компонентная архитектура
- •Каркасы
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 15. Программное обеспечение – эволюция или революция?
- •Гниение программного обеспечения
- •Тревожные симптомы
- •Как развивается код?
- •Вера в невозможное
- •Как с этим бороться?
- •Как писать новый код
- •Сопровождение существующего кода
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 16. Кодеры
- •Мартышкин труд
- •Нетерпеливый
- •Кодер (Code Monkey)
- •Гуру
- •Псевдогуру
- •Высокомерный гений
- •Ковбой
- •Плановик
- •Ветеран
- •Фанатик
- •Монокультурный программист
- •Лодырь
- •Руководитель поневоле
- •Идеальный программист
- •И что из этого следует?
- •Для глупцов
- •Резюме
- •План действий
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 17. Вместе мы – сила
- •Команды – общий взгляд
- •Организация команды
- •Методы управления
- •Разделение ответственности
- •Организация и структура кода
- •Инструменты для групповой работы
- •Болезни, которым подвержены команды
- •Вавилонская башня
- •Диктатура
- •Демократия
- •Большой Каньон
- •Зыбучие пески
- •Лемминги
- •Личное мастерство и качества, необходимые для работы в команде
- •Общение
- •Скромность
- •Разрешение конфликтов
- •Обучение и приспособляемость
- •Знание пределов своих возможностей
- •Принципы групповой работы
- •Коллективное владение кодом
- •Нормы кодирования
- •Определите, что считать успехом
- •Установите ответственность
- •Избегайте истощения
- •Жизненный цикл команды
- •Создание команды
- •Рост команды
- •Групповая работа
- •Роспуск команды
- •Резюме
- •План действий
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 18. Защита исходного кода
- •Управление версиями исходного кода
- •Контроль версий
- •Контроль доступа
- •Работа с хранилищем
- •Пусть растут деревья
- •Краткая история систем контроля за исходным кодом
- •Управление конфигурацией
- •Резервное копирование
- •Выпуск исходного кода
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 19. Спецификации
- •Что же это такое, конкретно?
- •Типы спецификаций
- •Спецификация требований
- •Функциональная спецификация
- •Спецификация системной архитектуры
- •Спецификация интерфейса пользователя
- •Проектная спецификация
- •Спецификация тестирования
- •Что должны содержать спецификации?
- •Процесс составления спецификаций
- •Почему мы не пишем спецификации?
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Когда проводить рецензирование?
- •Нужно ли рецензировать
- •Какой код рецензировать
- •Проведение рецензирования кода
- •Рецензирование на собраниях
- •Интеграционное рецензирование
- •Пересмотрите свое отношение
- •Позиция автора
- •Позиция рецензента
- •Идеальный код
- •За пределами рецензирования кода
- •Резюме
- •Контрольный список
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 21. Какой длины веревочка?
- •Выстрел в темноте
- •Почему трудно делать оценки?
- •Под давлением
- •Практические способы оценки
- •Игры с планами
- •Не отставай!
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 22. Рецепт программы
- •Стили программирования
- •Структурное программирование
- •Функциональное программирование
- •Логическое программирование
- •Рецепты: как и что
- •Процессы разработки
- •Каскадная модель
- •SSADM и PRINCE
- •Создание прототипов
- •Итеративная и инкрементная разработка
- •Спиральная модель
- •Другие процессы разработки
- •Спасибо, хватит!
- •Выбор процесса
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 23. За гранью возможного
- •Программирование приложений
- •Коробочные продукты
- •Заказные приложения
- •Программирование игр
- •Системное программирование
- •Встроенное программное обеспечение
- •Программирование масштаба предприятия
- •Численное программирование
- •И что дальше?
- •Резюме
- •Контрольные вопросы
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 24. Что дальше?
- •Но что же дальше?
- •Ответы и обсуждение
- •Глава 1. Держим оборону
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 2. Тонкий расчет
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 3. Что в имени тебе моем?
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 4. Литературоведение
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 5. Заметки на полях
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 6. Людям свойственно ошибаться
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 7. Инструментарий программиста
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 8. Время испытаний
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 9. Поиск ошибок
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 10. Код, который построил Джек
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 11. Жажда скорости
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 12. Комплекс незащищенности
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 13. Важность проектирования
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 14. Программная архитектура
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 15. Программное обеспечение – эволюция или революция?
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 16. Кодеры
- •Вопросы для размышления
- •Глава 17. Вместе мы – сила
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 18. Защита исходного кода
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 19. Спецификации
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 20. Рецензия на отстрел
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 21. Какой длины веревочка?
- •Вопросы для размышления
- •Вопросы личного характера
- •Глава 22. Рецепт программы
- •Вопросы для размышления
- •Глава 23. За гранью возможного
- •Вопросы для размышления
- •Вопросы личного характера
- •Библиография
- •Алфавитный указатель
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
||
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
|
P |
|
|
|
|
|
NOW! |
o |
||
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|||
|
|
|
|
to |
|
|
|
|
|
w Click |
|
|
|
560m |
|||||
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
. |
|
|
|
|
|
.c |
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
df |
|
|
n |
e |
||
|
|
|
|
-xcha |
|
|
|
Программирование игр
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Глава 23. За гранью возможногоClick |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Захватывающий и чарующий мир программирования игр – это специ% фическая форма разработки приложений, обычно в коробочном виде.
Взначительной мере борьба ведется с помощью подкупающего марке% тинга и очень удачной идеи игры. Это тонкая граница между выдаю% щимися, успешными играми и теми, которые не вышли в призеры.
Вэтих играх часто создаются грандиозные 3D%среды от первого лица, обеспечивающие полный эффект присутствия. Чтобы создать захва% тывающие ощущения, графические возможности аппаратуры исполь%
Краткая информация
Профессиональная разработка игр – это очень интересно, но здесь существует высокая конкуренция, и разработчикам приходится следить за новейшими технологиями, укладываться в немыслимые сроки и удовлетворять не подлежащим обсуждению требованиям, меняющимся в последнюю минуту. Кровью, потом и слезами пишутся программы, встречающие суровый прием у публики и жесткую критику в специальной прессе. Однако эта работа может приносить глубокое удовлетворение – в результате вы создаете нечто такое, что видят и понимают другие люди, что доставляет им радость.
Тадеус (профессиональный программист компьютерных игр)
Типичные продукты
От первого лица, полный эффект присутствия, 3D%игры, стра% тегии, логические сетевые игры (пазлы).
Целевая платформа
Настольные ПК, игровые консоли, мобильные устройства (PDA и мобильные телефоны), аркадные машины.
Среда разработки
Для специализированных игровых платформ (в том числе старших моделей графических карт в ПК) созданы среды раз% работки, помогающие использовать их мощь. Тем не менее для того чтобы извлечь из платформы все, на что она способ% на, нужны очень талантливые разработчики.
Типичные задачи и проблемы
Получить отличное качество игры; сбалансировать возмож% ности, реакцию пользователей, эстетические достоинства, ат% мосферу и сложность. Хорошая игра имеет фабулу, увлекаю% щую игрока.
Для утилизации возможностей платформы требуется опти% мизация.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
Системноеm |
программирование |
|||||
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
561Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
зуются на полную мощь, а из ЦП выжимается все, что можно, для управления картами, противниками, пазлами путем серьезного моде% лирования физики движущихся объектов. Все это нужно координиро% вать в реальном времени, что максимально использует аппаратные возможности. Большое значение в программировании игр имеет опти% мизация кода в зависимости от платформы исполнения. По мере появ% ления более быстрой аппаратуры проблема не снимается; чтобы выде% литься среди других игр, нужна дополнительная оптимизация, чтобы создать более реалистичные ощущения на новых платформах. В этой области очень важно оставаться на переднем крае и применять новей% шие технологии для достижения особых эффектов.
В современных командах, разрабатывающих игры, состав участников больше подошел бы для создания голливудских фильмов, а не обыч% ной бухгалтерской программы. Тут и художники, и проектировщики уровней, и художники%раскадровщики, и концепт%дизайнеры.
Целевой платформой может быть достаточно навороченный ПК или специальная игровая консоль. Аппаратная часть таких машин может ускоренно осуществлять многие графические операции, а специаль% ные утилиты управляют их мощью. Изготовители консолей предостав% ляют наборы для разработки (специальные версии аппаратуры и осо% бые программные средства), облегчающие создание продуктов, загруз% ку кода, тестирование, отладку и позволяющие обойти аппаратную за% щиту, которая препятствовала бы разработке.
Игры со многими участниками предоставляют более богатые условия. Ко всему прочему добавляются сетевое взаимодействие и ухищрения с целью обеспечить приемлемое время реакции на низкоскоростных соединениях Интернета.
Качество конечного продукта определяется атмосферой игры. Дово% дится до ума все, что может положительно повлиять на восприятие иг% ры: разделение на уровни, физические модели, графика, цвет нижнего белья. Не упускается ничего. Можно написать прекрасный код, про% грамма никогда не будет зависать, будет делать все, что от нее требова% лось, и работать очень эффективно. Но если в игре нет особой искры, делающей ее захватывающей, успеха ей не видать. Хитрая штука.
Системное программирование
Приложения работают поверх богатых системных библиотек: различ% ных уровней кода, обеспечивающих сетевое взаимодействие, графиче% ские интерфейсы, многозадачность, доступ к файлам, мультимедийные возможности, управление периферийными устройствами, связь между процессами и т. д. Если прикладные программисты получают сущест% венную поддержку от системы, то кто%то должен снабдить систему этими средствами поддержки. В этом и состоит системное программирование.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
||
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
|
P |
|
|
|
|
|
NOW! |
o |
||
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|||
|
|
|
|
to |
|
|
|
|
|
w Click |
|
|
|
562m |
|||||
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
. |
|
|
|
|
|
.c |
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
df |
|
|
n |
e |
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Глава 23. За гранью возможногоClick |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Краткая информация
Янаписал стек протоколов шины USB для закрытой ОС.
Ядолжен был изучить операционную систему, аппаратуру USB
иUSB#протокол, так что разбираться пришлось со многими вещами.
Япозаботился о производительности, чтобы система хорошо работала. Выполняя функции посредника, я абстрагировал
аппаратные интерфейсы и создал аккуратный API, которым можно было воспользоваться в приложениях.
Дополнительные сложности были вызваны необходимостью сделать все независимым от платформы.
Дэйв (разработчик системных компонент)
Типичные продукты
Операционные системы, драйверы устройств, оконные менед% жеры, графические подсистемы.
Целевая платформа
Поскольку в каждой среде нужна какая%то поддержка этапа исполнения, программное обеспечение системного уровня есть почти в каждом электронном устройстве. Системное программ% ное обеспечение необходимо как самому маленькому встроен% ному устройству, так и самому большому мэйнфрейму.
Среда разработки
Новые драйверы устройств и компоненты операционной сис% темы могут нарушить нормальную работу компьютера и сде% лать систему нестабильной, поэтому часто разработку ведут на одной машине, а выполняют код на другой. Самым распро% страненным языком в этой области является C, хотя библиоте% ки иногда пишут на других языках (популярностью пользует% ся C++ как предназначенный для системных разработок).
Типичные задачи и проблемы
Здесь главная задача – стабильность, поскольку речь идет о создании фундаментальных блоков целой вычислительной среды. Если приложение может аварийно завершиться и при этом сохранить результаты работы и восстановиться, то драй% веру устройства такая роскошь обычно недоступна; он обязан корректно работать все время, пока запущен. Это время мо% жет быть очень продолжительным, поэтому даже малейшие утечки памяти могут вызвать серьезные проблемы.
Код должен быть эффективным (в достаточной мере) в отно% шении как памяти, так и скорости, а также должным образом приспособлен к особенностям функциональной среды.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
Встроенноеm |
программное обеспечение |
|||||
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
563Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Обычно системное программирование осуществляется и для рабочих станций тоже, но не предназначено конечным пользователям. Систем% ное программное обеспечение предназначено разработчикам приложе% ний; его публичное лицо составляют API, используемые более высоки% ми уровнями программ. Системное ПО связано с логикой низкого уровня, взаимодействующей с компьютером на самых базовых прин% ципах, и со вспомогательными структурами промежуточного уровня, которые, хотя и не работают напрямую с аппаратурой, но предостав% ляют важные сервисы для всей системы.
Типичная работа в этой сфере заключается в написании драйверов (управляющих такими устройствами, как принтеры, носители инфор% мации, устройства вывода и т. п.), создании библиотек общего доступа и средств управления дефицитными ресурсами, реализации операци% онных систем, действительно управляющих компьютером, и обеспече% нии таких компонент, как файловые системы и стеки сетевых прото% колов. В этот разряд могут попасть даже компиляторы и пакеты про% грамм установки, поскольку они обеспечивают работу программистов приложений и тесно связаны со средой исполнения программы.
Встроенное программное обеспечение
Компьютерные технологии появляются во всех областях нашей жиз% ни, даже если мы этого не замечаем. Мы постоянно пользуемся разны% ми устройствами и приспособлениями, от микроволновых печей до ча% сов, от радиоприемников до термостатов. Эти электронные приборы бытовой техники требуют для своего функционирования программно% го обеспечения. Как правило, пользователь устройства не видит его управляющей программы. Встроенное программное обеспечение есть не только в бытовой технике: программами управляются все устройст% ва с микроконтроллерами, например лабораторные приборы или ма% шинки, выдающие квитанции на парковке. Мы должны написать про% граммы, встраиваемые в аппаратные устройства: встроенное про% граммное обеспечение.
Создатели встроенного программного обеспечения работают в жестких условиях:
•Обычно ресурсы весьма дефицитны: низкая мощность ЦП и/или малый объем памяти. Ограничения памяти относятся как к ROM (где содержится образ программы), так и RAM (памяти, в которой выполняется код и хранятся его данные). На платформах с ограни% ченным объемом памяти приходится с большим трудом впихивать ПО в доступное пространство. Иногда это требует весьма изобрета% тельных (и героических) усилий, например динамической деком% прессии кода программы или данных.
•Средства интерфейса пользователя весьма ограничены: как органи%
зовать все операции пользователя с помощью двух кнопок и свето%
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
||
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
|
P |
|
|
|
|
|
NOW! |
o |
||
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|||
|
|
|
|
to |
|
|
|
|
|
w Click |
|
|
|
564m |
|||||
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
. |
|
|
|
|
|
.c |
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
df |
|
|
n |
e |
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Глава 23. За гранью возможногоClick |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
диода? На практике интерфейса пользователя может вовсе не суще% ствовать; никакого прямого взаимодействия с пользователем нет, а программа должна просто работать.
Эти ограничения оказывают глубокое воздействие на характер разра% батываемого кода. К сожалению, во встроенном программном обеспе% чении (чаще, чем в других ситуациях) приходится жертвовать чисто% той кода ради получения работоспособного продукта. Если код быст% рый и умещается в ПЗУ, это важнее, чем его идеологическая коррект% ность, но большой размер и медленная работа.
Встроенные программы должны решать одну%единственную задачу и надежно работать. Присутствие программного обеспечения не долж% но быть заметно; устройство просто должно постоянно работать. Отказ
Краткая информация
Люблю работать с железом – здесь нужно действительно думать головой. Нужен плотный код
и четкое представление о том, как работает устройство. Отладка кода может оказаться непростым делом, но такие задачи и делают эту работу интересной.
Грэм (разработчик встроенного ПО)
Типичные продукты
Управляющие программы для стиральных машин, высокока% чественной аудио/видеоаппаратуры, мобильных телефонов.
Целевая платформа
Небольшие заказные устройства с крайне ограниченными ре% сурсами и скудными пользовательскими интерфейсами.
Среда разработки
Поскольку вы работаете с заказными устройствами, инстру% ментарий тоже часто оказывается заказным. Зачастую он да% леко не такой совершенный, как у программистов приложе% ний. (По мере развития рынка в этой области наблюдается улучшение.) Код разрабатывается в среде с кросс%компиляци% ей, где целевая платформа отличается от платформы разра% ботчика. (Ясно, что нельзя компилировать C%код на стираль% ной машине… пока.)
Для каждого конкретного устройства пишется специальная программа. Для встроенного программирования повсеместно используется C, исключая действительно низкий уровень, на котором прибегают к ассемблеру. C++ прокладывает путь в эту область, встречается также ADA.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
Встроенноеm |
программное обеспечение |
|||||
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
565Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Типичные задачи и проблемы
Здесь можно столкнуться с самыми разнообразными пробле% мами, что во многом зависит от того, с какой платформой вы работаете – готовой покупной или разрабатываемой самосто% ятельно. Есть проблемы программирования в реальном вре% мени (например, своевременная обработка аппаратных собы% тий и прерываний), непосредственного интерфейса с аппара% турой и управления соединениями с периферией, а также не% интересные низкоуровневые проблемы, такие как порядок байтов в слове и структура физической памяти.
Чтобы обеспечить надежность систем, требуется тщательное тестирование.1
1Тщательного тестирования требуют любые разрабатываемые про% граммы – не только встроенные. Во всех областях объем проводимо% го тестирования страдает от усердия маркетинговых и администра% тивных работников, не понимающих природы программного обеспе% чения. Однако настольные приложения проще обновить, чем микро% программы устройств.
программы, как правило, недопустим; в результате устройство может оказаться физически повреждено. Сравните это с настольным компью% тером, являющимся универсальной машиной. Он должен уметь рабо% тать с текстом, воспроизводить кинофильмы, показывать веб%сайты, читать электронную почту, управлять банковскими счетами и т. д. Пользователи привыкли к случайным авариям и некоторой неста% бильности. Маленькие неудобства перевешиваются мощью и гибко% стью. Со встроенными устройствами совсем другая история.
Хороший пример дает производство современных автомобилей. Транс% портные средства содержат массу встроенных систем, управляющих самыми разными вещами: двигателем, тормозной системой ABS, сред% ствами безопасности (такими как подушки и ремни безопасности), кли% матом, спидометром и т. п. Однако пользователям (в данном случае во% дителю и/или пассажирам) нет надобности знать о том, что под капо% том урчат какие%то микропроцессоры. Им нужно, чтобы машина ехала. Вот когда откажет система управления двигателем, пользователю при% дется узнать о существовании программного обеспечения! Или возьми% те мобильные телефоны. Очевидно, что это компьютерные устройства, но редкий покупатель воспринимает их в качестве компьютеров. Эти маленькие устройства обладают изрядной вычислительной мощностью, и все же существуют строгие границы функциональных возможностей, в рамках которых должно действовать программное обеспечение.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
||
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
|
P |
|
|
|
|
|
NOW! |
o |
||
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|||
|
|
|
|
to |
|
|
|
|
|
w Click |
|
|
|
566m |
|||||
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
. |
|
|
|
|
|
.c |
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
df |
|
|
n |
e |
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Глава 23. За гранью возможногоClick |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Встроенная система обычно представляет собой комбинацию малень% кого компьютера, некоторой специальной аппаратуры и операционной системы реального времени или простой управляющей программы. Она непосредственно управляет аппаратными средствами устройства. Обычно встроенные системы изготавливаются на заказ – для конкрет% ной аппаратуры и конкретных задач. В простых встроенных системах есть только одна выполняющаяся программа – никаких сложных мно% гопоточных программных средств, нет даже операционной системы.
Обычно код хранится в чипе памяти, доступном только для записи. Возможность его обновления существует редко, поэтому он должен корректно работать с первого раза. Если вы ошиблись, то шансов по% ставить версию 1.1 не будет. Одна простая ошибка, и ваше чудо техно% логии обернется провалом.
В последнее время память и вычислительная мощность ЦПУ подеше% вели, и на рынке появляется все больше массовых устройств. Встроен% ная среда становится мощнее, и ограничения на ресурсы ослабляются. Тем не менее всегда будет существовать потребность в очень малень% ких устройствах с ограниченной мощностью, которые все же решают свои задачи.
Программирование приложений для наладонных устройств типа PDA можно считать либо уровнем встроенных программ, либо уровнем приложений – в зависимости от ваших вкусов.
Программирование распределенных систем
Распределенные системы состоят из нескольких компьютеров. Как мы увидим позднее, Всемирная паутина фактически представляет собой огромную распределенную систему, в которой информация хранится на многочисленных компьютерах, разбросанных по разным континен% там, а приложения удаленно загружаются с помощью веб%броузера. Хотя дело не ограничивается броузерами. Архитектуры из нескольких машин используются во многих ситуациях. Проектирование и созда% ние распределенных систем выдвигает целый ряд новых проблем.
Сделать программную систему распределенной может понадобиться по ряду причин. Возможно, одни компьютеры лучше, чем другие, по% дойдут для решения определенных задач. Возможно, система будет испытывать большую нагрузку, и для повышения эффективности ее целесообразно распределить между другими машинами в сети. Воз% можно, для некоторых машин существуют ограничения по физическо% му размещению, которые обусловливают распределение системы. Воз% можно, вам нужно организовать взаимодействие нового продукта с ис% торическими системами или старым оборудованием.
Задача в том, чтобы создать систему из нескольких программ, выпол% няющихся на разных машинах и работающих как единое целое. Со% единенные между собой с помощью сети, они могут физически разме%
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
|
o |
|
||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
Программированиеm |
распределенных систем |
||||||
|
|
|
|
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
567Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
щаться в одном помещении или находиться в разных концах света и использовать для связи Интернет.
Отдельные части должны быть как%то связаны вместе; программы должны обмениваться данными, и желательно вызывать функции на удаленных машинах, как если бы они локально компоновались с ко% дом. Это называют удаленным вызовом процедур (RPC), и такие воз% можности обеспечиваются рядом имеющихся технологий программ# ных средств промежуточного слоя (middleware). Они действуют в ка% честве брокеров при передаче данных между машинами, предоставляя возможности обнаружения сервисов на других машинах и взаимодей% ствия с ними, а также публикации своих сервисов, к которым могут обращаться другие программы. ПО промежуточного слоя управляет политикой взаимодействия, включающей вопросы безопасности (кому кого разрешено вызывать?), проблемы латентности в сети (что делать, если удаленный вызов функции выполняется слишком долго или ком% пьютер отключился?), выбор синхронного или асинхронного режима вызова удаленных функций и т. д.
В некоторых системах промежуточного слоя применяются объектно% ориентированные технологии, в других используется преимуществен% но процедурный подход. ПО промежуточного слоя является просто коммуникационным и допускает некоторую независимость от плат% формы. Когда на данной платформе выполняется ПО промежуточного слоя, клиентскому коду должно быть безразлично, какова платформа, к которой происходит обращение (хоть ZX spectrum), – вызов функ% ции должен выглядеть одинаково. Разумеется, проектируя распреде% ленную систему, вы выберете для каждой задачи наиболее подходя% щую аппаратную часть. Сомнительно, что вам встретится хоть один ZX spectrum!
Распространены такие системы промежуточного слоя, как CORBA, Java RMI, Microsoft DCOM и удаленный доступ .NET Remoting. С их помощью система разбивается на элементы интерфейса пользователя, бизнес%логику (реально работающий код) и необходимые средства хра% нения данных (например, база данных и механизм запросов). Клиент с интерфейсом пользователя может быть программой GUI или веб%ин% терфейсом. Это классическая многоярусная архитектура (описанная в разделе «Архитектура клиент/сервер» на стр. 355). Наблюдается также появление веб#API – методов обмена данными с сервисами, ко% торые используют стандартные веб%протоколы.
Грид#компьютинг (grid computing) и кластерные системы представ% ляют собой особые механизмы распределения, созданные для вычис% лений (о программировании вычислений см. ниже) и позволяющие создавать высокоэффективные распределенные вычислительные алго% ритмы. Кластеры являются тесно связанными системами; обычно ма% шины находятся в одном помещении, используют одинаковые аппа% ратное обеспечение и ОС и соединяются специфическим кластерным
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
||
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
|
P |
|
|
|
|
|
NOW! |
o |
||
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|||
|
|
|
|
to |
|
|
|
|
|
w Click |
|
|
|
568m |
|||||
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
. |
|
|
|
|
|
.c |
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
df |
|
|
n |
e |
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Глава 23. За гранью возможногоClick |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
промежуточным ПО. Гриды связаны менее тесно; они могут быт разне% сены географически и образовывать гетерогенную среду. Связь между ними организована через стандартные сетевые протоколы (например, HTTP/XML).
Краткая информация
Проект Smallpox, завершенный в 2003 году,
был грид#проектом, который должен был найти лекарство от оспы путем проверки огромного количества молекул потенциального лекарства. Это было сотрудничество ученых, университетов и бизнеса, которое выявило
44 хороших кандидата для лечения болезни.
Типичные продукты
В системе электронной торговли работа распределяется меж% ду клиентскими приложениями (веб%интерфейс, торговый киоск и/или система заказа по телефону), бизнес%логикой (управление запасами, реализация заказов и безопасных рас% четов) и общим хранилищем данных.
Целевая платформа
Различные компьютерные системы соединяются с помощью ПО промежуточного слоя, почти всегда действующего поверх стандартных сетевых протоколов.
Среда разработки
Имеется большое разнообразие. Все зависит от выбранных языков, типов объединяемых компьютеров и типа выбранно% го ПО промежуточного слоя. Интерфейсы с удаленным вызо% вом часто определяются с помощью какого%либо языка описа# ния интерфейсов (IDL) и компилируются в представление на языке реализации, которое обеспечивает весь механизм вызо% вов и ловушки для всех реализаций функций, к которым нужно подключаться.
Типичные задачи и проблемы
Правильный выбор распределения сервисов между компью% терами и ускорение связи между ними. Это оказывает силь% ное влияние на масштабируемость распределенной системы. Система, справляющаяся с несколькими транзакциями в сут% ки, может не справиться с 100 транзакциями в минуту. Это вызывает необходимость тщательного проектирования. Кро% ме того, нужно решать проблемы доступности компьютеров и корректного поведения, когда один из компьютеров отклю% чается от сети.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
|
o |
|
||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
Программированиеm |
веб7приложений |
||||||
|
|
|
|
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
Программирование вебNприложений
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
569Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
В 1990 году Тим Бернерс%Ли создал первые броузер и сервер HTML,
иродилась World Wide Web. Сегодня это вездесущая технология,
исерверы могут предоставлять не только статические страницы с ин% формацией, но и динамически создавать страницы с помощью про% грамм, выполняемых на веб%сервере. Это весьма специфическая форма распределенных вычислений, в которой интерфейс пользователя – веб% броузер – находится у удаленного клиента.
Примерами такого рода приложений служат:
•Электронная торговля
•Доски объявлений, службы передачи сообщений и почтовые систе% мы, базирующиеся на веб
•Системы заказа билетов
•Механизмы поиска в Интернете
Большинство людей не задумывается, работая с веб%приложениями; они так же естественны, как текстовый процессор. Однако эти програм% мы заметно отличаются от обычных настольных приложений (т. н. толстых клиентов). Есть вещи, которые лучше удаются одной из этих систем. Без специального кодирования на JavaScript возможности ин% терфейса пользователя в броузере оказываются гораздо беднее.
Модель функционирования веб%приложений отличается от обычных приложений – состояние сеанса хранится на удаленной машине, кото% рая должна управлять многочисленными одновременными соедине% ниями с клиентами, сохраняя их состояние между запросами HTTP и корректно поступая с клиентами, прекратившими связь. Для реше% ния этой задачи часть информации хранится на сервере (например, за% казанные клиентом товары помещаются в базу данных), а часть нахо% дится у клиента на локальной машине (в виде cookies броузера – запи% сей данных сеанса, хранящих идентификатор клиента/сеанса). Суще% ствуют такие среды, как ASP.NET и Java Servlets, которые ускоряют разработку веб%приложений. Есть многочисленные готовые системы, например системы управления контентом и системы электронного ма% газина.
Для представления и передачи информации используются многочис% ленные открытые стандартные протоколы и системы кодирования. Стандартным механизмом передачи данных является HTTP, а XML часто применяется для кодирования пакетов данных (например, SOAP служит интернет%протоколом связи, основанным на схеме XML).
Проблемы, с которыми сталкиваются программисты веб%приложений, в основном касаются совместимости с различными типами броузеров, которые могут встретиться, особенностей обработки ими HTML и Java% Script. Нередко приходится проектировать замысловатый HTML, ко% торый должен справляться с разнообразными ошибками, имеющими%
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
||
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
|
P |
|
|
|
|
|
NOW! |
o |
||
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|||
|
|
|
|
to |
|
|
|
|
|
w Click |
|
|
|
570m |
|||||
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
. |
|
|
|
|
|
.c |
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
df |
|
|
n |
e |
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Глава 23. За гранью возможногоClick |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ся в популярных броузерах. Веб%программистам часто приходится иметь дело с историческими системами (базами данных клиентов, имеющимися системами управления заказами и т. п.), чтобы получать из них информацию, и это бывает достаточно хлопотно. Серьезной проблемой является масштабируемость. Система может отлично рабо% тать, когда ее тестируют пять пользователей. Но когда систему начи% нают реально эксплуатировать, ей приходится выдерживать одновре% менную работу с 500 пользователями. Тестирование под нагрузкой имеет здесь важное значение (см. раздел «Испытание под нагрузкой» на стр. 196).
Краткая информация
Веб#приложение заставляет воспринимать броузер как свою ОС. Все хорошие веб#разработчики сначала вдоль и поперек изучают технологии броузера клиента. Затем вы учитесь писать хороший код для сервера (быстрый, параллельный,
с транзакциями, распределенный и корректный). Лучшее свойство Веб – непрерывное развитие и рост ожиданий пользователей. Плохо в Веб то, что ожидания пользователей
все время растут, и ваш код не может стоять на месте.
Алан (программист веб%приложений)
Типичные продукты
Интерактивные системы обслуживания, требующие постоян% ного обновления информации и ввода пользовательских дан% ных: заказ билетов и электронная торговля.
Целевая платформа
Исполнительной платформой является веб%сервер (обычно Apache или IIS). Выбор за вами, потому что вы сами развора% чиваете веб%приложение. Клиенты суть веб%броузеры, и здесь много вариантов. У каждого есть свои особенности, и вы не можете управлять тем, какой из них будет использоваться. Приходится делать веб%страницы, совместимые с большинст% вом броузеров.
Среда разработки
Среда состоит из конкретного веб%сервера и языка програм% мирования приложений, на котором пишется система, вы% полняемая на этом сервере. Стандартные языки: Perl и PHP.
Типичные задачи и проблемы
Обеспечение совместимости с разными броузерами; масшта% бируемость.