Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

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.

Типичные задачи и проблемы

Обеспечение совместимости с разными броузерами; масшта% бируемость.