Текст
                    ИНФОРМАТИКА
БАЗОВЫЙ И УГЛУБЛЕННЫЙ УРОВНИ

©ИЗДАТЕЛЬСТВО
ШКОЛА
БИНОМ

Учебное издание соответствует федеральному государственному образовательно- му стандарту среднего общего образования и примерной основной образователь- ной программе среднего общего образования. Состав УМК • Информатика. 7-9 классы. Информатика. 10-11 классы. Базовый и углублённый уровни: учебные издания • Информатика. 10-11 классы: методическое пособие (содержит примерную рабо- чую программу: авторы К. Ю. Поляков, Е. А. Еремин) • Авторская мастерская К.Ю. Полякова, Е. А. Еремина на сайте www.metodist.Lbz.ru Константин Юрьевич Поляков — доктор технических наук, профес- сор кафедры судовой автоматики и измерений Санкт-Петербургского государственного морского технического университета, учитель ин- форматики школы №163 Санкт-Петербурга. Победитель Всероссий- ского конкурса для педагогов по включению ресурсов Единой кол- лекции цифровых образовательных ресурсов в образовательный процесс. Лауреат профессиональной премии «Лучший учитель Санкт-Петербурга». Награжден знаком «Почетный работник общего образования РФ». Евгений Александрович Еремин — кандидат физико-математиче- ских наук. Начиная с 1974 года, работает с вычислительной техникой. Преподает связанные с информатикой курсы с момента появления этого предмета в школе в 1985 году.
К. Ю. Поляков, Е. А. Еремин ИНФОРМАТИКА 11 класс Часть 1 Базовый и углубленный уровни * Москва БИНОМ. Лаборатория знаний 2017
УДК 004.9 ББК 32.97 П54 Поляков К. Ю. П54 Информатика. 11 класс. Базовый и углубленный уров- ни : в 2 ч. Ч. 1 /К. Ю. Поляков, Е. А. Еремин. — М. : БИ- НОМ. Лаборатория знаний, 2017. — 240 с. : ил. ISBN 978-5-9963-3138-3(4. 1) ISBN 978-5-9963-3140-6 (общ) Учебное издание предназначено для изучения информатики на базо- вом и углубленном уровнях в 11 классах общеобразовательных органи- заций. Содержание учебного издания является продолжением курса 10 класса и опирается на изученный в 7-9 классах курс информатики для основной школы. Рассматриваются вопросы передачи информации, информацион- ные системы и базы данных, разработка веб-сайтов, компьютерное мо- делирование, методы объектно-ориентированного программирования, компьютерная графика и анимация. Учебное издание входит в учебно-методический комплект, вклю- чающий также учебное издание для 10 класса, методическое пособие и компьютерный практикум. Предполагается широкое использование ресурсов портала Федераль- ного центра электронных образовательных ресурсов (http://fcior.edu. ru/). Соответствует федеральному государственному образовательному стандарту среднего общего образования и примерной основной образова- тельной программе среднего общего образования. УДК 004.9 ББК 32.97 ISBN 978-5-9963-3138-3 (Ч. 1) ISBN 978-5-9963-3140-6 (общ) © ООО «БИНОМ. Лаборатория знаний», 2016
ОТ АВТОРОВ другой точки зрения, более называется «Информация и как связано количество ин- работают упаковщики (про- Перед вами учебник информатики для 11 класса. Его можно ис- пользовать для изучения этого предмета как на базовом, так и на углублённом уровне. Если вы изучаете информатику на базовом уровне, не бойтесь заглянуть в другие разделы — возможно, какой- то материал там вас заинтересует и станет отправной точкой для исследовательского проекта или даже повлияет на выбор профессии. Параграфы, которые изучаются только на углублённом уровне, от- мечены значком Так же как и в учебнике для 10 класса, в некоторых главах мы рассмотрим знакомые вам вопросы, но с глубоко. Например, в первой главе (она информационные процессы») вы узнаете, формации с теорией вероятностей, как граммы для сжатия данных) и как можно построить код, позволяю- щий исправлять ошибки при передаче данных. На углублённом уровне большое внимание уделено вопросам ал- горитмизации и программирования. Этому посвящены три главы: «Элементы теории алгоритмов», «Алгоритмизация и программиро- вание» и «Объектно-ориентированное программирование». В первой из них вы узнаете, как и зачем ввели строгое математическое по- нятие «алгоритм», как сравнивать качество алгоритмов и как дока- зывать правильность программ. Следующая глава познакомит вас с различными структурами данных, а в главе 7 объясняются основы объектного подхода к разработке программ, который применяется в крупных промышленных проектах. В практической части, как и в 10 классе, используется язык Python. Мы старались сделать так, чтобы содержание учебника как можно меньше зависело от программного обеспечения, новленного на ваших компьютерах. Весь курс можно но изучать, используя только свободное программное чение (СПО) — операционную систему Linux, офисный пакет OpenOffice или LibreOffice, свободно распространяемые среды про- граммирования, графический редактор GIMP, программу трёхмер- ного моделирования Blender. Практические работы к главам и дру- гие учебные материалы выложены на сайте поддержки учебника: kpolyakov.spb.ru/school/probook.htm Специальные значки на полях выделяют важные элементы. Знач- известен вам из для того, чтобы означает важное о том, что при уста- успеш- обеспе- ком □ отмечен материал, который должен быть основной школы (он изложен очень кратко, только вы вспомнили основные результаты). Значок определение или утверждение. Значок говорит WWW 3
От авторов выполнении задания придётся использовать дополнительные источники, например сеть Интернет. Проектные и исследовательские работы, ко- торые выполняются дома, отмечены значком Значок служит для выделения дополнительного разъяснения. Значок обозначает работу в парах или в группе. Значок е выделяет межпредметные связи. Задания повышенной сложности отмечены «звёздочкой» (*). После параграфов приведены возможные темы проектов — ис- следовательских работ разного уровня сложности. Мы надеемся, что каждый из вас сможет выбрать тему по душе, получить удовольствие от творческого выполнения этой работы, а потом рассказать о её результатах в классе или на школьной конференции, опубликовать отчёт в Интернете. Большинство проектов можно делать в команде из 2-3 человек. В заключение нам хочется поблагодарить наших коллег, которые взяли на себя труд прочитать предварительные версии отдельных глав учебника и высказать множество полезных замечаний, позволивших сделать учебник более точным, ясным и понятным: • А, П. Шестакова, кандидата педагогических наук, зав. кафедрой информатики и вычислительной техники Пермского государст- венного педагогического университета; • М. А. Ройтберга, доктора физико-математических наук, зав. ла- бораторией прикладной математики Института математических проблем биологии РАН, г. Пущино; • С. С. Михалковича, кандидата физико-математических наук, доцен- та кафедры алгебры и дискретной математики, г. Ростов-на-Дону; • В. М, Гуровица, учителя информатики школы № 2007, г. Москва; • Т. Ф. Хирьянова, преподавателя кафедры информатики МФТИ, г. Мо- сква; • О. А. Тузову, учителя информатики школы № 550, г. Санкт- Петербург; • А. В. Панъгина, инженера Центра информационных технологий, г. Сосновый Бор; • Н. Е. Леко, учителя информатики МОУ СОШ № 9, г. Тихвин; • С. В. Гриневича, учителя информатики МАОУ СОШ № 146, г. Пермь; • Н. Б. Линева, старшего преподавателя факультета ВМК МГУ им. М. В. Ломоносова, г. Москва; • В. Н. Разумова, учителя информатики МОУ «Болыпеелховская средняя общеобразовательная школа», с. Большая Елховка, Республика Мордовия; • Ю. М. Розенфарба, учителя информатики МОУ «Межозёрная СОШ», Челябинская область; • К. А. Малеванова, руководителя направления телематики ООО «ОБИТ». 4
ПРОЕКТЫ В старшей школе, как и в основной, часть вашей работы на уроках информатики будет связана с выполнением проектных работ. Проект — это ваша самостоятельная работа, посвящённая тем вопросам, которые вам интересны. Примерные темы проектов даны в учебнике после каждого параграфа. Кроме того, вы, ко- нечно, можете выбирать и свои собственные темы для проектов. Проект можно выполнять одному или в группе, если рабо- та очень объёмная и одному человеку сложно с ней справиться. Так, например, пишут программы для компьютеров. Современные программы могут содержать сотни тысяч и даже миллионы строк кода, поэтому их создают целые команды профессиональных про- граммистов, каждый из которых выполняет свою часть работы. Проект — это работа, которая выполняется в течение ограни- ченного времени, поэтому вам нужно определить, когда вы пла- нируете завершить проект, и постараться уложиться в этот срок (например, к окончанию четверти или учебного года). У проекта должен быть результат. Это может быть какой-то предмет, например модель самолёта или корабля. Результатом может стать проведённое мероприятие — концерт, спектакль, вы- ставка рисунков, обустройство своего двора или подъезда. Про- екты на уроках информатики обычно завершаются разработкой информационных продуктов — программ, докладов, презентаций, отчётов о проведённых исследованиях, видеофильмов и др. Работа над проектом состоит из нескольких этапов. Постановка задачи. На этом этапе нужно определить тему проекта и понять, в чём вы хотите разобраться, что изучить, какие результаты планируете получить, какой продукт получится после завершения работы. Выбор методов исследования. При выполнении проекта вы можете применять теоретические методы (к ним относятся форма- лизация, анализ и синтез, индукция и дедукция и др.), экспери- ментальные (лабораторный опыт, моделирование, вычислительный эксперимент) или эмпирические (наблюдение, интервью, анкети- рование, опрос, фотографирование, измерение). В отчёте нужно будет объяснить, почему именно выбранные вами методы лучше всего подойдут для достижения цели. 5
Проекты Подготовка исходных данных. Любые исследования основаны на каких-то исходных данных. Это могут быть числовые данные из литературы или Интернета; книги и статьи по теме проекта, рисунки, видеофильмы и др. Перед тем как начать исследование, нужно постараться про- верить исходные данные — выполнить их верификацию (от лат. verus — «истинный»). Вы знаете, что, например, в Интернете очень много неверной и ложной информации. Лучше всего брать данные из книг и журналов, потому что эти материалы проходят рецензирование и ошибок там значительно меньше. Проведение исследования. Это основной этап проекта, во вре- мя которого вы должны получить результаты, позволяющие от- ветить на интересующие вас вопросы. Анализ результатов. После завершения исследования нужно провести анализ результатов и сделать выводы. Прежде всего не- обходимо проверить достоверность полученных результатов. Если, например, ваши данные говорят о нарушении фундаментальных законов физики (например, законов сохранения массы и энергии), то это повод серьёзно задуматься о возможной ошибке. Подумайте, удалось ли получить те результаты, которые были целью проекта. Учтите, что отрицательный результат — это тоже результат, например, может получиться и так, что поставленная вами цель (пока) недостижима. Подготовка отчёта. Для того чтобы с результатами ваших ис- следований смогли познакомиться другие люди, их нужно офор- мить в виде отчёта. Это может быть устный или письменный доклад, презентация, видеоролик, веб-сайт или даже научная статья. Ваш отчёт можно разместить в Интернете на школьном сайте или даже на своём собственном. Очень полезно проводить публичную защиту проекта — это позволит вам обсудить результаты работы со своими товарищами и учителями, получить отзывы, выявить сильные и слабые ме- ста проекта, наметить направления для будущих исследований. Вы научитесь выступать перед аудиторией и отвечать на вопросы слушателей, а эти качества очень понадобятся вам в будущем. Проекты — это ваши первые шаги в исследовательской рабо- те. Возможно, такая работа вам понравится, и вы решите связать свою жизнь с наукой, которая постепенно открывает для челове- чества тайны окружающего нас мира. 6
Глава 1 ИНФОРМАЦИЯ И ИНФОРМАЦИОННЫЕ ПРОЦЕССЫ Количество информации Ключевые слова: • формула Хартли • алфавитный подход • вероятность события • аддитивность • информационная энтропия • полная система событий • формула Шеннона При выборе одного из двух возможных вариантов количество полученной информации равно 1 биту. Если количество вари- антов равно 27, то количество информации, полученное при выборе одного из них, равно I бит. При использовании алфавита из М символов количество возможных различных сообщений длиной L символов равно N = ML. □ Формула Хартли Когда мы обсуждали связь между количеством вариантов выбора N и количеством полученной информации, рассматривались только значения N, равные целым степеням двойки. А как вы- числить количество информации, если количе- ство вариантов не равно степени числа 2? Ответить на этот вопрос стало возможно только после того, как вы изучили логарифмы в курсе математики. Из формулы сразу следует, что I — это степень, в которую нужно возвести 2, чтобы получить 2V, т. е. ло- гарифм: I = log2N. Ральф Хартли (1888-1979) Эта формула называется формулой Хартли в честь американско- го инженера Ральфа Хартли, который предложил её в 1928 г. 7
1 Информация и информационные процессы Пусть, например, на лётном поле стоят 10 самолётов (с номе- рами от 1 до 10) и известно, что один из них летит в Санкт-Пе- тербург. Сколько информации в сообщении «Самолет № 2 летит в Санкт-Петербург»? У нас есть 10 вариантов, из которых выби- рается один, поэтому по формуле Хартли количество информации равно I = log2 Ю~3,322 бита. Обратите внимание, что для значений 2V, которые не равны це- лой степени числа 2, количество информации в битах — дробное число. С помощью формулы Хартли можно вычислить теоретическое количество информации в сообщении. При использовании алфави- та из М символов информационный объём сообщения, состоящего из L символов, равен I = Llog2 Предположим, что мощность алфавита равна 50 символам. Тогда каждый символ несёт количество информации, равное i = log2 50-5,644 бита. Если сообщение содержит 100 символов, его общий информа- ционный объём примерно равен 5,644 100 = 564,4 бита. Такой подход к определению количества информации называ- ют алфавитным. Конечно, на практике невозможно закодировать символ с помощью нецелого числа бит, поэтому берут первое це- лое число, которое не меньше теоретически рассчитанного значе- ния. Например, если алфавит содержит 50 символов, то каждый символ будет закодирован с помощью 6 бит. Информация и вероятность Всё, что написано выше в этом параграфе, правильно только при одном уточнении: все события (символы алфавита) одинаково ожидаемы, т. е. нельзя заранее сказать, что какой-то символ встречается чаще, а какой-то — реже. В реальности это предпо- ложение не всегда верно. Например, в тексте на русском язы- ке некоторые символы встречаются часто, а некоторые — очень редко. Числа во втором столбце таблицы 1.1 означают среднюю долю символа в больших текстах. Например, доля 0,175 для пробела означает, что примерно 17,5% всех символов в текстах на русском языке — пробелы. 8
Количество информации §1 Таблица 1.1 пробел 0,175 К 0,028 ч 0,012 О 0,090 м 0,026 й 0,010 Е 0,072 д 0,025 X 0,009 А 0,063 п 0,023 «УТ/» «/Tv 0,007 И 0,062 У 0,021 ю 0,006 Т 0,053 я 0,018 ш 0,005 Н 0,052 ы 0,017 ц 0,004 с 0,045 3 0,016 щ 0,003 р 0,040 ь 0,015 э 0,002 в 0,038 Б 0,014 ф 0,001 л 0,035 Г 0,013 Иногда среди всех возможных событий есть ожидаемые и не- ожиданные. Например, на вопрос «Идёт ли сейчас снег?» летом мы ожидаем услышать ответ «нет». При этом ответ «да» будет очень неожиданным, и после его получения наши дальнейшие пла- ны могут сильно измениться. Это значит, что при таком ответе мы получаем гораздо больше информации. Как её измерить точно? Сначала нужно разобраться с тем, что значит «менее ожида- емое» событие и «более ожидаемое». Математики в этом случае используют понятие «вероятность»: если событие более ожидае- мое, то его вероятность (точнее, вероятность того, что оно прои- зойдёт) больше. Вероятность — это число в интервале от 0 до 1. В матема- тике вероятность принять обозначать буквой р (от латинского probabilis — вероятный, возможный). Сначала рассмотрим предельные случаи, когда вероятность равна 0 или 1. Пусть, например, х — некоторое неизвестное ве- щественное число, которое задумал ведущий. Вы знаете, что для любого вещественного х всегда xz>0. В этом случае считают, что вероятность события х2 >0 равна 1 (событие х2 >0 обяза- тельно произойдёт). Часто вероятность измеряют в процентах от 1, тогда вероятность события х >0 равна 100%. В то же время 2 вероятность события х <0 равна нулю, это значит, что событие 2 . л « х <0 никогда не произойдет. Теперь предположим, что мы бросаем монету и смотрим, ка- кой стороной она упала — «орлом» или «решкой». Если повто- рять этот опыт много раз, мы заметим, что количество «орлов» и «решек» примерно равно (конечно, если монета не имеет де- фектов). При этом вероятность каждого из двух событий равна 0,5, или 50%. Скорее всего, вы слышали выражение «50 на 50», 9
1 Информация и информационные процессы которое означает, что ни одному из двух вариантов нельзя отдать предпочтение — их вероятности равны. Мы уже видели, что вероятность события можно определить с помощью большого количества испытаний. Если из N испыта- ний нужное нам событие случилось т раз, то вероятность тако- го события можно оценить как . Например, классический иг- ральный кубик имеет 6 граней; если кубик качественный, вероятность выпадения каждой грани равна 1/6 (т. е. выпадения граней равно- вероятны). Вероятность выпадения чётного числа можно подсчитать так: среди чисел от 1 до 6 всего 3 чётных числа, поэтому при большом чис- ле испытаний в половине случаев (в 3 из 6) бу- дут выпадать чётные числа, вероятность равна 0,5. А вероятность выпадения числа, меньшего 3, равна 2/6 = 1/3 « 0,33, потому что только 2 из 6 чисел (1 и 2) удов- летворяют условию. Теперь можно переходить к главному вопросу: как вычислить количество информации, если в сообщении получен символ, веро- ятность появления которого равна р? Попробуем сначала опреде- лить, какими свойствами должна обладать эта величина, исходя из «здравого смысла». Во-первых, чем меньше вероятность, тем более неожидан сим- вол и тем больше информации мы получили. Если вероятность события близка к нулю, информация должна стремиться к бес- конечности (получение такого символа очень неожиданно). Во-вторых, представим себе, что мы получаем символы только одного вида, например только буквы «А». Тогда ве- роятность появления символа «А» равна 1, и никакой новой информации в этом символе для нас нет — мы всё заранее зна- ли. Следовательно, при р = 1 количество информации должно быть равно нулю. В-третьих, «здравый смысл» подсказывает, что когда мы бро- саем игральный кубик два (три, 102, 1002) раза, мы получаем информации в два (три, 102, 1002) раза больше, чем при од- нократном бросании кубика. Это свойство называют принципом аддитивности (сложения). Математики доказали, что этими свойствами обладает толь- ко логарифмическая функция вида /( р) =-iTlog2 Р, где коэффи- циент К можно выбирать произвольно, как удобно в конкретной задаче. Если взять К = 1, мы получим количество информации в битах. 10
Количество информации §1 Если событие имеет вероятность р, то количество информации в битах, полученное в сообщении об этом событии, равно I = -log2p=log2^-. (*) 1г Поскольку вероятность р не больше 1, количество информа- ции не может быть меньше нуля. Легко проверить, что если вероятность равна 1, то полученная информация равна нулю. Если вероятность стремится к 0, величина log2P стремится к (—оо), а количество информации - к оо. Третье свойство (аддитивность, сложение вероятностей) про- верим на примере. Пусть есть два мешка, в каждом из которых лежат по 8 шариков разного цвета. Вычислим, сколько инфор- мации мы получили в сообщении «Из первого мешка вытащили (наугад) красный шарик, а из второго — зелёный». Из каждого мешка можно вытащить один из восьми шариков, т. е. вероят- ность вытащить какой-то определённый шарик равна 1/8. Следо- вательно, информация в сообщении «Из первого мешка вытащили красный шарик» равна ^ = 1о82т4б- = 1о&2 8 = 3 бита. I/O Точно такую же информацию, 3 бита, мы получаем в сооб- щении «из второго мешка вытащили зелёный шарик». Теперь посмотрим, сколько информации несёт исходное пол- ное сообщение «Из первого мешка вытащили (наугад) красный шарик, а из второго — зеленый». Какова вероятность именно этого исхода? Есть 8 способов вытащить шарик из каждого меш- ка, всего получаем 8 • 8 = 64 варианта, поэтому вероятность каж- дого из них равна 1/64. Тогда информации в сообщении равна I = l°g2 i^64? = log2 64 = 6 бит, т. е. равна сумме количеств информации в двух отдельных сооб- щениях. Мы показали, что свойство аддитивности выполняется. Возможно, вы уже заметили, что последний пример фактиче- ски свёлся к использованию формулы Хартли. Если все N вари- антов имеют равные вероятности, то вероятность каждого вари- анта равна р = , следовательно, количество информации о любом из возможных событий вычисляется как /=log2T/bv =log2 N‘ Этот результат действительно совпадает с формулой Хартли. 11
1 Информация и информационные процессы Однако формулу Хартли нельзя использовать, если вероятно- сти событий разные. Пусть, например, детям раздают воздушные шарики разного цвета, причём 7 из каждых 10 шариков — зе- лёные. Сколько информации в сообщении «Вася получил зелё- ный шарик»? Здесь формула Хартли неприменима, однако можно использовать формулу (*). Вероятность того, что Васе достался зелёный шарик, равна 7/10, а количество информации вычисля- ется как / = 1об27Д0=1оё2^ бит- Величина под знаком двоичного логарифма не является сте- пенью двойки. Как её вычислить? Для этого используется свой- ство логарифма, позволяющее переходить к другому основанию, например к десятичным или натуральным логарифмам, которые умеют вычислять калькуляторы (в том числе и программы): В данном случае получаем lg(1^7)=l2(1^7) 1g 2 In 2 Вопросы и задания 1. Как вы понимаете термин «вероятность события»? 2. В каких случаях вероятность равна 1? Когда она равна 0? 3. Что неправильно в сообщении: «"Спартак" выиграет с веро- ятностью 146%»? Формула Шеннона Клод Шеннон (1916-2001) Информация играет для нас важную роль по- тому, что наши знания всегда неполны, в них есть неопределённость. Эта неопределённость мешает нам решать свои задачи, принимать правильные решения. Полученная информа- ция уменьшает (« снимает ») неопределённость, полностью или частично. Поэтому количество полученной информации можно оценить по ве- личине уменьшения неопределёнйости: АН Ннач Нкон, где Ннач — начальная неопределённость, а Нкои — конечная (после получения сообщения). Если неопределённость полностью снимается, то Нкон = 0. 12
Количество информации §1 Чтобы оценить информацию с этой точки зрения, нужно как- то вычислить неопределённость, выразить её числом. Эту задачу решил в 1948 г. американский математик Клод Шеннон. Пусть неопределённость состоит в том, что мы можем по- лучить одно из N возможных сообщений, причём известно, что вероятность получения сообщения с номером i равна pt. Неопределённость знания об источнике информации вычисля- ется по формуле Шеннона N N i=l i=l Pi Величина H часто называется информационной энтропией. С точки зрения математики, это среднее количество информа- ции, которую мы получаем при полном снятии неопределённости (когда выбран один из N возможных вариантов). Когда неопределённость наибольшая? Зададим вопрос «Идёт ли сейчас снег?» зимой и летом. Летом неопределённость очень маленькая, так как, скорее всего, снега нет, ситуация ясна. Зи- мой же неопределённость велика, потому что снег может идти или не идти примерно с равной вероятностью. Перейдём к числам. Будем считать, что вероятность выпа- дения снега зимой равна рг = 0,5. Чему равна вероятность р2 того, что снега нет? «Здравый смысл» подсказывает, что р2 = 0,5 (остальные 50%). Математики говорят, что два события, «Снег идёт» и «Снега нет», составляют полную систему. Это значит, что одно из них (и только одно!) обязательно случится. Фраза «обязательно случится» означает, что вероятность этого равна 1. Сумма вероятностей всех событий, составляющих полную си- стему, равна 1. Для «зимнего» случая количество информации при получении сообщений «снег идёт» и «снега нет» одинаковое, потому что их вероятности одинаковые: /1 =I2 = log2 =1 бит. Неопределённость, вычисленная по формуле Шеннона, также равна 1 биту: H=p1log2-^- + p2 log2^- = 0,5 1og2y^ + 0,5 log2 = = log22 = l бит. 13
1 Информация и информационные процессы Для лета будем считать вероятность выпадения снега рав- ной рг = 0,0001. Тогда вероятность того, что снега нет, равна р2 = 1 - 0,0001 = 0,9999. Сообщения «Снег идёт» и «Снега нет» несут разное количество информации: /1=1Og20^01e13’29 бит’ l2=log20^999“°’00014 бит’ а неопределённость (среднее количество информации) равна Н = 0’0001 1ое20ДЯ)01+0’9999'1°г20^99*0’0015 6ит- Мы получили то, что ожидали: зимой неопределённость в ответе на вопрос «Идёт ли сейчас снег?» значительно больше, чем летом. Можно предположить (и это действительно так!), что неопределённость наибольшая в том случае, когда вероятности всех событий равны. Кроме того, летом эта неопределённость очень близка к нулю, поэтому можно предположить (и это также верно!), что она стре- мится к нулю, если вероятность одного из двух событий стре- мится к нулю. На рисунке 1.1 построена зависимость величины неопределён- ности Н от вероятности первого события рх. При этом вероят- ность второго события определяется как р2 = 1 - р19 так как они составляют полную систему. Главный вывод этого примера таков: Неопределённость наибольшая для случая, когда все события равновероятны. При этом вероятность каждого из N событий равна р = , поэтому по формуле Шеннона N л N 1 Н = log2 V 1о^2 N =1°g2 N- i=l P i=l 14
Количество информации §1 Отсюда следует, что: При равновероятных событиях неопределённость совпада- ет с количеством информации, вычисленным по формуле Хартли. Выводы • Количество информации в битах, полученное при выборе од- ного из N равновероятных вариантов, равно I = log2 N. • Количество информации зависит от того, насколько ожидаемо полученное сообщение. • Если событие имеет вероятность р, то количество информации в битах, полученное в сообщении об этом событии, равно / = -log2p=log2-i-. • Количество полученной информации можно оценить по вели- чине уменьшения неопределённости: АН = Н — Н , МсхН A.ип ' где Ннач — начальная неопределённость, а Нкон — конечная. • Неопределённость знания об источнике данных (информаци- онная энтропия) вычисляется по формуле Шеннона N N H=~^Pi 1о^2 Pi = ЦР1 1о^2 4- • i=l i=l Pi Неопределённость наибольшая для случая, когда все события равновероятны. • При равновероятных событиях неопределённость совпадает с количеством информации, вычисленным по формуле Хартли. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. В чём заключается неопределённость? 2. Как связана неопределённость с информацией, которую мы получаем при сообщении об отдельных событиях? 3. Что такое полная система событий? 4. Что можно сказать о вероятностях событий, входящих в пол- ную систему? 5. В каком случае неопределённость наибольшая? 15
Информация и информационные процессы 6. В каком случае неопределённость стремится к нулю? 7. В каком случае неопределённость совпадает с количеством информации, вычисленным по формуле Хартли? Подготовьте сообщение «К. Шеннон и его вклад в науку» Проекты а) Программа для частотного анализа текстов б) Сравнение текстов на основе энтропии §2 Передача данных Ключевые слова: • пропускная способность • контрольная сумма • помехи • помехоустойчивый код • избыточность • расстояние Хэмминга • бит чётности • код Хэмминга Скорость передачи данных Скорость передачи данных — это количество бит (байт, Кбайт и т. д.), которое передаётся по каналу связи за единицу вре- мени (например, за 1 с). Основная единица измерения скорости — бит в секунду (бит/с, англ, bps: bits per second). Пропускная способность канала связи — это наибольшая воз- можная скорость передачи данных, которую принципиально невозможно превысить. Пропускная способность любого реального канала связи огра- ничена. Она зависит от аппаратуры и мощности помех. Для характеристики быстродействующих каналов чаще всего применяют единицы измерения с десятичными при- ставками (а не двоичными, как при измерении количества информации): килобиты в секунду (1 кбит/с = 1000 бит/с), ме- габиты в секунду (1 Мбит/с = 106 бит/с) и гигабиты в секун- 16
Передача данных §2 ду (1 Гбит/с = 109 бит/с), иногда используют байты в секунду (байт/с) и мегабайты в секунду (1 Мбайт/с = 106 байт/с). Объём информации 7, переданной по каналу связи за время t, вычисляется по формуле I = и • t, где v — средняя скорость □ передачи данных. Например, если скорость передачи данных равна 512 000 бит/с, за 1 минуту можно передать файл объёмом 512 000 бит/с • 60 с = 30 720 000 бит = 3 840 000 байт = = 3750 Кбайт. Обнаружение ошибок В реальных каналах связи всегда присутствуют помехи, искажаю- щие сигнал. В некоторых случаях ошибки допустимы. Например, при прослушивании радиопередачи через Интернет небольшое искажение звука не мешает понимать речь. Однако чаще всего требуется обеспечить точную передачу данных. Для этого в пер- вую очередь нужно определить факт возникновения ошибки и, если это произошло, передать блок данных ещё раз. Представьте себе, что получена цепочка нулей и единиц 1010101110, причём все биты независимы. В этом случае нет абсолютно никакой возможности определить, верно ли передана последовательность. Поэтому необходимо вводить избыточность в передаваемое сообщение1* (включать в него «лишние» биты) толь- ко для того, чтобы обнаружить ошибку. Простейший вариант — добавить в конец блока данных до- полнительный бит, который будет равен 1, если в основном со- общении нечётное число единиц, и равен 0 для сообщения с чёт- ным числом единиц. Этот дополнительный бит называется битом чётности. Бит чётности используется при передаче данных в се- тях, проверка чётности часто выполняется аппаратно (с помощью электроники). Например, пусть требуется передать два бита данных. Воз- можны всего 4 разных сообщения: 00, 01, 10 и 11. Первое и четвёртое из них содержат чётное число единиц (0 и 2), значит, бит чётности для них равен 0. Во втором и третьем сообщениях нечётное число единиц (1), поэтому бит чётности будет равен 1. 1* Иногда для точной передачи незнакомого слова по телефону используют начальные буквы всем знакомых имён. Например, слово «бит» можно пе- редать как «Борис, Игорь, Татьяна». 17
1 Информация и информационные процессы Таким образом, сообщения с добавленным битом чётности будут выглядеть так: ООО, ОЦ, 101, но. Первые два бита несут полезную информацию, а третий (подчёрк- нутый) — вспомогательный, он служит только для обнаружения ошибки. Обратим внимание, что каждое из этих сообщений со- держит чётное число единиц. Выясним, сколько ошибок может обнаружить такой метод. Если при передаче неверно передан только один из битов, то количество единиц в сообщении стало нечётным, это и служит признаком ошибки при передаче. Однако исправить ошибку нельзя, потому что непонятно, в каком именно разряде она слу- чилась. Если же изменились два бита, чётность не меняется и такая ошибка не обнаруживается. Добавление бита чётности позволяет обнаруживать нечётное число ошибок (1, 3, 5, ...), а ошибки в чётном количестве разрядов остаются незамеченными. Контроль с помощью бита чётности применяется для неболь- ших блоков данных (чаще всего — для каждого байта) и хорошо работает тогда, когда отдельные ошибки при передаче независимы одна от другой и встречаются редко. Для обнаружения искажений в передаче файлов, когда может сразу возникнуть множество ошибок, используют другой метод — вычисляют контрольную сумму с помощью какой-нибудь хэш- функции (вспомните материал учебника для 10 класса). Чаще всего для этой цели применяют алгоритмы CRC (англ. Cyclic Re- dundancy Code — циклический избыточный код), а также крип- тографические хэш-функции MD5, SHA-1 и другие. Если контрольная сумма блока данных, вычисленная приём- ником, не совпадает с контрольной суммой, записанной передаю- щей стороной, то произошла ошибка. Помехоустойчивые коды Значительно сложнее исправить ошибку сразу (без повторной передачи), однако в некоторых случаях и эту задачу удаётся решить. Для этого требуется настолько увеличить избыточность кода (добавить «лишние» биты), что небольшое число ошибок всё равно позволяет достаточно уверенно распознать переданное сообщение. Например, несмотря на помехи в телефонной линии, обычно мы легко понимаем собеседника. Это значит, что речь обладает достаточно большой избыточностью, и это позволяет исправлять ошибки «на ходу». 18
Передача данных §2 Например, пусть нужно передать один бит, 0 или 1. Утроим его, добавив ещё два контрольных бита, совпадающих с первым. Таким образом, получаются два «правильных» сообщения: ООО и 111. Теперь посмотрим, что получится, если при передаче одного из битов сообщения ООО произошла ошибка, и приёмник получил искажённое сообщение 001. Заметим, что оно отличается одним битом от ООО, и двумя битами от второго возможного вариан- та — 111. Значит, скорее всего, произошла ошибка в последнем бите и сообщение нужно исправить на ООО. Если приёмник по- лучил 101, можно точно сказать, что произошла ошибка, однако попытка исправить её приведёт к неверному варианту, так как ближайшая «правильная» последовательность — это 111. Таким образом, такой код обнаруживает одну или две ошибки. Кроме того, он позволяет исправить (!) одну ошибку, т. е. является помехоустойчивым. Помехоустойчивый код — это код, который позволяет исправ- лять ошибки, если их количество не превышает некоторого уровня. Выше мы фактически применили понятие «расстояния» меж- ду двумя кодами. В теории передачи информации эта величина называется расстоянием Хэмминга в честь американского мате- матика Р. Хэмминга. Расстояние Хэмминга — это количество позиций, в которых различаются два закодированных сообщения одинаковой длины. Например, расстояние d между кодами 001 и 100 равно d(001,100) = 2, потому что они отличаются в двух битах (они подчёркнуты). В приведённом выше примере расстояние между «правильными» последовательностями (словами) равно d(000, 111) = 3. Такой код позволяет обнаружить одну или две ошибки и исправить одну ошибку. В общем случае, если минимальное расстояние между «пра- вильными» словами равно d, можно обнаружить от 1 до d - 1 ошибок, потому что при этом полученный код будет отличаться от всех допустимых вариантов. Для исправления г ошибок необ- ходимо, чтобы выполнялось условие d>2r + 1. 19
Информация и информационные процессы Это значит, что слово, в котором сделано г ошибок, должно быть ближе к исходному слову (из которого оно получено искажени- ем), чем к любому другому из «правильных» слов. Рассмотрим более сложный пример. Пусть нужно передавать три произвольных бита, обеспечив обнаружение двух любых оши- бок и исправление одной ошибки. В этом случае можно исполь- зовать, например, такой код с тремя контрольными битами (они подчёркнуты): ООО 000 001 111 010 011 011 100 100 101 101 010 110 110 111 001 Здесь расстояние Хэмминга между любыми двумя словами не менее 3, поэтому такой код обнаруживает две ошибки и позво- ляет исправить одну. Как же вычислить ошибочный бит? Предположим, что было получено кодовое слово 011011. Опре- делив расстояние Хэмминга до каждого из «правильных» слов, находим единственное слово 010011, расстояние до которого рав- но 1 (расстояния до остальных слов больше). Значит, скорее все- го, это слово и было передано, но исказилось из-за помех. На практике используют несколько более сложные коды, ко- торые называются кодами Хэмминга. В них информационные и контрольные биты перемешаны, и за счёт этого можно сразу, без перебора, определить номер бита, в котором произошла ошибка. Наиболее известен семибитный код, в котором 4 бита — это дан- ные, а 3 бита — контрольные. В нём минимальное расстояние между словами равно 3, поэтому он позволяет обнаружить две ошибки и исправить одну. В коде Хэмминга биты, номера которых равны степеням двойки, — контрольные (это биты 1, 2 и 4, выделенные фоном на рисунке), остальные биты — это биты данных: 1 2 3 4 5 6 7 Номера битов данных раскладываются на сумму степеней двойки (например: 5 = 4 + 1), и это разложение даёт номера конт- рольных битов, которые проверяют этот бит данных. Так 5-й бит проверяется контрольными битами 1 и 4. Значение контрольного бита вычисляется как бит чётности (сумма по модулю 2) для цепочки битов, которые он контроли- 20
Передача данных рует. Например, бит 1 контролирует биты 3, 5 и 7 (в их разло- жении есть единица). Пусть блок данных — это 1100: 1 2 3 4 5 6 7 1 1 0 0 Тогда контрольный бит 1 — это бит чётности для цепочки 110, он равен 0, поскольку число единиц в этой цепочке чётное. Бит 2 контролирует биты 3, 6 и 7 (цепочка 100), он равен 1; бит 4 проверяет биты 5, 6 и 7 (100), он тоже равен 1: 1 2 3 4 5 6 7 0 1 1 1 1 0 0 В таблице 1.2 приведены кодовые слова Хэмминга для осталь- ных вариантов данных. Таблица 1.2 1 2 3 4 5 6 7 0 0000 1 0001 2 0010 3 ООН 4 0100 5 0101 6 ОНО 7 0111 8 1000 9 1001 10 1010 11 1011 12 1100 13 1101 14 1110 15 1111 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 0 1 0 1 0 0 1 0 1 1 0 1 1 1 ! 1 1 1 1 21
Информация и информационные процессы Аналогично можно строить коды Хэмминга любой длины, причём при увеличении длины блока данных эффективность та- кого кодирования увеличивается: для 4-битных блоков избыточ- ность равна (7 - 4)/4 = 75%, а для 1024-битных — около 1%. Код Хэмминга позволяет исправить одну ошибку в блоке и обнаружить две. Признаком ошибки служит несовпадение конт- рольных битов со значением, которое вычислено по полученным битам данных. Например, пусть приняты данные 1 2 3 4 5 6 7 0 1 1 1 1 1 0 По битам данных (с номерами 3, 5, 6 и 7) рассчитываем зна- чения контрольных битов, которые должны получиться при без- ошибочной передаче: бит 1 = (бит 3 -I- бит 5 + бит 7) mod 2 = (1 + 1 + О) mod 2 = 0; бит 2 = (бит 3 + бит 6 + бит 7) mod 2 = (1 + 1 + 0) mod 2 = 0*1; бит 4 = (бит 5 + бит 6 + бит 7) mod 2 = (1 + 1 + 0) mod 2 = 0*1. Видим, что принятые значения контрольных битов 2 и 4 не сов- падают с вычисленными, поэтому при передаче были ошибки. Если предположить, что была только одна ошибка, то номер ошибочного бита вычисляется как сумма номеров несовпавших контрольных битов, в данном примере это 2 + 4 = 6. Таким образом, 6-й бит принят неверно, исправленные данные выгля- дят так: 1 2 3 4 5 6 7 0 1 1 1 1 0 0 Это правильное кодовое слово Хэмминга для блока данных 1100. Выводы • Пропускная способность канала связи — это наибольшая воз- можная скорость передачи данных, которую принципиально невозможно превысить. • Для того чтобы обнаруживать и исправлять ошибки, вызван- ные помехами при передаче, нужно вводить дополнительные контрольные биты в каждый блок данных. • Бит чётности добавляется к блоку данных так, чтобы коли- чество единичных битов в расширенном блоке стало чётным. • Правильность передачи больших блоков данных проверяется с помощью контрольной суммы. 22
Передача данных §2 • Помехоустойчивый код — это код, который позволяет исправ- лять ошибки, если их количество не превышает некоторого уровня. • Расстояние Хэмминга d — это количество позиций, в кото- рых отличаются два закодированных сообщения одинаковой длины. Для исправления г ошибок необходимо, чтобы выпол- нялось условие d > 2r + 1. • Семибитный код Хэмминга содержит четыре бита данных и три контрольных бита. Он позволяет исправить одну ошибку и обнаружить две. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Почему для любого канала связи скорость передачи данных ограничена? 2. В каких случаях при передаче информации допустимы незна- чительные ошибки? 3. Что такое избыточность сообщения? Для чего её можно ис- пользовать? 4. В каких случаях с помощью бита чётности можно обнаружить ошибку, а в каких — нельзя? 5. Можно ли исправить ошибку, обнаружив неверное значение бита чётности? 6. Как вы думаете, почему для контроля передачи файлов ис- пользуются контрольные суммы, а не бит чётности? 7. Каково должно быть расстояние Хэмминга между двумя лю- быми кодами, чтобы можно было исправить 2 ошибки? 8. Как исправляется ошибка при использовании помехоустойчи- вого кода? 9. Какие достоинства и недостатки есть у кодов Хэмминга с большим размером блоков? © Подготовьте сообщение а) «Циклические избыточные коды (CRC)» б) «Коды Хэмминга» Проекты а) Программа для построения помехоустойчивых кодов б) Помехоустойчивая передача данных (код Хэмминга) 23
1 Информация и информационные процессы © §3 Сжатие данных Ключевые слова: • избыточность • коэффициент сжатия • сжатие без потерь • сжатие с потерями • RLE-сжатие • префиксный код • алгоритм Шеннона-Фано • алгоритм Хаффмана • алгоритм LZW • алгоритм JPEG • артефакты • битрейт Основные понятия Для того чтобы сэкономить место на внешних носителях (жёст- ких дисках, флэш-накопителях) и ускорить передачу данных по компьютерным сетям, нужно сжать данные — уменьшить инфор- мационный объём, сократить длину двоичного кода. Это можно сделать за счёт использования избыточности информации. Например, пусть текстовый файл объёмом 10 Кбайт содержит всего четыре различных символа: латинские буквы «А», «В», «С» и пробел. Вы знаете, что для кодирования одного из четырёх возможных вариантов достаточно 2 бит, поэтому использовать для его передачи обычное 8-битное кодирование символов невыгодно. Можно присвоить каждому из четырёх символов двухбитный код, например так: А - 00, В - 01, С - 10, пробел - 11. Тогда последовательность «АВА САВАВА», занимающая 10 байт в однобайтной кодировке, может быть представлена как цепочка из 20 бит: 00010011100001000100 Таким образом, нам удалось уменьшить информационный объём текста в 4 раза, и передаваться оно будет в 4 раза бы- стрее. Однако непонятно, как декодировать это сообщение, ведь получатель не знает, какой код был использован. Выход состоит в том, чтобы включить в сообщение служебную информацию — заголовок, в котором каждому коду будет сопоставлен ASCII-код символа. Условимся, что первый байт заголовка — это количест- во используемых символов 2V, а следующие N байт — это ASCII- коды этих символов. В данном случае заголовок занимает 5 байт и выглядит так: 24
Сжатие данных §3 000001002 010000012 010000102 010000112 001000002 4 символа А (код 65) В (код 66) С (код 67) пробел (код 32) Файл, занимающий 10 Кбайт в 8-битной кодировке, содержит 10 240 символов. В сжатом виде каждый символ кодируется двумя битами, кроме того, есть 5-байтный заголовок. Поэтому сжатый файл будет иметь объём 5 + 10 240 • 2/8 байт = 2565 байт. Коэффициент сжатия — это отношение размеров исходного и сжатого файлов. В данном случае удалось сжать файл почти в 4 раза, коэф- фициент сжатия равен k = 10 240/2565 « 4. Если принимающая сторона «знает» формат файла (заголо- вок + закодированные данные), она сможет восстановить в точ- ности его исходный вид. Такое сжатие называют сжатием без потерь. Сжатие без потерь используется для упаковки текстов, программ, других данных, которые ни в коем случае нельзя искажать. Сжатие без потерь — это такое уменьшение объёма закодиро- ванных данных, при котором можно восстановить их исход- ный вид из кода без искажений. За счёт чего удалось сжать файл? Только за счёт того, что в файле была некоторая закономерность, избыточность — исполь- зовались только 4 символа вместо полного набора ASCII-кодов. Алгоритм RLE При сжатии данных, в которых есть цепочки одинаковых кодов, можно применять ещё один простой алгоритм, который называ- ется кодированием цепочек одинаковых символов (англ. RLE: Run Length Encoding). Рассмотрим файл, в котором в 8-битной кодировке записаны сначала 100 русских букв «А», а потом — 100 букв «Б»: 1 100 101 200 А А ... А А Б Б Б ... Б Б 25
1 Информация и информационные процессы При использовании алгоритма RLE сначала записывается количе- ство повторений первого символа, далее — код первого символа, затем — количество повторений второго символа, код второго символа и т. д. В данном случае весь закодированный файл за- нимает 4 байта: 011001002 110000002 011001002 110000012 100 А (код 192) 100 Б (код 193) Таким образом, мы сжали файл в 50 раз (по сравнению с 8-битной кодировкой) за счёт того, что в нём снова была из- быточность — цепочки одинаковых символов. Это сжатие без потерь, потому что, зная алгоритм упаковки, исходные данные можно восстановить из кода. Очевидно, что такой подход будет приводить к увеличению (в 2 раза) объёма данных в том случае, когда в файле нет со- седних одинаковых символов. Чтобы улучшить результаты RLE- кодирования даже в этом наихудшем случае, алгоритм модифи- цировали следующим образом. Упакованная последовательность содержит управляющие байты, за каждым управляющим байтом следует один или несколько байтов данных. Если старший бит управляющего байта равен 1, то следующий за управляющим байт данных при распаковке нужно повторить столько раз, сколь- ко записано в оставшихся 7 битах управляющего байта. Если же старший бит управляющего байта равен 0, то надо взять несколько следующих байтов данных без изменения. Сколько именно — записано в оставшихся 7 битах управляющего байта. Например, управляющий байт 100001112 говорит о том, что сле- дующий за ним байт надо повторить 7 раз, а управляющий байт 000001002 — о том, что следующие за ним 4 байта надо взять без изменений. Так, последовательность 100011112 110000002 000000102 110000012 110000102 повтор 15 А (код 192) 2 Б (код 193) В (код 194) распаковывается в 17 символов: АААААААААААААААБВ. Алгоритм RLE успешно использовался для сжатия рисунков, в которых большие области закрашены одним цветом, и неко- торых звуковых данных. Сейчас вместо него применяют более совершенные, но более сложные методы. Один из них (алгоритм Хаффмана) мы рассмотрим ниже. Алгоритм RLE используется, например, на одном из этапов кодирования рисунков в форма- те JPEG. RLE-сжатие предусмотрено также в формате BMP (для рисунков с палитрой 16 или 256 цветов). 26
Сжатие данных §3 Префиксные коды Вспомните азбуку Морзе, в которой для уменьшения длины сооб- щения используется неравномерный код — часто встречающиеся буквы (А, Е, И, М, Н, Т) кодируются короткими последователь- ностями, а редко встречающиеся — более длинными. Такой код можно представить в виде дерева (рис. 1.2). Рис. 1.2 Здесь показано неполное дерево кода Морзе, построенное только для символов, коды которых состоят из одного или двух зна- ков (точек и тире). Из корня и из всех промежуточных узлов (кроме конечных узлов — листьев) выходят две стрелки, левая помечена точкой, а правая — знаком «тире». Чтобы найти код символа, нужно пройти по стрелкам от корня дерева к нужно- му узлу, выписывая метки стрелок, по которым мы переходим. В дереве нет циклов (замкнутых путей), поэтому кодовое слово для каждого символа определяется единственным образом. По этому дереву можно построить такие кодовые слова: Е • И • • А • - Т- Н- • М-- Это неравномерный код, в нём символы имеют коды разной длины. При этом всегда возникает проблема разделения после- довательности на отдельные кодовые слова. В коде Морзе она решена с помощью символа-разделителя — паузы. Однако можно не вводить дополнительный символ, если выполняется условие Фано: ни одно из кодовых слов не является началом другого ко- дового слова. Это позволяет однозначно декодировать сообщение в реальном времени, по мере получения очередных символов. Префиксный код — это код, в котором ни одно кодовое слово не является началом другого кодового слова (условие Фано). 27
1 Информация и информационные процессы Для использования этой идеи в компьютерной обработке данных нужно было разработать алгоритм построения префикс- ного кода. Впервые эту задачу решили, независимо друг от друга, американские математики и инженеры Клод Шеннон и Роберт Фано (код Шеннона—Фано). Они использовали избыточ- ность сообщений, состоящую в том, что символы в тексте имеют разные частоты встречаемости. В этом случае нужно читать данные исходного файла два раза-, на первом проходе опреде- ляется частота встречаемости каждого символа, затем строится код с учётом этих данных, и на втором проходе символы текста заменяются на их короткие коды. Пусть, например, текст состоит только из букв «О», «Е», «Н», «Т» и пробела. Известно, сколько раз они встретились в тексте: пробел — 179, О — 89, Е — 72, Н — 53, Т — 50 раз. Делим символы на 2 группы так, чтобы общее количество най- денных в тексте символов первой группы было примерно равно общему количеству символов второй группы. В нашем случае лучший вариант — это объединить пробел и букву «Т» в пер- вую группу (сумма 179 + 50 = 229), а остальные символы — во вторую (сумма 89 + 72 + 53 = 214). Символы первой группы будут иметь коды, начинающиеся с 0, а остальные — с 1. В первой группе всего два символа, у одного из них, например у пробела, вторая цифра кода будет 0 (и полный код 00), а у второго — 1 (код буквы «Т» — 01). Во второй группе три символа, поэтому продолжаем деление на две группы, примерно равные по количеству символов в тек- сте. В первую выделяем одну букву, которая чаще всего встре- чается — это буква «О» (её код будет 10), а во вторую — буквы «Е» и «Н» (они получают коды 110 и 111). Код Шеннона-Фано, построенный для этого случая, можно нарисовать в виде дерева (рис. 1.3). 28
Сжатие данных §3 Символ ।—। на этой схеме обозначает пробел. В данном случае получаются такие коды символов: । ~ 00, Т — 01, О — 10, Е - 110, Н - 111. Легко проверить, что для этого кода выполняется условие Фано. Это можно сразу определить по построенному дереву. В нём все символы располагаются в листьях, а не в промежуточ- ных узлах. Это значит, что «по пути» от корня дерева до любого символа никаких других символов в промежуточных узлах не встречается (сравните с деревом кода Морзе). Для декодирования очередного символа последовательности мы просто спускаемся от корня дерева, выбирая левую ветку, если очередной бит — 0, и правую, если этот бит равен 1. Дойдя до листа дерева, мы определяем символ, а затем снова начинаем с корня дерева, чтобы декодировать следующий символ, и т. д. Например, пусть получена последовательность 01100110001101111001. Результат её декодирования — «ТОТО ЕНОТ». Алгоритм Хаффмана Было доказано, что в некоторых случаях ко- дирование Шеннона-Фано даёт неоптималь- ное решение, и можно построить код, при котором сообщение будет ещё короче. Так в предыдущем примере (код Шеннона-Фано) пробел и буква «Т» имеют коды одинаковой длины, хотя буква «Т» встречается примерно в 3,5 раза реже пробела. В 1952 году Дэвид Хаффман, ученик Фано, разработал новый алгоритм кодирования и доказал его опти- мальность среди алфавитных кодов. Построим код Хаффмана для того же са- мого примера. Сначала отсортируем буквы по увеличению частоты встречаемости (рис. 1.4). Дэвид Хаффман (1925-1999) Т: 50 Н: 53 Е: 72 0:89 i______i: 179 Рис. 1.4 Затем берём две первые буквы, они становятся листьями дерева, а в узел, с которым они связаны, записываем сумму их частот (рис. 1.5). 29
1 Информация и информационные процессы 103 Е: 72 0:89 i_i: 179 Рис. 1.5 Снова выполняем сортировку по возрастанию частоты, причём для букв «Т» и «Н» используется их суммарная частота (рис. 1.6). Е: 72 Рис. 1.6 Повторяем ту же процедуру для букв «Е» и «О», частоты ко- торых оказались меньше других, и сортируем по возрастанию частот (рис. 1.7). i_i: 179 Рис. 1.7 Теперь объединяем уже не отдельные буквы, а пары, и снова сортируем (рис. 1.8). 30
Сжатие данных §3 На последнем шаге остаётся объединить символ «пробел» с де- ревом, которое построено для остальных символов. У каждой стрелки, идущей влево от какого-то узла, ставим код 0, а у каждой стрелки, идущей вправо, — код 1 (рис. 1.9). Рис. 1.9 По этому дереву, спускаясь от корня к листьям-символам, по- лучаем коды Хаффмана, обеспечивающие оптимальное сжатие с учётом частоты встречаемости символов: i_। - О, Т - 100, О - 111, Е - 110, Н - 101. Легко проверить, что этот код также удовлетворяет условию Фано. Сравним эффективность рассмотренных выше методов. Для алфавита из 5 символов при равномерном кодировании нужно использовать 3 бита на каждый символ, так что общее число бит в сообщении равно (179 + 89 + 72 + 53 + 50) • 3 = 1329 бит. При кодировании методом Шеннона-Фано получаем 179 • 2 + 89 • 2 + 72 • 3 + 53 • 3 + 50 • 2 = 1011 бит, коэффи- циент сжатия составляет 1329/1011 « 1,31. Использование кода Хаффмана даёт последовательность длиной 179-1 + 89-3 + + 72 • 3 + 53 • 3 + 50 • 3 = 971 бит и коэффициент сжатия 1,37. По сравнению со случаем, когда для передачи используется одно- байтный код (8 бит на символ), выигрыш получается ещё более весомым: кодирование Хаффмана сжимает данные примерно в 3,65 раза. Обратим внимание, что сжать данные удалось за счёт избыточности: мы использовали тот факт, что некоторые сим- волы встречаются чаще, а некоторые — реже. Алгоритм кодирования Хаффмана и сейчас широко применя- ется благодаря своей простоте, высокой скорости кодирования и отсутствию патентных ограничений (он может быть использован свободно). Например, он используется на некоторых этапах при 31
1 Информация и информационные процессы сжатии рисунков (в формате JPEG) и звуковой информации (в формате MP3). Алгоритм LZW Алфавитное кодирование, при котором каждый символ кодиру- ется отдельно, учитывает только вероятности появления отдель- ных символов, но не их комбинаций. Поэтому иногда применение алгоритма RLE (учитывающего последовательности!) обеспечи- вает более высокую степень сжатия, чем алгоритм Хаффмана, оптимальный среди алфавитных кодов. Кроме того, на практи- ке вероятности появления символов, как правило, неизвестны, поэтому применить кодирование Хаффмана для потока данных, передаваемого в реальном времени, нельзя. Таким образом, пе- ред учёными встала задача создания универсального алгоритма кодирования, который: • не требует знания вероятностей появления отдельных симво- лов; • позволяет декодировать сообщение, не «заглядывая вперёд», т. е. по мере получения данных в реальном времени; • учитывает повторяющиеся последовательности символов; • обладает помехоустойчивостью. Такой алгоритм был разработан в 1977 году математика- ми А. Лемпелом и Я. Зивом, а в 1984 году усовершенствован Т. Велчем. Он получил название LZW-алгоритма по первым бук- вам фамилий авторов. В отличие от предыдущих методов при LZW-сжатии код при- сваивается не отдельному символу, а нескольким символам (це- почке, или «слову»). Переход от посимвольного кодирования к кодированию цепочек позволяет достичь большего сжатия. Кратко опишем основные идеи LZW-алгоритма. При чтении исходных данных составляется словарь, где хранятся пары «сло- во— код». Из входного потока читаются символы и приписывают- ся в конец рабочей строки до тех пор, пока не получится слово, которого нет в словаре. После этого новому слову присваивается очередной код, а рабочая строка очищается; процесс повторяется до обработки всех данных. На алгоритмическом языке алгоритм LZW-сжатия можно за- писать так: ввод СТРОКА нц пока не конец данных ввод СИМВОЛ если Есть_в_словаре(СТРОКА+СИМВОЛ) то СТРОКА : = СТРОКА + СИМВОЛ 32
Сжатие данных §3 иначе вывод Код(СТРОКА) Добавить_в_словарь(СТРОКА+СИМВОЛ) СТРОКА':= СИМВОЛ все кц вывод Код(СТРОКА) Здесь используются переменные СТРОКА (текущая последо- вательность символов) и СИМВОЛ (последний прочитанный сим- вол), а также три подпрограммы: • функция Код — возвращает целое число — код строки в словаре; • функция Есть—в_словаре — возвращает логическое значение: «истина», если строка есть в словаре, и «ложь», если её там нет; • процедура Добавитьвсловарь — добавляет строку в словарь и присваивает ей первый свободный код. В отличие от алгоритмов Хаффмана и Шеннона-Фано для работы алгоритма LZW не требуется никаких данных о часто- те встречаемости символов, поэтому кодирование выполняется за один проход. Алгоритм LZW применяют для сжатия рисунков в форматах GIF и TIFF, а также для сжатия документов в формате PDF. Сжатие с потерями Выше мы рассмотрели методы сжатия без потерь, при которых можно в точности восстановить исходную информацию, зная ал- горитм упаковки. В некоторых случаях небольшие неточности в передаче дан- ных несущественно влияют на решение задачи. Например, не- большие помехи в телефонном разговоре или в радиопередаче, которая транслируется через Интернет, не мешают пониманию речи. Некоторое дополнительное размытие уже и без этого размы- того изображения (фотографии) непрофессионал даже не заметит. Ещё в большей степени это относится к видеофильмам. Поэто- му иногда можно немного пожертвовать качеством изображения или звука ради того, чтобы значительно сократить объём данных. В этих случаях используется сжатие с потерями. Сжатие с потерями — это такое уменьшение объёма закоди- рованных данных, при которых распакованный (декодирован- ный) файл может отличаться от оригинала. 33
1 Информация и информационные процессы Самые известные примеры сжатия с потерями — это алгорит- мы JPEG (для изображений), MP3 (для упаковки звука) и все ал- горитмы упаковки видеофильмов (MJPEG, MPEG4, DivX, XviD). Простейшие метод сжатия рисунков — снижение глубины цве- та. На рисунке 1.10 показаны три изображения с различной глу- биной цвета. Третье из них занимает при кодировании в 4 раза меньше места, чем первое, хотя воспринимается уже с трудом. а а ф 8 битов на пиксель 4 бита на пиксель 2 бита на пиксель (256 цветов) (16 цветов) (4 цвета) Рис. 1.10 Алгоритм JPEG (англ. Joint Photographic Experts Group — объединённая группа экспертов по фотографии) — один из наи- более эффективных методов сжатия с потерями для изображений. Он довольно сложен, поэтому мы опишем только основные идеи этого алгоритма. Из классической RGB-модели (красный, зелёный, синий) цвет переводится в модель УСЬСг, где Y — яркость, СЬ — «синева», и Сг — «краснота»: У = 0,299 • R + 0,587 • G + 0,114 • В, СЬ = 128 - 0,1687 • R - 0,3313 • G + 0,5 • В, Сг = 128 + 0,5 • R - 0,4187 • G - 0,0813 • В. В этих формулах R, G и В обозначают красную, зелёную и си- нюю составляющие цвета в RGB-модели. Чёрно-белое изображе- ние (точнее, оттенки серого) содержит только У-составляющую, компоненты цвета СЬ и Ст равны 128 (проверьте это сами!) и не несут полезной информации. Основная идея сжатия основана на том, что человеческий глаз более чувствителен к изменению яркости, т. е. составляющей У. Поэтому на синюю и красную составляющие, СЬ и Сг, приходит- ся меньше полезной информации, и на этом можно сэкономить. Рассмотрим квадрат размером 2x2 пикселя. Можно, напри- мер, сделать так: запомнить Y-компоненту для всех пикселей изображения (4 числа) и по одной компоненте СЬ и Ст на все 4 пикселя (рис. 1.11). Сохраняемые значения СЬ и Сг можно вычислить как средние значения: СЬ = (CbjL + СЬ2 + СЬ3 + СЬ4) / 4, Сг = (С^ + Cr2 + Cr3 -I- Сг4) / 4. 34
Сжатие данных §3 Yi СЦ Сгг ^2 Cb2Cr2 Y3 Cb3Cr3 Y4 Cb4Cr4 —► Y^Y^Y^Y^CUCr Рис. 1.11 Таким образом, вместо 12 чисел мы должны хранить всего 6, данные сжаты в 2 раза. Однако мы не сможем восстановить обратно исходный рисунок, потому что информация о том, ка- кие были значения СЬ и Сг для каждого пикселя, безвозвратно утеряна, есть только некоторые средние значения. При выводе такого изображения на экран можно, например, считать, что все 4 пикселя имели одинаковые значение СЬ и Сг. Более сложные алгоритмы используют информацию о соседних блоках, сглаживая резкие переходы при изменении этих составляющих. Поэтому при кодировании с помощью алгоритма JPEG изображение не- сколько размывается. Но это ещё не всё. После этого к оставшимся коэффициентам применяется сложное дискретное косинусное преобразование, с помощью которого удаётся выделить информацию, которая мало влияет на восприятие рисунка человеком, и отбросить её. На последнем этапе для сжатия оставшихся данных используются алгоритмы RLE и Хаффмана. На рисунке 1.12 вы видите результат сжатия изображения шарика в формате JPEG с разным качеством. Рис. 1.12 Рисунки, сохранённые с качеством 100 и 50, практически не отличаются внешне, однако второй из них занимает в 2,65 раза меньше места. При снижении качества до минимального явно заметны искажения (артефакты), вызванные потерей информации при сжатии (рис. 1.12. г). Кажется, что рисунок построен из 35
Информация и информационные процессы квадратов размером 8x8 пикселей (в действительности именно такие квадраты использует алгоритм в качестве базовых ячеек). Кроме того, искажения особенно заметны там, где происходит резкий переход от одного оттенка к другому. Тот же самый рисунок был сохранен в формате BMP без сжатия и с RLE-сжатием, а также в форматах GIF (сжатие без потерь с помощью алгоритма LZW) и PNG (сжатие без потерь с помощью алгоритма DEFLATE). Размеры полученных файлов (в килобайтах) сравниваются на диаграмме (рис. 1.13). V, Кбайт BMP BMP(RLE) GIF PNG JPEG(IOO) JPEG(50) JPEG(O) Рис. 1.13 По диаграмме видно, что наибольшее сжатие (наименьший объём файла) обеспечивается алгоритмом JPEG. Заметим, что особен- ность этого рисунка — плавные переходы между цветами. Теперь рассмотрим другой рисунок, в котором у объектов есть большие области одного цвета и чёткие границы у объектов. Здесь ситуация несколько меняется (рис. 1.14). V, Кбайт 120 100 80 60 40 20 BMP BMP(RLE) GIF PNG JPEG(IOO) JPEG(50) JPEG(O) Рис. 1.14 36
Сжатие данных §3 Форматы GIF и PNG обеспечивают степень сжатия, сравни- мую с алгоритмом JPEG среднего качества. Учитывая, что JPEG приводит к искажению изображения, a GIF и PNG — нет, для таких рисунков не рекомендуется использовать формат JPEG. Другой известный пример сжатия с потерями — алгоритм MPEG-1 Layer 3, который более известен как MP3. В нём от- брасываются некоторые компоненты звука, которые практически неразличимы для большинства людей. Такой подход называется кодированием восприятия, потому что он основан на особенно- стях восприятия звука человеком. Одна из главных характеристик сжатия звукового файла — битрейт (англ, bitrate — темп поступления битов). Битрейт — это число бит, используемых для кодирования одной секунды звука. Формат MP3 поддерживает разные степени сжатия, с битрейтом от 8 до 320 Кбит/с. Звук, закодированный с битрейтом 256 Кбит/с и выше, даже профессионал вряд ли отличит от звучания компакт-диска. Вспо- миная материал 10 класса, можно подсчитать, что 1 секунда зву- ка занимает на компакт-диске (частота дискретизации 44 кГц, глубина кодирования 16 бит, стерео) 2 • 88000 байт = 176 000 байт = 1 408000 бит = 1408 Кбит. Таким образом, формат MP3 обеспечивает степень сжатия 1408/256 = 5,5 при сохранении качества звучания для челове- ка (хотя часть информации, строго говоря, теряется). Для сжатия видео может использоваться алгоритм MJPEG (англ. Motion JPEG — JPEG в движении), когда каждый кадр сжимается по алгоритму JPEG. Кроме того, широко применяют стандарт MPEG-4, разработанный специально для сжатия цифро- вого звука и видео. Какие данные хорошо сжимаются? Все алгоритмы сжатия основаны на том, что в данных есть некоторая избыточность, закономерность, которую можно ис- пользовать для уменьшения информационного объёма. Хорошо сжимаются данные, в которых большая избыточность: • тексты, в которых повторяются одинаковые слова и символы; • документы — тексты с оформлением и, возможно, вставлен- ными рисунками, таблицами и т. п.; • рисунки, имеющие большие области одного цвета и записан- ные без сжатия; • несжатый звук; • несжатое видео. 37
1 Информация и информационные процессы Плохо сжимаются данные, где избыточность маленькая или её совсем нет: • архивы, упакованные со сжатием (zip, rar, 7z и др.); • сжатые рисунки (файлы gif, jpg, png, tif и др.); • сжатый звук (файлы mp3, wma); • сжатое видео (файлы mp4, mpg, wmv); • многие исполняемые программы. Данные невозможно сжать, если в них нет никаких зако- номерностей. Поэтому хуже всего сжимаются случайные числа, например полученные на компьютере. Современным программам- упаковщикам иногда удаётся их немного сжать, но не более чем на 1-2%. Сжатие удаётся потому, что в последовательности псев- дослучайных чисел, которую выдаёт компьютерная программа-ге- нератор, всё же можно выявить какие-то закономерности. Заметим, что не всегда нужно стремиться к полному устране- нию избыточности кода. Как вы знаете из предыдущего парагра- фа, именно избыточность позволяет обнаруживать и исправлять ошибки при передаче данных. Выводы • Сжатие данных возможно, если в сообщении есть избыточ- ность. • Коэффициент сжатия — это отношение размеров исходного и сжатого файлов. • Для каждого сообщения существует предельно достижимая степень сжатия. Чем меньше закономерностей в коде сообще- ния, тем сложнее его сжать. • Существует два типа алгоритмов сжатия: сжатие без потерь и сжатие с потерями. Сжатие с потерями используется при передаче рисунков, звука, видео. • Алгоритм Хаффмана — оптимальный алгоритм кодирования среди алфавитных кодов. • Алгоритм LZW учитывает повторяющиеся последовательности символов и не использует вероятности появления отдельных символов. • В форматах JPEG и MP3 используются алгоритмы сжатия с потерями. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. За счёт чего удаётся сжать данные без потерь? Когда это сделать принципиально невозможно? 38
Сжатие данных §3 2. Какие типы файлов сжимаются хорошо, а какие — плохо? Почему? 3. Текстовый файл, записанный в однобайтной кодировке, содер- жит только 33 прописные русские буквы, цифры и пробел. Ответьте на вопросы. — Какое минимальное число бит нужно выделить на символ при передаче, если каждый символ кодируется одинаковым числом бит? — Сколько бит при этом будет занимать заголовок пакета данных? — При какой минимальной длине текста коэффициент сжа- тия будет больше 1? 4. На чём основан алгоритм сжатия RLE? Когда он работает хорошо? Когда нет смысла его использовать? 5. В каких случаях допустимо сжатие с потерями? 6. На чём основан алгоритм JPEG? Почему это алгоритм сжатия с потерями? 7. Для каких типов изображений эффективно сжатие JPEG? Когда его не стоит применять? 8. На чём основано сжатие звука в алгоритме MP3? 9. Как связан битрейт с качеством звука? В чём состоит ком- промисс при выборе битрейта? 10. Выясните, сколько лет было Д. Хаффману, когда он придумал свой алгоритм кодирования. Подготовьте сообщение а) «Программы для сжатия данных» б) «Алгоритмы сжатия изображений» в) «Алгоритмы сжатия звука» г) «Алгоритмы сжатия видеоданных» д) «Аудиокодеки» е) «Видеокодеки» Проекты а) Программа для сжатия и распаковки данных с помощью ал- горитма RLE б) Программа для кодирования и декодирования, использующая префиксный код в) Сравнение алгоритмов сжатия архиваторов г) Сравнение алгоритмов сжатия звука (видео) 39
1 Информация и информационные процессы Интересные сайты jpegmini.com — сервис для сжатия изображений в формате JPEG tinypng.com — сервис для сжатия изображений в форматах PNG и JPEG §4 Информация и управление Ключевые слова: • управление • кибернетика • система • компонент системы • системный эффект • системный анализ • разомкнутая система • замкнутая система • обратная связь • автоматическая система • автоматизированная система Кибернетика Норберт Винер (1894-1964) Человек с древних времен хотел использовать предметы и силы природы в своих целях, т. е. управлять ими. В середине XX века учёные поняли, что управление неразрывно связано с информацией и информационными процессами. В 1948 году появилась книга американского ма- тематика Норберта Винера «Кибернетика, или управление и связь в животном и машине», с которой началось развитие новой науки — кибернетики. Кибернетика (от греч. киРеруг|тг|(; — кормчий, рулевой) — это наука, изучающая общие закономерности процессов управле- ния и передачи информации в машинах, живых организмах и обществе. Основная идея Винера состояла в том, что управление в любых системах — технических, биологических, общественных — определяется одними и теми же законами и тесно связано с обменом информацией. 40
Информация и управление §4 Что такое система? Представьте себе, что человек, у которого болит голова, приходит к врачу. Врач может реагировать на его жалобу двумя способами: 1) просто дать обезболивающее; 2) попытаться выяснить причину головной боли и лечить именно больной орган. В первом случае врач применил простейшую модель: если бо- лит голова, нужно дать таблетку, чтобы она не болела. Во втором варианте врач понимает, что головная боль вызвана какой-то бо- лезнью в организме (причём не обязательно болезнью головы), и лечить нужно именно её. Он рассматривает человека как единое целое, как систему, т. е. использует системный подход. Система (от греч. сгисгтгща — составленный) — это группа объектов и связей между ними, выделенных из среды и рас- сматриваемых как одно целое (рис. 1.15). о Внешняя среда Рис. 1.15 Системный подход состоит в том, что объект исследования рассматривается как система с учётом всех взаимосвязей между её частями. Системой можно назвать организм животного и человека, ав- томобиль, компьютер, семью, общество и вообще любой доста- точно сложный объект, который можно разбить на связанные между собой части. В курсе информатики вы познакомились с понятиями «операционная система», «файловая система», «систе- ма программирования». Различают естественные (природные) системы и искусственные системы (созданные человеком). Любая искусственная система созда- на с определённой целью, например русский язык — для общения, дом — для жилья, поезд — для перевозки пассажиров и грузов. Объекты, из которых строится система, называют её компо- нентами. За счёт связей между частями система обладает особы- ми свойствами, которых нет ни у одного отдельного компонента. Системный эффект состоит в том, что свойства системы нельзя 41
1 Информация и информационные процессы свести к «сумме» свойств её компонентов. Например, скопление клеток — это не живой организм; процессор, память и устройст- ва ввода и вывода, не связанные между собой, — это не компью- тер. Все компоненты самолёта тяжелее воздуха, т. е. каждый из них стремится упасть на землю, однако составленная из них система (самолёт) летает. Одни и те же компоненты, связанные по-разному, могут пред- ставлять собой совершенно разные системы. Алмаз (самое твёрдое вещество) и графит (из которого делают грифели карандашей) состоят из одних и тех же атомов углерода, но эти вещества имеют разные кристаллические решётки, поэтому обладают раз- ными свойствами. Если в компоненте можно выделить отдельные части и связи между ними, он называется подсистемой (системой более низкого уровня). Как правило, для каждой системы существует над систе- ма — система более высокого уровня. Например, процессор — это подсистема в составе компьютера (он состоит из нескольких взаимосвязанных узлов), а сам компьютер — подсистема в соста- ве компьютерной сети (надсистемы). о Цель работы системы задаётся надсистемой. Например, автомобиль служит для того, чтобы перевозить лю- дей и грузы, цех выполняет задание директора завода, вы учи- тесь для того, чтобы быть готовыми к жизни после окончания школы, и т. д. Простейшие компоненты системы, которые в данной задаче (!) нет смысла «разбирать» на части, называются её элементами. Например, винтик в составе машины можно считать элементом системы. Однако с точки зрения химии металл состоит из атомов, связанных в кристаллическую решетку, поэтому при изучении строения вещества тот же винт можно считать системой. На ри- сунке 1.16 система S состоит из двух подсистем Sj и S2, а также элементов Г и Д. 42
Информация и управление §4 В результате развития системного подхода в середине XX века появилось новое научное направление — системный анализ. За- дача системного анализа — изучение сложных систем (техни- ческих, биологических, экономических, социальных) на основе теории управления и теории информации. Системы управления Во многих системах взаимодействие между подсистемами мож- но рассматривать как управление. Такие системы (их называют системами управления) всегда содержат управляющий объект (в теории управления его называют регулятором) и управляемый объект (просто «объект»). Цель управления чаще всего задаётся извне, т. е. регулятор является только исполнителем. Например, водитель служебной машины никогда не решает сам, куда везти своего начальника. Регулятор действует на объект (управляет им) так, чтобы цель была достигнута (рис. 1.17). Это значит, что при управле- нии передаётся информация. Цель I Рис. 1.17 В системе на рис. 1.17 регулятор не получает никакой ин- формации о состоянии объекта, т. е. действует «вслепую». Такие простейшие системы управления называют разомкнутыми, в них информация идёт только в одну сторону — от регулятора к объ- екту. Приведём некоторые примеры разомкнутых систем: • светофор (выдаёт вам световой сигнал, но не получает инфор- мации от вас); • табло на вокзале или в аэропорту; • начальник, который отдаёт приказания, но не проверяет их выполнение. Разомкнутые системы используются в двух случаях. Во-пер- вых, когда регулятору всё равно, реагирует ли объект на управ- ление (светофор, табло). Во-вторых, когда регулятор настолько хорошо знает объект (имеет точную модель объекта), что уверен в выполнении своих команд. Например, начальник, уверенный в исполнительности своих подчинённых, может позволить себе (иногда) не контролировать их. 43
Информация и информационные процессы Достоинство разомкнутых систем — в их простоте. Например, во многих случаях частоту вращения электродвигателя регулиру- ют простым реостатом, при этом не нужно ставить сложный и дорогостоящий датчик частоты вращения. В ответственных случаях разомкнутые системы лучше не при- менять, потому что они имеют серьёзные недостатки: • для достижения цели регулятор должен иметь точную модель объекта; на практике такая модель чаще всего неизвестна; • на объект всегда действует внешняя среда, и из-за этого воз- действия свойства объекта могут непредсказуемо меняться; регулятор в разомкнутой системе не получает об этом ника- кой информации. Даже очень исполнительные работники могут в какой-то момент «схалтурить» из-за личных переживаний или неурядиц. Поэто- му в разомкнутых системах чаще всего нельзя гарантированно достичь цели управления, т. е. решить поставленную задачу. Для достижения цели регулятор должен получать инфор- мацию от объекта. Этот канал передачи информации называют обратной связью, потому что по нему информация передаётся (с помощью датчиков) в «обратном» направлении — от объекта к регулятору (рис. 1.18). Обратная связь Рис. 1.18 Системы с обратной связью называют замкнутыми системами управления, потому что информация передаётся по замкнутому контуру, циклически. Замкнутая система управления — это система управления с обратной связью. Задача регулятора — сравнить поставленную цель и реальное состояние объекта, а потом выдать нужный управляющий сигнал. 44
Информация и управление §4 Если цель достигнута, как правило, сигнал управления больше не изменяется. Например, регулировщик, управляющий движением на пере- крёстке, использует обратную связь. Он оценивает (с помощью гл аз-датчиков) количество машин, движущихся в разных на- правлениях, и «открывает» то или другое направление. Человек управляет лучше, чем светофор, потому что учитывает реальную обстановку, которая может изменяться непредсказуемо. Чаще всего реальные системы управления (в природе, в тех- нике, в обществе) — это замкнутые системы. Они обладают не- сомненными достоинствами: • могут решать задачу даже тогда, когда модель объекта неточ- на или свойства объекта изменяются во времени; • позволяют учитывать случайные воздействия внешней среды. За это приходится расплачиваться усложнением системы — нуж- ны датчики, которые передают информацию от объекта. Представьте себе, что в тёмной комнате упала на пол пуго- вица, и вы не слышали, как она стукнулась. Сказать точно, где лежит пуговица, не сходя с места, невозможно, потому что вы этого не знаете (модель неточна). Вы можете попробовать искать её на ощупь (используя обратную связь — осязание). Если и это не получается, можно включить свет (зрительная обратная связь даёт больше информации), и тогда пуговица точно будет найдена (если она, конечно, там есть). В этом примере датчиками служат наши органы чувств. Системы с обратной связью широко используются в технике. Это, например, автопилоты на самолётах и судах, регуляторы частоты вращения турбин, роботы, оборудованные датчиками (в том числе устройствами «компьютерного зрения»). Обратная связь существует и в обществе. Жалобы граждан должны помогать работе органов управления, сигнализируя о том, что не всё в порядке. Не зря все официальные учреждения имеют контактные телефоны и сайты в Интернете, с которых можно отправить сообщение с просьбой или предложениями по их работе. Обратная связь, при которой регулятор стремится уменьшить разницу между заданной целью и фактическим состоянием объ- екта, называется отрицательной, потому что изменение сигнала управления в этом случае определяется разностью между целью и сигналом обратной связи. Если нужно быстро перевести объект из одного состояния в другое, иногда применяют положительную обратную связь, при которой регулятор стремится увеличить разницу между задан- ным значением и сигналом обратной связи. Часто в этом случае 45
1 Информация и информационные процессы система переходит в колебательный режим, поэтому положитель- ная обратная связь используется в генераторах колебаний. Дру- гой пример положительной обратной связи — цепные реакции в химии и физике (горение, взрыв, ядерные реакции). Системы управления делятся на автоматические и автомати- зированные. Автоматические системы работают без участия чело- века, например автопилот. В автоматизированных системах сбор и предварительную обработку информации выполняет компьютер, а решение по поводу управления принимает человек. Многие системы умеют «подстраиваться» под изменение внешних условий или свойств объекта управления. В техниче- ских системах адаптивные регуляторы могут управлять объек- том, модель которого очень плохо известна или меняется. Они решают две задачи — управляют объектом и одновременно уточ- няют его модель, перестраивая закон управления при изменении этой модели. Управление роботами Робот — это автоматическая система, предназначенная для заме- ны человека при выполнении опасных, тяжёлых и трудоёмких работ. Роботом нужно как-то управлять, поэтому необходима система управления, которая в современных роботах строится на микро- контроллерах. Микроконтроллер — это миниатюрный компьютер, все части которого размещены на одном кристалле кремния. Он содержит процессор, разъёмы для управления внешними устрой- ствами (порты), оперативную и постоянную память. В постоянную память микроконтроллера записана программа, которую он при включении сразу начинает выполнять. Для того чтобы робот мог двигаться, нужны исполнитель- ные устройства — моторы, которые преобразуют электрическую энергию в механическую энергию вращения. Автономные роботы чаще всего передвигаются с помощью колёс или гусениц, для неровных поверхностей иногда используют шагающие системы. Существуют также ползающие и плавающие роботы. Данные об окружающей обстановке (сигналы обратной связи) робот получает от датчиков. Это могут быть датчики температу- ры, давления, скорости, освещённости, датчики касания («кноп- ки»), датчики расстояния (они используют время, за которое ультразвук отражается от препятствия и возвращается обратно), инфракрасные датчики для поиска и обнаружения объектов и многие другие. Более сложные роботы имеют системы компью- 46
Информация и управление §4 терного зрения на основе видеокамер. Они могут «узнавать» про- стые предметы, определять их расположение в пространстве и достраивать невидимые части, используя информацию из своей базы данных. Поскольку сигналы с датчиков обрабатывает цифровой компьютер, их нужно преобразовать в двоичный код, в числа. Эту работу выполняет аналого-цифровой преобразователь (АЦП), который, как правило, встроен в микроконтроллер. Для примера рассмотрим систему управления роботом, ко- торый должен двигаться в направлении цели. В любой момент робот может определить (например, с помощью датчика инфра- красного излучения) курс на цель <р0, а также свой курс ср (на- пример, с помощью компаса или навигационной системы) — рис. 1.19. Если эти направления различны, то вычисляется ошибка управления е = <р - <р0 и подаётся сигнал управления и на моторы, вращающие колёса. Рис. 1.19 Будем считать положительным сигнал управления, который вращает робота по часовой стрелке. Тогда в простейшем случае можно использовать закон управления вида и =-ke = -k( ф-фо), где к — некоторый коэффициент. Такой закон управления назы- вается пропорциональным, потому что сигнал управления про- порционален ошибке. Это отрицательная обратная связь, так как регулятор стремится свести ошибку к нулю. Конечно, в реальных роботах используют более сложные за- коны управления. Этими вопросами занимается теория автомати- ческого управления — раздел математики, в котором изучается управление автоматическими системами. 47
1 Информация и информационные процессы Выводы • Кибернетика — это наука, изучающая общие закономерности процессов управления и передачи информации в машинах, живых организмах и обществе. • Система — это группа объектов и связей между ними, выде- ленных из среды и рассматриваемых как одно целое. Цель работы системы задаётся надсистемой. • Системный эффект состоит в том, что свойства системы нель- зя свести к «сумме» свойств её компонентов. • Для эффективного управления необходима обратная связь от управляемого объекта к регулятору. • Теория автоматического управления — это раздел математики, в котором изучается управление автоматическими системами. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Как связана информация с управлением? 2. Чем система отличается от группы объектов? Приведите при- меры. 3. Всякий ли объект можно считать системой? Почему? 4. Как вы думаете, можно ли назвать русский язык системой? Обоснуйте ваш ответ. 5. Объясните, почему операционная система, файловая система и система программирования — это именно системы. 6. Чем различаются понятия «компонент системы», «элемент системы» и «подсистема»? 7. Что такое надсистема? Почему цель для системы всегда задаёт надсистема? 8. Какие элементы всегда есть в системе управления? 9. Почему разомкнутые системы не используют в ответственных случаях? Почему они иногда всё же используются, несмотря на их недостатки? 10. Перечислите достоинства и недостатки замкнутых систем. 11. Приведите примеры управления с обратной связью из разных областей, из вашей жизни. 12. Сравните системы с отрицательной и положительной обратной связью. 13. Чем отличаются автоматические и автоматизированные сис- темы? 48
Информационное общество §5 Подготовьте сообщение «Н. Винер и его вклад в науку» Проекты а) Моделирование систем управления б) Управление роботом (станком с ЧПУ и т. п.) §5 Информационное общество Ключевые слова: • информационное общество • электронные сервисы и услуги • информационные технологии • дистанционное обучение • открытые образователь- ные ресурсы • информационная культура • стандарт Что такое информационное общество? По мере развития человечества постоянно повышалась роль ин- формации в жизни общества и отдельного человека. Самые важ- ные достижения в этой области — это: • письменность (около 3000 лет до н. э., Египет); • книгопечатание (X век — Китай, XV век — Европа); • средства связи (телеграф, телефон, радио, телевидение; конец XIX-начало XX века); • компьютеры (вторая половина XX века). Сейчас считается, что мы переходим от индустриального об- щества, в котором главная роль отводится промышленности, к информационному (постиндустриальному). Информационное общество — это такая ступень развития ци- вилизации, на которой главными продуктами производства становятся информация и знания. Переход к информационному обществу часто называют инфор- матизацией. Япония, США и некоторые страны Европы (например, Герма- ния) уже приблизились к информационному обществу. Об этом можно судить по следующим признакам: 49
1 Информация и информационные процессы • внедрение компьютеров и информационных технологий во все сферы жизни; • развитие коммуникаций (средств связи) — компьютерных се- тей, сотовой связи и т. п.; • необходимость компьютерной грамотности для любого чело- века; • свобода доступа к информации; • доступность образования, в том числе дистанционного (через Интернет); • изменение структуры экономики — всё больше людей зани- маются не производством товаров, а получением и обработкой информации; • изменение уклада жизни людей (например, общение через Интернет вместо личной встречи; интернет-магазины и ис- пользование электронных денег и т. п.). Если в результате индустриализации машины заменили чело- века на производстве, то теперь компьютеры начинают самостоя- тельно (без участия человека) собирать и обрабатывать информа- цию, заменяя людей в умственной работе, которую до этого мог сделать только человек. С одной стороны, переход к информационному обществу об- легчает жизнь людей, потому что на всех рутинных и тяжёлых работах их заменяют компьютеры и роботы. С другой стороны, существует немало негативных последствий: • усиление влияния средств массовой информации (СМИ), с по- мощью которых несколько человек могут влиять на большие массы людей; так, широкое освещение террора в СМИ приво- дит к значительному влиянию террористических организаций на нашу жизнь, поэтому некоторые учёные говорят о том, что общество теряет устойчивость; • в результате доступности информации нередко разрушается частная жизнь людей и целых организаций (например, в Ин- тернет нередко попадают сведения, не предназначенные для всеобщего доступа); • в огромном потоке информации очень сложно выбрать качест- венные и достоверные данные (в Интернете, например, очень много ложной и противоречивой информации); • личное общение людей всё больше заменяется общением в Интернете, реальная жизнь подменяется виртуальной; • многим людям старшего поколения очень сложно приспо- собиться к меняющимся условиям, они могут оказаться «за бортом». 50
Информационное общество §5 Информационные технологии Один из признаков информационного общества — широкое внед- рение информационных технологий во все сферы жизни. Любая технология — это способ сделать продукт из исходных материалов (с гарантированным результатом!). Информационные технологии — это технологии, связанные с использованием компьютеров для хранения, защиты, обработ- ки и передачи информации. К информационным технологиям относятся: • подготовка цифровых документов; • поиск информации; • телекоммуникации (компьютерные сети, Интернет, электрон- ная почта); • автоматизированные системы управления (АСУ); • системы автоматизированного проектирования (САПР); • геоинформационные системы (на основе карт, снимков со спутника); • обучение с помощью компьютеров (электронные учебники, компьютерные тренажёры, дистанционное обучение через Ин- тернет) и другие. Остановимся на некоторых информационных технологиях бо- лее подробно. Примером АСУ может служить система, предназначенная для автоматизации работы ресторанов. На рабочих местах барменов, официантов, менеджеров и администраторов установлены персо- нальные компьютеры, связанные в единую локальную сеть. При получении заказа информация о нём сразу передаётся в базу дан- ных и распечатывается на принтерах, установленных на кухне. В промышленности широко используются автоматизирован- ные системы управления технологическими процессами (АСУ ТП). Представим себе организацию, которая отвечает за работу нескольких дизель-генераторов, расположенных в разных местах. Каждый генератор связан с управляющим компьютером, который собирает информацию о работе установки и передаёт её (по ка- бельной линии или через радиомодем) в центральный офис, где за обстановкой следит диспетчер. В случае необходимости дис- петчер передаёт обратно команду на изменение режима работы генератора или принимает решение о выезде ремонтной бригады. Информационные технологии открывают большие возможно- сти для обучения. Электронные учебники позволяют, в отличие от бумажных, использовать мультимедийные технологии: звук, о 51
1 Информация и информационные процессы видео, анимацию. Они становятся интерактивными, учащийся может использовать их как тренажёр, выполняя задания. Неко- торые обучающие программы строят модель конкретного ученика и выбирают «маршрут», оптимальный именно для него. С развитием Интернета стало возможным дистанционное обучение. На сервере выкладываются учебные материалы и практические задания. Группе учащихся выделяется препода- ватель-наставник (тьютор), у которого они могут свободно кон- сультироваться, используя электронную почту, чаты и др. Все проблемы можно обсудить с однокурсниками на форуме. С по- мощью такой системы можно осваивать курс университета, не выходя из дома (нужен только доступ в Интернет). Для освоения сложной техники используют компьютерные тренажёры. Они необходимы для обучения персонала в тех слу- чаях, когда ошибка при работе с реальным объектом может при- вести к тяжёлым последствиям. Очень важны тренажёры для обучения лётчиков и судоводителей, они позволяют отработать действия в разнообразных аварийных ситуациях. Часто трена- жёры применяются в связке с реальной аппаратурой (рис. 1.20)1*. Рис. 1.20 Простейшие тренажёры — это компьютерные игры-симулято- ры, моделирующие полёт самолета или вождение автомашины. Они строятся на основе математических моделей, которые при- ближённо описывают реальные объекты. Государственные электронные сервисы и услуги Государственные организации нашей страны постепенно переходят к использованию электронных документов и оказанию услуг через !) Фотографии тренажёров предоставлены компаниями «Динамика» (www.dinamika-avia.ru) и «Транзас» (www.transas.ru). 52
Информационное общество §5 Интернет. Это позволяет людям экономить время и не стоять в очередях для подачи документов, которые можно представить в электронном виде. Для этого созданы различные государственные электронные сервисы. В 2009 году был запущен Портал государственных услуг Российской Федерации (сайт gosuslugi.ru), с помощью которого граждане могут получить справочную информацию и заказать по- лучение различных государственных услуг. Для полного использования возможностей портала необходи- ма регистрация с использованием электронного адреса, номера мобильного телефона и номера свидетельства пенсионного стра- хования (СНИЛС). При регистрации обязательно подтверждение личности пользователя, после этого он получает возможность, на- пример, получить сведения о состоянии личного счёта из Пенси- онного фонда или подать заявление на получение загранпаспорта, просто заполнив форму на портале. Все услуги на портале сгруппированы в четыре группы: для физических лиц, предпринимателей, иностранных граждан и юри- дических лиц. Например, физическое лицо может: • оставить заявку на получение внутреннего или заграничного паспорта; • подать налоговую декларацию; • записаться на приём к врачу; • зарегистрироваться как индивидуальный предприниматель или юридическое лицо; • зарегистрировать транспортное средство; • оплатить штрафы ГИБДД. Федеральная служба государственной регистрации, кадастра и картографии (Росреестр) предоставляет электронные услуги ре- гистрации прав и сделок с недвижимостью (квартирами, домами, садовыми участками и т. п.) на своём сайте rosreestr.ru. Сайт Федеральной налоговой службы работает по адресу www.nalog.ru. С помощью этого портала гражданин может узнать о наличии задолженности по уплате налогов, подать налоговую де- кларацию, начать свой бизнес, подать жалобу в налоговые органы. Электронные услуги оказывают на своих сайтах различные министерства и ведомства, в том числе: • Министерство внутренних дел — mvd.ru; • Госавтоинспекция — gibdd.ru; • Федеральная миграционная служба — www.fms.gov.ru; • Федеральная служба по надзору в сфере защиты прав потре- бителей (Роспотребнадзор) — rospotrebnadzor.ru; • Пенсионный фонд России — www.pfrf.ru. 53
1 Информация и информационные процессы Для оценки качества предоставления государственных услуг создан специальный сайт vashkontrol.ru, где любой желающий может оставить свой отзыв. Открытые образовательные ресурсы Из-за быстрого развития информационного общества и проис- ходящих при этом изменений человеку приходится учиться на протяжении всей своей жизни. Всё больше людей считают, что образование должно служить интересам общества и быть свободно и бесплатно доступным каждому. Термин «открытые образовательные ресурсы» (OOP) был введён международной организацией ЮНЕСКО в 2002 году. Он обозначает учебные и научные материалы, размещённые в от- крытом доступе или выпущенные под свободной лицензией (чаще всего это лицензии Creative Commons и GNU Free Documentation License), которая разрешает их бесплатное использование, копи- рование и распространение. Это могут быть тексты и видеозапи- си лекций, тесты, задания, учебные видео, иллюстрации и даже целые учебные курсы. Большая часть онлайн-курсов во всем мире разрабатывается университетами. Теперь каждый может не только прослушать видеозаписи лекций ведущих учёных, но и выполнить те же за- дания, которые они предлагают своим студентам. Ведущие сайты, представляющие онлайн-курсы на английском языке, — это Академия Хана, Coursera, Udacity, EdX. В Рос- сии широко известен Национальный открытый университет «ИНТУИТ», который предлагает несколько сотен бесплатных курсов на русском языке. Информационная культура Возрастание роли информации в современном обществе требует от каждого человека (и от общества в целом) определённой культуры обращения с информацией и информационными технологиями, т. е. информационной культуры. Информационная культура общества — это способность об- щества: • эффективно использовать информационные ресурсы и средства обмена информацией; • применять передовые достижения в области информационных технологий. Информационная культура человека — это его умение ис- пользовать современные технологии для решения своих задач, 54
Информационное общество §5 связанных с поиском и обработкой информации. Современный человек должен уметь: • сформулировать свою потребность в информации; • находить нужную информацию, используя различные источ- ники; • отбирать и анализировать информацию (в том числе конспек- тировать, составлять рефераты); • представлять информацию в разных видах; • обрабатывать информацию и создавать новую информацию; • использовать информацию для принятия решений. Это не просто какие-то требования к «идеальному» челове- ку. Дело в том что в новом информационном обществе успеш- ность человека и его возможность реализовать все свои спо- собности будут зависеть от его умения грамотно работать с информацией. Понятие «информационная культура» включает в себя этичное поведение при использовании информации. Неэтично подавлять высказывания других, даже если это противоречит вашим убе- ждениям. Неэтично беспокоить других и угрожать им. При воз- никновении конфликтов нужно применить все возможные меры, чтобы решить проблему без обращения в суд. Неэтично распространять высказывания, изображения или мнения других без их согласия. Если вы хотите разместить в общем доступе (например, в социальной сети) информацию, ка- сающуюся частной жизни других людей (фотографии, личную переписку), следует спросить их разрешения. С одной стороны, развитие компьютерной техники и комму- никационных технологий предоставляет широкие возможности и (кажущуюся) полную свободу. С другой стороны, в информацион- ном обществе продолжают действовать все нормы права и морали, которые выработало человечество за свою историю. Стандарты в сфере информационных технологий В современном обществе важную роль играют стандарты. Стандарт — это нормативный документ, в котором определе- ны требования к некоторому объекту или процессу. Давайте представим себе, что никаких стандартов нет. Это значит, например, что все электрические лампочки имеют раз- личный диаметр резьбы, и лампочка одной фирмы не подходит к светильнику другой, и мониторы для компьютеров разных фирм имеют разные разъёмы и соединительные кабели. 55
1 Информация и информационные процессы Чтобы не было такой неразберихи, вводят стандарты. Напри- мер, способ записи чисел в десятичной системе счисления и алфа- виты различных языков — это стандарты докомпьютерной эпохи. В области современных информационных технологий существуют стандарты на: • использование технических терминов (они определяют значе- ние каждого термина); • разъёмы (для кабелей питания, для видеосигналов и др.); • величины напряжения и силы тока, которые подаются на раз- личные устройства компьютера; • протоколы обмена данными (например, для сети Интернет ис- пользуется семейство протоколов TCP/IP); • языки программирования; • оформление документации и многое другое. Профессиональные стандарты определяют требования к работ- никам разных профессий (программисту, системному администра- тору, тестировщику, техническому писателю и т. д.). Разработкой международных стандартов в области информа- ционных технологий занимаются Международная организация по стандартизации (ISO) и Международная электротехническая комиссия (МЭК). Пример успешного применения стандартов — открытая ар- хитектура компьютеров, которую предложила фирма IBM в кон- це XX века. Она опубликовала все стандарты, необходимые для подключения к компьютеру новых устройств, так что любой мог разработать новое устройство или программное обеспечение без покупки лицензий. Это привело к большому успеху серии пер- сональных компьютеров IBM PC. Выводы • Информационное общество — это такая ступень развития ци- вилизации, на которой главными продуктами производства становятся информация и знания. • Информационные технологии — это технологии, связанные с использованием компьютеров для хранения, защиты, обработ- ки и передачи информации. • Стандарт — это нормативный документ, в котором определены требования к некоторому объекту или процессу. Нарисуйте в тетради интеллект-карту этого параграфа. 56
Информационное общество §5 Вопросы и задания 1. Чем информационное общество отличается от индустриаль- ного? 2. Назовите негативные последствия информатизации общества. Как, на ваш взгляд, с ними можно бороться? 3. Какие новые возможности для обучения появляются в инфор- мационном обществе? Видите ли вы какие-нибудь негативные стороны в компьютерном обучении? 4. При каких условиях дистанционный учебный курс можно от- нести к открытым образовательным ресурсам? 5. Верно ли, что информационная культура и компьютерная гра- мотность — это одно и то же? Обоснуйте свой ответ. 6. На каких условиях можно использовать информацию, най- денную в сети Интернет? 7. Что такое этичное поведение в Интернете? 8. Объясните, зачем нужны стандарты в области информацион- ных технологий. Подготовьте сообщение а) «Информатизация общества: плюсы и минусы» б) «Дистанционное обучение» в) «Компьютерные тренажёры» г) «Открытые образовательные ресурсы» д) «Стандарты в области информационных технологий» е) «Интернет вещей» Проекты а) Сравнение сайтов онлайн-курсов б) Стандартизация в России и других странах Интересные сайты window.edu.ru — Единое окно доступа к цифровым образова- тельным ресурсам school-collection.edu.ru — Единая коллекция цифровых образо- вательных ресурсов fcior.edu.ru — Федеральный центр информационно-образователь- ных ресурсов intuit.ru — Национальный открытый университет «ИНТУИТ» lektorium.tv — онлайн-курсы на русском языке khanacademy.org — Академия Хана — крупнейшее хранилище видеоматериалов по естественным наукам coursera.org — онлайн-курсы ведущих университетов мира 57
1 Информация и информационные процессы udacity.com — онлайн-курсы ведущих университетов мира, в основном для инженеров и программистов edx.org — онлайн-курсы по электронике, информатике и химии WWW ЭОР к главе 1 на сайте ФЦИОР (http://fcior.edu.ru) • Классификация информационных процессов • Алгоритм оптимального кодирования Хаффмана • Роль и место информационных технологий в современном об- ществе WWW Практические работы к главе 1 Работа № 1 «Алгоритм RLE» Работа № 2 «Сравнение алгоритмов сжатия» Работа № 3 «Использование архиваторов» Работа № 4 «Сжатие данных с потерями» Работа № 5 «Системы управления» 58
Глава 2 МОДЕЛИРОВАНИЕ §6 Модели и моделирование Ключевые слова: • статическая модель • динамическая модель • дискретная модель • непрерывная модель • детерминированная модель • вероятностная модель • имитационная модель • семантическая сеть • игровая модель • адекватность Модель — это объект, который обладает существенными свой- ствами другого объекта, процесса или явления (оригинала) и используется вместо него. Моделирование — это создание и исследование моделей с це- лью изучения оригиналов. По природе модели делятся на материальные (физические, предметные) и информационные. В информатике исследуются информационные модели. Информационные модели — это информация о свойствах оригинала и его связях с внешним миром. Среди них выделяют вербальные модели (словесные, мысленные, от лат. verbalis — словесный) и знаковые модели, записанные с помощью какого-то формального языка: • графические (схемы, карты, фотографии, чертежи); • табличные; • математические (формулы); • логические (варианты выбора на основе анализа условий); • специальные (ноты, химические формулы и т.п.). По фактору времени выделяют статические и динамические модели. В статических моделях (от греч. отатос; — неподвижный) предполагается, что интересующие нас свойства оригинала не из- меняются во времени (схема сил, действующих на неподвижное тело; фотография; результаты осмотра врача; модель молеку- лы). Динамические модели (от греч. биуацк; — сила) описывают 59
2 Моделирование движение, развитие, изменение (модель полёта шарика, модель землетрясения, история болезни, видеозапись события, модель развития химической реакции). Динамические модели могут быть дискретными и непрерыв- ными. Модель называется дискретной, если она описывает пове- дение оригинала только в отдельные моменты времени (например, в моменты времени tk = tQ+k At для натуральных значений k и постоянного интервала времени At). Непрерывная модель описыва- ет поведение оригинала для всех моментов времени из некоторого временного промежутка. По характеру связей модели делятся на детерминированные (от лат. determinate — определять) и вероятностные. В детер- минированных моделях связи между исходными данными и ре- зультатами жёстко заданы, при одинаковых исходных данных всегда получается тот же самый результат (например, расчёт по известным формулам, модель движения тела без учёта ветра и т. п.). Вероятностные модели учитывают случайность событий в реальном мире, поэтому при одних и тех же исходных данных результаты моделирования могут отличаться. К вероятностным относятся модели броуновского движения частиц, полёта само- лёта с учетом ветра, движения корабля на морском волнении, поведения человека. Имитационные модели используются в тех случаях, когда по- ведение сложной системы нельзя (или крайне трудно) предсказать теоретически, но можно смоделировать её реакцию на внешние воздействия. Для того чтобы найти оптимальное решение задачи, нужно выполнить моделирование при всех возможных вариантах и выбрать наилучший из них. Такой метод часто называют ме- тодом «проб и ошибок». Имитационные модели позволяют очень точно описать поведение оригинала, но полученные результаты справедливы только для тех случаев, которые мы моделировали (что случится в других условиях — непонятно). Примеры исполь- зования имитационных моделей: • испытание лекарств на мышах, обезьянах, группах доброволь- цев; • модели биологических систем; • экономические модели управления производством; • модели систем массового обслуживания (банки, магазины и т. п.). Для понимания работы процессора можно использовать его имитационную модель, которая позволяет вводить команды в определённом формате и показывает изменение значений реги- стров (ячеек памяти) процессора. Подобные модели применяют в том случае, когда нужно написать программу для системы, на 60
Модели и моделирование §6 которой её невозможно отлаживать (например, для микропроцес- сора, встроенного в утюг). Такой подход называют кросс-програм- мированием: программа пишется и отлаживается в одной системе, а работать будет в другой. В этом случае «другую» систему при- ходится моделировать с помощью имитационной модели. Игровые модели позволяют учитывать действия противника, например, при моделировании соревнований, конкуренции в биз- несе, военных действий. Задача игрового моделирования — найти лучшую стратегию в игре — план действий, который даёт наи- лучшие результаты даже в том случае, когда противник играет безошибочно. Этими вопросами занимается теория игр — раздел математики, одним из создателей которого был Джон фон Нейман. В сложных случаях используются имитационные игровые модели. Иерархические модели Практически любой объект представляет собой систему — на- бор взаимосвязанных компонентов. Системный подход состо- ит в том, что объект исследования (моделирования) рассма- тривается как система с учётом всех взаимосвязей между её частями. Иерархические модели (деревья) описывают многоуровневую структуру (вспомните материал 10 класса). Это может быть, на- пример, схема управления фирмой, структура организации, клас- сификация животных, файловая система, генеалогическое дерево (родословная) и т. п. Оглавление книги — тоже иерархическая модель (главы, разделы, подразделы, параграфы). С помощью де- рева можно задать порядок вычисления арифметического или ло- гического выражения. Любую систему, состоящую из подсистем, можно представить в виде иерархии. Отношения между уровнями могут быть самые разные. На- пример, в схеме управления — это отношение «подчиняется» (бухгалтер подчиняется директору), в классификации — отно- шение «подмножество» (подмножествами отряда «хищные» яв- ляются подотряды «псообразные» и «кошкообразные»), при опи- сании структуры — отношение «состоит из» (компьютер состоит из процессора, памяти и внешних устройств), в генеалогическом дереве — отношения «сын» («дочь») и «родитель». Сетевые модели В сетевых моделях (графах) каждый узел может быть связан со всеми другими. Знакомые вам сетевые модели — это схемы дорог, компьютерных сетей, электрических цепей. 61
2 Моделирование Графы позволяют очень наглядно представить информацию, однако они неудобны для автоматической обработки. Поэтому в памяти компьютера информация о графах обычно хранится в виде табличных моделей — матриц смежности и весовых матриц. Сетевые модели широко применяются для планирования производства, есть даже специальный термин «сетевое планиро- вание». Предположим, что изготовление аппарата МУХ-8-ККВ включает 8 операций, причём некоторые из них можно выпол- нять одновременно. Чтобы определить время изготовления, строят схему (граф, сеть), на которой узлы обозначают события (когда можно начинать очередную операцию), дуги — работы, а числа около дуг (веса) — длительность этих работ, например в днях (рис. 2.1). По этой схеме видно, что в самом начале можно выполнять три работы параллельно. Однако для того, чтобы начать работу Г^>Д, нужно закончить работы А-^Г и Б^Г. Поэтому в узел Г мы сможем попасть только через 5 дней. Говорят, что в таком графе установлен частичный порядок: без решения одной задачи нельзя решить несколько других. Чтобы выполнить последнюю операцию и получить готовое изделие, нужно закончить работы Г^>Д и В^Д, на это требует- ся 8 дней. Поэтому аппарат будет готов только через 9 дней с момента начала работ. Для представления знаний применяют специальные сетевые модели, которые называются семантическими сетями (семантика изучает смысл сообщений). В них узлы — это объекты (понятия, процессы, явления), а дуги — связи (отношения) между ними (рис. 2.2). Семантические сети наглядны, с их помощью удобно анали- зировать фразы на естественном языке, они соответствуют совре- менным представлениям об организации памяти человека. Однако пока такие структуры плохо приспособлены для автоматической обработки информации и поиска решений. 62
Модели и моделирование §6 Рис. 2.2 Сейчас делаются попытки на основе сети Интернет создать се- мантическую паутину — распределённую базу знаний. Для этого в веб-страницы нужно будет добавить специальную смысловую информацию, понятную компьютерным системам (так называемые метаданные). Адекватность При моделировании всегда возникает вопрос: «Можно ли верить полученным результатам»? Иначе говоря, будет ли оригинал ве- сти себя так же, как и модель? Адекватность модели (от лат. adaequatus — равный) — это совпадение существенных свойств модели и оригинала в рас- сматриваемой задаче. Адекватность означает, что результаты моделирования: • не противоречат выводам теории, например законам сохране- ния (вещества, энергии и т. п.); • подтверждаются экспериментом с реальным объектом (ори- гиналом). Таким образом, адекватность модели можно окончательно до- казать только экспериментом: если мы сможем решить задачу, используя результаты моделирования, то это значит, что модель адекватна. На практике модель считается адекватной, если рас- хождения между численными результатами моделирования и эк- сперимента не превышают 10%. Нужно понимать, что любая модель отличается от оригина- ла, поэтому она может быть адекватна только при определённых условиях — в той задаче, для решения которой она создава- лась. Например, модель деления амёб (через некоторый интервал 63
2 Моделирование каждая амеба делится надвое) адекватна только при малом коли- честве амёб и небольших интервалах наблюдения, иначе амёбы заполнили бы всё пространство. Во многих случаях результаты моделирования — это не- которые числа, измеренные или рассчитанные по результатам эксперимента с моделью. Это могут быть, например, сила, рас- стояние, скорость, ускорение, давление и др. Чаще всего эти величины для модели и оригинала будут различаться, поэтому нужно уметь пересчитывать «модельные» данные в соответст- вующие значения для оригинала. Этими вопросами занимается теория подобия. Простейший пример — работа с картой. Рас- стояние, измеренное по карте, нужно умножить на масштабный множитель, тогда получится соответствующее расстояние на ре- альной местности. Выводы • Модель — это объект-заменитель, который используется для изучения другого объекта или процесса. • Адекватность модели — это соответствие существенных свойств модели и оригинала в рассматриваемой задаче. Дока- зать адекватность можно только экспериментом с оригиналом. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Что вы думаете по поводу другого определения модели: «Мо- дель — это упрощённое представление реального объекта»? 2. Приведите примеры, когда одна модель используется для представления разных объектов-оригиналов. 3. Объясните, чем различаются статические и динамические мо- дели. 4. Назовите достоинства и недостатки вероятностных и детерми- нированных моделей. 5. Сравните имитационные и теоретические модели. 6. Что такое «метод проб и ошибок»? 7. Приведите примеры задач из вашей практики, для которых имитационная модель позволяет быстрее получить результат, чем теоретическая. 8. Верно ли, что модели, используемые при создании компью- терных игр, — это игровые модели? Обоснуйте вашу точку зрения. 64
Игровые модели §6 9. Приведите примеры детерминированных и вероятностных иг- ровых моделей. 10. Почему ни одна модель не может быть полностью адекватна оригиналу? 11. Зачем нужны сетевые модели при планировании производст- ва? 12. Что такое семантические сети? В чём их достоинства и недо- статки? 13. Что такое семантическая паутина? Как вы считаете, можно ли её создать на основе существующих веб-страниц? Обоснуй- те свой ответ. Подготовьте сообщение а) «Анализ и синтез» б) «Детерминированные и вероятностные модели» в) «Игровые модели» г) «Сетевое планирование» д) «Семантические сети» е) «Интеллект-карты (mind-maps)» ж) «Диаграммы Ганта» з) «Ленты времени» и) «Адекватность моделей» Проект Программа для моделирования работы процессора Интересный сайт drichard.org/mindmaps/ — сервис для создания интеллект-карт Игровые модели Ключевые слова: игровая модель теория игр игры с полной информа- цией выигрышная стратегия выигрышная позиция проигрышная позиция дерево игры 65
2 Моделирование Игровые модели — это модели, которые описывают соперниче- ство двух (или более) сторон, каждая из которых стремится к выигрышу, т. е. преследует свою цель. Часто цели участников противоречивы — выигрыш одного означает проигрыш других. Мы будем изучать игры с полной информацией, в которых: • порядок ходов игроков определяется правилами (а не скоро- стью реакции); • в любой момент игроки имеют полную информацию о состо- янии игры, т. е. о позиции и всех возможных ходах любого из игроков. Примеры игр с полной информацией — «крестики-нолики», шашки, шахматы. Во многих простых играх есть не так много вариантов раз- вития событий, и их можно рассмотреть полностью, однозначно определив, кто выиграет в заданной начальной ситуации, если оба соперника не будут ошибаться. Игровые стратегии Построением и изучением игровых моделей занимается теория игр — раздел прикладной математики. Задача состоит в том, чтобы найти стратегию (алгоритм игры), который позволит тому или другому участнику получить наибольший выигрыш (или, по крайней мере, наименьший проигрыш) в предположении, что со- перники играют безошибочно. Все позиции (игровые ситуации) делятся на выигрышные и проигрышные. Выигрышная позиция — это такая позиция, в которой игрок, делающий первый ход, может гарантированно вы- играть при любой игре соперника, если не сделает ошибку. При этом говорят, что у него есть выигрышная стратегия — алгоритм выбора очередного хода, позволяющий ему выиграть. Если игрок начинает играть в проигрышной позиции, он обя- зательно проиграет, если ошибку не сделает его соперник. В этом случае говорят, что у него нет выигрышной стратегии. Таким образом, общая стратегия игры состоит в том, чтобы своим ходом создать проигрышную позицию для соперника. Выигрышные и проигрышные позиции можно охарактеризо- вать так: • позиция, из которой все возможные ходы ведут в выигрыш- ные (для соперника) позиции, — проигрышная; • позиция, из которой хотя бы один из возможных ходов ведёт в проигрышную позицию, — выигрышная, при этом страте- гия игрока состоит в том, чтобы перевести игру в эту проиг- рышную (для соперника) позицию. 66
Игровые модели §6 Пример игры с полной информацией Для примера рассмотрим игру с камнями, в которой участвуют два игрока. Задача 1. Перед игроками лежит куча из некоторого количе- ства камней (обозначим его S). За один ход игрок может доба- вить в кучу один камень (ход « + 1») или увеличить количество камней в куче в два раза (ход «*2»). Например, имея кучу из 5 камней, за один ход можно получить кучу из 6 или 10 камней. У каждого игрока есть неограниченное количество камней. По- бедителем считается игрок, первым получивший кучу, в которой 14 камней или больше. Решение. Рассмотрим возможный результат игры при разном начальном количестве камней в куче S. Очевидно, что при S > 6 первый игрок (т. е. игрок, делающий первый ход) выигрывает сразу, удвоив число камней в куче. Начнём заполнять таблицу, в которой для каждого значения S будем указывать, выигрышная это позиция или проигрышная и через сколько ходов завершается игра (рис. 2.3). 8 1 2 3 4 5 6 7 8 9 10 11 12 13 В1 В1 В1 В1 В1 В1 В1 Рис. 2.3 Здесь «Вг» обозначает выигрыш за один ход. При S = 6 у первого игрока есть два хода: ход « + 1» даёт кучу из 7 камней, а ход «*2» — кучу из 12 камней. Выиграть за один ход он не может, оба возможных хода ведут в выигрышные (для второго!) позиции, поэтому первый игрок проиграет, если второй не ошибётся. Позицию S = 6 отметим в таблице как «Пг» (проигрыш за 1 ход) — рис. 2.4. S 1 2 3 4 5 6 7 8 9 10 11 12 13 П, Рис. 2.4 Вспомним, что задача игрока — перевести игру в проигрыш- ную для соперника позицию. Если S = 5 или S = 3, первый игрок может получить (ходом « + 1» или «*2» соответственно) 67
2 Моделирование кучу из 6 камней, т. е. создать проигрышную позицию. Этого достаточно для выигрыша, но выиграть можно только за 2 хода (рис. 2.5). S 1 2 3 4 5 6 7 8 9 10 11 12 13 Рис. 2.5 Рассуждая аналогично, выясняем, что позиция S = 4 — про- игрышная, так как возможные ходы ведут в выигрышные пози- ции (соперник выиграет за 1 или за 2 хода). При S = 2 первый игрок может своим ходом «*2» перевести игру в проигрышную позицию (S = 4), поэтому он выиграет. А при S = 1 он проиг- рает, потому что может своим ходом получить только кучу из 2 камней (рис. 2.6). S 1 2 3 4 5 6 7 8 9 10 11 12 13 Рис. 2.6 показывает результат игры первого игро- если второй не будет ошибаться. Если игра стратегия состоит в том, чтобы создавать проигрышную позицию всех вариантов игры можно по- Полученная таблица ка в том случае начинается в проигрышной позиции, первый игрок проиграет, а если в выигрышной — его на каждом шаге своим ходом для соперника. Для полного исследования строить дерево, содержащее все возможные ходы. Предположим, что сначала в куче 4 камня (эта позиция будет корнем дерева). Тогда в результате первого хода может получиться куча из 5 или 8 камней (рис. 2.7). Игрок 1: Рис. 2.7 Следующий уровень дерева показывает все возможные позиции после ответного хода второго игрока (рис. 2.8). 68
Игровые модели §6 Мы видим, что второй игрок может выиграть своим первым хо- дом (получив 16 камней), если первый построит кучу из 8 кам- ней. В остальных случаях игра продолжается, и дерево можно строить дальше по тому же принципу. Как мы уже показали ранее с помощью таблицы, при S = 4 выигрывает второй игрок. Чтобы доказать это с помощью дере- ва, не нужно строить полное дерево. Достаточно рассмотреть все возможные ходы соперника и для каждого из них найти один (!) выигрышный ход второго игрока. Вариант с выигрышем в один ход мы уже разобрали, теперь посмотрим, что произойдёт, если первый игрок получил кучу из 5 камней. Как следует из построенной выше таблицы, для кучи из 5 камней выигрышный ход второго игрока - «+1», он пере- водит игру в проигрышную позицию. При любом ответе первого игрока второй выигрывает ходом «*2» (рис. 2.9). Таким образом, мы доказали, что при S = 4 у второго игрока есть стратегия, позволяющая ему гарантированно выиграть, по крайней мере, за 2 хода. 69
2 Моделирование Задача с двумя кучами камней Теперь рассмотрим более сложную задачу с двумя кучами камней. Задача 2. Два игрока играют в следующую игру. Перед ними лежат две кучи камней. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить ко- личество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Выиг- рывает игрок, первым получивший такую позицию, что в двух кучах вместе будет 15 или больше камней. В начальный мо- мент в первой куче было 5 камней, во второй куче — S камней; 1 < S < 9. Решение, Оформим решение в виде таблицы, в которой по вертикали будем отмечать количество камней в первой куче, а по горизонтали — во второй. Очевидно, что при S > 5 первый игрок выигрывает первым ходом, увеличив в два раза любую кучу (рис. 2.10). 123456789 В! В1 В1 Bi В1 Рис. 2.10 Так как в ходе игры количество камней в первой куче также может увеличиваться, нам будут нужны и следующие строки таблицы. Обозначим в этой таблице все позиции, позволяющие выиграть первым ходом (рис. 2.11). Обратите внимание, что в результате очередного хода текущая позиция может перемещаться как вправо (при работе со второй кучей), так и вниз (изменяем первую кучу). Например, пусть в первой куче 6 камней, а во второй — 3 камня; такую позицию будем обозначать как (6, 3). Выигрышный ход в этой позиции — это удвоение первой кучи с переходом в позицию (12, 3). 123456789 В1 « « Bl Bl В1 В1 Bj Bl Bl Bl В1 Bi В1 В1 Bl Bl Bl В1 В1 В1 В1 Bl Bl Рис. 2.11 70
Игровые модели §6 Из позиции (5, 4) все возможные ходы ведут в выигрышные позиции: (6, 4), (5, 5), (10, 4) и (5, 8). Поэтому позиция (5, 4) — проигрышная. Аналогично определяем, что позиция (6, 2) также проигрышная (рис. 2.12). 123456789 П1 Bl Bl Bl Bl Bl П, Bl Bl Bl Bl Bl Bl В1 вГ Bl Bl Bl Bl Bl Bi Bi Bl Bl Bl Bl Рис. 2.12 Из позиций (5, 2) и (6, 1) можно перевести игру в проигрыш- ную позицию (6, 2), поэтому это выигрышные позиции. Позиция (5, 3) также выигрышная, так как возможен переход в проиг- рышную позицию (5, 4) — рис. 2.13. А вот позиция (5, 1) — проигрышная, все возможные ходы из неё ведут в выигрышные позиции. 123456789 n2 B2 B2 П, Bl Bl Bl Bl Bl вЛ П, Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Bl Рис. 2.13 Неполное дерево игры для начальной позиции (5, 1) удобнее за- писать в виде таблицы (рис. 2.14). Игрок 1 Игрок 2 Игрок 1 Игрок 2 (5, 1) (6,1) (6, 2) (7, 2) (14, 2) (6, 3) (12, 3) (5, 2) (12,2) (6, 4) (12, 4) (10, 1) (20,1) Рис. 2.14 Здесь победные ходы второго игрока выделены фоном. 71
2 Моделирование Выводы • Стратегия — это алгоритм, который позволяет добиться цели в игре в предположении, что соперники играют безошибочно. • Выигрышная позиция — это такая позиция, в которой игрок, делающий первый ход, может гарантированно выиграть при любой игре соперника, если не сделает ошибку. • Проигрышная позиция — это такая позиция, в которой иг- рок, делающий первый ход, обязательно проиграет, если его соперник не сделает ошибку. • Позиция, из которой все возможные ходы ведут в выигрыш- ные позиции, — проигрышная. • Позиция, из которой хотя бы один из возможных ходов ведёт в проигрышную позицию, — выигрышная, при этом выиг- рышная стратегия игрока состоит в том, чтобы перевести игру в эту проигрышную (для соперника) позицию. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Что такое выигрышная стратегия в игре? 2. Как доказать, что заданная позиция в игре является выиг- рышной (или проигрышной)? Как вы думаете, в каких слу- чаях это сделать не удаётся? 3. Почему для того, чтобы доказать выигрыш какого-то игрока в заданной начальной позиции, не нужно строить полное дерево игры? Проект Программа для определения выигрышных и проигрышных по- зиций в выбранной игре. О §8 Модели мышления Ключевые слова: • искусственный интеллект • экспертная система • нейрокомпьютер • нейронная сеть • нейрон • персептрон • машинное обучение • классификация • переобучение • решающее дерево • большие данные 72
Модели мышления §8 Искусственный интеллект Компьютер — это формальный исполнитель. Для того чтобы он решил какую-то задачу, нам необходимо знать все исходные дан- ные и записать в виде программы точный алгоритм её реше- ния, позволяющий получить из этих данных нужные результаты. В то же время в большинстве наших жизненных задач исход- ные данные неточны или неполны, связь между результатами и исходными данными часто неясна, и мы не можем записать её в виде алгоритма. Однако человек как-то (используя, напри- мер, свой жизненный опыт или интуицию) умудряется успешно справляться даже с такими задачами. В середине XX века родилось новое научное направление — искусственный интеллект, задачей которого стало моделирование мышления человека, для того чтобы научиться решать сложные задачи, которые не удаётся решить алгоритмически. Наиболее популярные направления исследований в этой области — эксперт- ные системы и нейрокомпьютеры. Экспертные системы (мы ещё будем говорить о них в гла- ве 3) моделируют ход рассуждений человека-эксперта при при- нятии решений в сложных ситуациях, например при постанов- ке диагноза у больного. Знания эксперта в формализованном виде (например, в виде правил вида «если у человека повы- шенная температура, то он болен») заносятся в базу знаний, на которой основана работа экспертной системы. Такой метод решения задачи называется дедукцией (от лат. deductio — выведение) — из общих закономерностей делается вывод для конкретного случая. Нейрокомпьютеры моделируют работу мозга так, как её сей- час представляют учёные. Они используют метод индукции (от лат. inducere — влечь за собой): пытаются найти алгоритм реше- ния задачи, анализируя множество частных случаев — примеров с известным правильным ответом. Основная часть нейрокомпью- тера — нейронная сеть. Нейронные сети Мозг человека состоит из нервных клеток — нейронов, которые связаны с другими нейронами нервными волокнами. Каждый ней- рон может иметь до 10 000 дендритов — волокон, через кото- рые он принимает электрические сигналы от других нейронов, и один аксон — отросток, через которые нейрон передаёт сигналы другим нейронам (рис. 2.15, а). Математическая модель такого нейрона, предложенная в 1943 году американскими учёными 73
2 Моделирование У. Мак-Каллоком и В. Питтсом, имеет несколько входов (хх, х2, х3, х4 и х5 на рис. 2.15, б) и один выход (у). Выход Рис. 2.15 Нейрон Мак-Калл ока и Питтса суммирует входные сигналы, ум- ноженные на весовые коэффициенты (i = 1, ..., 5): S = w1 xr + w2 x2 + iv3 x3 + w4 x4 + x5 и выдаёт на выходе сигнал у, равный 1, если сумма S превы- шает некоторое пороговое значение 0 (рис. 2.16, а). У = а Рис. 2.16 Значение 0 называется порогом чувствительности нейрона, а функция на рис. 2.16 — его активационной функцией. Кроме ступенчатой активационной функции используются и другие, на- пример сигмоидная (рис. 2.16, б). Учёные предположили, что если построить из нейронов сеть, т. е. связать выходы нейронов со входами других нейронов, то такая сеть сможет решать сложные задачи так же, как их реша- ет мозг человека. В 1958 году Фрэнк Розенблатт написал первую программу, которая моделировала работу нейронной сети, а через два года построил первый нейрокомпьютер, в котором функции математических нейронов выполняли электронные схемы. Этот компьютер умел распознавать буквы латинского алфавита, нари- 74
Модели мышления §8 сованные на карточках, которые прикладывали к считывающему устройству (матрице фотоэлементов), — рис. 2.17. матрица фотоэлементов выход Рис. 2.17 Первую нейронную сеть назвали персептроном от латинского слова perceptio — восприятие. Сначала нейронную сеть нужно обучить: подобрать подходя- щие значения весовых коэффициентов wt с помощью обучающих примеров. Допустим, мы хотим, чтобы нейронная сеть выдава- ла сигнал 1, если обнаружена буква «А», и сигнал 0 во всех остальных случаях. Обучающие примеры — это набор карточек, на некоторых изображена буква «А», на остальных нарисовано что-то другое. Приложив очередную карточку к считывающему устройству, проверяем ответ нейронной сети: если он верный, то ничего изменять не нужно; если неверный, то веса корректиру- ются по специальным алгоритмам, например, так (эти правила называют правилами Хебба): Wi^Wi+Xi, при I/ = 0; wt <-u>i-xt, при у = 1. После успешного обучения нейронную сеть можно использовать для распознавания буквы «А». Нейронные сети применяются в таких задачах, для которых неизвестны алгоритмы решения, но есть много конкретных при- меров. Во время обучения на этих примерах они сами выраба- тывают методику решения задачи. Чаще всего нейронные сети используют для распознавания образов (лиц, голосов, отпечатков пальцев), классификации (определение платёжеспособности кли- ента банка, проверка подлинности подписи, постановка диагно- за больному), прогнозирования (курсов валют, цен на сырьё и т. п.). В России нейронные сети применяют Центробанк, МЧС, налоговая инспекция, более 30 банков и более 60 финансовых компаний. В 2016 году компьютерная программа AlphaGo компа- нии Google, использовавшая в том числе и технологии нейронных сетей, выиграла четыре из пяти партий у одного из сильнейших игроков мира в го Ли Седоля. 75
2 Моделирование Нейронные сети могут работать при неточных и неполных исходных данных, при помехах и даже в случае отказа отдель- ных элементов. Нейроны обрабатывают информацию параллельно (одновременно), поэтому в некоторых задачах нейрокомпьютеры могут работать быстрее, чем обычные компьютеры. Главный недостаток нейронных сетей состоит в том, что с их помощью невозможно объяснить, как именно сеть получила тот или иной результат. Ведь решение использует не фундаменталь- ные законы природы, а некоторый набор весовых коэффициентов, подобранных во время тренировки. Поэтому утверждать, что мы понимаем, как работает мозг, по-видимому, преждевременно. Машинное обучение В связи с развитием информационных технологий в конце XX века появилась новая проблема — накоплены огромные объ- ёмы данных, которые человечество не успевает обрабатывать. Дан- ные сами по себе не представляют ценности — важны те выводы, которые можно сделать на их основе, т. е., в конечном счёте, те знания, которые можно из них извлечь. Поскольку возможностей человека не хватает для решения таких задач, появилась идея поручить эту работу компьютерам. Так возникло машинное обуче- ние — новое направление в области искусственного интеллекта, задача которого — разработка автоматических методов анализа данных и извлечения из них каких-то закономерностей. Один из инструментов машинного обучения — нейронные сети, о которых мы говорили выше. Методы машинного обучения сейчас активно используются во всех ведущих компаниях, работающих в области информа- ционных технологий, в том числе в Google, Яндекс, Facebook, Microsoft. Алгоритмы машинного обучения позволяют делать выводы, не зная ничего о предметной области, к которой относятся дан- ные. Например, когда врач-эксперт ставит диагноз, он использу- ет свои медицинские знания и практический опыт, а алгоритм машинного обучения всего этого не знает, он просто выполняет анализ большого количества данных о здоровых и больных людях и пытается найти в этих данных какие-то зависимости, никак не объясняя их. Рассмотрим задачу определения пола человека по его росту и весу. У нас есть набор данных, для которых известны ответы (рис. 2.18). Требуется для заданной пары значений «рост, вес» (Л, w) по- пытаться определить пол человека, используя эти данные. Эта 76
Модели мышления §8 вес, кг 100 90 80 70 60 • мужчины о женщины 50-I-1---1--1---1--1 ► 150160170180190200 рост, см Рис. 2.18 задача называется задачей классификации — нужно определить принадлежность объекта с заданными параметрами тому или ино- му классу объектов. Один из простейших методов решения этой задачи — метод ближайшего соседа: для точки с координатами (Л, ш) определя- ется ближайшая соседняя точка (Ло, wQ); если она соответствует мужчине, то предполагаем, что и наши данные относятся к муж- чине, и наоборот. Расстояние между точками можно определять как длину отрезка: ,----------------- L = yj(h-hQ)2 +(w-u?0)2 . Для повышения надёжности можно учитывать несколько ближайших соседей (2, 3 или больше) — если большинство из них мужчины, то предполагаем, что и новые данные тоже при- надлежат мужчине. Сложность при использовании этого метода состоит в том, что в практических случаях неясно, как правиль- но определить меру близости данных, особенно если параметры объекта сильно отличаются по величине, например один из них измеряется в миллионах, а второй — сотых долях от единицы. Можно попробовать провести границу между двумя группа- ми точек. Если использовать простую кривую, показанную на рис. 2.19, а, то мы обнаружим, что для одной из точек обуча- ющего набора мы определим пол неправильно. Усложним форму границы так, чтобы для всех точек обучающего набора алгоритм выдавал правильный ответ (рис. 2.19, б). В этом случае может оказаться, что на новых реальных дан- ных, для которых ответ неизвестен, алгоритм будет работать хуже, чем алгоритм с простой границей. Дело в том что услож- нённый алгоритм слишком подстроился под обучающие данные, такая ситуация называется переобучением. Поэтому алгоритм принятия решений не должен быть слишком сложным. 77
2 Моделирование • мужчины вес, кг 100 90 80 70 60 50 150160170180190200 _ рост, см а Рис. о женщины • мужчины вес, кг 100 90 80 70 60 50 150160170180190200 _ рост, см б 2.19 Чтобы избежать переобучения, обычно разбивают известные данные на два набора — обучающий и тестирующий. Алгоритм настраивается на основе обучающего набора, а проверяется (оце- нивается) на тестирующем наборе, который не использовался при обучении. Ещё один популярный алгоритм машинного обучения — дере- во решений. Рассмотрим классификацию объектов по двум при- знакам х и у. На первом шаге разбиваем плоскость ху на две части, по возможности так, чтобы в каждой части было боль- ше точек какого-то одного класса. Например, прямая х = хг на рис. 2.20, а разбивает плоскость так, что слева от неё остались только белые точки. У1 а б Рис. 2.20 Во второй части (при х > хг) есть как белые, так и чёрные точки, поэтому продолжаем деление (рис. 2.20, б). Полученный двухшаговый алгоритм классификации можно представить в виде схемы, которая называется решающим деревом (рис. 2.21). 78
Модели мышления §8 Ответ: Q Ответ: ф Рис. 2.21 Обратите внимание, что для одной из точек белого цвета из обу- чающего набора данных это дерево решений даёт неправильный ответ (рис. 2.16, б). Поэтому одну часть плоскости можно было бы разбивать и дальше, но это, скорее всего, приведёт к пере- обучению. С помощью машинного обучения сейчас решаются задачи классификации, распознавания образов, предсказания, анализа текстов, ранжирования веб-страниц в поисковых системах, ма- шинного перевода. Ещё одна сфера применения машинного обуче- ния — рекомендательные системы в интернет-бизнесе. Например, если вы постоянно заходите на музыкальный сайт и слушаете определённую музыку, система может предлагать вам ту музыку, которая с большой вероятностью вам понравится, или ту рекла- му, которая для вас может быть интересна. Большие данные В начале XXI века в информатике появился новый термин — большие данные (по-английски — Big Data). Так стали называть данные, которые: • имеют очень большой объём (терабайты и петабайты1*); • не могут храниться и обрабатываться на одном компьютере. Часто такие данные: • поступают с большой скоростью (она может составлять мега- байты и гигагабайты в секунду); • очень разнообразны (это могут быть числа, графика, видео). Известно, что серверы поисковой системы Google ежесуточно обрабатывают 24 Пбайт информации; электронный аукцион ЕЪау и крупные социальные сети (YouTube., Facebook, Twitter, ВКон- такте) тоже работают с петабайтами данных в день. Огромное количество данных получают учёные-физики и аст- рономы. Поток данных с современных радиотелескопов составляет 15-50 Гбайт в день. Строящийся гигантский радиотелескоп SKA 1 Тбайт (терабайт) = 1024 Гбайт = 10242 Мбайт; 1 Пбайт (петабайт) = 1024 Тбайт. 79
2 Моделирование будет производить 10 Пбайт данных только за один час. Детек- тор ATLAS — прибор для поиска бозона Хиггса (элементарной частицы), — выдаёт около петабайта данных в секунду. Большие данные используются и в бизнесе. В базы данных записывают различные сведения о покупателях, истории их по- купок, информацию с каждого чека, скидках и т. д. Банки и страховые компании собирают данные о клиентах, их действиях и даже перемещениях по миру. В последние годы методы обработки больших данных активно применяют для анализа данных из социальных сетей. Цель этих исследований — изучение рынка, продвижение товаров с помо- щью активной рекламы, выработка рекомендаций пользователям. Большие данные хранятся в распределённых базах данных — на множестве серверов (их может быть несколько тысяч!) в ло- кальной сети или в Интернете. Для обработки больших данных используют кластеры — группы из сотен и даже тысяч компью- теров, объединённых в сеть. При решении этих задач учёные столкнулись с новыми проблемами: • как сделать так, чтобы отказ отдельного компьютера или ли- нии связи не привел к срыву выполнения задания; • как ускорить обработку за счёт параллельного (одновременно- го) выполнения частей задания; • как лучше организовать обмен данными между компьютерами и т. д. Для того чтобы справиться с этими проблемами, потребо- валось создать специальные алгоритмы и программы. Наиболее известный метод обработки больших данных — MapReduce — разработан компанией Google. Его идея состоит в том, чтобы раз- бить выполнение алгоритма на шаги двух типов. На шаге первого типа (он называется шар — отображение) каждый сервер прово- дит необходимые вычисления с той частью данных, которая на нём хранится. На втором шаге (reduce — сворачивание) централь- ный сервер собирает промежуточные данные, полученные всеми серверами на шаге тар, и получает окончательный результат. Например, пусть данные поисковой системы хранятся в рас- пределённой базе данных на трёх серверах, и нужно подсчитать, сколько раз в базе данных встречается какое-нибудь слово, ска- жем «баобаб». Сначала каждый сервер, получив задание от центрального компьютера, определяет, сколько слов «баобаб» находится в его части базы данных — это этап предварительной обработки (шар). Они могут работать параллельно (одновременно), потому что каж- дый сервер ищёт данные в своей базе самостоятельно, независимо от других компьютеров. 80
Модели мышления §8 Затем на втором шаге выполняется «сворачивание» (reduce) — центральный компьютер принимает результаты всех серверов и, суммируя их, получает окончательный ответ. При этом по лини- ям связи передаются не все исходные данные (их очень много!), а только промежуточные результаты — количество слов «баобаб», найденных на каждом сервере (рис. 2.22). Рис. 2.22 Для программирования алгоритмов обработки больших данных разработаны специальные программы. Наиболее известна свободно распространяемая система Hadoop, включающая все инструменты для обработки больших данных на кластерах. Выводы • Искусственный интеллект — это научное направление, кото- рое занимается моделированием мышления человека. • Экспертные системы используют базы знаний и моделируют ход рассуждений человека-эксперта при принятии решений в сложных ситуациях. • Нейрокомпьютеры моделируют работу мозга с помощью ней- ронных сетей. • Машинное обучение — это автоматические методы анализа данных и извлечения из них каких-то закономерностей. • Работа нейрокомпьютеров и методов машинного обучения основана на анализе большого количества обучающих наборов данных с известными ответами. • Большие данные (Big Data) — это разнообразные данные, ко- торые имеют большой объём, не могут храниться на одном компьютере и поступают с большой скоростью. 81
2 Моделирование Вопросы и задания 1. Объясните разницу между принципами работы экспертной си- стемы и нейрокомпьютера. 2. Сравните два варианта активационной функции для перцеп- трона на рис. 2.16: ступенчатую и сигмоидную. Как нужно понимать ответ нейронной сети в каждом из этих случаев (в одном случае — 0 или 1, в другом — вещественное число от 0 до 1)? 3. В каких задачах, на ваш взгляд, не нужно использовать ней- ронные сети? 4. Сравните экспертные системы и методы машинного обучения. 5. Что такое переобучение? Как обычно решают эту проблему при машинном обучении? 6. Какие проблемы возникают при обработке больших данных? Подготовьте сообщение а) «Нейронные сети» б) «Машинное обучение» в) «Распознавание лиц на фотографиях» г) «BigData — зачем это нужно?» св Проекты а) Применение нейронных сетей в задачах распознавания образов б) Машинное обучение в задачах классификации в) Метод ближайших соседей в машинном обучении г) Решающие деревья в машинном обучении д) Рекомендательные системы интернет-сайтов Интересные сайты lbai.ru — лабораторный практикум по искусственному интел- лекту machinelearning.ru — сайт, посвящённый машинному обучению archive.ics.uci.edu/ml/ — наборы данных для проверки алгорит- мов машинного обучения youtube.com/channel/UCJ52ijV5RyPNSijdrEe73VQ — школа ана- лиза данных компании Яндекс для школьников 82
Этапы моделирования §9 §9 Этапы моделирования Ключевые слова: • постановка задачи • эксперимент • разработка модели • анализ результатов • тестирование Постановка задачи Этап постановки задачи — самый важный при моделировании. Если здесь допущена ошибка, то фактически рассматривается со- всем не та задача, которую нужно решить, и после завершения моделирования всё придется начать заново. Напомним, что с помощью моделирования можно решать четыре типа задач: исследование оригинала, анализ, синтез и оптимизацию. Для того чтобы задачу можно было решить, она должна быть хорошо поставлена; это значит, что: • заданы все связи между исходными данными и результатом; • известны все исходные данные; • решение существует; • решение единственно. К сожалению, в реальных задачах бывает сложно строго дока- зать существование и единственность решения; более того, задача может иметь множество решений. В таких случаях формулировку задачи можно уточнить, например, так: • найти любое решение, если оно существует; • найти все решения в некоторой области (например, все реше- ния уравнения на отрезке [О, 1]); • найти всё множество решений (например, для уравнения sin х = 1). Приведём примеры плохо поставленных (некорректных) задач. Задача 1. «Уроки в школе начинаются в 830. В 1О00 к школе подъехал красный автомобиль. Определите, когда Вася выйдет иг- рать в футбол». В этой задаче совершенно непонятна связь между исходными данными (время начала уроков, красный автомобиль) и результатом. Задача 2. «Вася бросает мяч со скоростью 12 м/с. Где мяч впервые ударится о землю?» В этой задаче можно применить мо- дель движения тела, брошенного под углом к горизонту. Но угол неизвестен, поэтому задача плохо поставлена (не хватает данных). Кроме того, неизвестно, где и куда Вася бросает мяч, — если он 83
2 Моделирование находится в квартире, то возможно много вариантов развития событий. Задача 3. «Решить уравнение sinx = 4». Это уравнение не имеет решений. Задача 4. «Найти функцию, график которой проходит через точки с координатами (0, 0) и (1, 1)». Через эти точки проходит бесконечное множество разных графиков, поэтому задача некор- ректна (плохо поставлена) — непонятно, какую именно функцию из всех возможных мы ищем. Что делать, если полученная задача плохо поставлена? Ре- шить её нельзя, поэтому остаётся уточнять условия и исходные данные. Если и это невозможно, нужно вводить допущения — упрощающие предположения, которые позволят сделать задачу хорошо поставленной. Все дальнейшие рассуждения мы будем проводить для кон- кретной задачи: «Вася в синей кепке бросает белый мяч со ско- ростью 12 м/с. Под каким углом к горизонту ему нужно бро- сить мяч, чтобы попасть в жёлтую мишень?» Ясно, что в таком виде задача плохо поставлена. Мы не мо- жем её решить, потому что не знаем, где расположена мишень и из какой точки вылетает мяч. Поэтому надо дополнить условие: «Мишень расположена на высоте 4 м на расстоянии 10 м от Васи. В момент броска мяч находится на высоте 2 м». Всегда ли существует решение? Очевидно, что нет — если мишень находится очень далеко или очень высоко, Вася просто до неё не докинет мяч. Поэтому мы должны ввести допущение о том, что решение существует. Единственно ли решение? Возможно, что нет (можно попасть в мишень, бросая мяч под разными углами), но нас интересует любое решение, поэтому считаем, что задача теперь хорошо по- ставлена. Разработка модели На этапе разработки информационной модели нужно: • определить исходные данные, существенные для решения данной задачи; • выбрать тип модели; • построить формальную модель, отражающую только сущест- венные свойства оригинала; • разработать алгоритм исследования модели; • построить компьютерную модель. Существенные данные. В первую очередь нужно выяснить, что влияет на полёт мяча, а что — нет. Легко понять, что нали- 84
Этапы моделирования §9 чие кепки и её цвет, а также цвета мячика и мишени никак не влияют на результат, поэтому включать их в модель не нужно1*. Кроме того, для упрощения введём следующие допущения: • мяч и мишень — материальные точки; • мишень неподвижна; • сопротивление воздуха не учитывается. Выбор типа модели. При решении задачи могут использо- ваться несколько моделей разных типов. Например, для луч- шего понимания полезно построить графическую модель задачи (рис. 2.23). За начало координат удобно принять точку, откуда вылетает мяч. Обозначим через начальную скорость мяча, через Н — раз- ницу высот (Н = 4-2 = 2 м), а через S — расстояние до мишени (S = 10 м). Однако графическая модель не даёт ответа на поставленный вопрос, поэтому для окончательных расчётов требуется построить математическую модель. Формальная модель. В этой задаче формальная модель — это математическая модель движения тела, брошенного под углом к горизонту* 2*. Изменения координат описываются формулами: . . . gt2 х = v0 t • cosa , у = v0 t • sina-, 2 где g ~ 9,81 м/с2 — ускорение свободного падения. Задача сво- дится к тому, чтобы найти два неизвестных, t и а, при которых х = S и у = Н: gt2 S-v0 t cosa, Н = vo t sina-----. В другой ситуации они могут быть важны, например когда Васю интересует в первую очередь свой внешний вид, а не попадание в мишень. 2* Эту модель мы уже рассматривали в 10 классе при решении вычислитель- ных задач на компьютере. 85
2 Моделирование О Эти формулы и представляют собой математическую модель за- дачи. В них нет упоминания о Васе, мяче, мишени и т. п., есть только условные обозначения и связывающие их формулы; это формальная модель, записанная на языке математических формул. Алгоритм моделирования. Алгоритм — это чётко опреде- лённый план действий, который приводит к решению задачи. В данном случае требуется разработать алгоритм использования модели: как с помощью полученных уравнений найти угол, под которым Васе нужно бросить мяч? Например, можно постепенно увеличивать угол, начиная с нуля, и каждый раз строить всю траекторию полёта. Если при каком-то значении угла мяч пролетел ниже мишени, а при следу- ющем — выше неё, дальше можно применить метод половинного деления для уточнения решения. Но лучше поступить более грамотно, значительно сократив вычисления. Дело в том, что из первого уравнения S = l>0 f cosa при известном значении угла а можно сразу найти время, за которое мяч пролетит расстояние до мишени. Тогда рассчитывать всю траекторию полёта не надо, остаётся только найти координа- ту у и сравнить её с нужным значением Н. Таким образом, пра- вильный выбор алгоритма может существенно влиять на вычисли- тельную сложность моделирования, а иногда — и на результат. Компьютерная модель. На этом этапе нужно выбрать средство моделирования и с его помощью построить компьютерную модель. Например, можно применить табличный процессор (OpenOffice Calc, Microsoft Excel и т. п.), написать собственную программу на одном из языков программирования или использовать готовую среду для моделирования (например, Simulink или VisSim)1^. Тестирование модели После построения модели её обязательно нужно протестировать (проверить). Тестирование — это проверка модели на простых исходных данных с известным результатом. Например, модель, описывающую сложение многозначных чисел, сначала нужно проверить на небольших числах, кото- рые легко сложить вручную. Если получен неверный ответ, это значит, что модель ошибочна и её нужно переделывать. Другой В 10 классе мы решили эту задачу — двумя способами: с помощью компью- терной программы на языке Python и с помощью электронных таблиц. 86
Этапы моделирования §9 пример — при моделировании накопления денег в банке сумма не должна меняться при нулевой ставке. Тестирование модели движения судна тоже начинается с простых задач: если штурвал поворачивают влево, судно должно уходить влево и наоборот. Нужно понимать, что удачное тестирование модели не гаран- тирует, что она правильна; тестирование может только установить ошибочность модели. Чтобы доказать её правильность, нужно проверить модель при всех допустимых исходных данных (в том числе и для тех, для которых правильный ответ неизвестен), а это практически невозможно. Выполним тестирование математической модели, построенной для нашей задачи: . . . gt2 x = vot- cosa , y = vot- sina —— . Согласно этим формулам: • при t = 0 мяч находится в начале координат; • при нулевой начальной скорости мяч падает вертикально вниз (координата х не меняется, а координата у уменьшается); • при бросании вертикально вверх (а = 90°, cos а = 0) коорди- ната х не меняется; • при некотором t координата у начинает уменьшаться (пара- бола «загибается» вниз, мяч опускается). Эти результаты не противоречат теории, поэтому можно счи- тать, что тестирование прошло успешно. Тем не менее нельзя считать, что этим мы доказали правильность модели (подумайте почему). Теперь предположим, что на основе приведённых формул написана программа, моделирующая полёт мяча. Для тестиро- вания полученной таким образом компьютерной модели нужно провести контрольные расчёты для простых случаев с известным результатом, например для тех, которые мы ранее использовали при тестировании математической модели. Если проверка прошла удачно (противоречий не обнаружено), можно переходить к экс- перименту. Эксперимент с моделью Эксперимент — это испытание модели в тех условиях, которые нас интересуют (т. е. результатов мы заранее не знаем). Напри- мер, для модели накопления денег в банке задаётся ненулевая ставка (процент ежегодного увеличения); движение судна модели- руется с учётом случайных помех — морского волнения и ветра; модель сложения «длинных» чисел применяется к многоразряд- ным числам ит. п. 87
2 Моделирование Можно ли слепо верить результатам моделирования? Конечно, нет, ведь мы не проверяли (и не могли проверить!) работу модели в этих условиях. Поэтому необходим анализ результатов. Анализ результатов Во-первых, нужно убедиться, что результаты моделирования не противоречат известным из теории фактам, например не нару- шаются законы сохранения массы и энергии. Если выполнялся компьютерный эксперимент, необходимо особенно внимательно проверять достоверность (правдоподобие) результатов. Утвер- ждение «компьютер так подсчитал» нельзя считать аргументом при доказательстве своей точки зрения, ведь любая случайная ошибка в программе может значительно исказить результаты вы- числений, и у вас может получиться, например, слон с отрица- тельной массой или двигатель, который не потребляет топливо, а наоборот, производит его. Во-вторых, необходимо проверить результаты моделирования на реальном объекте — провести эксперимент с оригиналом. Если нам удалось решить поставленную задачу (поведение оригинала соответствует1* поведению модели), можно считать модель адек- ватной и работу законченной. Если же результаты нас не устраивают (поведение объекта и оригинала значительно различаются), требуется вернуться к одно- му из предыдущих этапов и повторить моделирование, например: • изменить алгоритм или условия моделирования; • изменить модель: учесть дополнительные свойства, которые ранее считались несущественными; • изменить постановку задачи (если выяснилось, что решили не ту задачу, которую нужно было решать). Возможно, что несоответствие вызвано принятыми допущения- ми. Так в задаче с полётом мяча полезно ответить на следующие вопросы, которые помогут выяснить причину неудачи: — Всегда ли Вася сможет попасть в мишень? — Что изменится, если начальная скорость будет отличаться от заданной? — Что изменится, если мяч и мишень не считать материаль- ными точками? — Насколько сильно сопротивление воздуха влияет на резуль- тат? — Что изменится, если мишень будет качаться? И т. д. ... г) Часто считается, что допустимо расхождение результатов эксперимента и моделирования не более 10%. 88
Этапы моделирования §9 Выводы • Основные этапы моделирования — это постановка задачи, раз- работка модели, тестирование модели, разработка компьютер- ной модели, эксперимент с моделью и анализ результатов. • Задача называется хорошо поставленной, если — заданы все связи между исходными данными и результа- том; — известны все исходные данные; — решение существует; — решение единственно. • При построении модели нужно выделить существенные дан- ные, влияющие на результат. • Тестирование — это проверка модели на простых исходных данных с известным результатом. • Для проведения компьютерных экспериментов нужно постро- ить компьютерную модель на основе математической модели. Для этого можно написать свою программу, использовать та- бличный процессор или специальную среду моделирования. • Компьютерный эксперимент — это испытание модели в тех условиях, для которых мы не знаем результата. • После выполнения компьютерного эксперимента выполняется анализ результатов. Вопросы и задания 1. Что такое хорошо и плохо поставленные задачи? 2. Что входит в понятие «разработка модели»? 3. Как выделить существенные свойства, которые нужно учесть в модели? 4. Как вы думаете, почему при решении задачи часто использу- ются несколько моделей разных типов? Приведите примеры. 5. Какие программные средства можно использовать для постро- ения компьютерной модели? 6. Можно ли доказать правильность (или ошибочность) модели с помощью тестирования? Обоснуйте ваш ответ. 7. Сравните эксперимент с моделью и тестирование. Чем разли- чаются эти этапы? 8. Зачем нужен анализ результатов эксперимента? 9. В чём может быть причина неудачи при решении задачи с помощью моделирования? 10. Что делать, если после анализа результатов моделирования обнаружилось, что поведение оригинала существенно отлича- ется от поведения модели? © 89
2 Моделирование Подготовьте сообщение а) «Допущения при моделировании» б) «Тестирование моделей» в) «Программные средства для моделирования» Проекты а) Математическая модель выбранного объекта (процесса). б) Программа для моделирования выбранного объекта (процесса). в) Сравнение программных средств моделирования. О §10 Моделирование движения Ключевые слова: • движение с сопротивлением • дискретизация • имитационная модель • шаг дискретизации На уроках физики вы изучали в основном две модели движения: равномерное (когда равнодействующая всех сил равна нулю) и равноускоренное (когда равнодействующая постоянна). Например, движение тела, брошенного под углом к горизонту, обычно рас- кладывается на равномерное движение по горизонтали и равно- ускоренное движение по вертикали (под действием силы тяжести). В реальных ситуациях силы, действующие на систему, посто- янно изменяются, поэтому ускорение тоже будет переменным, и упомянутые простейшие модели использовать нельзя — они не- адекватны. Для примера мы разберём задачу, в которой важную роль играют силы сопротивления среды. Движение с сопротивлением Рассмотрим движение мяча, который представляет собой шар радиуса г и массы т , брошенного вертикально вверх со ско- ростью Vq . Нужно определить, на какую высоту поднимется мяч, и скорость, с которой он упадёт на землю. На мяч в полёте действуют две силы: • сила тяжести G (она направлена вертикально вниз) и • сила сопротивления F, которая направлена противоположно вектору текущей скорости v (рис. 2.24). 90
Моделирование движения §10 Строго говоря, на шарик в воздухе действует ещё архимедова сила, выталкивающая его наверх, но она крайне мала в сравне- нии с двумя названными силами (из-за малой плотности воздуха), и в этой задаче ею можно пренебречь. сил на вертикальную ось, направление вверх. Тогда Будем работать с проекциями всех за положительное направление примем проекция силы тяжести G=-mg , где g — ускорение свободного падения. Сила сопротивления зависит от формы и размеров тела, его скорости и свойств среды. На малых скоростях сила сопротивле- ния пропорциональна скорости, а при увеличении скорости про- порциональна её квадрату: F=^-CS, 2 где р — плотность среды (для воздуха р«1,23 кг/м3), v — скорость тела, 8 — площадь поперечного сечения (для шара 8 = я-г), а коэффициент сопротивления С зависит от формы тела и определяется экспериментально (для шара С « 0,4). Чтобы показать, что вектор силы сопротивления всегда направлен противоположно вектору скорости, часто используют такую запись: - F = -^--C-S. 2 Ускорение определяется по второму закону Ньютона: - G + F а =----. т Сила сопротивления F зависит от скорости, которая меняется. Поэтому ускорение тоже будет переменным, и модель равно- ускоренного движения применить нельзя. Исследовать такое дви- жение теоретически довольно сложно, поэтому мы используем имитационную модель. 91
2 Моделирование Дискретизация В конце XX века задачи моделирования законов движения ре- шались с помощью аналоговых вычислительных машин, кото- рые работали с аналоговыми сигналами. Мы будем использовать цифровой (дискретный) компьютер, поэтому нужно выполнить дискретизацию — перейти к дискретной модели, которая опи- сывает движение мяча в отдельные моменты времени с некото- рым шагом 8: f = 0, <5, 2<5, 3<5, ... Нам нужно построить такую модель, которая позволит вычис- лить скорость и высоту мяча в момент =( i + 1) 8 при извест- ных данных в момент = i • 8 . Чтобы использовать формулы для равноускоренного движения, мы предположим, что на отрезке [^; ^+1] ускорение изменяется очень мало и можно приближён- но считать его постоянным. Конечно, фактически это не так, но при маленьком интервале 8 ошибка будет небольшой. Как выбрать 5? Понятно, что чем меньше 8, тем точнее мо- дель и меньше ошибка моделирования. Вместе с тем при умень- шении 8 возрастает объём расчётов, поэтому нужно попытаться найти «золотую середину». Можно, например, начать с большого 8 (допустим, 1 с) и постепенно уменьшать его, повторяя моде- лирование до тех пор, пока результаты практически перестанут изменяться. Итак, предположим, что в момент tt скорость мяча1* равна и он находится на высоте Pt. Определим силу сопротивления и ускорение в этот момент: _ p|yilui ~ G + F F: Fi = -OS, at =------------L = -# + — . т т 2 Предполагая, что мяч летел с постоянным ускорением at в те- чение всего интервала величиной 8 , вычислим его скорость и координату в момент tM по формулам для равноускоренного движения: х X ai'52 vM=vi+ai-8, yM=yt+Vi-8+ 1 . Эта дискретная модель описывает изменение скорости и высоты мяча через интервал 8 . Здесь и дальше мы фактически рассматриваем проекции скорости и сил на вертикальную ось. 92
Моделирование движения §10 Компьютерная модель Теперь можно выполнить моделирование, используя табличный процессор или собственную программу. Каждый из этих под- ходов имеет преимущества и недостатки: в программе удобнее изменять шаг моделирования, в табличном процессоре удобно строить графики. Если использовать язык программирования, в начале про- граммы нужно определить все исходные данные (как константы или переменные). Затем задаются начальные значения времени, скорости и координаты (высоты): t := 0; v := vO; у := 0; Цикл должен завершиться в тот момент, когда высота станет отрицательной: нц пока L у > >= 0 F : = - ГС )*abs(v)*v*C*S/2 | сила | сопротивления а : = - g + F/m | ускорение У - = у + v*delta + a*delta*delta/2 | координата | (высота) v : = V + a*delta I скорость t : = t + delta I время кц В переменной delta хранится шаг дискретизации 8, а в пере- менной го — плотность воздуха. Обратите внимание, что нужно сначала изменить координату у, а только потом — скорость v, иначе (при обратном порядке вычислений) для расчёта высоты будет использоваться новое значение скорости, и в модель будет добавлена ещё одна неточность. Что мы получим после окончания цикла? В переменной и будет скорость в момент приземления (отрицательная величина, потому что мяч летит вниз), а в переменной t — время полёта. Для того чтобы найти максимальную высоту h, на которую под- нялся мяч, нужно добавить в цикл оператор если у > h то h := у все Начальное значение для h можно задать равным 0. 93
2 Моделирование Выводы • Если аналитическое решение задачи неизвестно, используют компьютерные имитационные модели. • Необходимый шаг при построении компьютерных моделей — дискретизация. • При дискретизации весь интервал моделирования разбивают на маленькие участки, на каждом из которых (с некоторы- ми допущениями) модель описывается известными форму- лами. • При уменьшении интервала дискретизации ошибка моделирова- ния уменьшается, но объём вычислений увеличивается. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Почему во многих задачах не учитывают сопротивление сре- ды? В каких случаях это можно делать? 2. Что такое дискретизация? Почему она необходима? 3. Какие допущения использовались при дискретизации модели в задаче из параграфа? 4. Как выбрать шаг дискретизации? 5. Какие средства можно использовать для компьютерного моде- лирования в рассмотренной задаче? В чём их достоинства и недостатки? 6. Измените программу так, чтобы в ней использовался цикл с постусловием. Сравните это решение с вариантом, который приведён в тексте параграфа. 7. Объясните, как в программе определить максимальную высоту подъёма мяча. Подготовьте сообщение «Модель движения маятника» <0 Проекты а) Программа для моделирования движения (в выбранной задаче) б) Моделирование движения с управлением (в выбранной задаче) 94
Математические модели в биологии §11 §11 Математические модели в биологии Ключевые слова: • дискретная модель • модель неограниченного роста • модель ограниченного роста • модель с отловом • взаимодействие видов • модель «хищник—жертва» • саморегуляция Многие идеи в области моделирования были предложены биоло- гами. Достаточно вспомнить, что родоначальником общей теории систем (системного подхода) был биолог Людвиг фон Берталан- фи. В этом параграфе мы познакомимся с некоторыми моделями биологических систем. Модель неограниченного роста Одна из задач, которые решают биологи, — изучение изменения численности животных в некоторой области. Обычно их пере- считывают раз в год, поэтому модель изменения численности получается дискретной — с её помощью можно определить чис- ленность с интервалом 1 год. Обозначим через Nq начальную численность, а через — численность в i -й год с момента начала наблюдений. Количество родившихся и умерших животных пропорционально численности, поэтому годовой прирост равен kp - - kc - N^, где kp и kc — коэффициенты рождаемости и смертности. Тогда количество жи- вотных в (г + 1)-й год может быть вычислено через их количество в предыдущем году: NM =Nt +kp-Nt-kc =(\ + K) , где K = kp-kc — коэффициент прироста. Это и есть матема- тическая модель развития популяции («населения») животных. Коэффициенты kp и kc (так же, как и другие коэффициенты в рассматриваемых далее моделях) обычно определяются экспе- риментально. При К = 0 (рождаемость равна смертности) количество живот- ных не меняется, при К < 0 (kp < kc) животные вымирают, а при К>$ (kp>kc) их число бесконечно увеличивается (рис. 2.21). Поэтому эту модель называют моделью неограниченного роста. Английский учёный и экономист Томас Мальтус использовал её для описания роста населения Земли, поэтому её иногда называ- ют моделью Мальтуса. 95
2 Моделирование Недостаток этой модели в том, что она не учитывает огра- ниченность ресурсов (например, пищи), влияние других видов животных и нестабильных природных условий, из-за которых изменяются коэффициенты рождаемости и смертности. Поэтому модель Мальтуса адекватна только при небольших интервалах наблюдения. Модель ограниченного роста Бельгийский математик Пьер Ферхюльст предложил ввести мак- симальную численность популяции L и построить модель так, чтобы численность животных не превышала этой величины. Как только численность приближается к L, коэффициент прироста уменьшается и рост замедляется. Модель Ферхюльста основана на той же самой формуле, что и модель Мальтуса: W/+1=(1+/Q-7V;, но теперь коэффициент прироста зависит от численности (рис. 2.26): где k — начальный коэффициент (при нулевой численности). Видно, что при увеличении коэффициент уменьшается и при Nt=L становится равен нулю. Нередко человек искусственно разводит животных, например в рыбоводческих хозяйствах или на зверофермах. В этом слу- чае ежегодно часть животных (обозначим её R) отлавливается, а оставшиеся размножаются и поддерживают популяцию. Для того чтобы определить допустимый отлов, при котором популяция сохраняется (не вымирает), используют модель с отловом: NM=(l + Ki) Nt-R, Ki=k ^^-. 96
Математические модели в биологии §11 На рисунке 2.26 показаны графики изменения численности популяции для разных моделей при NQ = 100, k = 0,5, L = 1000 и R = 40. Видно, что в самом начале модели ограниченного и неограниченного роста дают близкие результаты, т. е. модель неограниченного роста адекватна. Рис. 2.26 Согласно модели ограниченного роста, со временем числен- ность популяции становится равна L , а при отлове — немного меньше. Вы можете рассчитать это значение самостоятельно, при- няв, что в состоянии равновесия NM=Nit Взаимодействие видов Все модели, которые мы рассматривали выше, описывали изме- нение одного вида. На самом деле на одной территории всегда живёт несколько видов животных, которые соперничают друг с другом. В простейшем случае это соперничество за еду (напри- мер, между белками и бурундуками). Однако наиболее интересна модель «хищник — жертва», в которой один вид — хищники (например, щуки), а второй — их пища (караси). Сначала построим модели двух видов по отдельности. Изме- нение численности карасей N} описывается уже известной нам моделью ограниченного роста: -Lt Будем считать, что щуки могут питаться только карасями1*. Тогда без карасей они просто погибают, и модель изменения их численности имеет вид: И<+1 =(1-D)-Zj, где D — коэффициент смертности щук (для простоты будем считать его постоянным). Конечно, это предположение чаще всего неверно, но мы используем его для простоты модели. 97
2 Моделирование Объединив две модели, мы не получаем систему, потому что никак не учитывается связь между численностью карасей и щук, живущих в одном водоёме. В результате численность карасей со временем станет равной L, а щуки вымрут, хотя вокруг полно еды. Чтобы построить системную модель, предположим, что ча- стота встреч карасей и щук пропорциональна произведению их численностей N^-Z^. В результате этих встреч каждый год гибнет bN-Ni-Zi карасей, но появляется bz-Ni-Zi новых щук. Здесь bN и bz — это некоторые коэффициенты, которые определяются экспериментально. Таким образом, полная модель-система состоит из двух связанных уравнений: >i+1=(l-D+^ На рисунке 2.27 показаны графики изменения численности карасей и щук, полученные при L = 100, No = 50, Zo = 10, D = 0,8, bN = 0,01 и bz = 0,012. Сначала мы видим «переход- ный период», когда численность карасей и щук довольно силь- но меняется, а затем наступает равновесие — количество рыб обоих видов остаётся примерно постоянным. Обратите внимание, что численность карасей не достигает предельного значения L — щуки мешают. Вместе с тем количество щук не растёт бескон- трольно — не хватает еды. Таким образом в природных системах соблюдается равновесие. Обратная связь. Саморегуляция Модели неограниченного и ограниченного роста популяции живот- ных, которые изучались в предыдущем пункте, можно изобразить в виде схем следующим образом (рис. 2.28). 98
Математические модели в биологии §11 Модель неограниченного роста Модель ограниченного роста Рис. 2.28 В первом случае (модель неограниченного роста) коэффициент прироста К жёстко задан и не меняется. Такая модель адекватна только при малых интервалах наблюдения. В модели ограниченного роста коэффициент прироста К не фиксирован, а меняется в зависимости от ситуации. На него влияют две величины — максимальная численность популяции L и текущая численность N . Переходя на язык теории управ- ления, величину L можно рассматривать как «цель», заданную природой, она определяется природными условиями (количеством корма, погодой и т. п.). Зависимость коэффициента К от численности N — это обрат- ная связь, с помощью которой регулируется численность. Если N<L, то фактическая численность меньше «заданной», начина- ется прирост численности {К > 0). Ситуация, когда N>L — это перенаселение, при котором К < 0 и животные начинают выми- рать. Как мы видели, при N=L получается нулевой прирост, численность не меняется. Если в какой-то момент популяция резко сокращается (на- пример, рыбы отравились химическими веществами, сброшенны- ми в воду), после устранения проблемы численность снова вос- станавливается и достигает максимального уровня L (рис. 2.29). Так работает саморегуляция. Саморегуляция — это способность системы поддерживать своё внутреннее состояние за счёт связей между элементами. о 99
Моделирование Саморегуляция — очень важное свойство живых организмов, которое позволяет им выживать при изменениях внешних ус- ловий. Например, теплокровные животные поддерживают посто- янную температуру тела, бактерии и водоросли поддерживают постоянную солёность и состав морской воды. Строго говоря, если рассмотреть блок «популяция» на рис. 2.28 как подсистему, мы тоже найдём в ней внутреннюю обратную связь, поскольку численность на очередном шаге Л^+] зависит от численности на предыдущем шаге N}. На рисун- ке 2.30 квадратик с крестиком обозначает умножение, а блок с буквой т — запаздывание (задержку), которое позволяет в течение одного шага помнить последнее значение N}. Популяция Рис. 2.30 Несмотря на обратную связь, возможности саморегуляции в та- кой системе сильно ограничены: при К > 0 численность будет бесконечно расти (нет саморегуляции), а при К < 0 популяция вымирает (равновесие наступает только при N = 0). Пример саморегуляции в системе «хищник — жертва» мы рассматривали в предыдущем пункте. В этой системе три канала обратной связи (не считая внутренних, в каждой популяции) — рис. 2.31. Модель «хищник — жертва» 100
Математические модели в биологии §11 Саморегуляция «работает» только при небольших отклонениях от состояния равновесия. Если серьёзно нарушить баланс, система не сможет восстановиться. В последние столетия человек всё ак- тивнее вмешивается в жизнь природы, в результате сокращаются леса и зоны с плодородной почвой, изменяется климат, вымирают всё новые и новые виды животных. Нарушение саморегуляции в масштабе Земли может поставить под угрозу жизнь всего человечества. Выводы • Модель неограниченного роста становится неадекватной при больших интервалах моделирования. • Модель ограниченного роста учитывает ограниченность ресурсов. • Модель «хищник — жертва» описывает взаимодействие двух враждующих видов, один из которых поедает особей другого. • Саморегуляция — это способность системы поддерживать своё внутреннее состояние за счёт связей между элементами. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Почему в биологии часто используются дискретные модели? 2. Сравните модели ограниченного и неограниченного роста. 3. Как будет меняться численность согласно модели ограничен- ного роста, если в начальный момент N > L ? Как бы вы объ- яснили это с точки зрения биологии? 4. Как с помощью моделирования определить допустимый отлов? 5. Можно ли считать модель «хищник—жертва» системной? По- чему? Как вы думаете, возможны ли другие модели взаимно- го влияния видов? 6. Объясните, как работает обратная связь в модели ограничен- ного роста. 7. Какие обратные связи существуют в модели «хищник — жертва»? Подготовьте сообщение а) «Модели взаимодействия видов» б) «Модели "хищник — жертва"» в) «Саморегуляция» Проекты а) Исследование установившихся режимов в модели «хищ- ник — жертва» б) Программа для моделирования развития популяций (для вы- бранной задачи) 101
2 Моделирование Вероятностные модели Ключевые слова: • методы Монте-Карло • вероятностная модель • системы массового обслужи- вания Методы Монте-Карло Методами Монте-Карло1* называют методы решения вычислитель- ных задач с помощью математического моделирования, основан- ные на использовании случайных чисел. Очень часто такие задачи бывает сложно решить другими методами. Вероятностные методы моделирования дают приближённое решение, но такое решение обычно лучше, чем никакое. Рассмотрим одну из простых задач — определение площади сложной фигуры. Предположим, что у нас есть фигура, образо- ванная объединением кругов, для каждого из которых известны координаты центра и радиус (рис. 2.32, а), и требуется опреде- лить её площадь. б Рис. 2.32 Согласитесь, что решить такую задачу аналитически (с помо- щью формул) достаточно сложно. Вместо этого можно поступить так: заключить нашу фигуру в любую фигуру, для которой мы умеем считать площадь, например в прямоугольник известных размеров, и равномерно «набросать» в этот прямоугольник N случайных точек (рис. 2.32, б). Мы можем подсчитать, сколько точек попало на фигуру — пусть их будет М. Если считать, что Такое название происходит от района Монте-Карло в Монако, который из- вестен как столица игорного бизнеса. В азартных играх, как известно, всё определяет случайность. 102
Вероятностные модели §12 распределение точек в прямоугольнике равномерное, то отноше- ние площади фигуры к площади прямоугольника примерно равно М/N, откуда получаем: or ~ о» _М °фигуры ~ ' ^прямоугольника — п,. Конечно, для повышения точности нужно взять достаточно боль- шое значение 7V, например 100 000. Используя такой подход, достаточно просто приближённо вы- числить число л. Мы знаем, что площадь круга радиуса R равна тг/?2. Поэтому мы можем вычислить площадь четверти круга еди- ничного радиуса, как показано на рис. 2.33, и умножить её на 4. Это и будет приближённое значение числа л. Рис. 2.33 Программа для решения этой задачи на алгоритмическом языке и на языке Python выглядит так: цел i, М = О, N = 100000 вещ х, у нц для i от 1 до N х := rand(0,1) у := rand(0,1) если х*х+у*у <= 1 то М := М + 1 все кц вывод "Pi = ", 4*M/N from random import random N = 100000 M = 0 for i in range(N): x = random() у = random() if x*x+y*y <= 1: M+= 1 print ("Pi =", 4*M/N); Системы массового обслуживания Методы математического моделирования проникают во все сфе- ры, в том числе и в экономику. Предприятия сферы обслужива- ния (магазины, банки, узлы телефонной связи, станции «скорой 103
2 Моделирование помощи» и т. п.) — очень интересные, но очень сложные объ- екты. На вход таких систем поступает поток заявок на обслу- живание — это могут быть, например, покупатели, входящие в магазин. Все заявки нужно обработать, для этого предприятие имеет несколько точек обслуживания (например, касс в магази- не). При этом большую роль играет случайность: • заявки поступают через случайные промежутки времени; • время обслуживания — случайная величина. Такие системы называют системами массового обслуживания, для их исследования используются вероятностные модели. Теорети- ческие модели этих систем, как правило, достаточно сложны, поэтому мы будем использовать имитационную модель, кото- рая позволяют найти решение задачи с помощью многократных компьютерных экспериментов. Рассмотрим простую модель работы банка. Клиенты входят через случайные промежутки времени, их обслуживают несколь- ко кассиров, причём время обслуживания — также случайная величина. Нужно определить, сколько кассиров необходимо для того, чтобы клиент затратил на визит в банк не более М минут (с учётом времени обслуживания). В таком виде задача некорректна (плохо поставлена) — не- ясно, как определить длину очереди. Поэтому нужно вводить до- пущения, которые позволят сделать задачу хорошо поставленной и решить её. Сначала построим детерминированную модель, в которой слу- чайность не учитывается. Будем считать, что за 1 минуту входит ровно Р клиентов, причём каждый клиент обслуживается ровно Т минут. Если количество касс равно К, то за Т минут будет обслуже- но ровно К клиентов. За это же время в банк войдут Р-Т новых клиентов. Несложно понять, что, если К<РТ, клиенты входят быстрее, чем их успевают обслуживать, поэтому очередь будет постоянно расти. Если же К>Р-Т, очереди вообще не будет, из этого условия и нужно выбирать количество касс. Например, при Р = 2 и Т = 5 для обслуживания нужно не менее 10 касс. Теперь усложним модель: введём в неё случайные события. Будем считать, что: • за 1 минуту в банк входит случайное число клиентов от О ДО -Ртах’ • на обслуживание каждого клиента требуется от Tmin до Ттах минут. Для моделирования нужно ещё определить, как распределены случайные данные (количество входящих за 1 минуту и время обслуживания) внутри заданных интервалов. Для простоты мы 104
Вероятностные модели §12 будем считать, что в обоих случаях распределение равномерное. Тогда можно применить стандартные генераторы случайных чи- сел, которые дают именно равномерно распределённые значения. Будем использовать имитационную модель — выполним моде- лирование ситуации для достаточно большого интервала времени L (например, для 8-часового рабочего дня L = 8 • 60 = 480 ми- нут). Число клиентов, находящихся в помещении банка, изменя- ется по закону м — N i + Р} — Ri, где Р[ — количество клиентов, вошедших за i -ю минуту, а Ri — количество клиентов, обслуженных за это время. Будем считать, что N клиентов равномерно распределяются по К кассам, так что средняя длина очереди равна Q=^r, а среднее время ожидания равно Q • Т . Количество вошедших Р± — это случайное целое число в ин- тервале от 0 до Ртах. На алгоритмическом языке и на языке Python его можно получить так: Р := irand(0, РМах) Р = randint(0, РМах) Определить число обслуженных R[ оказывается не так просто. Если кассир обслуживает клиента за Т минут, то можно счи- тать, что за 1 минуту он сделает часть работы, равную Если предположить, что скорость работы кассиров одинакова, то К касс за 1 минуту обслужат клиентов. Чтобы учесть случайное время обслуживания, величину Т будем определять заново для каждой минуты случайным образом. Это случайное вещественное число в интервале от Tmin до Ттах: Т:= rand(Tmin, Tmax) Т = Tmin + random()*(Tmax - Tmin) Тогда можно рассчитать значение среднего времени ожидания по формуле: А. Это значение будет меняться, поскольку N и Т — случайные величины. Именно поэтому невозможно гарантировать, что клиент точно не будет ждать больше положенного времени М. Вместо этого мы можем (с помощью имитационного моделиро- 105
2 Моделирование вания) подсчитать, какую долю времени составят «плохие» минуты, когда время ожидания At будет больше, чем М. Для определения этой доли нужно подсчитать количество «плохих» минут и разделить его на общее время моделирования L. Если доля «плохого» времени получилась, например 0,95 (95%), то клиент практически всегда вынужден будет ждать слишком долго, и количество касс нужно увеличивать. Если эта доля равна 0,05, то время ожидания будет больше допустимого только в 5% случаев, такой результат можно считать приемле- мым. Таким образом, нужно составить программу, которая запра- шивает количество касс, выполняет моделирование работы банка в течение рабочего дня и выдаёт долю «плохих» минут. Сначала задаём начальные значения переменных: Ртах := 4 Tmin := 1 Ттах := 9 L := 480 М := 15 N := О count := О максимальное число входящих за 1 мин минимальное время обслуживания максимальное время обслуживания период моделирования в минутах (8 часов) допустимое время ожидания сначала в банке никого нет счётчик ’’плохих” минут Затем нужно ввести количество кассиров К. Основной цикл мо- делирует работу банка в течение L минут: нц для i от 1 до L Р := irand(0, РМах) Т := rand(Tmin, Tmax) R := int (К / T) N := N + P - R если N < 0 to N:= 0 все dT := N / К * T если dT > M то count := count + 1 все кц from random import random, randint for i in range(L): P = randint(0, Pmax); T = Tmin + random()*\ (Tmax-Tmin) R = round(К / T) N += P - R if N < 0: N = 0 dT = N / К * T if dT > M: count += 1 На каждом шаге последовательно вычисляются: • случайное число входящих клиентов Р; • случайное время обслуживания Т; • число клиентов R, обслуженных за эту минуту; 106
Вероятностные модели §12 • число клиентов в помещении банка N; если оно получилось отрицательным, то принимаем N = 0; • время ожидания dT; если оно больше допустимого времени М, то увеличивается счётчик «плохих» минут. После окончания работы цикла остаётся вывести результат — отношение count/L, которое представляет собой долю «плохих» минут. Нужно провести серию экспериментов с моделью и вы- брать минимальное значение К, при котором доля «плохих» ми- нут будет менее 5%. Помните, что в модели используются слу- чайные числа, поэтому при каждом новом запуске программы результаты расчётов будут немного меняться. Теперь вы можете написать полную программу и найти с её помощью нужное чи- сло касс. Для того чтобы получить более достоверные результаты, же- лательно увеличить число циклов моделирования (значение L), например до 1 000 000, если время вычисления не становится при этом недопустимо большим. Обратите внимание, что мы выбрали исходные данные так, чтобы среднее число входящих клиентов и среднее время обслу- живания совпадали с теми же данными для детерминированной модели. Поэтому интересно сравнить результаты, полученные с помощью моделей двух типов: детерминированной и вероятност- ной. Скорее всего, они окажутся близкими, хотя и будут немного различаться. Тогда возникает вопрос: какая модель даёт более точный результат? Ответить на него можно только с помощью эксперимента, проведённого в реальном банке. Выводы • Методы Монте-Карло — это методы решения вычислительных задач с помощью математического моделирования, основанные на использовании случайных чисел. • Системы массового обслуживания — это системы, в которых обслуживается поток заявок. Заявки поступают через случай- ные промежутки времени, время обслуживания — случайная величина. • Модели сложных систем, как правило, должны учитывать случайность событий в реальной жизни. • Имитационные модели позволяют найти решение с помощью многократных компьютерных экспериментов. Нарисуйте в тетради интеллект-карту этого параграфа. 107
2 Моделирование Вопросы и задания 1. Сравните вероятностные и детерминированные методы. В чём достоинства и недостатки каждого из подходов? 2. Предложите свою задачу, которую проще решить методом Монте-Карло. 3. Что ограничивает точность метода Монте-Карло? 4. Какие системы называются системами массового обслужива- ния? 5. В чём сложность исследования систем массового обслужива- ния? 6. Как вы думаете, какая модель точнее описывает ситуацию в системе массового обслуживания: детерминированная или вероятностная? Обоснуйте свой ответ. 7. Как моделируются случайные события в вероятностной модели работы банка? 8. Как вы думаете, верно ли, что число входящих за минуту клиентов и время обслуживания имеют равномерное распре- деление? 9. Объясните, как вычисляется среднее время ожидания в веро- ятностной модели. 10. Объясните, как с помощью вероятностной модели определить нужное количество касс. Подготовьте сообщение а) «Моделирование дискретных событий» б) «Случайные процессы в моделировании» в) «Методы Монте-Карло» г) «Распределения случайных величин» д) «Метод обратной функции» Проекты а) Исследование точности метода Монте-Карло б) Программа для моделирования работы магазина (станции ско- рой помощи и др.) в) Случайные процессы в задачах моделирования системы управ- ления г) Управление роботом при случайных помехах д) Вычисление площадей сложных фигур: сравнение методов 108
Вероятностные модели §12 ЭОР к главе 2 на сайте ФЦИОР (http://fcior.edu.ru) WWW • Построение информационных моделей ИС • Назначение и виды информационных моделей Практические работы Работа № 6 «Моделирование работы процессора» Работа № 7 «Искусственный интеллект» Работа № 8 «Математическое моделирование» Работа № 9 «Моделирование движения» Работа № 10 «Моделирование развития популяции» Работа № 11 «Модель эпидемии» Работа № 12 «Модель «хищник — жертва»» Работа № 13 «Саморегуляция» Работа № 14 «Методы Монте-Карло» Работа № 15 «Системы массового обслуживания» 109
Глава 3 БАЗЫ ДАННЫХ § 13 Введение Ключевые слова: • информационная система (ИС) • локальная ИС • база данных (БД) • файл-серверная ИС • система управления базой дан- • клиент-серверная ИС ных (СУБД) • распределённая ИС • автономность Основные понятия Информационная система (ИС) в широком смысле — это ап- паратные и программные средства, предназначенные для того, чтобы своевременно обеспечить пользователей нужной инфор- мацией. База данных (БД) — это специальным образом организован- ная совокупность1) данных о некоторой предметной области, хранящаяся во внешней памяти компьютера. Система управления базой данных (СУБД) — это программ- ные средства, которые позволяют выполнять все необходимые операции с базой данных. СУБД решают все задачи, связанные с управлением данными, в том числе поиск данных; редактирование данных; выполне- ние несложных расчётов; обеспечение целостности (коррект- ности, непротиворечивости) данных; восстановление данных после сбоев. Термины «база данных» и СУБД неразрывно связаны: свойст- ва базы данных определяются СУБД, которая ей управляет, и наоборот. Комплекс «БД+СУБД» называется системой базы дан- Термин «совокупность» обозначает множество элементов, обладающих об- щими свойствами. 110
Введение §13 ных (англ, database system) или информационной системой в узком смысле. В первых информационных системах каждая база данных имела свой собственный формат, который придумывал её автор. Это очень неудобно, потому что для каждой ИС нужно разрабаты- вать специальную программу для работы с базой данных. Более того, при любых изменениях в БД (например, при увеличении размера данных) надо переделывать все работающие с ней про- граммы и переводить старые данные в новый формат. Поэтому постепенно перешли к использованию специальных программ (они и получили название СУБД), которые занимались только хранением и обработкой данных независимо от их со- держания и могли применяться в самых разных задачах. При этом вместе с основными данными нужно хранить описание их структуры — так называемые метаданные, «сведения о данных», которые использует СУБД для обращения к данным. Как правило, пользователь работает с СУБД не напрямую, а через прикладную программу, в которой предусмотрен удобный ввод данных и оформление результатов (рис. 3.1). Рис. 3.1 Иногда функции СУБД и прикладной программы объединяются в одной программе (например, в Microsoft Access). Прикладная программа OpenOffice Base может использоваться для подключе- ния к различными СУБД, в том числе к СУБД HSQLDB, которая поставляется вместе с пакетом OpenOffice. Типы информационных систем В простейшем случае база данных и СУБД находятся на одном компьютере. Такая информационная система называется локаль- ной, с ней работает один пользователь. В современных браузерах (Google Chrome. Safari, Mozilla Firefox) есть встроенные средства, позволяющие создавать и использовать локальные ИС. Преимущество локальных ИС — автономность, т. е. незави- симость от работы локальных и глобальных сетей. Их недостат- ки проявляются тогда, когда с БД должны работать несколько пользователей: 111
3 Базы данных • базу данных нужно обновлять на каждом компьютере; • невозможно «стыковать» изменения, вносимые пользователя- ми. В локальных ИС разработчики иногда применяют свои собствен- ные форматы хранения данных, однако в этом случае теряется переносимость — возможность использования базы данных в других информационных системах. Как правило, в современных информационных системах ис- пользуют удалённые базы данных, расположенные на серверах (специально выделенных компьютерах) локальной или глобальной сети. В этом случае несколько пользователей могут одновременно работать с базой и вносить в неё изменения. СУБД, работающие с удалёнными базами данных, можно раз- делить на два типа по способу работы с файлами: • файл-серверные СУБД; • клиент-серверные СУБД. Файл-серверные СУБД (например, Microsoft Access) работают на компьютерах пользователей (они называются рабочими станци- ями) — рис. 3.2. Сервер только хранит файлы, но не участвует в обработке данных. Когда пользователь вносит изменения в базу, СУБД с его рабочей станции блокирует файлы на сервере, чтобы их не могли одновременно изменять другие пользователи. При большом количестве пользователей проявляются недостатки файл-серверных ИС: • обработку данных выполняют СУБД на рабочих станциях, поэтому компьютеры пользователей должны быть достаточно мощными; • при поиске данных вся БД копируется по сети на компьютер пользователя, это создаёт значительную лишнюю нагрузку на сеть; 112
• слабая защита от неправомерного доступа к данным (защита устанавливается на рабочих станциях, а не в едином центре); • ненадёжность при большом количестве пользователей, особен- но если они вносят изменения в базу данных. Чтобы избавиться от этих недостатков, нужно переместить СУБД на сервер. Клиент-серверная СУБД расположена на том же компьютере, где находится база данных. Она полностью берёт на себя всю работу с данными, т. е. читать и изменять данные в базе можно только с помощью этой СУБД. Рабочие станции (клиенты) Прикладная программа Прикладная программа Рис. 3.3 На компьютере пользователя работает прикладная программа- клиент, которая по сети обращается к СУБД для выполнения операций с данными. Задачи клиента: • отправить серверу команду (запрос) на специальном языке; • получив ответ сервера, вывести результат на экран пользова- теля или на печать. В современных клиент-серверных СУБД для управления дан- ными чаще всего используют язык SQL (англ. Structured Query Language — язык структурированных запросов). Он содержит все команды, необходимые для управления данными, включая полу- чение нужной информации, создание и изменение базы данных. Задачи сервера: • ожидать запросы клиентов по сети; • при поступлении запроса поставить его в очередь на выпол- нение; • выполнить запрос; • передать результаты клиенту. Отметим, что серверная и клиентская части могут быть установ- лены на одном компьютере. 113
3 Базы данных Самые известные среди коммерческих серверных СУБД — Microsoft SQL Server и Oracle. Существуют бесплатные клиент- серверные СУБД: Firebird (firebirdsql.org), PostgreSQL (postgresql.org), MySQL (mysql.com). Свободная СУБД MySQL часто используется для управления базами данных на небольших веб-сайтах. Многие современные информационные системы (например, по- исковые системы в Интернете) работают с огромными объёмами данных, которые невозможно разместить на одном компьютере. Поэтому появились распределённые базы данных, расположен- ные на множестве компьютеров, и соответствующие СУБД для управления ими. Пользователь работает с распределённой ба- зой данных точно так же, как и с обычной (нераспределённой). Главная проблема в этой области — обеспечение целостности и непротиворечивости данных, особенно при разрыве связи между компьютерами. Транзакции Сейчас в базах данных нередко хранится очень важная информа- ция, прежде всего финансовая. Поэтому необходимо обеспечить максимально возможную защиту данных от различных сбоев (например, при отключении питания). Предположим, что в банке нужно перевести 100 000 рублей со счёта 12345 на счёт 54321. Эта банковская операция включает несколько действий с базой данных: 1) прочитать сумму на счету 12345; 2) уменьшить её на 100 000 рублей и записать результат обратно; 3) прочитать сумму на счету 54321; 4) увеличить её на 100 000 рублей и записать результат обратно. Представьте себе, что случится, если после выполнения первых двух действий произойдёт сбой питания, и действия 3 и 4 не будут выполнены. Ответ ясен — первый клиент просто потеряет 100 000 рублей со своего счёта, т. е. данные станут некоррект- ными. Чтобы этого не произошло, либо все шаги операции перевода денег должны быть выполнены, либо ни один шаг не должен быть выполнен. Кроме того, между отдельными шагами операции никакие другие действия не должны выполняться. Такие слож- ные многошаговые операции называются транзакциями (от англ. transaction — сделка). 114
Введение §13 Транзакция — это группа операций, которая представляет собой одно законченное действие. Транзакция должна быть выполнена целиком или не выполнена вообще. Как же обеспечить выполнение транзакций? Для этого часто используется журналирование по тому же принципу, что и в файловых системах. Перед внесением изменений в базу данных СУБД создаёт копии всех данных, которые будут изменяться, и записывает в специальный файл (журнал) все операции, которые нужно выполнить. Затем эти операции выполняются фактически и, если все завершено успешно, запись удаляется из журнала. Если произошёл сбой, в журнале будет найдена информация о тех операциях, которые уже были завершены, и база данных восстанавливается в исходное состояние (транзакция не выпол- нена). Некоторые СУБД, например Firebird, не используют журнал, а при внесении изменений создают в базе данных новые записи, которые отмечаются как «рабочие» только тогда, когда транзак- ция завершена. Таблицы Данные, хранящиеся в современных базах данных, обычно представляют в виде таблиц1*. Столбцы таблицы называются полями, а строки — записями. Количество и состав полей определяет разработчик базы дан- ных, пользователи могут только изменять записи (добавлять, удалять, редактировать). Каждое поле имеет свой тип. Как правило, СУБД поддержи- вают следующие типы данных: целые числа; вещественные числа; денежные суммы; логиче- ские значения (битовые поля); текстовые данные; время, дата; произвольные двоичные дан- ные, например закодированный звук, видео и т. д. При чтении и изменении данных в таблице очень важно убедиться, что мы обращаемся именно к нужной записи. Это означает, что для надёжной работы каждая запись должна со- держать какое-то уникальное значение, отличающее её от всех остальных. В середине XX века широко применялись иерархические и сетевые модели данных, но сейчас они очень редко встречаются. Самый известный совре- менный пример иерархической модели данных — реестр в операционной системе Windows, где хранятся настройки самой системы и программ. 115
3 Базы данных Ключ — это поле или комбинация полей, однозначно опре- деляющие запись. Это значит, что ключ обладает свойством уникальности: в таблице не может быть двух записей, у которых одинаковое зна- чение ключа. Например, ключом может быть номер паспорта, номер мобильного телефона, регистрационный номер автомобиля, адрес электронной почты и т. п. Иногда можно выделить в таблице несколько ключей, напри- мер номер внутреннего паспорта и номер заграничного паспорта. В этом случае один из них выбирается в качестве основного и называется первичным ключом. Ключ, состоящий из одного поля, называется простым, а со- ответствующее поле таблицы — ключевым полем. Ключ, который состоит из нескольких полей, называется со- ставным. Рассмотрим базу данных метеостанции, где через каж- дые 3 часа измеряются температура, влажность воздуха, скорость ветра и т. п. (рис. 3.4). Дата Время Температура Влажность Скорость ветра 21.07.2016 12:00 25 75 4 21.07.2016 15:00 23 70 3 ... ... ... ... ... Рис. 3.4 Здесь ни одно поле не может быть ключом, потому что значе- ния в каждом из них могут повторяться. Однако для каждой пары Дата + Время в таблице может быть только одна запись, поэтому комбинация полей Дата и Время — это ключ. Второе свойство ключа — несократимость. Заметим, что в рассмотренном примере к паре Дата + Время можно добавить и другие поля таблицы, но такая группа полей уже не будет считаться ключом, потому что она сократима, т. е. из неё мож- но исключить все поля, кроме полей Дата и Время, сохранив свойство уникальности. Предположим, что в таблице Контакты хранятся данные о ваших друзьях: их фамилии, имена, адреса и телефоны. Ни фамилия, ни имя не могут быть ключом, потому что есть мно- го однофамильцев и людей с одинаковыми именами. Составить ключ из полей Фамилия и Имя тоже не получится (могут быть однофамильцы и тёзки одновременно). Адрес и домашний телефон 116
Введение §13 также не могут быть ключом, потому что в одной квартире могут жить несколько человек, с которыми вы общаетесь. В принципе, может получиться так, что ключом будет комбинация всех полей записи. Работать с составными ключами при выполнении операций с базой данных на практике очень неудобно. В таких случаях часто добавляют в таблицу ещё одно поле — так называемый суррогатный (т. е. неестественный) ключ, например номер записи. Во многих СУБД есть возможность заполнять его автоматически при добавлении каждой новой записи. При этом пользователю не нужно задумываться об уникальности такого ключа. Индексы Представим себе, что в таблице с адресами и телефонами, о ко- торой мы говорили выше, записаны данные большого количества людей (в реальных базах данных могут быть миллионы записей). Как найти всех Ивановых? Учтём, что записи расположены в таблице в том порядке, в котором они вводились (возможно, без всякого порядка). Если эту задачу решает человек, он, скорее всего, будет просматри- вать поле Фамилия с первой до последней записи, отмечая всех с фамилией Иванов. Такой поиск называется линейным — он требует просмотра всех записей (вспомните линейный поиск эле- мента в массиве). Если в таблице 1024 записи, придётся сделать 1024 сравнения, в больших базах линейный поиск будет работать очень медленно. Теперь представим себе, что записи отсортированы по фа- милии в алфавитном порядке. Возьмём запись, стоящую в се- редине таблицы (если в таблице 1024 записи, возьмём 512-ю) и сравним фамилию с нужной. Допустим, в 512-й записи фа- милия — Конюхов. Поскольку нам нужны Ивановы, все они заведомо находятся в верхней половине таблицы, поэтому всю вторую половину можно вообще не смотреть. Таким образом, мы в два раза уменьшили область поиска. Далее проверяем среднюю из оставшихся записей (256-ю) и повторяем процесс до тех пор, пока не найдём Иванова или в области поиска не останется больше записей. Как вы знаете, такой поиск называется дво- ичным (вспомните материал учебника 10 класса). Он позволяет искать очень быстро: если в базе N записей, то придётся сде- лать всего около log2TV сравнений. Например, для N = 1024 получаем 11 сравнений вместо 1024, т. е. мы смогли ускорить поиск почти в 100 раз! Для больших N ускорение будет ещё более значительным. 117
3 Базы данных Однако у двоичного поиска есть и недостатки: • записи должны быть предварительно отсортированы по нуж- ному полю; • можно искать только по одному полю. На практике искать нужно по нескольким полям в каждой таблице и нет возможности каждый раз сортировать записи (это очень долго для больших баз). Как же в такой ситуации обес- печить быстрый поиск? Как часто бывает в программировании, можно увеличить скорость работы алгоритма за счёт расхода до- полнительной памяти. Наверное, вы видели, что для ускорения поиска во многие книги включают индекс — список ключевых слов с указанием страниц, где они встречаются. В базах данных специально для поиска создаются дополнительные таблицы, которые также на- зываются индексами. о Индекс — это вспомогательная таблица, которая служит для ускорения поиска в основной таблице. Фамилия Номера записей Васильев 3, 17 Иванов 1, 15, 23 Петров 2 Рис. 3.5 Простейший индекс — это таблица, в которой хранится зна- чение интересующего нас поля основной таблицы (например, Фа- милия) и список номеров записей, где такое значение встречает- ся. Записи в индексе упорядочены (отсортированы) по нужному полю (рис. 3.5). Теперь людей с фамилией Иванов мы можем искать в ин- дексе, используя быстрый двоичный поиск (там фамилии стоят по алфавиту!). Затем, когда номера нужных записей определены, данные Ивановых можно взять из основной таблицы. Заметим, что искать что-то в основной таблице уже не нужно. Таким образом, можно использовать двоичный поиск по разным полям (даже по комбинациям нескольких полей). Однако нужно учитывать, что: • для каждого типа поиска приходится строить новый индекс, он будет занимать дополнительное место в памяти; • при любом изменении таблицы (добавлении, изменении и уда- лении записей) необходимо перестраивать индексы так, чтобы 118
Введение §13 сохранить требуемый порядок сортировки; к счастью, совре- менные СУБД делают это автоматически без участия поль- зователя, но это может занимать достаточно много времени. Целостность базы данных Целостность базы данных означает, что она содержит пол- ную и непротиворечивую информацию и удовлетворяет всем заданным ограничениям. о Прежде всего нужно обеспечить физическую целостность БД, т. е. защитить данные от разрушения в случае отказа оборудо- вания (например, при отключении питания или выходе из строя жёстких дисков). Очень важно, что все изменения данных вы- полняются с помощью транзакций, которые позволяют в случае сбоя «откатить назад» все начатые операции. Периодически (например, раз в неделю) администраторы со- здают резервные копии всех данных и ведут журнал изменений. При сбое восстанавливается самая последняя сохраненная версия БД. Также используют RAID-массивы жёстких дисков (англ. Redundant Array of Independent Disks — избыточный массив не- зависимых дисков), где информация дублируется и может быть автоматически восстановлена в случае выхода из строя одного или даже нескольких дисков. Теперь представьте себе, что в базе данных отдела кадров по ошибке у работника указан 1698 год рождения, а в поле Зар- плата введено отрицательное число. В этих случаях нарушается логическая целостность, т. е. непротиворечивость данных. Чтобы этого не произошло, вводят ограничения на допустимые значения полей (контроль данных): • каждое поле имеет свой тип; например, СУБД не даст запи- сать в поле целого типа произвольный текст — будет выве- дено сообщение об ошибке; • некоторые поля (в первую очередь первичный ключ) объяв- ляются обязательными для заполнения; • для полей, значения которых не могут повторяться, строят- ся уникальные индексы (при повторении значения выдается сообщение об ошибке); • вводятся условия, которые должны выполняться для значе- ний отдельных полей: например, можно потребовать, чтобы значение поля, в котором хранится количество учеников в классе, было положительно; 119
3 Базы данных • для сложных данных используются шаблоны ввода: напри- мер, для ввода семизначного номера телефона можно исполь- зовать шаблон ###-##-##, где # означает любую цифру; • вводятся условия, которые должны выполняться для несколь- ких полей каждой записи: например, дата увольнения ра- ботника не может быть более ранней, чем дата приёма на работу. Заметим, что целостность БД не гарантирует достоверность (истинность) данных, а только означает, что выполнены все уста- новленные ограничения на эти данные, и таким образом исклю- чены явные противоречия. Выводы • Пользователь чаще всего работает с СУБД через прикладную программу. • Чтобы не допустить потери данных при сбоях во время вы- полнения сложных операций, используют транзакции, каждая из которых должна быть или выполнена полностью, или не выполнена вообще. • Для обработки очень больших массивов данных применяют распредёленные БД, в которых данные расположены на мно- гих серверах в сети Интернет. • Ключ — это поле или комбинация полей, однозначно опре- деляющие запись. • Суррогатный ключ — это дополнительное числовое поле, ко- торое используется как ключ таблицы. • Для ускорения поиска в базах данных используют индексы — дополнительные таблицы, в которых записи отсортированы по какому-то критерию. Благодаря предварительной сортировке, в индексах можно использовать двоичный поиск, который ра- ботает значительно быстрее линейного. • Целостность базы данных означает, что она содержит полную и непротиворечивую информацию и удовлетворяет всем задан- ным ограничениям. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Можно ли, на ваш взгляд, считать базой данных бумажную картотеку в библиотеке? Ответ обоснуйте. 2. Почему произошёл переход от множества разнообразных форматов хранения данных к использованию универсальных СУБД? 120
Введение §13 3. Что такое метаданные? 4. Приведите примеры, когда лучшим выбором является: а) локальная ИС; б) файл-серверная ИС; в) клиент-сервер- ная ИС. 5. Что такое SQL? 6. Что такое распределённая база данных? 7. Как механизм транзакций обеспечивает защиту данных в слу- чае сбоев? 8. Зачем каждому полю присваивают свой тип? 9. Какими двумя свойствами должен обладать ключ таблицы? 10. Чем отличаются понятия «ключ» и «первичный ключ»? 11. Какие из следующих данных могут быть ключом таблицы, а какие не могут: а) фамилия; г) адрес электронной почты; б) имя; д) адрес веб-сайта; в) номер читательского билета; е) марка автомобиля? 12. Приведите примеры, когда одни и те же данные в одной ситуации могут быть ключом, а в другой — нет (напри- мер, адрес электронной почты, марка стиральной машины и т. п.). 13. В каких случаях в качестве первичного ключа используют номер записи? Можно ли применять такой подход, если в таблице есть другое уникальное поле? 14. Сравните линейный и двоичный поиск. 15. Объясните принцип поиска с помощью индекса. 16. Можно ли для одной и той же таблицы построить несколько индексов? 17. Как обеспечивается целостность базы данных в современных ИС? Подготовьте сообщение 1) «Типы данных, хранящиеся в БД» 2) «Суррогатные ключи: за и против» 3) «Как строятся индексы?» 4) «Целостность в базах данных» Проект Сравнение клиент-серверных СУБД 121
3 Базы данных § 14 Многотабличные базы данных Ключевые слова: • внешний ключ • связь «1:N» • ссылочная целостность • связь «M:N» • связь «1:1» Почему бы не собрать всё в одной таблице? Мы только что рассмотрели простейшую структуру, в которой все данные сведены в одну таблицу, и поэтому искать информацию достаточно просто. Однако у такой модели есть и недостатки: • дублирование данных, например в базе данных школьной биб- лиотеки будет много раз храниться фамилия автора «Пуш- кин»; • при изменении каких-то данных (например, адреса фирмы), возможно, придётся менять несколько записей; • нет защиты от ошибок ввода (опечаток). Однотабличная база данных — это аналог картотеки, в кото- рой все карточки имеют одинаковую структуру. В то же время на практике в одной базе нужно хранить данные, относящиеся к объектам разных типов, которые связаны между собой. Поэтому возникает вопрос: какую модель лучше использовать для опи- сания и хранения этих данных? Посмотрим, как можно организовать базу данных, в которой хранятся данные об альбомах музыкальных групп. Вот что полу- чается, если свести все данные в одну таблицу (рис. 3.6). Альбомы f Код Название Группа Год Число композиций 1 Реки и мосты Машина времени 1987 16 2 В круге света Машина времени 1988 11 3 Группа крови Кино 1988 11 4 Последний герой Кино 1989 10 Рис. 3.6 В данном случае в качестве первичного ключа можно выбрать пару свойств «Название + Группа», но работать с таким 122
Многотабличные базы данных §14 составным ключом неудобно, поэтому мы ввели суррогатный ключ — дополнительное поле Код (целое число), оно обозна- чено знаком Сразу видим, что в этой таблице есть дублирование — на- звание группы (символьная строка) повторяется для каждого альбома этой группы. Причина в том, что в данных таблицы на самом деле есть сведения не только об альбомах, но и о группах — объектах совершенно другого класса. Поэтому для хранения всей информации о группах нужно сделать отдельную таблицу (рис. 3.7). Группы Код Название Год создания 1 Машина времени 1969 2 Кино 1981 Рис. 3.7 Здесь первичным ключом может быть название группы (сим- вольная строка), но для ускорения работы введён суррогатный ключ — Код (целое число). В таблицу можно добавить другие данные о группе, например год создания, фамилию лидера, го- род и т. п. В таблице Альбомы теперь будет храниться не название груп- пы, а её код (рис. 3.8). Альбомы Код Название Код группы Год Число композиций 1 Реки и мосты 1 1987 16 2 В круге света 1 1988 11 3 Группа крови 2 1988 11 4 Последний герой 2 1989 10 Рис. 3.8 Таким образом, база данных состоит из двух таблиц и хранит сведения о двух классах объектов. Эти таблицы связаны, их связь можно показать на схеме (рис. 3.9). 123
Рис. 3.9 На этом рисунке перечислены поля каждой из таблиц и показа- на их связь: код группы в таблице Альбомы должен совпадать с кодом одной из групп в таблице Группы. Внешний ключ (англ, foreign key) — это неключевое поле таблицы, связанное с первичным ключом другой таблицы. Таким образом, Код группы — это внешний ключ в таблице Альбомы. Итак, мы получили две связанные таблицы вместо одной. При этом: • устранена избыточность (повторно хранятся только числовые коды); • все изменения нужно выполнять только в одном месте; • есть некоторая защита от ошибок при вводе данных — можно сделать так, что при заполнении таблицы Альбомы название группы выбирается из уже готового списка групп. Однако кое-что ухудшилось из-за того, что данные разбросаны по разным таблицам: • базами данных, в которых более 40-50 таблиц, сложно управ- лять из-за того, что разработчику трудно воспринимать ин- формацию в таком «раздробленном» виде; • при поиске приходится «собирать» нужные данные из не- скольких таблиц. Ссылочная целостность Одна из важнейших задач СУБД — поддерживать целостность базы данных. В предыдущем параграфе мы уже говорили о том, как обеспечивается физическая и логическая целостность. В многотабличных базах данных необходимо обеспечить ещё ссылочную целостность, т. е. правильность связей между таб- лицами. 124
Многотабличные базы данных §14 Напомним, что если в таблице есть внешний ключ, он дол- жен совпадать с одним из значений первичного ключа в другой таблице. Это значит, например, что в таблице Альбомы мы мо- жем использовать только те коды групп, которые есть в таблице Группы. Если пользователь будет вводить несуществующие коды, СУБД должна выдать сообщение об ошибке и отказаться вносить изменения в базу данных. При изменении кода группы (первичного ключа) нужно из- менить соответствующие коды для всех альбомов этой группы. Если пользователь удаляет какую-то группу из таблицы Груп- пы, то для всех альбомов этой группы значение поля Код группы оказывается недействительным и целостность нарушается. В та- ких случаях возможно несколько вариантов действия СУБД: • запретить удаление записи (из таблицы Группы) до тех пор, пока в базе есть связанные с ней подчинённые записи (в таб- лице Альбомы)-, • выполнить каскадное удаление, т. е. вместе с удаляемой записью удалить также все связанные с ней подчинённые записи в других таблицах; • игнорировать проблему, т. е. разрешить внести изменения. Очевидно, что в последнем случае ссылочная целостность нарушается. Типы связей В базе данных, которую мы только что построили, использовалась связь «один ко многим» (она обозначается также как «1:N» или «1-оо»), Это значит, что с одной записью в первой таблице могут быть связаны сколько угодно записей во второй таблице. Так в нашем случае каждый код группы может встречаться сколько угодно раз в таблице Альбомы (рис. 3.10). Рис. 3.10 125
3 Базы данных При этом, как правило, на стороне «1» в связи участвует ключе- вое поле таблицы, а на стороне «N» — неключевое (для второй таблицы это внешний ключ). В некоторых (достаточно редких) случаях используют связь «один к одному» («1:1»): каждой записи в первой таблице со- ответствует ровно одна запись в связанной таблице (рис. 3.11). Сотрудники Код Фамилия Имя Отчество 1 Иванов Петр Сидорович 2 Петров Сидор Иванович 3 Сидоров Иван Петрович Секретно Код Зарплата 1 20 000 р. 2 30 000 р. 3 40 000 р. В этом случае таблицы связаны через свои ключевые поля. Та- кую связь можно использовать для разделения большой таблицы на две части. Это важно, например, когда часть свойств объекта нужно сделать доступной всем, а другую часть — скрыть от некоторых пользователей. Нередко при анализе исходных данных появляются связи типа «многие ко многим» (они обозначаются также «M:N» или «оо-оо»). Например, в школе каждый учитель может вести не- сколько разных предметов, и каждый предмет обычно ведут не- сколько учителей. Поэтому связь между учителями и предмета- ми — это связь «многие ко многим». Как правило, современные СУБД явно не поддерживают связи «многие ко многим». Вместо этого используется третья дополни- тельная таблица и две связи «один ко многим». В качестве примера рассмотрим базу данных Кафе. В ней тре- буется хранить информацию о выполненных заказах, их составе и цене для того, чтобы строить итоговые отчёты автоматически. Все данные — это свойства двух классов объектов: заказов и 126
Многотабличные базы данных §14 блюд, входящих в меню. Поэтому будем использовать две табли- цы (рис. 3.12). Заказы Блюда Номер f Код Дата Название Цена Рис. 3.12 Как они связаны? Очевидно, что каждое блюдо может быть вклю- чено во многие заказы. В то же время каждый заказ может состоять из нескольких блюд. Таким образом, здесь существует связь «многие ко многим», которая в большинстве СУБД не под- держивается. Чтобы решить проблему, введём ещё одну таблицу Заказано, которая связана с первыми двумя с помощью двух связей «1:N» (рис. 3.13). Рис. 3.13 На рисунке 3.14 показан пример заполнения таблиц в такой базе данных. Заказы Заказано Блюда Номер Дата 1 11.12.16 2 12.12.16 Код Номер заказа Код блюда 1 1 1 2 1 3 3 1 4 4 2 1 5 2 2 6 2 2 7 2 5 Рис. 3.14 Код Название Цена 1 Борщ 80 руб. 2 Бифштекс 110 руб. 3 Гуляш 70 руб. 4 Чай 10 руб. 5 Кофе 50 руб. 127
3 Базы данных Как видно из этого примера, в состав заказа № 1 вошли борщ, гуляш и чай, а в заказ № 2 — борщ, два бифштекса и кофе. Обратите внимание, что в одном заказе может быть несколько одинаковых блюд. Поэтому естественного ключа в таблице За- казано нет, и мы ввели суррогатный ключ. Выводы • Для того чтобы избежать дублирования, данные в БД обыч- но разбивают на несколько взаимосвязанных таблиц. Каждая таблица содержит информацию об объектах одного класса. • Внешний ключ — это неключевое поле таблицы, связанное с первичным ключом другой таблицы. • Ссылочная целостность — это правильность связей между таб- лицами. • Для объединения таблиц используют связи типа «1:1», «1:N» и «M:N». Связи типа «M:N» обычно организуются через вспо- могательную таблицу и две связи «1:N». © Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Почему собирать все данные в одной таблице во многих слу- чаях невыгодно? 2. По какому принципу данные разбиваются на несколько таблиц? 3. Что такое внешний ключ таблицы? 4. Что такое ссылочная целостность БД? Как она обеспечивается? 5. Какие типы связей используются в многотабличных базах данных? 6. Когда применяется связь «1:1»? Какие поля при этом связы- ваются? 7. Когда применяется связь «1:N»? Какие поля при этом связы- ваются? 8. Таблицы А и Б связаны через свои ключевые поля. Что это за связь? 9. Связь между таблицами А и Б установлена через ключевое поле таблицы Б и неключевое поле таблицы А. Что это за связь? 10. Между таблицами А и Б по смыслу существует связь «многие ко многим». Как добиться этого в СУБД, которая такую связь не поддерживает? 11. Подумайте, какие изменения можно внести в базу данных, описанную в конце параграфа, если клиенты часто заказы- вают несколько одинаковых блюд. 128
Реляционная модель данных §15 Подготовьте сообщение а) «Связи между таблицами» б) «Как обеспечить ссылочную целостность?» в) «Работа с БД в браузере Chrome» г) «Работа с БД в браузере Mozilla Firefox» Проекты а) Использование базы данных в браузере для решения выбран- ной задачи б) Тренажёр для задач на базы данных с двумя таблицами § 15 Реляционная модель данных Ключевые слова: • сущность • атрибут • кортеж • отношение • реляционная БД • нормализация • нормальные формы • денормализация Математическое описание базы данных В середине XX века программное обеспечение для работы с база- ми данных было жёстко «привязано» к внутреннему представле- нию данных во внешней памяти компьютера, т. е. к структуре файлов с данными. Это означало, что при изменении формата файлов нужно было переделывать все работа- ющие с ними программы. Поэтому возникли следующие задачи: • разработать строгое математическое опи- сание баз данных, независимое от способа хранения данных; • разработать методы управления этими дан- ными (поиска, изменения, добавления и т. п.), основанные на использовании ма- тематических операций. Эти задачи удалось решить в 1970 году англичанину Эдгару Кодду, который работал в фирме IBM. Он предложил новую модель данных, основанную на следующих идеях: Э. Кодд1) (1923-2003) Использована фотография Э. Кодда, приведённая ru. wikipedia. org/wiki/Кодд-Эд rap. на сайте Википедия: 129
3 Базы данных • Все данные представляют собой свойства некоторых объектов. • Объекты делятся на классы (в теории баз данных они на- зываются сущностями). Например, при описании данных о музыкальных группах можно использовать классы Группа, Альбом, Песня и т. п. • Данные о некотором объекте — это набор свойств (атрибутов), в котором каждое свойство задаётся в виде пары «название, значение»; например, сведения о музыкальной группе «Кино» можно записать так: {Название: «Кино», Лидер: «В. Цой», Год создания: 1981) Такой набор данных, описывающий свойства одного объекта, называется кортежем. • Порядок перечисления свойств в кортеже не имеет значения. • Все объекты одного класса имеют одинаковый набор свойств. • Множество кортежей, описывающих объекты одного класса, называется отношением (англ, relation)*, например, отношение Группы можно записать в виде множества кортежей: {Название: «Машина времени», Лидер: «А. Макаревич», Год создания: 1969) {Название: «Кино», Лидер: «В. Цой», Год создания: 1981) {Название: «Аквариум», Лидер: «Б. Гребенщиков», Год созда- ния: 1972) • В отношении нет двух одинаковых кортежей. • Порядок кортежей в отношении не определён. «Кортеж» и «отношение» — это математические понятия, ко- торые описывают связанные данные. Поэтому с ними можно ра- ботать, используя известные операции теории множеств и матема- тической логики. Э. Кодд предложил набор операций с данными, представленными в виде отношений, который служит основой для работы большинства современных СУБД. Модель данных, введён- ная Коддом, получила название реляционной модели данных (от слова relation — отношение). Реляционные базы данных Реляционная база данных — это база данных, которая осно- вана на реляционной модели, т. е. представляет собой набор отношений. Математическая теория Кодда никак не связана с тем, как именно хранятся данные. Однако несложно понять, что отношение удобно представлять в виде прямоугольной таблицы (рис. 3.15). 130
Реляционная модель данных §15 Группы Название Лидер Год создания Машина времени А. Макаревич 1969 Кино В. Цой 1981 Аквариум Б. Гребенщиков 1972 Рис. 3.15 Эта таблица описывает отношение Группы. Здесь кортежи пред- ставлены в виде записей (строк), а атрибуты — это поля (столб- цы) в таблице. Идеи реляционной теории Кодда легко перевести на «таблич- ный язык»: • каждая таблица описывает один класс объектов; • порядок расположения полей в таблице не имеет значения; • все значения одного поля относятся к одному и тому же типу данных; • в таблице нет двух одинаковых записей; • порядок записей в таблице не определён. Поэтому на практике часто используют ещё одно, более про- стое определение: Реляционная база данных — это база данных, которую мож- но представить в виде набора таблиц. Однако не любой набор таблиц можно считать реляцион- ной базой данных. Как мы уже говорили, БД и СУБД нераз- рывно связаны, и для того чтобы отнести систему базы данных (БД -I- СУБД) к определённому типу, необходимо выяснить, какие методы управления данными используются в соответствующей СУБД, Согласно реляционной теории, порядок перечисления свойств в кортеже (порядок столбцов в таблице) не определён, так же как и порядок кортежей в отношении (порядок строк в таблице). Поэтому методы работы с данными в реляционной БД не долж- ны предполагать, что столбцы и строки таблиц расположены в каком-то порядке. Для управления данными в большинстве современных инфор- мационных систем используется язык SQL, в который включены команды для: • создания новых таблиц; • добавления новых записей; 131
3 Базы данных • изменения записей; • удаления записей; • выборки записей из одной или нескольких таблиц в соответст- вии с заданным условием и некоторые другие. Команды языка SQL позволяют управлять данными, не «при- вязываясь» к формату их хранения, а также к порядку располо- жения столбцов и строк в таблицах. Для выполнения операций (выборки, вставки, удаления, изменения) используются только названия столбцов и таблиц. С помощью команд SQL можно вы- полнить все основные операции, введённые Э. Коддом, поэтому СУБД (и соответствующие системы баз данных), которые исполь- зуют язык SQL, традиционно называют реляционными1). Нормализация Представим себе, что все данные о рейсах авиакомпании «ZX-Аэро» собраны в одной таблице (рис. 3.16). Рейс От До Самолёт Дата ZX 001 Москва Берлин Boeing 737 11.12.2016 ZX 002 Москва Сочи Airbus А321 12.12.2016 ZX 003 Санкт-Петербург Берлин Boeing 737 13.12.2016 Рис. 3.16 Мы сразу видим, что в таблице есть избыточность (дублиро- вание): многие данные (названия городов и типов самолётов) хра- нятся несколько раз. При этом для хранения данных-дубликатов расходуется дополнительное место на диске, что может привести к его преждевременному заполнению и выходу из строя всей ин- формационной системы. Есть и другая проблема: при вводе всех данных вручную оператор может сделать опечатку и, например, вместо «Санкт- Петербург» ввести «СанктПетербург». В этом случае нарушается целостность базы данных, потому что в ней хранится название несуществующего города. 1) В то же время язык SQL нередко критикуют за то, что он не полностью соответствует реляционной модели данных. Например, в SQL используется понятие «таблица» вместо «отношения»; порядок расположения столбцов таблицы задаётся при её создании; нет запрета на создание одинаковых строк. 132
Реляционная модель данных §15 Чтобы избежать этих проблем, при проектировании базы дан- ных обычно выполняют её нормализацию. Нормализация — это изменение структуры базы данных, которое устраняет избыточность и предотвращает возможные нарушения целостности. В теории реляционных баз данных существует несколько уровней нормализации (так называемых нормальных форм). Мы покажем некоторые принципы нормализации на примерах. 1. Любое поле должно быть неделимым. Это значит, что таб- лицу следующего вида необходимо переделывать (рис. 3.17). Сотрудник Телефоны Иванов Пётр Сидорович 123-45-67, (901) 111-22-33 Петров Сидор Иванович 345-67-89, (902) 222-33-44 Рис. 3.17 Здесь поле Сотрудник нужно разделить на три: Фамилия, Имя и Отчество. Поле Телефоны содержит два телефона: до- машний и мобильный. Поэтому нужно изменить таблицу по край- ней мере, так, как показано на рис. 3.18. Фамилия Имя Отчество Телефон-Дом Телефон-Моб Иванов Пётр Сидорович 123-45-67 (901) 111-22-33 Петров Сидор Иванович 345-67-89 (902) 222-33-44 Рис. 3.18 2. Любое неключевое поле должно зависеть от ключа таб- лицы. Например, в этой таблице ключ — это регистрационный номер автомобиля (рис. 3.19). Номер Автомобиль Владелец Телефон А123АА47 Лада-Калина Иванов 155-77-23 Т234ТТ78 Ока Петров 277-34-67 В345ВВ98 Мерседес Васильев 322-98-44 А345СС47 Ауди Иванов 155-77-23 Рис. 3.19 133
3 Базы данных Понятно, что телефон зависит не от регистрационного номера, а от владельца. Поэтому его нужно выносить в другую таблицу (рис. 3.20). Автомобили Владельцы Номер Автомобиль Владелец А123АА47 Лада-Калина 1 Б234ББ78 Ока 2 В345ВВ98 Мерседес 3 А345СС47 Ауди 1 Рис. 3.20 Код Фамилия Телефон 1 Иванов 155-77-23 2 Петров 277-34-67 3 Васильев 322-98-44 Заметим, что здесь мы присвоили каждому владельцу уникаль- ный числовой код и ввели в таблицу Владельцы суррогатный (искусственный) ключ. 3. Не должно быть одинаковых по смыслу полей. Например, пусть фирма торгует бананами, апельсинами и яблоками и хра- нит данные о ежедневных продажах этих товаров (в килограм- мах) в такой таблице (рис. 3.21). Дата Бананы Апельсины Яблоки 21.05.2016 120 78 101 22.05.2016 153 99 65 23.05.2016 87 55 123 Рис. 3.21 Недостаток этой таблицы в том, что поля Бананы, Апельсины и Яблоки — одинаковые по смыслу, это товары. Если фирма начинает работать с новым видом товара, придётся добавлять новый столбец, т. е. менять структуру таблицы (это делает уже не пользователь, а администратор базы данных). Поэтому нужно выделить все товары в отдельную таблицу (рис. 3.22). Продажи Товары Дата Товар Продано 21.05.2016 1 120 21.05.2016 2 78 21.05.2016 3 101 22.05.2016 1 153 ... ... ... Рис. 3.22 Код Название 1 Бананы 2 Апельсины 3 Яблоки 134
Реляционная модель данных §15 С одной стороны, число строк в таблице увеличилось, но с другой — организация данных улучшилась. Теперь для добав- ления в базу нового товара достаточно добавить одну запись в таблицу Товары, структуру таблиц переделывать не нужно. 4. Не нужно хранить данные, которые могут быть вычисле- ны. Предположим, что бухгалтер фирмы вводит в таблицу доходы и расходы фирмы за каждый месяц (в тысячах рублей), а также прибыль — разницу между доходом и расходом (рис. 3.23). Дата Доходы Расходы Прибыль 03.2016 155 128 27 02.2016 178 105 73 01.2016 194 159 35 Рис. 3.23 На самом деле поле Прибыль нужно удалить из таблицы, поскольку это значение можно рассчитать как разность двух дру- гих. Во-первых, оно занимает лишнее место на диске, во-вторых, появляется возможность нарушения целостности — при ошибке ввода может оказаться, что прибыль не равна разности доходов и расходов, и данные станут противоречивыми. Из курса основной школы вы знаете, что все вычисления в базах данных можно делать с помощью запросов, которые СУБД выполняет по требованию пользователя, т. е. тогда, когда резуль- таты этих вычислений действительно нужны. Нужно понимать, что нормализация имеет свои недостатки. Например, выборка связанных данных из нескольких таблиц мо- жет выполняться очень долго, и для ускорения работы иногда приходится применять денормализацию — специально вводить избыточность, нарушая требования нормализации. Например, в предельном случае можно все данные свести в одну таблицу. Однако при этом необходимо принимать меры для поддержки целостности базы данных. Выводы • Реляционная база данных — это база данных, которая осно- вана на реляционной модели. Часто реляционной называют любую базу данных, которую можно представить в виде на- бора таблиц. 135
3 Базы данных • Для управления реляционными базами данных используется язык запросов SQL. С его помощью можно выбирать нужные данные, а также добавлять, изменять и удалять записи и таблицы. • Нормализация — это изменение структуры базы данных, ко- торое устраняет избыточность и предотвращает возможные нарушения целостности. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Какие проблемы, возникавшие при работе с базами данных в середине XX века, привели к созданию реляционной мо- дели? 2. Какими словами можно заменить термины «сущность», «атри- бут», «кортеж», «отношение», когда мы говорим о представ- лении данных в виде таблиц? 3. Какими свойствами должны обладать таблицы в реляционной базе данных? 4. Каковы цели нормализации? 5. Как вы понимаете выражение «поле должно быть недели- мым»? Приведите примеры. 6. Почему нужно стараться, чтобы структура базы данных (со- став таблиц, количество и состав полей) не менялась во время её использования? 7. Почему не нужно хранить данные, которые могут быть вы- числены через другие данные? Подготовьте сообщение а) «Операции с реляционными БД» а) «Нормальные формы» Проект Сравнение бесплатных реляционных СУБД 136
Работа с таблицей §16 §16 Работа с таблицей Ключевые слова: • текущая запись • поиск • сортировка • фильтрация • конструктор Далее для работы с базами данных мы будем использовать сво- бодно распространяемую программу OpenOffice Base. Аналогичные приёмы работы применяются и в популярной коммерческой СУБД Microsoft Access (которая обладает ещё большими возможностя- ми), поэтому практические задания можно выполнять в любой из этих программ. В тексте мы будем обращать внимание на некоторые различия между ними. В OpenOffice Base вся база данных представляет собой один файл с расширением odb. В нём находятся: • таблицы, в которых хранятся данные; • формы — диалоговые окна, с помощью которых пользователь управляет данными; • запросы — обращения к базе данных, в результате которых отбираются нужные данные или выполняются какие-то другие действия, например изменение или удаление записей; • отчёты — шаблоны документов, предназначенных для вывода данных на печать. Работа с готовой таблицей После двойного щелчка по названию таблицы она открывается в отдельном окне в режиме редактирования данных (рис. 3.24). _Код Авторы Название 1 Матвеева Н.В. и др. Информатика. 2 класс. Ч. 1, 2 2 Матвеева Н.В. и др. Информатика. 3 класс. Ч. 1, 2 ► 3 Матвеева Н. К м др. Информатика. 4 кл»сс. Ч. 1, 2 j 4 Плаксин M.A. и др. Информатика. 3 класс. Ч. 1, 2 5 Плаксин M.A. и др. Информатика. 4 класс. Ч. 1, 2 6 Могилев А.В. и др. Информатика. 3 класс. Ч. 1, 2 7 Могилев А.В. и др. Информатика. 4 класс. Ч. 1, 2 ▼ запись |б |из 237(1) Рис. 3.24 137
3 Базы данных КНОПКИ для вставки В левой части расположена область выделения, щелчок в ней выделает текущую (активную, рабочую) запись, которая обознача- ется треугольником. Номер текущей записи и общее число запи- сей можно увидеть в нижней строке. Там же находятся для перехода по записям |н|<1Им| и кнопка I& новой записи (она всегда добавляется в конец таблицы). При щелчке на кнопке № (или нажатии на клавиши открывается окно, в котором можно задать образец и режимы по- иска (искать вперёд, назад, в текущем поле или во всех и т. д.). Сортировка — это расстановка данных в определённом поряд- ке. Простейший способ сортировки — по текущему столбцу (в котором стоит курсор). Для этого служат кнопки главной панели инструментов1*, задающие соответственно алфа- витный и обратный алфавитный порядок. Кнопка применить несколько уровней сортировки, например книги одного автора отсортировать еще и по году издания. Важно понимать, что при сортировке физическое расположе- ние записей в базе данных (в файле на диске) не изменяется, они переставляются в списке только при выводе на На уроках химии вы использовали фильтрацию, чтобы отде- лить осадок от жидкости. В базах данных фильтр служит для того, чтобы оставить нужные записи и временно скрыть ненуж- ные. Ctrl+F) на А позволяет экран. Фильтр — это условие для отбора записей. Самый простой вариант — это быстрый фильтр (или «фильтр по выделенному»). Он отбирает все записи, в которых значение текущего поля совпадает с активной ячейкой таблицы. Например, чтобы оставить только книги издательства «БИНОМ. Лаборато- рия знаний», нужно сделать активной ячейку, содержащую это название, и щёлкнуть на кнопке на панели инструментов. Подчеркнём, что при фильтрации записи, не удовлетворяю- щие заданному условию, не удаляются из таблицы, а временно скрываются. Чтобы снова показать все записи, нужно отменить фильтр, щёлкнув на кнопке (Отменить фильтр). При вклю- чённом фильтре эта кнопка выделяется серым фоном (активна). В русской версии Microsoft Access на аналогичных кнопках написаны рус- ские буквы «А» и «Я». 138
Работа с таблицей §16 Сложный фильтр, устанавливающий ограничения на не- сколько полей, можно задать с помощью кнопки V (Филыпр по умолчанию). В диалоговом окне (рис. 3.25) задаётся сложное условие, в котором можно использовать логические операции И (AND) и ИЛИ (OR). Рис. 3.25 Помните, что сначала выполняется операция И, а потом — опе- рация ИЛИ. Кнопка удаляет установленный фильтр и от- меняет сортировку. Фильтры служат для быстрого отбора записей по простым условиям. С каждой таблицей может храниться только один фильтр. Если нужно постоянно использовать несколько разных фильтров или более сложные условия отбора, применяют за- просы. Создание таблиц Построим «с нуля» однотабличную базу данных Футбол, в ко- торую запишем количество побед, ничьих и поражений несколь- ких футбольных команд за последний сезон, а также среднюю зарплату футболистов (рис. 3.26). Команда Победы Ничьи Поражения Зарплата Аметист 10 7 3 13 290 руб. Бирюза 5 8 7 12 500 руб. Восход ’ 13 5 2 22 000 руб. Закат 7 8 _ 5 18 780 руб. Коллектор И б' 3j 20 200 руб. Кубань 6 12 2 14 000 руб. Малахит 12 3 5 17 340 руб. Ротор 8 12 0 15 820 руб. Статор 9 10 1 19 300 руб. Финиш 12, 0 8 12 950 руб. Рис. 3.26 139
3 Базы данных Запустим пакет OpenOffice и выберем пункт меню «База дан- ных». Мастер (программный модуль, который облегчает выпол- нение стандартных действий) предлагает на выбор три варианта: • создать новую базу данных; • открыть существующую базу; • подключиться к существующей базе, например к БД Microsoft Access, MySQL, или к адресной книге почтовой программы. Выберем первый пункт. После этого предлагается зарегистри- ровать базу данных — в этом случае вы сможете использовать данные из неё в других программах OpenOffice. В новой базе ещё нет ни одной таблицы. Создать новую таб- лицу можно двумя способами, которые перечислены в области Задачи (рис. 3.27). Задачи Создать таблицу в режиме дизайна... Использовать мастер для создания таблицы... Рис- 3.27 Мастер позволяет быстро построить таблицу на основе одного из готовых шаблонов. Если же выбрать режим дизайна, появляется окно конструк- тора, где нужно в первом столбце ввести названия всех полей новой таблицы, а во втором — выбрать их тип из выпадающего списка (рис. 3.28). Рис. 3.28 140
Работа с таблицей §16 Здесь использованы три различных типа данных: • Текст [VARCHAR] — текстовая строка; • Целое [INTEGER] — целое число; • Десятичное [DECIMAL] — десятичное число, которое хранится с заданным числом знаков в дробной части и применяется, например, для работы с денежными суммами. Среди других форматов отметим следующие: • Вещественное [REAL] — вещественное число (может иметь дробную часть); • Памятка [LONGVARCHAR] — текст большого размера; • Картинка [LONGVARBINARY] — двоичные данные большого размера; • Логическое [BOOLEAN] — логическое значение («да»/«нет»); • Дата [DATE]; • Время [TIME]; • Дата/Время [TIMESTAMP]. Поле Команда — это первичный ключ. Чтобы сделать поле ключевым, нужно щёлкнуть правой кнопкой мыши в области выделения (слева от названия поля) и выбрать строку Первич- ный ключ в контекстном меню. Если выделить несколько полей (щёлкая в области выделения при нажатой клавише Ctrl), можно таким же способом создать составной ключ таблицы, состоящий из всех выделенных полей. В нижней части окна конструктора настраиваются свойства выделенного поля, например: • максимальный размер для текста; • количество знаков в дробной части для десятичного числа; • значение по умолчанию (которое автоматически вписывается в поле при создании новой записи). Если в таблице в качестве первичного ключа используется поле-счётчик (его значение автоматически увеличивается на еди- ницу при добавлении новой записи), для него нужно установить свойство Автозначение равным Да. Такое поле будет заполняться автоматически. Можно потребовать, чтобы значение какого-то поля обязатель- но было задано для каждой добавляемой записи (вспомните обя- зательные поля при регистрации на веб-сайтах). Для этого нужно установить для свойства Обязательное значение Да. Формат вывода значения на экран (например, число знаков в дробной части, выравнивание, выделение отрицательных значе- ... [да! нии красным цветом и т. п.) задается с помощью кнопки |^;| в нижней части окна конструктора. 141
3 Базы данных Для создания индекса нужно в окне конструктора щёлкнуть на кнопке и на панели инструментов. После этого появляется окно, в котором можно создавать, удалять и изменять индексы. Индекс по первичному ключу создается автоматически. Любой индекс можно сделать уникальным, в этом случае СУБД не до- пустит повторения значений, по которым строится индекс. При закрытии окна конструктора будет предложено сохранить таблицу и ввести её название, затем новая таблица появляется в списке таблиц. Для работы с таблицами в окне базы данных служат кнопки главной панели инструментов: и — открыть таблицу в режиме редактирования данных; й — перейти в режим дизайна (в окно конструктора)', — удалить таблицу; — переименовать таблицу. Эти же операции можно выполнить с помощью контекстного меню, щёлкнув на имени таблицы правой кнопкой мыши. Для входа в конструктор нужно выбрать команду Изменить. Связи между таблицами Построим базу данных Кафе (рис. 3.29), о которой мы говорили в конце § 14. Рис. 3.29 Создадим в новой базе данных все необходимые таблицы (пока без связей). Поскольку в этой базе несколько таблиц, далее мы будем использовать общепринятые обозначения типа Блюда. [Название] — это значит «поле Название таблицы Блюда». Не забудьте, что связи устанавливаются только между од- нотипными полями, т. е. поля Заказано.[Номер заказа] и За- казано.[Код блюда] должны быть целого типа (INTEGER), что- бы их можно было связать соответственно с номером заказа и 142
Работа с таблицей §16 кодом блюда. Для поля Блюда.[Цена] выберите десятичный тип (DECIMAL) и денежный формат для вывода на экран. Чтобы установить связи между таблицами, выберем пункт главного меню1* Сервис Связи. С помощью специального окна (рис. 3.30) добавим в рабочую область (она пока пустая) все три таблицы. Рис. 3.30 Теперь можно «схватить» мышью название какого-то поля и «бросить» его на название поля другой таблицы, с которым нужно установить связь. После того как все нужные связи будут установлены, окно можно закрыть, сохранив изменения. Чтобы изменить или удалить связи, снова зайдите в меню Сервис -> Связи. Для удаления связи её нужно выделить щелч- ком мышью и нажать клавишу Delete. Теперь остаётся заполнить таблицы (можно придумать свои данные или взять их из § 14). Выводы • Сортировка — это расстановка данных в определённом по- рядке. СУБД позволяет использовать несколько уровней сор- тировки. При сортировке расположение записей в файле не изменяется. • Фильтр — это условие для отбора записей. С таблицей хра- нится один фильтр. При использовании фильтра записи, не удовлетворяющие условию, временно скрываются. • Для создания таблицы можно использовать мастер или режим дизайна (конструктор). • Связывать можно только поля таблиц, которые имеют оди- наковый тип. Нарисуйте в тетради интеллект-карту этого параграфа. г) В программе Microsoft Access нужно щёлкнуть на кнопке Схема данных на вкладке Работа с базами данных. 143
Базы данных Вопросы и задания 1. Какие объекты хранятся в файле базы данных OpenOffice Base*! 2. Как вы думаете, какие достоинства и недостатки имеет идея хранения всех объектов БД в одном файле? 3. Почему СУБД (в отличие от табличных процессоров) не раз- решает вставлять новую запись в середину таблицы? 4. Почему при сортировке расположение записей в файле не из- меняется? 5. Что такое многоуровневая сортировка? 6. Какие варианты установки фильтров есть в СУБД OpenOffice Base*! 7. Можно ли хранить в базе данных несколько разных фильтров для одной таблицы? 8. Сравните создание таблицы с помощью мастера и в режиме дизайна. 9. Что значит «зарегистрировать базу данных»? 10. В чём особенность значений типа DECIMAL*! Зачем они ис- пользуются? 11. Что обозначают свойства Автозаполнение и Обязательное*! 12. Зачем может понадобиться создавать новый индекс? Как это сделать? 13. Какой индекс в таблице строится автоматически? Проект Разработка базы данных по выбранной теме §17 Запросы Ключевые слова: • запрос • конструктор запросов • критерий отбора • запрос с параметрами • вычисляемое поле Для пользователя любой информационной системы в первую очередь важно, чтобы он смог выбрать из базы данных ту ин- формацию, которая ему в данный момент нужна. Для этого ис- пользуются запросы. 144
Запросы §17 Запрос — это обращение к СУБД для отбора записей или выполнения других операций с данными. о Как вы уже знаете, в большинстве современных СУБД для управления данными (т. е. для составления запросов) использу- ется язык SQL. Детальное изучение этого языка выходит за рам- ки школьного курса, поэтому мы будем использовать в основном визуальные средства составления запросов программы OpenOffice Base. В то же время вы сможете посмотреть, как выглядит составленный вами запрос на языке SQL. Конструктор запросов Продолжим работу с базой данных Футбол, которую мы недавно создали. Перейдём в окне базы данных на вкладку Запросы и выберем в области Задачи вариант Создать запрос в режиме дизайна. Появится окно конструктора, программа предложит до- бавить в рабочую область таблицу, из которой будут выбираться данные. Названия полей, которые нужно включить в запрос, можно перетаскивать мышью в пустые столбцы бланка, расположенного в нижней части окна (рис. 3.31). Рис. 3.31 145
3 Базы данных В нашем случае в запрос добавлены поля Команда, Победы и Зарплата. Чтобы увидеть результаты запроса, нужно нажать клавишу F5 или щёлкнуть на кнопке на панели инструментов. Резуль- тат выполнения запроса — это таблица, которая не сохраняется в файле, а строится в момент выполнения запроса. Однако она напрямую связана с данными — если вы измените что-то в ре- зультатах запроса, эти изменения будут внесены в базу данных. Такие изменения разрешены только тогда, когда в запросе есть первичный ключ таблицы. Запрос, который мы построили, программа переводит на язык SQL и отправляет СУБД для выполнения. Чтобы увидеть SQL- запрос, нужно щёлкнуть на кнопке I (повторный щелчок воз- вращает обратно в режим конструктора). В данном случае мы увидим такой запрос: SELECT "Команда", "Победы", "Зарплата" FROM "Футбол" В английском языке слово select означает «выбрать», a from — «из». Таким образом, здесь выбираются три поля из таблицы Футбол. В режиме SQL запрос можно редактировать вручную, если вы знаете этот язык. Перейдём обратно в конструктор и сделаем так, чтобы спи- сок команд был отсортирован по убыванию числа побед. Для этого в столбце Победы нужно установить параметр Сортировка равным по убыванию (выбрать из выпадающего списка). Теперь можно заново выполнить запрос, нажав F5, и посмотреть на результат. Если закрыть окно конструктора, программа предложит со- хранить запрос и ввести его имя. После этого запрос появится в списке запросов в основном окне базы данных. Двойной щелчок на имени запроса открывает окно с результатами. Щёлкнув пра- вой кнопкой мыши на заголовке столбца таблицы в этом окне, можно настроить формат столбца (тип данных, выравнивание). Чтобы перейти в конструктор, нужно выделить название за- проса и щёлкнуть на кнопке на панели инструментов или выбрать пункт Изменить из контекстного меню. Критерии отбора Теперь отберём только те команды, которые одержали более 10 побед. Для этого в столбце Победы зададим критерий отбора «> 10» (строка Критерий) и проверим запрос. 146
Запросы §17 Добавим второе условие отбора в той же строке Критерий: для поля Зарплата установим критерий «>15000». Теперь СУБД отберёт только те записи, для которых одновременно выполня- ются оба критерия, т. е. условия в одной строке объединяются с помощью логической операции И (AND). Перейдём в режим SQL., найдём в условии слово AND и за- меним его на OR (ИЛИ). Вернувшись в конструктор, обнаружим, что условие «>15000» «переехало» на одну строку ниже (у этой строки заголовок или). Снова выполним запрос и убедимся, что теперь отбираются команды, для которых выполняется хотя бы одно из двух условий. Таким образом, условия, записанные в одной строке, объединяются с помощью операции И, а условия в разных строках — с помощью операции ИЛИ. Для текстовых данных можно указывать не только точное значение, но и шаблон (вспомните, как строятся маски имён файлов). Например, если в критерий отбора для поля Команда ввести LIKE 'К*' то будут отобраны только те команды, название которых начи- наются с буквы «К». Здесь слово LIKE (команда языка SQL) обозначает «такой, как...», «похожий на...», а звёздочка — любое количество любых символов. Кроме звёздочки можно использовать знак вопроса, обозначающий один любой символ. Обратите внимание, что в бланке запроса есть строка Види- мый., где в каждом столбце расположен выключатель (флажок). Он отключается тогда, когда для данного поля нужно задать условие отбора или сортировку, а выводить его на экран не нужно. Запросы с параметрами Создадим запрос, отбирающий команды, в которых зарплата больше заданной, скажем 15 000 рублей. Для этого в критерий отбора для поля Зарплата нужно добавить условие «>15000». Если мы захотим изменить сумму, нужно будет изменить за- прос. Чаще всего пользователь не имеет права изменять запросы (это делает только администратор базы данных), поэтому возни- кает проблема: как дать пользователю возможность менять зна- чение в запросе, не меняя сам запрос? Чтобы решить эту задачу, применяют запросы с параметрами. Параметры — это данные, которые пользователь вводит при выполнении запроса. 147
Базы данных В конструкторе запросов параметр задаётся с помощью двое- точия, за которым следует имя запроса, например: «>=:Мини- мальная_зарплата». В данном примере параметр называется «Минимальная_зарплата». Для соединения двух слов использу- ется знак подчёркивания, потому что в OpenOffice Base имя па- раметра не может включать пробелы1J. Когда выполняется запрос, на экране появляется окно, в котором пользователь должен ввести значения всех параметров (рис. 3.32). Рис. 3.32 Вычисляемые поля Ранее мы говорили о том, что в базе данных не нужно хранить значения, которые можно вычислить по другим известным дан- ным. Пусть требуется найти количество очков, которые набрала каждая команда в чемпионате, учитывая, что за победу начис- ляется 3 очка, а за ничью — одно очко. В бланке запроса перетащим поле Зарплата за заголовок вправо, освободив 3 столбца. В первые два пустых столбца доба- вим поля Ничьи и Поражения, а в третьем вместо имени поля введём нужную нам формулу: Ничьи+3*Победы В строке Псевдоним можно ввести осмысленный заголовок это- го столбца — Очки, который и будет появляться в таблице с результатами запроса. С новым столбцом (вычисляемым полем) можно делать всё, что и с обычными столбцами, соответствующими реальным полям таблицы — сортировать, устанавливать условия отбора* 2). Напри- В Microsoft Access этого ограничения нет, там имя параметра заключается в квадратные скобки. 2) В OpenOffice Base числа в условиях отбора для вычисляемого поля нужно ставить в апострофы: > ' 10'. 148
Запросы §17 мер, можно выбрать сортировку по убыванию, чтобы в начале таблицы оказались команды с самым высоким результатом. Запрос данных из нескольких таблиц Мы построим два запроса к базе данных Кафе — простой и итоговый. Начнём с простого запроса, в котором будет собрана информация по всем сделанным заказам (рис. 3.33). Заказ Дата Блюдо Цена ► 1 11.12.2016 борщ 80 руб. 1 11.12.2016 гуляш 70 руб. 1 11.12.2016 чай 10 руб. 2 12.12.2016 борщ 80 руб. 2 12.12.2016 бифштекс 110 руб. 2 12.12.2016 бифштекс 110 руб. 2 12.12.2016 кофе 50 руб. Рис. 3.33 Посмотрим, откуда нужно взять данные. Номер заказа (в столбце Заказ) и дата хранятся в таблице Заказы; а название блюда и цена — в таблице Блюда. Перейдём к созданию запроса в режиме дизайна и добавим в рабочую область две названные таблицы (рис. 3.34). Заказы * f Номер Дата [3 Блюда * V Код Название Тип Цена Рис. 3.34 Теперь добавим в столбцы бланка все нужные поля и выполним запрос. Результаты окажутся неожиданными — запрос выдаёт слишком много записей, больше, чем есть на самом деле. Дело 149
3 Базы данных в том что таблицы в запросе оказались несвязанными: мы не добавили таблицу Заказано. Из неё не берутся данные, но она служит для связи таблиц в единую систему. Чтобы исправить ситуацию, выберем пункт главного меню Вставка Добавить таблицу или запрос и добавим табли- цу Заказано. После этого запрос отберёт данные правильно. Остаётся только дать столбцам запроса понятные названия (см. рис. 3.33) — для этого, как и раньше, используется строка Псев- доним в бланке запроса. Теперь окно конструктора запросов можно закрыть, при со- хранении дайте запросу название ЗапросЗаказы. Обратите вни- мание, что нельзя называть запрос именем, которое совпадает с именем таблицы (например, Заказы) или другого запроса. Двойной щелчок на имени запроса запускает его на выпол- нение. Щёлкнув правой кнопкой мыши на заголовке столбца, можно изменить его оформление. Установите таким образом де- нежный формат для поля Цена и выравнивание вправо для всех числовых данных. Итоговый запрос Теперь построим запрос, который считает общую стоимость каж- дого заказа (рис. 3.35). Заказ Дата К оплате ► 1 11.12.2016 160 руб. 2 12.12.2016 350 руб. Рис. 3.35 Как видно из рис. 3.35, нам нужны номер и дата заказа (из таблицы Заказы) и цены блюд (из таблицы Блюда), которые нужно как-то сложить. Посмотрев на схему соединения таблиц, легко понять, что для правильного объединения данных нужно добавить в запрос таблицу Заказано, хотя ни одно её поле в результате запроса не выводится. Создайте новый запрос в режиме дизайна и добавьте в ра- бочую область таблицы Заказы, Заказано и Блюда. Перетащите в бланк запроса нужные поля и введите правильные заголовки столбцов (как на образце) в строке Псевдоним. Если выполнить этот запрос, мы увидим цены отдельных блюд, а не общую сто- имость. 150
Запросы 17 Чтобы подсчитать сумму цен по каждому заказу, в поле Цена найдём строку Функция^ и там выберем вариант Сумма. Кроме того, надо указать, какие группы записей объединять при сум- мировании. Для этого в той же строке Функция в полях запроса Номер и Дата выберем вариант Group {Группировка). Это зна- чит, что сумма считается для каждой уникальной комбинации «Номер заказа, Дата». Поскольку у нас номер заказа уникаль- ный, фактически будет рассчитана сумма каждого заказа. Вы- полним запрос и проверим, что он работает правильно. Теперь можно закрыть окно конструктора, сохранив запрос под именем ЗапросКОплате. Запустите запрос двойным щелчком и настройте формат вывода данных в соответствии с образцом. Кроме функции Сумма в итоговых запросах можно использо- вать и другие функции, например количество, среднее значение, минимум, максимум. Другие типы запросов Мы рассмотрели только один вид запросов — запросы на выбор- ку данных. Однако язык SQL поддерживает и другие команды, с помощью которых можно полностью управлять базой данных: создавать и удалять таблицы; добавлять, изменять и удалять за- писи и т. д. Чтобы использовать эти возможности, в OpenOffice Base нуж- но выбрать пункт Сервис —> SQL в главном меню. Кроме того, можно также составить запрос на выборку нужных записей в конструкторе, затем перейти в режим просмотра SQL-запро- са (кнопка ), вручную изменить запрос нужным образом2* и щёлкнуть на кнопке {Выполнить команду SQL). Выводы • Запрос — это обращение к СУБД для отбора записей или выполнения других операций с данными. • Параметры — это данные, которые пользователь вводит при выполнении запроса. • Вычисляемое поле содержит данные, которые не хранятся в БД, а вычисляются по формулам в момент выполнения за- проса. В Microsoft Access эта строчка называется Групповая операция. Чтобы она появилась в бланке запроса, нужно щёлкнуть на кнопке Итоги на вкладке Конструктор. В современных версиях OpenOffice Base этот способ работает только для запросов на выборку. 151
3 Базы данных • В запросах можно применять групповые операции: вычислять сумму, произведение, среднее значение, минимум или макси- мум для группы записей. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Сравните возможности фильтра и запроса. 2. На каком языке составляются запросы к СУБД? 3. Можно ли строить и изменять запрос, не используя конструк- тор? 4. Объясните, зачем нужны строки Псевдоним, Сортировка и Критерий в бланке запроса. 5. Как вы думаете, ограничивает ли структура бланка (одна строка Критерий и несколько строчек «или») возможность создания сложных запросов? Ответ обоснуйте (вспомните ма- териал по математической логике). 6. Как увидеть результаты выполнения запроса? 7. Как изменить существующий запрос? 8. Как вы думаете, каков будет результат выполнения следую- щего SQL-запроса? SELECT ’’Команда” FROM ’’Футбол” WHERE ’’Победы” > 10 Проверьте ваш ответ с помощью программы OpenOffice Base. 9. Зачем нужны запросы с параметрами? 10. Что такое вычисляемое поле? Как его построить в конструк- торе? 11. Какие операции можно выполнить с помощью SQL-запросов, кроме выборки данных? Подготовьте сообщение а) «Работа с таблицами с помощью SQL-запросов» б) «Основные команды языка SQL» Интересные сайты sqlfiddle.com — веб-сервис для тестирования SQL-запросов sqlize.com — веб-сервис для тестирования SQL-запросов 152
Формы §1 § 18 Формы Ключевые слова: • форма • мастер • конструктор • навигатор форм • элементы управления • субформа Простая форма Пользователи информационных систем для работы с базой дан- ных используют прикладные программы, которые для выполне- ния любых операций с данными обращаются к СУБД. В них можно построить интерфейс для пользователя, предоставив ему возможность ввода, изменения и удаления записей с помощью диалоговых окон, которые называются формами. Форма создаётся на основе таблицы или запроса. Как и все объекты базы данных, форму можно строить вручную (в режиме дизайна) или с помощью мастера. На этот раз мы будем исполь- зовать второй метод. Перейдите на страницу Формы и выберите (в области Задачи) вариант Использовать мастер для создания формы. В первом окне мастера нужно выбрать источник данных — таблицу или запрос (рис. 3.36). Рис. 3.36 153
3 Базы данных Кнопки со стрелками позволяют добавить поля на форму или отменить выбор. Кнопка с одной стрелкой перемещает только выделенные поля, а кнопка со сдвоенной стрелкой — сразу все поля. Для перехода к следующему шагу мастера нужно щёлкать на кнопке Дальше. Второй этап (Установка субформы — подчинённой формы) мы пропустим, просто щёлкнув на кнопке Дальше. Затем нужно выбрать расположение полей с данными, определить стиль оформ- ления и задать имя формы. После щелчка на кнопке Готово на последнем шаге мы увидим форму, которую построил мастер (рис. 3.37). Команда Победы Ничьи Поражения Зарплата м Запись [з из 10 I , j I * Рис. 3.37 В нижней части окна видны кнопки для поиска, перехода между записями, сохранения и отмены сделанных изменений, удаления записи и др. Так же как таблицы и запросы, формы можно редактировать в конструкторе. Для перехода в конструктор нужно выделить на- звание формы в окне базы данных и щёлкнуть на кнопке панели инструментов или выбрать пункт Изменить из контек- на стного меню. На нижней панели инструментов в окне конструктора рас- положены кнопки для настройки формы и её элементов. Кноп- ка позволяет переключаться в режим просмотра данных и обратно. С помощью кнопки |[П§| можно изменить общие свойства формы: название, источник данных, разрешения на добавление, изменение и удаление записей. Для того чтобы изменить фон формы, нужно щёлкнуть пра- вой кнопкой мыши на свободном месте на форме, выбрать пункт Страница из контекстного меню и перейти на вкладку Фон. На ней можно выбрать цвет фона или фоновый рисунок. 154
Формы §18 с ним надпись, при выделении Чтобы изменить свойства отдельного элемента, нужно сначала этот элемент выделить. Вы можете заметить, что щелчок мышью выделяет сразу два элемента: поле и связанную Чтобы работать с ними по удерживать клавишу Ctrl. шью, изменять их размеры Для настройки свойств отдельности, нужно Элементы можно перетаскивать мы- за маркеры на рамке. выделенного элемента нужно щёлк- нуть на кнопке на нижней панели инструментов или вы- брать пункт Элемент управления из контекстного меню. На вкладке Общие задаётся название элемента, шрифт, цвет фона, размеры, координаты, формат данных, выравнивание и т. п. Вкладка Данные определяет источник данных для элемента (на- звание поля). Кнопка И открывает окно Навигатора форм. В нём пока- заны названия всех элементов, щелчком мышью можно выбрать любой из них. С помощью кнопки новое поле. Панель Элементы управления позволяет добавить на форму флажки (для логических полей), радиокнопки (выбор одного из вариантов), списки, метки и другие элементы (рис. 3.38). на форму добавляется Рис. 3.38 Растровый рисунок можно добавить на форму с помощью пун- кта главного меню Вставка —> Изображение. Панель инструмен- тов Рисование предназначена для работы с векторной графикой (рис. 3.39). I Z В ® Т I ♦ ’ • ’ * ’ ’ Р ’ ★ ’ I й IЙ! Ш Рис. 3.39 Таким образом, форма позволяет не только получить доступ к данным, но и оформить их в виде, удобном для пользователя. 155
Базы данных Формы с подчинёнными Построим для базы данных Кафе более сложную форму, по- казанную на рис. 3.40, в которой для каждого номера заказа выдаётся его дата, состав заказанных блюд с ценами и общая сумма. Заказ |"1 Дата 111.12.12 Рис. 3.40 В данном случае мы хотим получить информацию о зака- зе, поэтому основной источник данных — это таблица Заказы. Информацию о названиях блюд и ценах можно было бы взять из таблицы Блюда, но она напрямую не связана с таблицей Заказы, поэтому так сделать не получится. Однако у нас есть запрос ЗапросЗаказы, где эти данные объединены, поэтому со- став заказа и цены на отдельные блюда мы возьмём из этого запроса. Как получить общую сумму? Вспомним про ЗапросКОплате, где сумма для каждого заказа уже найдена. Таким образом, фор- ма объединяет информацию из таблицы Заказы и двух запросов. Связь между ними устанавливается по номеру заказа — это поле есть везде. Как мы уже упоминали, основной источник данных — это таблица Заказы. Щёлкнем на её имени правой кнопкой мыши и выберем пункт Мастер форм из контекстного меню. Включим в форму все поля. На втором шаге мастер предлагает добавить субформу (подчинённую форму), для которой источником данных служит 156
Формы другая таблица или запрос. Отметим флажок Добавить субформу (рис. 3.41). Мастер форм Шаги 1. Выбор поля Решите, хотите ли вы установить субформу Р Добавить.субформу: I. Установка субформы С Субформа, основанная на существующей связи 3. Добавить поля субформы 5. Расположить элементы управления Бзказано F Субформа, основанная на выбранных полях Рис. 3.41 Мастер определил, что для таблицы Заказы подчинённой является таблица Заказано (они связаны отношением «1:N») и предлагает выбрать эту таблицу. Однако нам нужно использовать запрос, поэтому отметим второй вариант: Субформа, основанная на вы- бранных полях. Далее выберем поля Заказ, Блюда и Цена из запроса (рис. 3.42). Рис. 3.42 Несмотря на то что поле Заказ не будет выводиться на экран, его нужно включить в субформу, потому что через это поле на следующем шаге работы мастера устанавливается связь двух источников данных (рис. 3.43). 157
Базы данных Рис. 3.43 Затем выберем расположение элементов главной и подчинённой форм (рис. 3.44). После завершения работы мастера нужно отрегулировать раз- меры полей и настроить формат вывода. Например, для правиль- ного отображения цены нужно войти в конструктор форм, щёлк- нуть правой кнопкой мыши на столбце Цена и выбрать пункт Заменить на -» Поле валюты. Количество десятичных знаков можно изменить с помощью свойства Точность в окне свойств столбца (пункт Столбец в контекстном меню). Столбец Заказ в подчинённой форме нужно просто удалить (пункт Удалить стол- бец в контекстном меню). Осталось вывести общую стоимость заказа. Напомним, что её нужно взять из другого источника данных — запроса Запрос- КОплате. Это значит, что необходимо добавить к форме ещё одну субформу. Мастер тут не поможет, придётся выполнить эту операцию вручную.
Формы §18 Откроем форму в режиме дизайна (конструктора) и запустим Навигатор форм (рис. 3.45), щёлкнув на кнопке на нижней панели инструментов. Здесь MainForm — это главная форма, а SubForm — подчинённая (её содержимое можно раскрыть, щёлк- нув на знаке «+»). Остальные ветки дерева — это метки и поля данных. Рис. 3.45 Щёлкнем правой кнопкой мыши на имени главной формы и выберем в контекстном меню пункт Создать Форма. В На- вигаторе форм появляется новая форма с именем Форма , но на экране ничего не меняется, ведь мы пока не добавили в эту фор- му ни одного элемента. Выделите название новой формы и создайте метку (надпись) с текстом «К оплате». Для этого надо щёлкнуть на кнопке АВС на панели Элементы управления (обычно она расположена слева) и выделить область по размеру метки (под таблицей). Свойства метки настраиваются с помощью кнопки на нижней панели инструментов или пункта Элемент управления из контекстного меню. Обратите внимание, что в окне Навигатора форм эта мет- ка принадлежит новой субформе. Теперь нужно аналогично добавить на форму поле валюты, в котором будет выводиться сумма оплаты для заказа. Кнопка кД । для вставки такого поля находится на панели дополнительных элементов управления (рис. 3.46). Дополнительные элементы управления * х Рис. 3.46 159
Базы данных Чтобы вывести эту панель на экран, щёлкните на кнопке . . . Перед вставкой нового поля в окне Навигатора форм выделите вторую субформу, которой это поле должно принадлежать. Осталось связать новую субформу с источником данных. Для этого выделим субформу в окне Навигатора форм и выберем пункт Свойства в контекстном меню. На вкладке Данные уста- новим тип содержимого — запрос, в следующей строке выберем ЗапросКОплате (рис. 3.47). Свойства формы Общие Данные | События | Тип содержимого источника....... Содержимое................... Запрос ЗапросКОплате Рис. 3.47 Теперь в окне свойств добавленного поля валюты на вкладке Данные надо выбрать поле данных КОплате. После этого форма полностью работоспособна. Кнопочные формы Для того чтобы пользователям было удобнее работать с базой данных, часто используют кнопочные формы, позволяющие управ- лять базой с помощью кнопок. Предположим, что в базе данных Кафе созданы две формы: Блюда для редактирования данных меню и Заказы для работы с заказами клиентов. Мы построим простую форму, которая позволяет переключаться между этими двумя режимами работы (рис. 3.48). База данных «Кафе> Блюда Заказы Рис. 3.48 Создадим новую форму в режиме дизайна и разместим на ней метку (элемент *вс) с надписью «База данных Кафе» и две кнопки (элементы | ). Двойной щелчок на кнопке в режиме ди- зайна открывает окно Свойства, свойство Текст — это надпись на кнопке (рис. 3.49).
Формы §18 Cbohi та >: Кнопка Общие Событ ... 1 Имя.............. Текст, ........ Рис. 3.49 Теперь нужно определить, какое действие будет выполнять- ся при щелчке на каждой кнопке в рабочем режиме. Для этого используются макросы. Макрос (макрокоманда) — это подпрограмма для автоматиза- ции действий пользователя. В пакете OpenOffice макросы чаще всего пишут на языке OpenOffice Basic1) (можно использовать также языки Python, Java и Javascript). Сначала нужно открыть диалоговое окно через пункт главного меню Сервис Макросы Управление макросами —> OpenOffice Basic и создать в стандартной библи- отеке (Standard) новый модуль для хранения макросов (кнопка Создать) — рис. 3.50. Имя модуля не должно содержать русских букв и пробелов. kfrts макроса Макрос из Существующие макросы: • Мои макросы & Макросы OpenOffice В ЙКафелЛ Рис. 3.50 О В пакете Microsoft Office используется язык Visual Basic for Applications (VBA). 161
Базы данных После создания модуля открывается окно для редактирования макросов (потом его можно вызвать с помощью кнопки Редакти- ровать). Введём первый макрос: Sub OpenMeal ThisDataBaseDocument.FormDocuments. getbyname("Заказы”).close ThisDataBaseDocument.FormDocuments. getbyname("Блюда").open End Sub Команда Sub начинает макрос, после неё записывается имя макроса (OpenMeal). Первая рабочая строка макроса (за- канчивающаяся командой close) говорит о том, что нуж- но закрыть форму с именем Заказы, если она открыта. Здесь ThisDataBaseDocument — обращение к активному документу, FormDocuments — обращение к коллекции форм этого докумен- та, метод getbyname ищёт форму по имени, указанному в скоб- ках. Легко понять, что вторая команда (заканчивающаяся словом open) открывает форму Блюда. Теперь нужно написать похожий макрос OpenOrder, который открывает форму Заказы и закры- вает форму Блюда*, это вы уже можете сделать самостоятельно. Чтобы связать макрос с кнопкой, перейдём в режим редакти- рования кнопочной формы и щёлкнем дважды на кнопке, вызывая окно свойств (см. рис. 3.49). На вкладке События выбираем вариант Выполнить действия и назначаем ему макрос OpenMeal (рис. 3.51). Тем же способом свяжем вторую кнопку с макросом OpenOrder. События | Подтвердить действие Выполнить действие.... CocT^nw«e изменено При получении фокус При потере фокуса... Нажатие клавиши...« Отпускание клавиши Указатель мыши над Перемещение мыши с ениемыши.. При получении ф< При потере фоку» Нажатие клавиш» Выберите библиотеку которая содер*нт нужный макрос. Затем выберите макрос в поле «н*. макроса». Отпускание клав Мышь внутри Библиот а д j Мои макросы • _ > Макросы OpenOffice 3 Ц К^фе.<хЬ _ Standard / ня и жроса Описанн* Рис. 3.51 162
Формы §18 Обычно кнопочная форма открывается автоматически сра- зу при открытии файла с базой данных. Для этого тоже при- дётся использовать макрос. Создадим соответствующий макрос Autoexec в том же модуле, где расположены первые два макро- са, и свяжем его с событием Открытие файла, выбрав пункт главного меню Сервис Настройка (рис. 3.52). Чтобы про- верить работу макроса1*, нужно закрыть файл и открыть его снова. Рис. 3.52 Выводы • Форма — это диалоговое окно для управления базой данных. • Источник данных для формы — это таблица или запрос. • На форму можно добавлять подчинённые формы для того, чтобы работать с данными из нескольких связанных та- блиц. • С помощью макросов можно автоматизировать выполнение часто встречающихся операций. Нарисуйте в тетради интеллект-карту этого параграфа. 1) Для того чтобы макросы выполнялись, в настройках пакета OpenOffice (Сервис Параметры OpenOffice -> Безопасность) нужно установить средний или низкий уровень безопасности для макросов. 163
3 Базы данных Вопросы и задания 1. Зачем используются формы? 2. Как изменить источник данных формы? 3. Как выделить поле данных, не выделяя связанную с ним метку? 4. Постройте форму, оформив её с помощью растровых и век- торных рисунков. 5. Как построить форму с подчинённой формой (с субформой)? 6. Как добавить подчинённую форму с помощью Навигатора фор м2 7. Как связать новую субформу с главной формой? 8. Зачем нужны кнопочные формы? § 19 Отчёты Ключевые слова: • отчёт • группировка Простые отчёты о Отчёт — это документ, предназначенный для вывода данных на печать. Подготовка отчётов — это задача прикладной программы, а не СУБД. На рисунке 3.53 показан отчёт, построенный на основе запроса к базе данных Футбол. создания отчёта перейдём в окне базы данных на вклад- ку Отчёты и используем мастер (ссылка для запуска мастера находится в области Задачи). Первый шаг напоминает работу мастера создания форм — нужно выбрать источник данных (таблицу или запрос) и опре- делить нужные поля. На следующих шагах задаются метки для обозначения полей (по умолчанию это имена полей), группировка 164
Отчёты §19 (мы пока ее нё будем использовать), сортировка, стиль оформле- ния. На последнем шаге нужно определить имя отчёта. Турнирная таблица Автор Василий Дата: 1210.11 Команда Победы HU4L/U Поражения U4KU Зарплата Восход 13 5 2 44 22 000 руб. Малахит 12 3 5 39 17 340 руб Коллектор 11 6 3 39 20 200 руб Статор 9 10 1 371 19 300 руб Аметист 10 7 3 37 13 290 руб Финиш 12 0 8 36 12 950 руб Ротор 8 12 0 36 15 820 руб Кубань 6 12 2 30 14 000 руб Закат 7 8 5 29 18 780 руб Бирюза 5 8 7 23 12 500 руб Страница 1/1 Рис. 3.53 Новый отчёт появляется в окне базы данных на вкладке Отчёты. Если дважды щёлкнуть на его названии, отчёт от- крывается на экране в готовом виде, его сразу же можно рас- печатать. Для того чтобы изменить структуру и оформление отчёта, нужно выделить его название в окне базы данных и щёлкнуть на кнопке на панели инструментов или выбрать пункт Из- менить из контекстного меню. Отчёт редактируется в текстовом процессоре Write, вы можете задать название отчёта и имя ав- тора, а также изменить расположение и оформление элементов, например выравнивание, шрифт и т. п. Отчеты с группировкой Построим для базы данных Кафе подробный отчёт по всем за- казам (рис. 3.54). 165
Базы данных Заказы Исполнитель: Василий Петров Дата: 15.12.16 Дата 11.12.16 Заказ 1 Блюдо Цена Дата гуляш борщ рассольник 12.12.16 40 руб. 30 руб 20 руб. Зак аз 2 I \Цена I компот 10 руб. Рис. 3.54 Обратим внимание, что заказы сгруппированы по датам, кро- ме того, данные о блюдах, относящихся к одному заказу, тоже расположены вместе. Это отчёт с группировкой, причём здесь использованы два уровня группировки — сначала по дате, а по- том — по номеру заказа. Перейдем на страницу Запросы, выделим запрос с именем ЗапросЗаказы и выберем пункт Мастер отчётов из контекстно- го меню. Добавим в отчёт все поля запроса, а на третьем шаге установим два уровня группировки — сначала по полю Дата, затем — по полю Заказ (рис. 3.55). Рис. 3.55 Остальные шаги выполняются так же, как и для простых за- просов, с которыми мы работали раньше. К сожалению, в настоящей версии OpenOffice Base можно строить только самые простые отчёты. Например, невозможно подсчитать общую стоимость каждого заказа1* или включить в г* Это можно сделать с помощью расширения Oracle Report Builder, кото- рое можно бесплатно загрузить с сайта http://extensions.openoffice.org/en/ project/oracle-report-builder. 166
Нереляционные базы данных §20 отчёт данные из двух источников (таблиц или запросов), как это мы делали для форм. Нужно отметить, что Microsoft Access обла- дает значительно большими возможностями для создания профес- сиональных отчётов. Выводы • Отчёт — это документ, предназначенный для вывода данных на печать. • Источник данных для отчёта — это таблица или запрос. • В отчётах можно использовать несколько уровней груп- пировки. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Объясните, что даёт группировка при построении отчета. 2. Откуда берутся данные, которые выводятся в отчёте? 3. Как изменить расположение и оформление элементов отчёта? © §20 О Нереляционные базы данных Ключевые слова: • документ • масштабируемость • БД «ключ—значение» Проблемы реляционных БД Несмотря на то что реляционные (табличные) БД хорошо себя зарекомендовали и составляют подавляющее большинство реально используемых баз данных, они не универсальны, и в некоторых задачах их применение приводит к серьёзным проблемам. Во-первых, для того чтобы построить надёжно работающую реляционную БД, необходимо представить исходные данные как набор взаимосвязанных таблиц. Это требует серьёзных усилий, кроме того, данные становятся менее понятными для человека, потому что он мыслит не таблицами, а объектами, которые име- ют определённый набор свойств. Во-вторых, данные об одном объекте разбросаны по разным таблицам, поэтому при поиске их приходится «вытаскивать» с 167
3 Базы данных помощью сложных запросов, которые выполняются сравнительно медленно при больших объёмах данных. В-третьих, во всех реляционных базах данных структура дан- ных чётко определена, причём она задаётся разработчиком при создании базы, и изменить её весьма непросто. Теперь представим себе, что нам нужно хранить документы, которые могут иметь разное количество свойств с разными названиями и типами дан- ных, причём эти свойства заранее не определены и могут менять- ся со временем. В этом случае использовать реляционные БД, по крайне мере, очень сложно, поскольку они для этой цели не предназначены. В-четвёртых, объёмы данных, которые нужно обрабатывать, всё время возрастают, сейчас базы данных поисковых систем могут достигать нескольких петабайт1). Например, Google обра- батывает более 20 Пб данных в день, Facebook хранит 1,5 Пб фотографий, Twitter генерирует 2 Пб данных в год. Поэтому один компьютер с этим справиться не в силах (система может полу- чать сотни тысяч запросов в секунду). Возникает задача распре- делить нагрузку на большое количество (иногда десятки тысяч) серверов, связанных между собой через Интернет. Если при этом применять реляционную базу данных, то для выполнения даже простых запросов нужно обращаться ко многим серверам, это недопустимо замедляет поиск. Подобная проблема возникает при облачных вычислениях, при которых данные пользователя хра- нятся на серверах в Интернете. Таким образом, реляционные БД плохо масштабируются. Это значит, что при увеличении объёма данных и количества запросов не удаётся увеличивать мощность системы, просто добавляя новые серверы. Причина в том, что реляционная модель плохо подходит для распределённых инфор- мационных систем. Базы данных NoSQL В последние годы появились базы данных нового типа, получив- шие название нереляционных, или NoSQL (от англ. Not Only SQL — не только SQL), которые хорошо показали себя в рас- пределённых системах с большой нагрузкой, в том числе в по- исковых системах Интернета. Среди них выделяют четыре типа хранилищ данных: • базы данных «ключ — значение»; • большие разреженные таблицы; • документоориентированные БД; • графовые БД. х) 1 Пбайт = 210 Тбайт = 250 байт. 168
Нереляционные базы данных §20 Базу данных «ключ — значение» (англ, «key-value» database) можно представить себе как огромное хранилище пар данных. Значение — это произвольный объект, структура которого никак не ограничена, например символьная строка. Каждому значению присваивается некоторый код (ключ), по которому его можно найти. Все данные, относящиеся к конкрет- ном объекту, хранятся в одном месте, поэтому при запросе не нужно обращаться к разным таблицам, а достаточно просто найти значение по ключу. СУБД поддерживает только добавление записи, поиск значе- ния по ключу, а также изменение и удаление найденной таким образом записи. Никакие связи между значениями в явном виде не поддерживаются. Хотя объект может содержать ссылки на другие объекты (их ключи), СУБД не проверяет их правильность. Обеспечение надёжности и целостности данных возлагается не на СУБД, а на прикладную программу, которая работает с базой данных. Ключи объединяются в группы так, что все данные, связан- ные с ключами одной группы, хранятся на одном сервере. Таким образом, по ключу можно сразу определить нужный сервер и напрямую получить от него данные. За счёт этого обеспечива- ется масштабируемость — если один сервер не справляется с нагрузкой, нужно добавить ещё один и разделить данную группу ключей на две части. Запись в базу значения, соответствующего ключу 12345, вы- глядит примерно так: data (12345) = ’’Вася” Номер сервера, где будет храниться эта информация, вычис- ляется по ключу. Например, если в кластере 100 серверов, номер сервера может вычисляться1* как S = 12345 mod 100 = 45 Такие СУБД обычно очень быстро работают, хорошо масшта- бируются, их удобно использовать для хранения простых неструк- турированных данных, например счётчиков посещений. Примеры СУБД «ключ — значение» — Redis (redis.io), MemcacheDB (memcachedb.org), DynamoDB (aws.amazon.com/ru/dynamodb). Большие разреженные таблицы — это хранилища типа «ключ — значения», где каждый элемент может иметь два клю- ча — ключ строки и ключ столбца (рис. 3.56). 1* Это только один из возможных вариантов. 169
3 Базы данных Имя Дата рождения Эл. почта Телефон 1 Денис 12.11.1993 den@sql.ru 365-13-78 2 Кирилл 572-12-80 3 Василий vasil@nosql.ru Рис. 3.56 Как видно из рис. 3.56, далеко не все ячейки заполнены, поэтому таблица и называется разреженной. В ней могут быть сотни и тысячи столбцов. Данные хранятся не по строкам, как принято в реляционных СУБД, а по столбцам. Столбцы группируются так, чтобы связанные данные (например, части адреса) хранились вместе. Как строки, так и столбцы могут быть распределены по нескольким серверам. Такую схему хранения данных, названную BigTable (от англ. big table — большая таблица), впервые разработала компания Google для хранения данных о сайтах в своей поисковой си- стеме. Самые известные современные СУБД этого типа — Cassandra (cassandra.apache.org), HBase (hbase.apache.org). Документоориентированные БД очень похожи на БД «ключ — значение», но значения — это документы, имеющие внутреннюю структуру, т. е. некоторый набор полей-свойств. На- пример, пост блога с комментариями к нему может храниться в таком виде: { ключ: 1231239786234762394769237, автор: "Solaris", название: "Новая ОС", дата: "15.12.2016", текст: "Начал писать операционную систему...", комментарии: [ { автор: "linus", дата: "16.12.2016", текст: "Отлично! Держи в курсе." } ] } Заметим, что другие документы могут иметь совершенно другой набор свойств. 170
Нереляционные базы данных §20 Среди СУБД этого класса можно отметить бесплатные систе- мы ф MongoDB (www.mongodb.org) и CouchDB (couchdb. apache.org). Базы данных на основе графов — лучший выбор, если нужно хранить данные о какой-либо сети, в которой существуют мно- жественные связи между узлами. Как узлы, так и связи могут иметь какие-то свойства (пары «ключ — значения»), которые так- же хранятся в базе данных (рис. 3.57). код: 1 имя: Анна телефон: 911-11-12 код:101 друге: 15.12.2014 код: 102 друге: 15.12.2014 код: 2 имя: Борис email: boris@mail.ru Рис. 3.57 БД на основе графов используются, например, для работы с данными о связях людей в социальных сетях. Самая известная БД этого типа — Neo4j (neo4j.com). Нереляционные базы данных обладают достоинствами, кото- рые принципиально важны в некоторых задачах: • масштабируемость — возможность наращивания мощности распределённой системы простым добавлением новых серверов; • простота представления данных, близость к человеческому восприятию. В то же время у них есть и недостатки: • СУБД не поддерживают связи между данными, не обеспечи- вают целостность данных; • нет стандарта на язык описания и управления данными (для реляционных БД таким стандартом стал язык SQL); • основной вид запросов — поиск значения по ключу, поэтому очень сложно, например, выполнить сортировку данных. В первую очередь нереляционные базы данных применяют при облачных вычислениях: в поисковой системе Google (систе- ма хранения данных BigTable). интернет-магазине Amazon (www. amazon.com, база данных SimpleDB), социальной сети Facebook 171
3 Базы данных (www.facebook.com, СУБД Cassandra), сервисе микроблогов Twitter (twitter.com, СУБД Cassandra). Выводы • Реляционные БД плохо работают с данными меняющейся структуры и плохо масштабируются, т. е. при увеличении объёма данных и количества запросов не удаётся увеличивать мощность системы, просто добавляя новые серверы. • Большинство нереляционных БД относится к типу «ключ — значение» и могут хранить произвольные данные, связанные с ключом. • Нереляционные БД хорошо масштабируются, но обычно не поддерживают связи между данными и выполнение сложных запросов, кроме поиска по ключу. © Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. В каких задачах проявляются недостатки реляционных БД? 2. Что такое распределённые базы данных? 3. Что такое масштабируемость? Почему говорят, что реляцион- ные БД плохо масштабируются? 4. Как обеспечиваются связи между объектами в БД «ключ — значение»? Как обеспечивается целостность данных? 5. Вспомните, что такое хэширование и хэш-коды. Как можно выполнить масштабирование на основе хэш-кодов? 6. Что такое документоориентированные базы данных? 7. Назовите достоинства и недостатки баз данных типа «ключ — значение». В каких задачах их имеет смысл использовать? 8. Что вы думаете о дальнейшей судьбе реляционных БД в свя- зи с появлением новых принципов хранения данных? Обсу- дите этот вопрос в классе. Подготовьте сообщение а) «Базы данных "ключ — значение”» б) «Документориентированные базы данных» в) «Графовые базы данных» г) «Нереляционные БД: "за” и "против”» Проекты а) Использование нереляционной БД в выбранной задаче б) Сравнение реляционной и нереляционной БД в выбранной за- даче 172
Экспертные системы §21 §21 © Экспертные системы Ключевые слова: • эксперт • база знаний • экспертная система • блок получения решения Эксперт — это человек, который обладает глубокими теоретиче- скими знаниями и практическим опытом работы в некоторой области. Например, врач-эксперт хорошо ставит диагноз и лечит потому, что имеет медицинское образование и большой опыт ле- чения пациентов. Он не только знает факты, но и понимает их взаимосвязь, может объяснить причины явлений, сделать прогноз, найти решение в конфликтной ситуации. Эксперт может ответить на вопросы, на которые нельзя най- ти ответы в поисковых системах Интернета. Более того, эксперт часто может предложить решение плохо поставленных задач, на- пример при нехватке, неточности или противоречивости исходных данных. Для этого он использует свой опыт и интуицию, кото- рые сложно представить в виде формального алгоритма. В то же время нельзя гарантировать правильность решения, принятого в таких сложных случаях, хотя иногда эксперт может примерно оценить вероятность своей версии. Например, можно получить ответ: «С вероятностью 80% вы поступите в вуз». Экспертная система — это компьютерная программа, задача которой — заменить человека-эксперта при выработке реко- мендаций для принятия решений в сложной ситуации. Разработка экспертных систем — это одно из направлений развития искусственного интеллекта, потому что такие програм- мы пытаются моделировать мышление человека. Результат работы экспертной системы — это не числа, а конкретный совет (реко- мендация) в словесной форме. Экспертные системы применяются в медицине, электронике, геологии, для решения военных и управленческих задач. Первая экспертная система Dendral была создана в Стэнфордском универ- ситете в конце 1960-х годов для определения строения органиче- ских молекул по их химическим формулам и свойствам. В составе экспертной системы выделяют три основные части: • базу знаний; • блок получения решения (решатель); • интерфейс с пользователем. 173
3 Базы данных База знаний отличается от базы данных тем, что в ней хра- нятся не только факты, но и правила, по которым из фактов делаются выводы. Факты — это утверждения, которые считаются истинными, например: • у окуня есть жабры; • Иван — отец Марьи; • Волга впадает в Каспийское море. Правила обычно формулируются в виде «если..., то», напри- мер: • если х — животное и х дышит жабрами, то х — рыба; • если х — отец у, и у — отец z, то х — дед г; • если х состоит из атомов углерода и обладает высокой твёр- достью, то х — алмаз. Таким образом, в отличие от данных знания представля- ют собой общие связи предметов, понятий и явлений; часто их формулировка содержит переменные1^ Для того чтобы оценить надёжность выводов экспертной системы, используют степень уверенности, которая показывает, насколько стоит доверять тому или иному правилу. Степень уверенности — это целое число от О (несомненная ложь) до 100 (истина безо всякого сомнения), по- зволяющее выразить численно качественные экспертные оценки: «никогда», «редко», «часто», «почти всегда» и т. п. Разработаны алгоритмы, с помощью которых можно вычислить степень уве- ренности для сложных выражений, например для общего вывода экспертной системы. В разработке экспертной системы участвуют эксперты и спе- циально обученный специалист — инженер по знаниям, задача которого — представить знания экспертов в такой форме, чтобы они могли быть записаны в базу знаний. Важно, чтобы эту базу знаний можно было постепенно пополнять — добавлять новые правила вывода независимо от предыдущих. Второй блок экспертной системы — решатель — это програм- ма, которая моделирует рассуждения эксперта, используя предо- ставленные ей исходные данные и информацию из базы знаний. В результате работы она не только выдаёт заключение, но и мо- жет подробно показать, как оно было получено (какие правила были использованы). Решатель — это универсальная программа, которая может работать с любой базой знаний понятного ей фор- мата. Вспомните, что в логике утверждение с переменными называется предика- том. 174
Экспертные системы §21 Как правило, пользователь работает с экспертной системой в режиме диалога, отвечая на её вопросы. Рассмотрим простейшую экспертную системы для определения класса животных. Предпо- ложим, что в базу знаний внесены следующие правила: • если у животного есть перья, то это птица; • если животное дышит жабрами, то это рыба; • если животное кормит детёнышей молоком, то это млекопи- тающее; • если животное — млекопитающее и ест мясо, то это хищник. Диалог пользователя с экспертной системой может быть, напри- мер, таким (ответы пользователя выделены курсивом): — Это животное кормит детёнышей молоком? — Нет. — Это животное имеет перья? — Нет. — Это животное дышит жабрами? — Да- — Это рыба. Для того чтобы определить последовательность вопросов, эк- сперт и инженер по знаниям строят дерево решений, например такое, как на рис. 3.58. ? Рыба Рис. 3.58 Конечно, эта экспертная система неполна и в некоторых случаях класс животного определить с её помощью не получится (см. знаки вопроса на рис. 3.58). Простую экспертную систему можно написать на любом языке программирования, в котором есть операторы ввода, вывода и ветвления. Однако для профессиональных разработок в этой об- 175
3 Базы данных ласти чаще всего применяют специальные языки, например язык логического программирования Пролог. Итак, экспертная система обладает следующими свойствами: • применяется в определённой достаточно узкой области; • использует базу знаний, которая может расширяться; • может применяться при неточных и противоречивых данных; • выдаёт ответ в виде рекомендации (совета по принятию ре- шения); • может показать, как получено решение (какие правила при- менялись). В последние годы прогресс в области экспертных систем не очень заметен, что связано с их серьёзными недостатками: • опыт и интуицию экспертов очень сложно формализовать, све- сти к чётким правилам; • отладка и проверка экспертных систем очень сложны, таким образом, трудно гарантировать правильность выводов (это осо- бенно важно в военной области); • экспертные системы не способны самообучаться, для их под- держки необходима постоянная работа инженера по знаниям. Выводы • Экспертная система — это компьютерная программа, задача которой — заменить человека-эксперта при выработке реко- мендаций для принятия решений в сложной ситуации. • В составе экспертной системы выделяют три основные части: 1) базу знаний; 2) блок получения решения (решатель); 3) ин- терфейс с пользователем. • База знаний отличается от базы данных тем, что в ней хра- нятся не только факты, но и правила, по которым из фактов делаются выводы. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Что такое экспертная система? Из каких элементов она со- стоит? 2. Чем отличается база знаний от базы данных? 3. Перечислите особенности экспертных систем. В каких облас- тях они применяются? 4. Что входит в задачи инженера по знаниям? 5. Почему развитие экспертных систем в последние годы идёт не очень активно? 176
Экспертные системы §21 Подготовьте сообщение а) «Что такое база знаний?» б) «Что делает инженер по знаниям?» в) «Применение экспертных систем» г) «Язык программирования Пролог» Проект Разработка экспертной системы по выбранной теме в ЭОР к главе 3 на сайте ФЦИОР (http://fcior.edu.ru) • Проектирование объектов данных • Ввод данных в БД • Проектирование экранных форм • Запросы на выборку данных • Проектирование отчётов WWW WWW Практические работы Работа № 16 «Создание базы данных» Работа № 17 «Запросы» Работа № 18 «Язык SQL» Работа № 19 «Формы для ввода данных» Работа № 20 «Кнопочные формы» Работа № 21 «Отчёты» Работа № 22 «Нереляционные БД» Работа № 23 «Экспертная система» 177
Глава 4 СОЗДАНИЕ ВЕБ-САЙТОВ §22 Веб-сайты и веб-страницы Ключевые слова: • веб-страница • веб-сайт • гипермедиа • веб-сервер • контент • дизайн • язык HTML • статическая веб-страница • динамическая веб-страница • система управления сайтом (CMS) • динамический HTML • язык Javascript • скрипт • хостинг Всемирная паутина (англ. World Wide Web) содержит гипертексто- вые документы — веб-страницы, связанные между собой гипер- ссылками. Гиперссылка — это ссылка с возможностью автоматического пере- хода на другой объект. Гипертекст — это текст, содержащий гиперссылки. Браузер — это программа для просмотра веб-страниц на экране компьютера. Введение Современные веб-документы включают не только текст, но и дру- гие виды информации — рисунки, звук, видео, поэтому для них используется выражение гипермедиа. Гипермедиа (англ, hypermedia) — это документ, содержащий текст, изображения, звук, видео, причём каждый элемент мо- жет быть гиперссылкой. Веб-страницы размещаются на серверах. Слово «сервер» имеет несколько значений. С одной стороны, сервером называют спе- циальный компьютер, который выделен для обслуживания поль- зователей (например, для хранения файлов). С другой стороны, сервер — это программа, которая обеспечивает работу какой- 178
Веб-сайты и веб-страницы §22 нибудь службы. Например, для того чтобы пользователи могли обращаться к веб-страницам, на компьютере, где они хранятся, нужно запустить веб-сервер. Браузер — это клиентская программа, её задача — послать запрос веб-серверу, получить в ответ веб-страницу и показать её на экране. Веб-сервер принимает запросы браузера и отвечает на них — возвращает веб-страницы и дополнительные данные (ри- сунки, звуковые файлы, видеофайлы). Группа веб-страниц, которые объединены общей темой и оформлением, связаны гиперссылками и (чаще всего) расположе- ны на одном сервере, называется веб-сайтом. Основа сайта — это его контент (англ, content — содержание, информационное напол- нение), т. е. те материалы, которые могут заинтересовать пользо- вателя. Вторая важная составляющая — дизайн, т. е. оформление материала, способ подачи информации. Задача дизайна — сделать использование сайта удобным для читателей. Статические и динамические веб-страницы Веб-страницы — это обычные текстовые файлы (в формате «толь- ко текст», англ, plain text). Для того чтобы определить структуру документа (заголовки, абзацы, списки и др.), используют язык HTML (англ. HyperText Markup Language — язык разметки гипертекста). Это именно язык разметки, в отличие от языка программирования в нём нет переменных, циклов, ветвлений, процедур и функций. В языке HTML используются команды особого типа — тэги (англ, tag — метка, ярлык). Существуют тэги для выделения заголовков, абзацев, вставки таблиц. С помощью тэгов в веб- страницы добавляют рисунки, звуки, анимацию, видео, которые хранятся на сервере в виде отдельных файлов. Часто для допол- нительных данных на сайте создаются специальные папки (ката- логи), например рисунки могут быть размещены в папке images, звуковые и видеофайлы — в папке media (рис. 4.1). index.html sunset.jpg tree.jpg Рис. 4.1 179
4 Создание веб-сайтов Браузер, получив от сервера запрошенную веб-страницу, обра- батывает её текст и выводит информацию на экран в удобной для человека форме. Встретив команды для вставки дополнительных данных (например, рисунков), браузер запрашивает их с сервера. Таким образом, для полной загрузки веб-страницы может потре- боваться несколько обращений к серверу. Несмотря на существующие стандарты языка HTML, раз- ные браузеры могут по-разному показывать одну и ту же веб- страницу. Поэтому профессиональные разработчики обязательно проверяют, чтобы сайт выглядел по возможности одинаково в разных браузерах (это свойство называют кроссбраузерностью сайта). Веб-страницы можно разделить на два типа: • статические веб-страницы (они обычно имеют расширение htm или html) — хранятся на сервере в готовом виде; • динамические веб-страницы (с расширениями php, asp, aspx, pl) — содержат программный код на серверном языке про- граммирования; выполняя его, сервер создаёт гипертекстовую страницу в памяти в момент запроса. Статические страницы меньше нагружают сервер и быстрее загружаются, потому что их код полностью готов, серверу остаёт- ся просто переслать его по сети. Однако они не позволяют рабо- тать с изменяющимися данными: выбрать информацию из базы данных, добавить комментарии к фотографиям, построить госте- вую книгу и т. п. Кроме того, для того чтобы поддерживать сайт (вносить изменения в его содержание и дизайн), нужен квалифи- цированный работник, знающий язык HTML и способный исправ- лять код страниц. Статические веб-страницы можно использовать на небольших сайтах-визитках, содержимое которых изменяется только автором. Динамические страницы — это шаблоны, в которых есть программный код на специальных серверных языках — РНР, Python, ASP, Perl. Когда сервер получает запрос на такую стра- ницу, он запускает программу-интерпретатор, которая выпол- няет этот код, строит в памяти веб-страницу и отправляет её пользователю. Чаще всего при этом выбирается информация из базы данных, хранящейся на сервере. С помощью программы, встроенной в динамическую страницу, можно добавлять в базу данных информацию, загруженную пользователем (рисунки, ви- део, комментарии). Практически все крупные сайты состоят из динамических веб-страниц. Однако создание динамического веб- сайта — достаточно сложная задача, для решения которой нужно (кроме знания языка HTML) уметь программировать на одном из серверных языков. 180
Веб-сайты и веб-страницы §22 Веб-программирование Веб-программирование — это программирование динамиче- ских сайтов в Интернете. Результат работы веб-программиста — это веб-приложение, т. е. программа, обеспечивающая работу сайта. Веб-программисты разрабатывают два типа программ: • серверные, которые работают на веб-сервере; • клиентские, которые выполняются в браузере на компьютере пользователя. Для создания серверных программ используют языки РНР, Python, ASP, Perl. Клиентские программы, которые внедрены в веб-страницы, чаще всего пишут на языке JavaScript. Такой подход часто на- зывают динамическим HTML (англ. DHTML: Dynamic HTML). Его основная цель — обеспечить интерактивность, т. е. сделать так, чтобы веб-страница реагировала на действия пользователя. Программа, которая выполняется браузером, называется сцена- рием или скриптом. Скрипт или сценарий (англ, script) — это программный код для автоматизации какой-то операции пользователя. С помощью скрипта можно изменять содержимое и оформление веб-страницы в ответ на действия пользователя, например: • заменять текст, оформление, рисунки; • строить многоуровневые выпадающие меню; • скрывать и открывать части страницы; • проверять данные, введённые пользователем; • выполнять вычисления и т. д. Системы управления сайтом Для управления большими сайтами применяют системы управ- ления сайтом (англ. CMS: Content Management System), позво- ляющие редактировать содержание сайта (добавлять, изменять и удалять материалы) без знания языка HTML. CMS — это набор программ, написанных на серверном язы- ке, например на РНР. На сайте, который использует CMS, есть панель администратора. На рисунке 4.2 показана панель адми- нистратора бесплатной системы Joomla. 181
4 Создание веб-сайтов Панель управления Сайт Пользователи Меню Материалы Компоненты Расширения Справка Менеджер материалов Менеджер категорий Медиа-менеджер Создать материал Менеджер пользователей Менеджер расширений Менеджер языков Менеджер меню Общие настройки Менеджер шаблонов Менеджер модулей Мой профиль к Рис. 4.2 С помощью этой панели администратор сайта может добавлять, редактировать и удалять материалы на сайте без привлечения специалиста. Использование CMS значительно ускоряет создание и обслу- живание сайта. Разработчику не нужно думать о том, как вы- бирать информацию из базы данных или сделать форму для от- правки писем, потому что система это уже умеет делать. Вместо этого он может сразу заниматься содержанием и оформлением сайта. Внешний вид сайта изменяется с помощью шаблонов, в которых задано расположение и оформление элементов веб-стра- ниц. Выводы • Гипермедиа — это документ, содержащий текст, изображения, звук, видео, причём каждый элемент может быть гиперссыл- кой. • Веб-страница — это текстовый файл, написанный на языке HTML. Рисунки, звуки и видеофильмы хранятся на серве- ре как отдельные файлы; браузер загружает их тогда, когда встречает ссылку на эти данные в тексте веб-страницы. • Статические веб-страницы хранятся на сервере в готовом виде и сразу передаются клиенту по его запросу. 182
Веб-сайты и веб-страницы §22 • Динамические веб-страницы создаются в памяти сервера после получения запроса; их можно использовать для работы с ба- зами данных. Динамические сайты больше нагружают сервер и работают медленнее, чем статические. • Скрипт — это программный код для автоматизации какой-то операции пользователя. Скрипты на веб-страницах чаще всего пишут на языке JavaScript. • Система управления сайтом (CMS) — это программа, кото- рая содержит инструменты для добавления, редактирования и удаления информации на сайте. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Как вы думаете, существовали ли гипертекстовые документы до изобретения компьютеров? Что нового внесли в эту сферу компьютеры? 2. Какова роль веб-серверов в работе Всемирной паутины? *3. Можно ли просматривать веб-страницу без браузера? 4. Обсудите в классе вопрос: «Дизайн сайта — цель или средст- во? ». 5. Почему язык HTML нельзя называть языком программирова- ния? 6. Как вы думаете, почему для хранения рисунков обычно вы- деляют отдельную папку? *7. Какие операции выполняет браузер при загрузке веб-страни- цы, адрес которой ввел пользователь? 8. Как вы думаете, почему разные браузеры могут по-разному показывать одну и ту же веб-страницу? 9. Что такое кроссбраузерность? 10. Чем различаются статические и динамические веб-страницы? В чём заключаются достоинства и недостатки каждого из этих типов веб-страниц? 11. Почему крупные сайты практически всегда строятся на дина- мических страницах? 12. Какие задачи можно решать с помощь скриптов? 13. Как вы думаете, какие недостатки имеют системы управления сайтом? 14. Найдите в Интернете названия бесплатных CMS и запишите в таблицу адреса сайтов, откуда их можно загрузить. 15. Используя дополнительные источники, выясните, что такое DDoS-атака на сайт. 183
4 Создание веб-сайтов 16. Найдите в Интернете статистику использования трёх самых популярных веб-серверов. Постройте по этим данным круго- вую диаграмму. Не забудьте, что кроме этих трёх серверов есть ещё и другие. Подготовьте сообщение а) «Профессия — веб-программист» б) «Системы управления сайтами (CMS)» в) «Что такое фриланс?» Проекты а) Сравнение бесплатных CMS б) Исследование скорости загрузки веб-сайтов Интересные сайты w3.org — сайт Консорциума Всемирной Паутины htmlbook.ru — сайт для изучения языка HTML javascript.ru — сайт для изучения языка Javascript learn.javascript.ru — учебник языка Javascript htmlacademy.ru — онлайн-курсы по созданию веб-сайтов joomla.ru — бесплатная система управления сайтами Joomla online-php.com — онлайн-среда для программирования на языке РНР phpfiddle.org — онлайн-среда для программирования на языке РНР html2pdf.it — конвертер веб-страниц в формат PDF §23 Текстовые веб-страницы Ключевые слова: • контейнер • атрибут • гиперссылка • список Как создать веб-страницу? Простейший способ создать текстовую веб-страницу — это набрать её код в каком-нибудь текстовом редакторе, который работает с простым текстом без оформления (только текст, англ, plain text) 184
Текстовые веб-страницы §23 и сохранить в файле с расширением htm или html. В операци- онной системе для этих расширений, как правило, установлена связь («ассоциация») с браузером, так что при двойном щелчке на значке или имени файла веб-страница сразу открывается в окне браузера. Если вы отредактировали веб-страницу, нужно сохранить из- менения на диске и обновить страницу в браузере1). Существуют специальные редакторы, предназначенные для разработки веб-страниц. Многие из них поддерживают режим WYSIWYG (англ. What You See Is What You Get — что видишь, то и получишь), т. е. при редактировании документ выглядит так же, как при просмотре в браузере. Изменять содержание и оформление веб-страницы можно точно так же, как и в тексто- вых процессорах (с помощью мыши, меню и командных кно- пок), при этом пользователю не нужно знать язык HTML — все необходимые тэги программа добавляет автоматически. В то же время профессиональные веб-дизайнеры редко используют WYSI- WYG-редакторы, потому что для точной вёрстки (размещения ма- териала на странице) практически всегда приходится вручную редактировать HTML-код. Даже если редактор поддерживает режим WYSIWYG, очень полезно изучать код построенной в нём веб-страницы для того, чтобы в будущем вы смогли легко перейти к созданию динами- ческих сайтов. Простейшая веб-страница Простейшая веб-страница состоит из трёх тэгов: <!DOCTYPE html> <html> </html> Веб-страницы могут быть написаны на разных языках (в соответствии с разными стандартами). Поэтому сначала в тэге DOCTYPE указывается тип документа. Тип html означает «веб- страница на языке HTML5». Затем идёт открывающий тэг <html> и закрывающий тэг </html>. Такие пары тэгов образуют контейнеры: закрывающий тэг ограничивает область действия открывающего. Закрывающий тэг всегда начинается знаком «/» (он также называется «слэш», от англ, slash). 1) Чаще всего для этого используется клавиша F5. 185
4 Создание веб-сайтов В только что записанной странице, кроме тэгов, нет никаких данных, поэтому, если открыть её в браузере, мы увидим пустое поле. Разберём теперь более сложный пример. Ниже мы видим код веб-страницы, а на рис. 4.3 — её вид в браузере. <!DOCTYPE html> <html> <head> <title>IIepBaH CTpaHwua</title> </head> <body> Привет! </body> </html> Рис. 4.3 Здесь два блока «полезной» информации — надписи «Первая страница» и «Привет!». Посмотрев на код, можно заметить, что он разбит на две части контейнерами <head> и <body>. Первая часть (контейнер <head>) — это головная часть стра- ницы (от англ, head — голова). Там размещается служебная ин- формация, например ключевые слова и описание страницы для поисковых систем, кодировка символов и т. п. В нашем примере здесь всего один элемент — <title>, в нём записывают название страницы, которое выводится в заголовке окна браузера (найдите его на рис. 4.3). Содержимое элемента <title> — очень важная информация, на которую поисковые системы смотрят в первую очередь. По- этому нужно, чтобы этот текст как можно точнее отражал со- держимое веб-страницы. Вторая (основная) часть страницы расположена внутри кон- тейнера <body> (англ, body — тело). В нашем случае там на- ходится строка «Привет!», которую мы видим в окне браузера. 186
Текстовые веб-страницы §23 В остальных примерах этой главы мы будем писать только то, что содержится в контейнере <body>. Заголовки В языке HTML есть специальные тэги для выделения заголовков разных уровней: < hl> - заголовок документа; < h2> - заголовок раздела; < h3> - заголовок подраздела; < h4> - заголовок параграфа. Первая буква h в названии тэга связана с английским словом header — заголовок. Вот как выглядит текст с заголовками двух уровней (рис. 4.4). Глава 1. Информация 1.1 Что такое информация? Задачи, связанные с хранением, передачей и обработкой информации человеку приходилось решать во все времена... Рис. 4.4 Для создания такой веб-страницы нужно написать следующие команды: <Ь1>Глава 1. Информация</Ь1> <h2>l.l Что такое информация?</Ь2> Задачи, связанные с хранением, передачей и обработкой информации, человеку приходилось решать во все времена... Обратите внимание, что мы нигде не указали, как именно оформить заголовки (какой шрифт и отступы использовать и т. п.). Браузер применяет то оформление, которое установлено в его настройках по умолчанию (т. е. для случая, когда оформле- ние не задано явно). Как видно, заголовки выделяются жирным шрифтом увели- ченного размера и выравниваются по левому краю. Если, напри- мер, заголовок документа нужно выровнять по центру, исполь- зуют такую запись: <hl align="center">Глава 1. Информация</Ы> 187
4 Создание веб-сайтов Здесь тэг <hl> содержит ещё дополнительное свойство (атрибут) align. Атрибуты тэгов записывают в открывающем тэге внутри угловых скобок. Значение атрибута указывают в кавычках после знака равенства. Для заголовков используют три типа выравни- вания: left — влево (по умолчанию); center — по центру; right — вправо. Абзацы Абзац в языке HTML заключается в контейнер <р> (от англ. paragraph — абзац) — рис. 4.5. <р>В школе учится 70 человек. Остальные 430 учеников валяют дурака.</р> <р>Сколько всего учеников в этой школе?</р> X Г. Остер «Задачник» В школе учится 70 человек. Остальные 430 учеников валяют дурака. Сколько всего учеников в этой школе? Рис. 4.5 По умолчанию абзацы отделяются друг от друга дополнитель- ным отступом, однако абзацного отступа («красной строки») бра- узер не делает. Для выравнивания строк абзаца в тэг <р> можно добавлять атрибут align, как для заголовков. Кроме уже упомянутых вариантов выравнивания (left, center, right) для широких текстовых колонок часто используется значение justify — вы- равнивание по ширине. Однако для узких колонок его лучше не использовать, потому что браузер слишком сильно растягивает интервалы между словами, и получаются большие пробелы, за- трудняющие чтение (рис. 4.6). 188
Текстовые веб-страницы §23 <р align="justifу"> Молекула воды испарилась из кипящего чайника и, подлетая к потолку, лоб в лоб столкнулась с неизвестно как прокравшейся на кухню молекулой водорода. Кто быстрее отлетел? </р> г- Остер «Задачник по физике» Молекула воды испарилась из кипящего чайника и, подлетая к потолку, лоб в лоб столкнулась с неизвестно как прокравшейся на кухню молекулой водорода. Кто быстрей отлетел? Рис. 4.6 Для того чтобы просто перейти на новую строку, не начиная новый абзац (как при записи стихотворения!), нужно использо- вать непарный тэг <Ьг> (от англ, break — разрыв) — рис. 4.7. И вечный бой! Покой нам только снится <Ьг>Сквозь кровь и пыль... <Ьг>Летит, летит степная кобылица <Ьг>И мнёт ковыль... А. Блок «На поле Ку пиковом» И вечный бой! Покой нам только снится Сквозь кровь и пыль. Летит» летит степная кобылица И мнет ковыль Рис. 4.7 Из кода этого примера видно, что у тэга <br> нет парного за- крывающего тэга, он обозначает однократное действие — переход на новую строку. 189
4 Создание веб-сайтов Специальные символы Часто нужно вставить на веб-страницу специальные символы, которых нет на клавиатуре. Наиболее интересные из них пере- числены в табл. 4.1. Таблица 4.1 Символ HTML-код Название - &#151; или &mdash; Тире &#160; или &nbsp; Неразрывный пробел § &#167; или &sect; Параграф © &#169; или &сору; Символ авторского права &#174; или &reg; Зарегистрированная торговая марка « &#171; или &laquo; Левая русская кавычка » &#187; или &raquo; Правая русская кавычка ° &#17 6; или &deg; Градус + &#177; или &plusmn; Плюс-минус 2 &#17 8 ; или &sup2 ; Квадрат 3 &#179; или &sup3; Куб V4 &#188; или&:Егас14; Четверть 1 / 2 &#189; или&:Егас12; Половина 3/4 &#190; или &frac34; Три четверти X &#215; или &times; Знак умножения 4- &#24 7; или &divide; Знак деления < &#60; или &lt; Левая угловая скобка > &#62; или &gt; Правая угловая скобка Неразрывный пробел используется, например, для того, чтобы отделить инициалы от фамилии. Браузер не может разрывать части текста, соединённые неразрывным пробелом (в том числе переносить на новую строку). Вот несколько примеров использо- вания неразрывного пробела и тире: 190
Текстовые веб-страницы §23 Дом сдали в 2011&nbsp;году. А.С.&nbsp;Пушкин&пЬзр;&mdash; солнце русской поэзии. Пёс весил 12&пЬзр;кг. Специальные обозначения для угловых скобок введены для того, чтобы на веб-странице можно было использовать знаки «меньше» и «больше», и браузер не воспринимал их как огра- ничители тэгов. Например, неравенство X < Y, кодируется так: X &lt; Y Полный список специальных символов можно найти в Интернете по запросу HTML entities. Списки В языке HTML есть два вида списков — маркированные (каж- дый элемент отмечен маркером) и нумерованные (с числовой или буквенной нумерацией). Маркированный список применяется для перечисления эле- ментов множества, когда порядок не важен. В языке HTML он строится с помощью тэга <ul> (от англ. Unordered List — не- упорядоченный список). Каждый элемент списка вложен в кон- тейнер <li> (от англ. List Item — элемент списка) — рис. 4.8. <ul> <li>Bac4</li> <И>Петя</И> <И>Коля</И> </ul> Кто идёт в поход? • Вася • Петя • Коля Рис. 4.8 Атрибут type (англ, type — тип) позволяет выбрать маркер (значок), например: <ul type="circle"> </ul> Существует три стандартных типа маркеров: • disk (диск, уста- новлен по умолчанию), о circle (окружность) и square (ква- драт). Если порядок перечисления элементов важен (и его нельзя ме- нять), применяется нумерованный список. В языке HTML такой 191
4 Создание веб-сайтов список строится с помощью контейнера <о1> (от англ. Ordered List — упорядоченный список). В остальном запись HTML-кода очень похожа на маркированный список (рис. 4.9). <о1> <Ы>детский сад</И> <li>uiKona</li> <И>университет</И> </о1> Этапы учебы 1. детский сад 2. школа 3. университет Рис. 4.9 Для настройки нумерованного списка можно использовать атрибуты type и start тэга <о1>. Атрибут type определяет тип нумерации (1 — арабские цифры, i и I — римские циф- ры, а и А — буквы латинского алфавита). С помощью атри- бута start (англ, start — начало) задаётся начальный номер. Например: <ol type=”I” start="3"> </ol> Специальных тэгов для создания многоуровневых списков в языке HTML нет, однако их очень легко построить, размещая вложенные списки внутри контейнеров <li>, т. е. внутри эле- ментов основного списка (рис. 4.10). <О1> <И>Россия <ulxli>MocKBa</li> <И>Санкт-Петербург</И> </ul> </li> <И>Украина <ulxli>KweB</li> <И>0десса</И> </ul> </li> </ol> 192
Текстовые веб-страницы Города 1. Россия о Москва о Санкт-Петербург 2. Украина о Киев о Одесса РИС. 4.10 Гиперссылки Гиперссылка связывает элемент веб-страницы с другим докумен- том. Гиперссылки по умолчанию выделяются синим цветом и подчёркиваются. Цвет посещённых гиперссылок изменяется на фиолетовый (чтобы пользователь видел, где он уже был). Для создания гиперссылки в языке HTML служит тэг <а> (от англ, anchor — якорь). Его атрибут href (от англ, hyper reference — гиперссылка) указывает на документ, который дол- жен быть загружен после щелчка на гиперссылке (рис. 4.11). Переход на <а href="newpage.html"> новую страницу</а>. Гиперссылка Переход на новую страницу Рис. 4.11 Обратите внимание, что адрес связанного документа (newpage. html) в окне браузера не виден1*, а на экране появляется выде- ленное содержимое контейнера (текст «новую страницу»). Поскольку в атрибуте href указано только имя файла, а не его полный адрес, браузер будет искать документ в той же папке, где находится страница со ссылкой. Ссылка на файл info.htm в подкаталоге news запишется в виде: <а href="news/infо.ЬЬт">Информация</а> х* Его обычно можно увидеть в строке состояния в нижней части окна брау- зера, если навести указатель мыши на гиперссылку. 193
4 Создание веб-сайтов Две точки означают выход из каталога «наверх», в родительский каталог. Например: <а href . /news/info . ЬЬт’’>Информация</а> . В этом случае для поиска файла info.htm нужно выйти на два уровня вверх по дереву папок и затем войти в папку news. Все рассмотренные выше гиперссылки — локальные (мест- ные), т. е. они ведут к файлам, находящимся на том же серве- ре. Внешняя ссылка представляет собой полный адрес документа (URL), который включает протокол доступа к данным, имя сер- вера, каталог и имя самого документа. Например: <а href="http://example.net/news/infо.ЬЬт’’>Информация</а>. Если имя папки и файла не указано, ссылка ведёт на главную страницу сайта: <а href="http: //example . net/’’Жлавная страница</а> . Ссылка может быть связана с архивным файлом: <а href=”http: / /example . net/files/game . 21р’’>Скачать</а> . При щелчке на такой ссылке начинается скачивание файла game, zip. Ссылка, адрес которой начинается с символов mailto (от англ, mail to — отправить письмо), приводит к запуску про- граммы для отправки электронной почты: <а href="mailto:vasya@mail.ги">Напишите мне!</а>. С помощью гиперссылки можно перейти не только на любой доступный документ, но и в определённое место этого же или другого документа. Для этого нужная точка в документе должна быть отмечена каким-либо тэгом с идентификатором — атрибутом id (англ, identifier — уникальный признак объекта). Например, отметим заголовок раздела идентификатором bear: <h2 id=’’bear">Медведи</Ь2> Для ссылки на такую метку перед её именем ставится знак #, например: В лесу живёт <а href="#bear">медведь</а>. или так: В лесу живёт <а href =’’animals . html#bear”>медведь</а> . Первая ссылка обращается к метке bear в текущем документе, а последняя — к такой же метке в файле animals.html. 194
Текстовые веб-страницы §23 Выводы • Для разметки веб-страниц используется язык HTML. • Команды языка HTML (тэги) заключаются в угловые скобки. • Все символы внутри угловых скобок считаются командами для браузера и, как правило, не выводятся на экран. • Тэги могут содержать дополнительные свойства — атрибуты. • Парные тэги (контейнеры) состоят из двух частей — открыва- ющей и закрывающей. Закрывающая часть начинается знаком «/», который называется «слэш». • Веб-страница состоит из двух частей: головной части страни- цы в контейнере <head>, содержащей служебную информа- цию, и основной части в контейнер <body>. • Существуют специальные тэги для выделения заголовков, аб- зацев, списков, гиперссылок. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Из каких двух блоков состоит веб-страница? 2. Почему нужно внимательно выбирать название страницы в контейнере <title>? 3. Объясните, что неправильно в такой записи: <Ь1><Ь2>Важный момент</Ь2></Ь1> 4. Откуда браузер «знает», как оформлять заголовки и гипер- ссылки? 5. Как отличить в тексте веб-страницы локальную ссылку от внешней (на другой сайт)? 6. В каких случаях лучше использовать нумерованные списки, а в каких — маркированные? Подготовьте сообщение а) «Математические символы на веб-страницах» б) «Бесплатные редакторы для разработки веб-страниц» в) «Поисковая оптимизация сайтов» Проект Совместная разработка сайта по выбранной теме Интересные сайты htmlbook.ru — справочник по языку HTML w3schools.com — международный сайт для авторов веб-сайтов pearsonified.com/typography/ — расчёт оптимального размера шрифта 195
4 Создание веб-сайтов §24 Оформление веб-страниц Ключевые слова: • содержание • оформление • логическая разметка • физическая разметка • стилевой файл • каскадные таблицы стилей • селектор • свойство • значение • наследование • класс • псевдокласс Общий подход Наверное, вы уже заметили, что ранее мы говорили только о том, как структурировать текст: выделять заголовки и абзацы, строить списки, добавлять гиперссылки. Вопрос об оформле- нии документа (изменении внешнего вида) ещё практически вообще не рассматривался. Дело в том, что в современном веб-дизайне считается хорошим тоном разделять содержание и оформление. В идеале веб-страница (файл с HTML-кодом) должна содер- жать только логическую разметку — определять смысловые ча- сти документа. Например, тэги заголовков и списков — это тэги логической разметки. Всё оформление (например, размер шрифта и цвет заголовков) должно быть вынесено в отдельный файл. Во-первых, при этом можно легко менять дизайн всего сайта, поправив единственный файл. Во-вторых, пользователь может просматривать веб-страницу на разных устройствах, от широкоэкранного монитора до экрана планшетного компьютера или смартфона. Вместо того чтобы для каждого из них готовить свою версию веб-сайта, можно просто подключать разные файлы с оформлением для одних и тех же веб-страниц. Средства языка HTML Язык HTML предназначен прежде всего для логической разметки документа. Для этого используются специальные тэги, например указанные в табл. 4.2. Именно эти тэги играют важную роль при определении места сайта в выдаче поисковых систем — с их помощью нужно отме- чать ключевые слова, отражающие содержание страницы. 196
Оформление веб-страниц §24 Таблица 4.2 Стиль Пример Выделение (англ, emphasize) <ет>Вася</еш> Сильное выделение (англ, strong) <strong>Baca</strong> Программный код (англ, code) <code>a := b + c;</code> Определение (англ, definition) <dfn>HH(£opMaLi,Hn</dfn> &mdash; это... Цитата (англ, citation) <cite>KapeTy мне, карету! </cite> Сокращение (англ, abbreviation) <abbr>HTML</abbr> Обратите внимание, что внешний вид этих блоков никак не задаётся. Браузеры выделяют их некоторым стилем, установ- ленным по умолчанию. Например, контейнер <strong> обычно выделяется жирным шрифтом, <еш> — курсивом, <code> — моноширинным1* шрифтом, a <abbr> — подчёркивается штри- ховой линией. Веб-мастер (разработчик сайта) может изменить это оформление с помощью стилевых файлов, о которых пойдёт речь далее. Для оформления текстов программ используют тэг <рге> (англ, preformatted — предварительно отформатированный). В этом контейнере сохраняются все пробелы и символы перево- да строки; текст обычно оформляется моноширинным шрифтом, чтобы сохранить все отступы (рис. 4.12). <рге> iMin := 1; for i := 2 to n do if a[i] < a[iMin] then iMin := i; </pre> J Программ* iMin := 1; for i:=2 to n do if a[i] < afiMin] then iMin := i; Рис. 4.12 Кроме того, язык HTML содержит так называемые тэги физи- ческой разметки, которые точно указывают, как должен выгля- деть текст. Некоторые из них перечислены в табл. 4.3. 1) В моноширинных шрифтах (например, в шрифтах Courier New и Consolas) все символы имеют одинаковую ширину. 197
4 Создание веб-сайтов Таблица 4.3 Стиль оформления Пример Результат Курсив (англ, italic) <1>Вася</1> Вася Жирный (англ, bold) <Ь>Вася</Ь> Вася Подчёркивание (англ, underline) <и>Вася</и> Вася Зачёркивание (англ, strike out) <з>Вася</з> Т~> иася Верхний индекс (англ, superscript) Bac4<sup>2</sup> Вася2 Нижний индекс (англ, subscript) Bac4<sub>2</sub> Вася2 Оформление можно изменять также и с помощью атрибутов некоторых тэгов (например, атрибут align задаёт выравнивание заголовков и абзацев). Эти средства считаются устаревшими и использовать их не рекомендуется. Тэги физической разметки оставлены для совместимости с веб-сайтами прошлых лет, где они были единственным средством оформления. Стилевые файлы Оформление современных веб-сайтов задаётся с помощью стилевых файлов, в тексте которых в специальном формате описывается внешний вид документа. Такая технология называется каскадны- ми таблицами стилей (англ. CSS: Cascading Style Sheets). Как правило, для всего сайта используется единый стилевой файл. Поэтому изменение дизайна (например, для отображения докумен- та на карманном персональном компьютере или смартфоне) тео- ретически сводится к замене одного стилевого файла на другой. Стилевой файл — это простой текстовый файл (файл в форма- те только текст, англ, plain text), в котором задаются свойства тэгов. Обычно стилевые файлы имеют расширение css. Для того чтобы изменить цвет фона и текста для всей стра- ницы, нужно в стилевом файле (назовем его test, css) записать: body { color: white; background: #FF6600; } Сначала указывают селектор (от англ, select — выбирать) — на- звание элемента или обозначение для группы элементов, оформ- ление которых меняется. Затем в фигурных скобках определя- ются все нужные свойства. В данном случае для тэга <body> изменяются свойства color (цвет текста, англ, color — цвет) 198
Оформление веб-страниц §24 и background (цвет фона, англ, background — фон). Значение свойства записывают через двоеточие, в конце каждого опреде- ления ставится точка с запятой. Цвет можно задать несколькими способами. Во-первых, неко- торые «простые» цвета имеют собственные английские названия: white — белый, black — черный, red — красный, green — зелё- ный и т. д. Во-вторых, можно указать 24-битный RGB-код цвета, это позволяет закодировать 224 (более 16 миллионов) цветов. Код цвета начинается знаком # и записывается в шестнадцатеричной системе счисления. Первые две цифры — это красная составляю- щая (R = red), следующие две — зелёная (G = green) и послед- ние две цифры — синяя (В = blue). Таким образом, цвет с кодом #FF6600 — это оранжевый цвет, для него R = FF16 = 255, G = 6616 = 102, В = 0. В-третьих, можно задать составляющие RGB-кода в десятичной системе счисления: rgb(255,102,0) Стилевой файл test, css нужно подключить к веб-странице с HTML-кодом. Для этого используется тэг <link> (англ, link — связь), устанавливающий связь с другими файлами. Этот тэг за- писывают внутри контейнера <head> (заголовочной части стра- ницы): <head> <title>CTpaHwua с файлом CTwnew</title> <link гel="stylesheet" href="test.css"> </head> У тэга <link> указаны два атрибута, причём сразу понятно, что href обозначает имя подключаемого стилевого файла. Атрибут rel — это сокращение от английского relation — отношение; он определяет, какую роль играет файл text. css. В данном случае значение stylesheet говорит о том, что это таблица стилей (англ, style sheet). Если теперь открыть веб-стра- ницу с подключенным стилевым файлом, вы увидите, что цвета текста и фона изменились. Стили для элементов Задав стиль для контейнера <body>, мы определили свойства по умолчанию для вложенных в него элементов. Так, в преды- дущем примере для всех абзацев (<р>) будет установлен белый цвет символов. Это говорит о том, что свойство color передаётся вложенным элементам, т. е. наследуется. 199
4 Создание веб-сайтов Наследование означает, что некоторые свойства контейнера- «родителя» передаются всем вложенным элементам. Это удобно, потому что во многих случаях в стилевом файле до- статочно определить только свойства «родителя». Однако не все свойства наследуются1*. Например, фон (background) не наследуется, по умолчанию он прозрачный для всех элементов, поэтому фактически мы видим фон «ро- дителя». Стиль оформления любого тэга можно задать явно. Напри- мер, чтобы сделать рамку (англ, border) у всех абзацев, нужно добавить в стилевой файл строки: Р { border: Ipx solid blue; } Здесь для свойства border задано (через пробел) сразу три «под- свойства»: 1рх — толщина линии 1 пиксель; solid — тип линии (сплошная); blue — цвет линии (синий). Для настройки цвета гиперссылок изменяется стиль для тэга <а>: а {color: green;} Стиль посещённых ссылок задается с помощью обозначения a:visited (англ, visited — посещенный): a:visited {color: white;} Здесь visited — это так называемый псевдокласс, который обо- значает состояние объекта. Часто применяется также псевдокласс hover (состояние «мышь над объектом»). В рассмотренных примерах оформление определялось сразу для всех одноимённых тэгов на странице. Часто бывает нужно выделить с помощью специального оформления не все абзацы, а только некоторые. В этом случае используют классы. Каждому тэгу можно присвоить свой класс с помощью атрибута class, например: <р class="error”>Ошибка. Что-то с памятью.</р> В справочниках по CSS можно уточнить, наследуется ли то или другое свойство. 200
Оформление веб-страниц §24 Специальное оформление для абзацев класса error определяется в стилевом файле: р.error {background: red;} Внешний вид остальных абзацев при этом остается без изменений. Может оказаться, что к какому-то тэгу применимы несколь- ко правил оформления, указанных в таблице стилей. Например, к абзацу класса error относятся все стили, определённые для тэга <р>, а также все стили для класса р.error. Такая ситу- ация называется каскадом, поэтому таблицы стилей называют каскадными. В этом случае браузер определяет окончательный вид элемент по специальным (достаточно сложным) правилам. Их смысл состоит в том, что более конкретное указание отме- няет более общее. Пусть например, в стилевом файле определён зелёный цвет текста для всех абзацев (общее правило) и красный цвет — для абзацев класса error (более конкретное правило): р {color: green;} р.error {color: red;} В этом случае для абзаца класса error будет установлен красный цвет, общее правило отменяется. Можно вообще не указывать тэг, оставив только название класса: .error {color: red;} Тогда оформление применяется к любым тэгам, для которых за- дан класс error. Например, для выделения специальным стилем слова или словосочетания (а не всего абзаца) можно использовать тэг <span> (от англ, span — интервал, промежуток): <p><span с1азз="еггог">0шибка</зрап>. Что-то с памятью.</р> В этом примере красным цветом будет выделено только слово «Ошибка» (для него использован класс error). С помощью стилей можно определить оформление тэга, ко- торый вложен в другой тэг. Например, мы хотим использовать дополнительное выделение в контейнере <ет> с помощью такого же вложенного контейнера <ет>: <ет>Тэги <ет>логической</ет> разметки</ет>. Если не изменять стили, то повторное применение тэга <ет> не меняет результат, и слово «логической» никак не будет вы- деляться на фоне соседей. Если же добавить в стилевой файл строки 201
4 Создание веб-сайтов em em { font-style: normal; } то слово «логической» будет записано прямым («нормальным», т. е. не курсивным) шрифтом, в отличие от окружения, набран- ного курсивом (так обычно выделяется содержимое контейнера <ет>). Чтобы определить курсив, нужно задать значение italic вместо normal. Запись em em означает: «тэг <ет> внутри другого тэга <ет>», а р ет — «тэг <ет> внутри тэга <р>». Существует много разных селекторов, свойств и их возмож- ных значений. Полную информацию вы можете найти в справоч- ной литературе или в Интернете. Выводы • При создании сайтов принято разделять содержание и оформ- ление. Содержание веб-страницы записывается в HTML-файл, а оформление — в стилевой файл, обычно имеющий расши- рение css. • Стилевой файл подключается в веб-странице с помощью тэга link. • Для того чтобы назначить нескольким элементам веб-страни- цы одинаковый стиль оформления, используют классы. • Некоторые свойства контейнера-«родителя» наследуются — передаются всем вложенным элементам. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Как вы понимаете термины «логическая разметка» и «физи- ческая разметка»? 2. Почему считается более грамотным выносить оформление веб- страниц в отдельный файл? 3. Назовите тэги логической и физической разметки языка HTML. Какие из них рекомендуется использовать? Почему? 4. В чём различие тэгов <strong> и <Ь>? В каких случаях ис- пользуется каждый из них? 5. Какой тэг используется для оформления текстов программ? 6. Какое расширение обычно имеют стилевые файлы? В каких программах их можно редактировать? 7. Как подключить стилевой файл к веб-странице? 202
Оформление веб-страниц §24 8. Как изменить оформление стандартных тэгов, например <hl>? 9. Назовите три способа определения цвета элемента на веб-стра- нице. 10. Зачем используют классы? 11. Чем отличается класс от псевдокласса? Какие псевдоклассы вы знаете? 12. Чем различаются два определения? р.qq {color:white;} .qq {color:white;} 13. Зачем нужен тэг <span>? 14. Что такое наследование свойств в CSS? Чем, по вашему мне- нию, оно полезно? 15. Почему таблицы стилей называют каскадными? 16. Что означают определения? а) р span {font-style: italic;} б) p.qq span {font-style: italic;} в) p span.qq {font-style: italic;} г) P•qq span.zz {font-style: italic;} д) p span em {color: green;} Подготовьте сообщение а) «Селекторы CSS» 6) «CSS3 — таблицы стилей третьего поколения» в) «Классы и идентификаторы» г) «Псевдоклассы и псевдоэлементы» Проект pg Адаптация сайта для мобильных устройств Интересные сайты РЧ html5book.ru — сайт для изучения HTML5 и CSS htmlbook.ru/css3 — справочник по CSS третьего поколения (CSS3) wisdomweb.ru/CSS3 — учебник по CSS3 webref.ru — уроки и справочники по веб-технологиям csslint.net — сервис для проверки CSS-файлов cssdesk.com — сервис для отладки CSS-файлов quirktools.com/screenfly/ — проверка сайта на разных устрой- ствах 203
4 Создание веб-сайтов §25 Рисунки, звук, видео Ключевые слова: • формат рисунка • выравнивание • обтекание текстом • отступы • векторный рисунок • фоновый рисунок • плагин Форматы рисунков Браузеры умеют работать с тремя форматами растровых рисун- ков: GIF, JPEG и PNG. Формат GIF используют для изображений с чёткими гра- ницами объектов, содержащими не более 256 цветов. Некото- рые области рисунка можно сделать прозрачными, через них будет виден фон веб-страницы. Этот формат поддерживает анимацию. Рисунки в формате JPEG предназначены для хранения пол- ноцветных изображений (24 бита на пиксель, более 16 млн. цветов) с нечёткими границами объектов, например фотографий. Этот формат предусматривает сжатие с потерями, при котором теряются (размываются) некоторые мелкие детали. Формат PNG позволяет хранить разные типы изображений, как с палитрой (до 256 цветов), так и полноцветные (с глубиной цвета 24 или 48 бит на пиксель). В отличие от других форматов формат PNG поддерживает частичную прозрачность пикселей, что позволяет создавать многослойные изображения на веб-страницах. Для хранения степени прозрачности выделяется отдельный канал (так называемый альфа-канал, англ, alpha channel) — допол- нительно 8 или 16 бит на пиксель. Такой формат называется RGBA = Red - Green - Blue - Alpha. Главный недостаток фор- мата PNG — низкая эффективность сжатия маленьких рисунков по сравнению с форматом GIF. Для добавления векторных рисунков на веб-страницу приме- няют формат SVG (англ. Scalable Vector Graphics — масшта- бируемая векторная графика), который умеют обрабатывать все современные браузеры. Формат SVG можно использовать для хранения смешанных векторно-растровых изображений, а также анимированных рисунков. Большинство современных векторных редакторов (Adobe Illustrator, CorelDraw, Inkscape, OpenOffice Draw) могут сохранять изображения в формате SVG. 204
Рисунки, звук, видео §25 Рисунки в документе Для вставки изображения в код веб-страницы используется не- парный тэг <img>. Его атрибут src (от англ, source — источник) задаёт имя файла, например: <img src="night.jpg"> Этот файл браузер будет искать в том же каталоге, где нахо- дится веб-страница. Можно, как и при создании гиперссылок, указывать относительный путь к файлу: <img src="../../images/night.jpg”> или даже загружать картинку с другого веб-сервера: <img src="http://example.com/images/night.jpg"> По умолчанию рисунок вставляется прямо в текст, как одна «большая буква». С помощью атрибута align (англ, align — вы- равнивание) можно установить режим обтекания рисунка текстом, например: <img src="night.jpg" align="left"> Значения left и right этого атрибута задают соответственно выравнивание влево и вправо (рисунок прижимается к краю текста) — рис. 4.13. По умолчанию Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras pulvinar lacinia felis ut ultnces Lorem ipsum dolor sit amet, consectetur adipiscing elit In et vanus uma Proin sodales Lorem ipsum dolor sit amet, consectetur adipiscing eEt Cras pulvinar lacinia felis it ultnces Lorem ipsum olor sit amet, consectetur dipiscing elit In et vanus uma. Proin sodales elementum cursus Maecenas accumsan, orci quis interdum L align-"lefl" ] align=“right" Lorem ipsum dolor sit amet, consectetur adipiscing elit Cras pulvinar lacinia felis ut ultnces. Lorem ipsum dolor sit amet, consectetur adipiscing elit In et vanus uma. Proin sodales elementum cursus Maecenas accumsan, orci quis interdum Рис. 4.13 205
Создание веб-сайтов Вариант с выравниванием влево (средний рисунок) смотрится плохо, потому что фотография «стучится» о соседний текст, по- ходит к нему вплотную. Чтобы этого не происходило, можно уве- личить отступы, которые задаются с помощью атрибутов h spa се (англ, horizontal space — горизонтальный отступ) и vspace (англ. vertical space — вертикальный отступ): <img src="night.jpg” align=”left” hspace="10" vspace="10"> Значения отступов указаны в пикселях. Вот что получается (рис. 4.14). align Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras pulvmar lacinia felis ut ultrices. Lorem ipsum dolor sit amet, consectetur adipiscing elit In et vanus uma Proin sodales elementum cursus Рис. 4.14 Браузер может определить размеры рисунка только тогда, когда он загрузит его с сервера. Поэтому сначала вместо рисун- ка на веб-странице появляется небольшой прямоугольник, кото- рый потом заменяется изображением. При этом размеры поля, отведённого рисунку, изменяются, остальной материал на экране тоже сдвигается, что неудобно для пользователя. Однако есть про- стое решение этой проблемы — заранее указать браузеру размеры рисунка (атрибуты width — ширина и height — высота): <img src="night.jpg" width="800" height="600" alt="Ho4b на Ладоге"> Атрибут alt (англ, alternative — альтернативный, замеща- ющий) задаёт текст, который показывается на месте рисунка, пока тот ещё не загружен. Кроме того, значение атрибута alt учитывают поисковые системы. Рисунки очень часто служат гиперссылками на другие доку- менты. Для этого тэг <img> нужно поместить внутрь контейнера- ссылки <а>, например: <а href="gallery.htm"ximg src="night.jpg" border="0"x/a> 206
Рисунки, звук, видео §25 Атрибут border (англ, border — граница) установлен в нуль для того, чтобы убрать синюю рамку, которая появляется по умол- чанию вокруг рисунка-ссылки. Векторные рисунки вставляются с помощью тэга <object>, например: <object type="image/svg+xml" data="test.svg" width="48" height=”4 8” align=”left”x/object> Тэг <object> используется для добавления на веб-страницу «не- стандартных» данных. Атрибут type определяет тип данных (ри- сунок в формате SVG), атрибут data — имя файла, остальные атрибуты такие же, как у тэга <img>. Фоновые рисунки Для любого элемента веб-страницы можно определить фоновый рисунок. Для этого в стилевом файле нужно задать значение свойства background (фон) в виде url(адрес файла) В примере на рис. 4.15 определяется фон для всего тела стра- ницы. body { background: url(grad.jpg); } Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas non uma vekt. Fusee vel tellus dolor. Suspendisse nec - - • -1 1 ___z. Рис. 4.15 Если рисунок меньше, чем видимая часть элемента, он повторя- ется. Повторение можно отменить, добавив свойство no-repeat: body { background: url(grad.jpg) no-repeat; } 207
4 Создание веб-сайтов Если нужно оставить повторение только по горизонтали, вместо no-repeat указывают repeat-x, а если задать значение repeat-y, то сохраняется только повторение по вертикали. Фоновые рисунки нужно применять с большой осторожно- стью. Дело в том что разнородный фон всегда мешает читать текст, т. е. затрудняет выполнение основной задачи пользовате- ля — получение полезной информации. Поэтому профессиональ- ные дизайнеры используют фоновые рисунки чаще всего там, где нет текста (например, для вставки логотипа). Мультимедиа Браузер, как правило, сам не может проигрывать звуковые фай- лы, видеофайлы, анимацию, т. е. то, что обычно называют муль- тимедиа (от лат. multum media — много средств). Для этого нужно подключить к браузеру специальный модуль, который называется плагин (от англ, plug-in — подключить). Для загрузки произвольных данных на веб-страницу в языке HTML используется тэг <embed>. Например, для подключения звукового файла myaw.wav нужно написать: <embed src="myaw.wav" autostart="false"x/embed> Здесь атрибут src указывает на звуковой файл, а атрибут autostart (от англ, auto start — автозапуск), для которого зада- но значение false (ложь), не даёт файлу проигрываться самосто- ятельно, без команды пользователя. Если файл найден, на экране появляется небольшое окно проигрывателя (рис. 4.16). Рис. 4.16 Пользователь может начать прослушивание файла, если он сам этого захочет. Аналогично можно подключать к веб-странице звуковые файлы в форматах MID и MP3. При загрузке видеофайлов и флэш-анимации (файлов с рас- ширением swf, построенных с помощью технологии Adobe Flash} указывают ширину (width) и высоту (height) области, которая отводится ролику: <embed src="cube.swf" width="275" height="200"> </embed> 208
Рисунки, звук, видео §25 В этом примере подключается файл cube. swf, который будет запущен в прямоугольном окне размером 275 х 200 пикселей. К веб-странице можно подключать видеофайлы. Вот при- мер подключения ролика, загруженного на сервис YouTube (www.youtube.com): <embed src="http://www.youtube.com/v/nR01rTZ9JLU" width="425" height=”350”> </embed> Конечно, здесь приведены только простейшие примеры. Более подробную информацию можно найти в Интернете. Современный стандарт языка HTML рекомендует для подклю- чения нестандартных данных использовать тег <object> вместо тега <embed>, однако пока не все браузеры умеют с ним рабо- тать. Часто рекомендуют вставлять тэг <embed> внутрь контей- нера <object>. В новую версию языка HTML, которая известна под именем HTML5, встроены стандартные средства для воспроизведения видео- и аудиофайлов — элементы <video> и <audio>. Многие возможности HTML5 уже сейчас поддерживаются современными браузерами (лучше всего — в Google Chrome, Safari, Opera). Выводы • На веб-страницах можно использовать рисунки в форматах GIF, JPEG и PNG. Формат GIF применяется для рисунков с небольшим количеством цветов (не более 256). Формат JPEG используется для фотографий и других размытых изображе- ний. Формат PNG применяют для вывода изображений вы- сокого качества, в том числе с полупрозрачными областями. • Рисунки вставляются с помощью непарного тэга <img>. Обя- зательный атрибут src содержит адрес рисунка. • С помощью атрибута align можно задать обтекание рисунка текстом (слева или справа). • Атрибут alt содержит текст, который появляется на месте рисунка, если он не загружен с сервера. • Для всей страницы или её отдельных элементов можно уста- новить фоновый рисунок с помощью стилей (CSS). • Для вставки звуковых и видеофайлов используются тэги <embed> и <object>. В HTML5 введены специальные тэги <audio> и <video>. Нарисуйте в тетради интеллект-карту этого параграфа. 209
4 Создание веб-сайтов Вопросы и задания 1. Какие форматы рисунков можно использовать на веб-страни- цах? Сравните их свойства. 2. Почему изображения с чёткими границами объектов не хра- нят в формате JPEG'! 3. Почему фотографии не хранят в формате GIF'! 4. В каких форматах можно хранить изображения с прозрачны- ми и частично прозрачными областями? 5. Что представляет собой формат RGBA! 6. Какие атрибуты тэга <img> вы знаете? Что они обозначают? 7. Где браузер будет искать этот рисунок? <img src=” . . / . . /images/night. jpg’’> 8. Почему в тэге <img> рекомендуется указывать размеры ри- сунка и атрибут alt? 9. Как сделать рисунок гиперссылкой? 10. Какой формат векторных рисунков можно использовать на веб-страницах? Какой тэг применяется для вставки таких ри- сунков? 11. Почему фоновые рисунки нужно использовать с большой осто- рожностью? 12. Что такое плагин? 13. Почему не следует автоматически запускать звук при загрузке веб-страницы? 14. Какие средства для работы с мультимедиа добавлены в HTML5? Подготовьте сообщение а) «Формат PNG» б) «Векторные рисунки на веб-страницах» в) «Анимация с помощью CSS3» г) «Вставка рисунков и звука в HTML5» Интересные сайты css-tricks.com/examples/ButtonMaker/ — генератор кнопок ajaxload.info — генератор анимированных рисунков, обозначаю- щих загрузку данных xiconeditor.com — онлайн-редактор иконок для веб-страниц 210
Таблицы §26 §26 Таблицы Ключевые слова: • таблица • строка • ячейка о • объединение ячеек • табличная вёрстка • выравнивание Структура Для вставки таблиц используется тэг <table> (англ, table — таблица): <table border=”l”> </table> Атрибут border, равный 1, определяет ширину рамки (если его не указать, по умолчанию рамка не показывается вообще). На месте многоточия нужно определить структуру таблицы и содержание ячеек. Строки описываются по одной сверху вниз, каждая строка заключается в контейнер <tr> (от англ, table row — строка таблицы), а каждая ячейка внутри строки — в контейнер <td> (от англ, table data — данные таблицы). Эта таблица состоит из одной строки из двух ячеек: (рис. 4.17). <table border="1"> <tr> <td>Bac4</td> <td>IIeTpoB</td> </tr> </table> Рис. 4.17 По умолчанию размеры ячейки выбираются так, чтобы в неё поместились все данные, указанные в контейнере <td>. В ячей- ки можно вставлять не только текст, но и рисунки (с помощью тэга <img>). Заголовки строк и столбцов в таблице обычно выделяют с помощью тэга <th> (вместо <td>). По умолчанию браузеры ис- пользуют для таких ячеек жирный шрифт и выравнивание по центру (рис. 4.18). 211
Создание веб-сайтов <table border="l"> <tr><th>MecHu</th></tr> <tr><td>HHBapb</td></tr> <trxtd>0eBpanb</tdx/tr> <tr><td>MapT</tdx/tr> </table> Рис. 4.18 Для того чтобы сделать заголовок таблицы на несколько стол- бцов, применяют атрибут col span (от англ, column span — охват столбцов) тэга <th> (или <td>). Значение этого атрибута — ко- личество столбцов, охваченных заголовком (рис. 4.19). ctable border=”l”> <tr><th colspan="3">MecHu</thx/tr> <tr> 1 <td>4HBapb</td> I J colspan=”3" <td>(£eBpanb</td> । . . . „ -i <td>MapT</td> месяц </tr> </table> январь, февраль март Рис. 4.19 Для объединения строк используют аналогичный атрибут rowspan (от англ, row span — охват строк) — рис. 4.20. <table border="1"> <tr> <th rowspan="3">ripnBeT, </th> <td>Bacn!</td> </tr> <trxtd>rieTH! </tdx/tr> <trXtd>Konn! </tdx/tr> </table> rowspan="3” 1 Е Привет, j n -1 Вася! Петя! Коля! Рис. 4.20 Обратите внимание, что первая строка формально состоит из двух ячеек (включая боковой заголовок), а описание остальных строк содержит только одну ячейку.
Таблицы §26 Табличная вёрстка В языке HTML разрешается вкладывать в ячейку одной таб- лицы другую таблицу. Такой приём веб-дизайнеры раньше часто использовали для вёрстки — размещения материала на веб-странице. На рис. 4.21 слева размещена таблица, а спра- ва — текст. <table> <trxtd> <table border="l"> <tr> <ЬЬ>Франция</ЬЬ> <td>napwac</td> </tr></table> </td> <td>CaMan большая страна Западной Европы.</td> </tr> </table> Верстка "Г ]|ZZ I Самая большая страна Франция Париж „ „ _ --------iL---j Западной Европы. Рис. 4.21 Здесь внешняя таблица со скрытыми границами выполняет «не свою» задачу: она служит совсем не для того, чтобы представить материал в виде таблицы, а для того, чтобы разместить его на экране нужным образом. Табличная вёрстка сейчас всё реже и реже используется на профессиональных сайтах. Во-первых, она не позволяет разде- лить содержание и оформление (таблицы следует скорее отне- сти к оформлению). Во-вторых, при табличной вёрстке страница содержит много «лишнего» (вспомогательного) кода. Вложенные друг в друга таблицы замедляют загрузку страницы. Поэтому вместо таблиц обычно используют блочную верстку, о которой будет рассказано в следующем параграфе. Тем не менее таблицы остаются самым надёжным средством создания сайтов, на которых информация размещена в несколь- ко колонок. Особенно важно, что при этом несложно обеспечить кроссбраузерностпъ, т. е. сделать так, чтобы страница выглядела одинаково в различных браузерах. 213
4 Создание веб-сайтов Оформление таблиц В языке HTML есть атрибуты, позволяющие задать внешний вид таблицы. Например, в атрибутах тэга <table> можно задать ши- рину таблицы (в пикселях или процентах) и её выравнивание. Таблица, описанная как <table width=”50%” align=”center”> </table> всегда занимает 50% по ширине от свободного места в окне бра- узера и выровнена по центру. Такой дизайн называют «резино- вым», потому что размеры элементов подстраиваются под раз- меры окна браузера. Ширину (атрибут width) и высоту (атрибут height) можно задать для каждой ячейки отдельно. Горизонтальное и вертикальное выравнивание данных в ячей- ке задаётся атрибутами align и valign (от англ, vertical align — вертикальное выравнивание). Их можно использовать для тэгов <tr> (применяются ко всем ячейкам строки) или <td> (для од- ной ячейки). Атрибут align может принимать значения left, center, right и justify (влево, по центру, вправо, по ширине). Возможные значения атрибута valign — top, middle и bottom (соответственно вверх, по середине и вниз). Более современный подход — вынести всё оформление в сти- левой файл и применить каскадные таблицы стилей (CSS). Под- робное описание свойств, задающих внешний вид ячеек, строк и всей таблицы можно найти в справочниках и в Интернете. Выводы • Для создания таблиц используют контейнер <table>. • Каждая строка оформляется как контейнер <tr>, каждая ячейка в заголовке — как контейнер <th>, ячейка с данны- ми — как контейнер <td>. • Ячейки в одной строке можно объединять с помощью атрибу- та col span, ячейки в соседних строках — с помощью атри- бута rowspan. • Таблицы можно использовать для вёрстки — размещения ма- териала на веб-странице, но этот метод считается устаревшим. • Оформление таблиц и их элементов (строк, ячеек) обычно определяется в стилевом файле. Нарисуйте в тетради интеллект-карту этого параграфа. 214
Блоки §27 Вопросы и задания 1. Какие тэги используются для разметки таблиц? 2. Чем различаются тэги <td> и <th>? В каких случаях они применяются? 3. Можно ли вставлять одну таблицу в ячейку другой? Когда это может понадобиться? 4. Как объединять ячейки в таблицах? 5. Что такое табличная вёрстка? Назовите её достоинства и не- достатки. 6. Как можно менять оформление таблиц? 7. Что такое «резиновый» дизайн? Подумайте, когда имеет смысл его использовать, а когда — нет. 8. Соответствуют ли таблицы принципу разделения содержания и оформления документа? Обсудите этот вопрос в классе. © §27 Блоки Ключевые слова: • блок • граница • поля • отступы • плавающий блок Что такое блоки? Блочную вёрстку разработали для того, чтобы заменить таблицы, использовавшиеся для размещения материала, и таким образом более чётко разделить содержание веб-страницы (HTML-код) и её оформление (стилевой CSS-файл). При этом, как правило, размер файла веб-страницы (текста с разметкой) значительно уменьшает- ся, хотя бы за счёт того, что один стилевой файл используется для всех страниц сайта. Блок — это контейнер, который задаётся тэгом <div> (от англ, division — раздел, подразделение). Он может содержать всё, что угодно — абзацы, ссылки, рисунки, таблицы, другие (вло- женные) блоки и т. д. На экране блок изображается как прямоугольник, который имеет три характерных свойства: • границу, или рамку (англ, border); • внешние поля (англ, margin) — пространство между блоком и окружающими его элементами; • внутренние отступы (англ, padding) — пространство между границей блока (рамкой) и его содержимым. 215
Создание веб-сайтов Все эти свойства (рис. 4.22) настраиваются в стилевом файле с помощью CSS. padding Рис. 4.22 -border --margin Поскольку на странице может быть много самых разных блоков, для тэга <div> обычно задаётся класс (атрибут class) или идентификатор (атрибут id). Разница в том, что идентифи- катор — это уникальный признак (на странице не должно быть двух элементов с одинаковым идентификатором), а класс — это описание общих свойств нескольких элементов. Для блока можно задать одновременно и класс, и идентификатор, например: <div class="info" id="result"> Ответ: 45. </div> Предположим, что используется такой стилевой файл (рис. 4.23). .info { margin: 5рх 5рх Юрх 20рх; padding: Зрх; ) tfresult { background: #CCCCFF; border: Ipx solid blue; Рис. 4.23 Здесь для всех элементов (в том числе и блоков) класса info устанавливаются поля (margin) и отступы (padding). Поля опре- делены отдельно для каждой стороны в таким порядке: верхнее (5 пикселей), правое (тоже 5 пикселей), нижнее (10 пикселей) и левое (20 пикселей). Отступы одинаковые, со всех сторон по 3 пикселя. 216
Блоки §27 Кроме того, для элемента с идентификатором result уста- новлен светло-синий фон и синяя рамка. Мы видим, что к блоку применены как свойства класса, так и свойства иден- тификатора. Пример: плавающие блоки Блоки можно делать плавающими, тогда они будут обтекаться текстом вокруг рамки. В следующем примере мы построим пла- вающий блок, состоящий из рисунка и подписи к нему. Для этого нужно установить обтекание блока текстом и прижать его к левой границе страницы (рис. 4.24). <div class="picture"> <img src="dog.jpg” width="100" height="66"> <p>Ha природе</р> </div> Плавающий <div> В воскресенье мы с Васей ездили на рыбалку на озеро Суходольское Ловили леща и плотву. На природе вечером варили уху. С нами была собака, которая, как оказалось, тоже не прочь полакомиться варёной рыбой Рис. 4.24 Здесь используется класс, а не идентификатор, потому что на странице может быть несколько иллюстраций. В стилевом файле определяются свойства самого блока (класс picture) и свойства абзаца, в котором расположена подпись (.picture р). .picture { float: left; margin: 5px; } .picture p { margin: 0; text-align: center; font-family: sans-serif; font-size: 80%; font-weight: bold; } 217
4 Создание веб-сайтов Для элементов класса picture заданы поля 5 пикселей и обтекание текстом: свойству float (от англ, float - плавать) при- своено значение left (прижать влево). Для абзаца внутри элемента класса picture установлены не- которые свойства, с которыми мы раньше не встречались: text-align — выравнивание текста (left, center, right или justify); font-family — шрифт; здесь можно указать название шриф- та (например, Helvetica) или его тип (sans-serif — шрифт без засечек; serif - шрифт с засечками; monospace — мо- ноширинный шрифт); font-size — размер шрифта (можно задавать по-разному, здесь — 80% от размера шрифта «родительского» элемента, в котором находится блок); font-weight — насыщенность, здесь установлен жирный шрифт (англ, bold — жирный). Выводы • Блок — это контейнер, который задаётся тэгом <div>. Он может содержать абзацы, ссылки, рисунки, таблицы, другие (вложенные) блоки и т. д. • На экране блок изображается как прямоугольник, который имеет границу или рамку, внешние поля и внутренние от- ступы. Все эти свойства настраиваются в стилевом файле с помощью CSS. • Блоки используются для вёрстки — размещения материала на веб-странице. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Зачем нужна блочная вёрстка? 2. Что такое блоки? Какие характерные свойства они имеют? 3. Чем различаются идентификатор и класс? 4. Что происходит, если для блока задать одновременно и иден- тификатор, и класс? 5. Какое свойство в стилевом файле задаёт обтекание блоков тек- стом? 6. Что означает запись .picture р в стилевом файле? 7. Какие новые свойства элементов вы узнали? 218
XML и XHTML §28 Подготовьте сообщение б) «Вёрстка в несколько колонок» в) «Инструменты разработчика в браузерах» г) «Новые тэги в HTML5» д) «Адаптивный дизайн сайтов» Интересные сайты htmlbook.ru/html5 — учебник HTML5 html5ru.com — ещё один учебник HTML5 html5test.com — тестирование поддержки возможностей HTML5 в браузерах caniuse.com — поддержка браузерами новый возможностей HTML5 и CSS §28 XML и XHTML Ключевые слова: • XML О • XHTML Что такое XML? В современных информационных системах (в том числе и в сети Интернет) обмен данными и их обработка очень часто выполня- ются автоматически, без участия человека. До недавнего времени для передачи данных использовались в основном двоичные форматы. Это значит, что данные пред- ставляются в том же виде, в котором они хранятся в памяти компьютера. Вспомним, что любой двоичный код — это просто последовательность битов, и невозможно сказать, что он озна- чает — код программы, текст, рисунок или звук. Поэтому при передаче двоичных данных приёмник должен заранее знать их формат, т. е. такой подход не универсален. Для обмена гипертекстовой информацией был разработан язык HTML. Поскольку некоторое время назад этот язык был единст- венным средством разработки веб-страниц, в него были включены тэги физической разметки (определяющие оформление), которые совсем не нужны для машинной обработки. Вместе с тем поль- зователь не может ввести в язык новые тэги, т. е. HTML непри- годен для передачи произвольных данных. 219
4 Создание веб-сайтов В конце XX века был предложен новый язык описания дан- ных, который во многом снял проблему совместимости различных информационных систем. Он получил название XML (от англ. extensible Markup Language — расширяемый язык разметки). Вот пример XML-файла: <?xml version=”l.0”?> <компыотер> <процессор частота="2 rru”>Intel Celeron </процессор> <память (£npMa="Kingston">2048 Мб</память> <винчестер фирма=”Seagate”>320 Гб</винчестер> <периферия> <MOHMTop>Philips 190С13В</монитор> <KnaBnaTypa>Logitech Classic 200</клавиатура> <Mbinib>Genius Navigator 600</мышь> </периферия> </компьютер Первая строка говорит о том, что это XML-доку мент вер- сии 1.0. Оставшаяся часть очень напоминает HTML-код: • для разметки используются тэги-контейнеры в угловых скоб- ках; закрывающий тэг начинается знаком «/»; • в один контейнер могут быть вложены другие, это позволяет хранить данные в виде многоуровневой структуры (дерева); • тэги могут иметь атрибуты, в которых хранятся дополнитель- ные данные. Фактически XML-файлы — это иерархические базы данных, хранящиеся в текстовом формате. В отличие от HTML здесь можно вводить свои собственные тэги и атрибуты, но никаких средств оформления нет. Для того чтобы вывести данные из XML-файла на экран в нужном виде, используют специальные стилевые таблицы, построенные с помощью языка XSL (англ. extensible Stylesheet Language — расширяемый язык таблиц стилей). XML обладает несомненными достоинствами с точки зрения автоматизации обработки данных: • открытый текстовый формат, не зависящий от типа компью- тера и операционной системы; • построен на строгих правилах, определённых стандартами, поэтому несложно написать программу для обработки XML- файлов и проверки их правильности; • удобен для представления многоуровневых списков и иерар- хических баз данных. 220
XML и XHTML §28 В то же время нужно отметить и недостатки XML: • достаточно сложно описать структуры данных, отличающиеся от иерархии, например графы; • не различаются типы данных (число, текст, дата, время, ло- гическое значение); • XML-файлы избыточны, т. е. занимают в несколько раз боль- ше места, чем те же самые данные в двоичном виде. Сейчас язык XML широко используется в программном обес- печении. Например, последние версии офисных пакетов Microsoft Office и OpenOffice сохраняют документы как набор XML-файлов, упакованных в зуэ-архив. На XML основаны и многие другие форматы данных: • S3 BSS (ленты новостей на сайтах и в блогах); • MathML (описание математических формул); • SVG (векторная графика на веб-страницах); • XAML (язык описания пользовательских интерфейсов при программировании в среде .NET); • FictionBook (формат хранения электронных книг, известный также как FB2). В XML-файлах часто хранятся настройки программ (так на- зываемые файлы конфигурации). XHTML В начале XXI века появилась идея «упорядочить» язык разметки веб-страниц для того, чтобы их было удобно обрабатывать в авто- матическом режиме (например, поисковым системам). Используе- мый повсеместно язык HTML для этого не совсем строг, например в нём можно не закрывать некоторые тэги (<р>, <li> и др.), записывать тэги и прописными, и строчными буквами и т. п. Новый язык, построенный на основе XML, получил название XHTML (англ, extensible Hypertext Markup Language — расши- ряемый язык разметки гипертекста). Он во многом похож на HTML, но имеет некоторые существенные отличия, например: • имена тэгов и атрибутов записываются только строчными бук- вами; • все тэги должны быть закрыты; тэги, не имеющие закрыва- ющего тега (например, <img> или <br>), должны закрываться слэшем (например: <br />); • должна соблюдаться правильная вложенность тэгов; например, этот код неправильный: <p><strong>BacH</p></strong> 221
4 Создание веб-сайтов • значения атрибутов должны обязательно заключаться в ка- вычки, например: <img src="dog.jpg" alt="nec Барбос” />. • служебные символы должны везде заменяться на их специ- альные обозначения (например, знаки «<» и «&» заменяются соответственно на &lt; и &атр;). Как признал в своем блоге создатель Всемирной паутины и языка HTML Т. Бернес-Ли, попытка сразу перейти на XHTML не удалась. Поскольку этот стандарт поддерживался не всеми браузерами, многие разработчики по-прежнему использовали и используют HTML. В конце 2009 год все работы, связанные с развитием XHTML, были переданы группе, занятой разработкой новой версии языка HTML5, которая включает XML-вариант (XHTML5). Выводы • XML — это язык описания произвольных данных в текстовом формате. В отличие от HTML в XML можно вводить новые тэги и атрибуты. • XML применяется для обмена данными в информационных системах. • XHTML — это более строгая версия языка HTML, построен- ная на основе XML. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Каково основное предназначение языка XML? 2. Сравните достоинства и недостатки передачи информации с помощью двоичных форматов, HTML и XML. 3. Назовите недостатки XML. Подумайте, в каких областях этот язык удобен для применения, а в каких — нет. 4. Как определяется оформление элементов при выводе XML- файлов на экран? 5. Какие форматы хранения данных, основанные на XML, сей- час используются? 6. Сравните языки разметки XML, XHTML и HTML. 7. Как вы думаете, почему развитие XHTML сейчас не рассмат- ривается как отдельное перспективное направление? 222
Динамический HTML §29 Подготовьте сообщение а) «Применение языка XML» б) «Формат RSS — ленты новостей» в) «Формат SVG» г) «Запись математических формул с помощью MathML» Проекты а) Программа для разбора ленты новостей (RSS) с сайта б) Библиотека для загрузки данных в формате XML в) Программа для вывода рисунков в формате SVG Интересные сайты xmlgrid.net — онлайн-редактор XML-документов github.com/microsoft/xmlnotepad — бесплатный редактор XML Notepad §29 Динамический HTML Ключевые слова: • язык JavaScript • эффект «ролл-овер» • объектная модель документа • скрытый блок • дерево объектов • форма • идентификатор Что это такое? HTML — это язык статической разметки, такая страница никак не реагирует на действия пользователя. Используя только HMTL, невозможно, например, сделать на веб-странице выпадающее меню или популярный эффект «ролл-овер» (от англ, roll-over), при ко- тором кнопка реагирует на наведение курсора мыши — меняет свой вид. Для того чтобы «оживить» веб-страницу, применяют так называемый динамический HTML (DHTML). Динамический HTML (DHTML) — это технология создания интерактивных сайтов, использующая HTML, CSS, язык про- граммирования (чаще всего JavaScript) и объектную модель документа (англ. DOM: Document Object Model). 223
4 Создание веб-сайтов Язык JavaScript — это скриптовый язык, используемый для программирования браузера. Код на JavaScript — это, как прави- ло, набор функций, которые вызываются при наступлении неко- торых событий (загрузки страницы, перемещения мыши, щелчка мышью, нажатия на клавишу и т. п.). Согласно объектной модели документа (DOM), веб-страница — это иерархия (дерево) объектов — рисунков, блоков, параграфов, ссылок и т. п. Корень этого дерева — объект document, который обозначает весь HTML-доку мент. На рисунке 4.25 показано дерево объектов простого HTML-документа. <!DOCTYPE html> <html> <head> <title>DOM</title> </head> <body> <р>Привет, <еш>Вася!</ет></р> </body> </html> document head body | title | | P \pQM I [ Привет, | | em | ♦ [ Вася! Рис. 4.25 «Сыновья» тэгов — это вложенные тэги, у документа единст- венный «сын» — тэг <html>. С помощью JavaScript можно обратиться к любому элемен- ту и изменить его свойства, например скрыть или показать на экране, добавить или удалить потомков. Самый простой метод поиска элемента — по идентификатору, который записывается как атрибут id, например: <div id=”menu"> ... </div> 224
Динамический HTML §29 Есть и другие приёмы. Например, все рисунки хранятся в массиве images и нумеруются с нуля. Поэтому к первой картин- ке в документе можно обратиться как document.images[0] Динамическому HTML посвящены сотни книг и огромное ко- личество веб-сайтов. Здесь мы ограничимся только рядом при- меров, которые помогут вам получить представление о DHTML. «Живой» рисунок В первом примере мы сделаем эффект «ролл-овер» — изменение рисунка в тот момент, когда над ним проходит курсор мыши. Для этого нужно определить реакцию на два события: • курсор мыши вошел в область рисунка (англ, mouse over — мышь над объектом); • курсор мыши вышел из области рисунка (англ, mouse out — мышь вне объекта). Обработчик события — это код на JavaScript, который вы- полняет некоторые действия (меняет рисунок). Обработчик сра- батывает тогда, когда произошло событие, с которым он связан. Предположим, что есть два рисунка, на которых изображе- ны закрытая коробка (файл box_closed.gif) и открытая (файл box_opened.gif). Коробка должна открываться при наведении мыши и закрываться, когда мышь «ушла» (рис. 4.26). Рис. 4.26 В этом случае нужно использовать такой код вставки рисунка: <img src="box_closed.gif" onMouseOver="this.src=’box_opened.gif’" onMouseOut="this.src=’box_closed.gif’"> Атрибут src содержит адрес рисунка, который появляется при загрузке страницы (закрытая коробка). Атрибут onMouseOver задаёт обработчик события «мышь над объектом», при этом выполняется код на JavaScript: this.src=’box_opened.gif’ 225
4 Создание веб-сайтов Здесь this означает «этот элемент», т. е. текущий тэг <img>. Тогда this.src — это его атрибут src, так что приведённая строка меняет рисунок при наведении мыши. Обратите внимание, что в JavaScript можно использовать как одинарные, так и двойные кавычки. В данном случае одинарные кавычки (апострофы) использованы внутри двойных: двойные ог- раничивают весь код на JavaScript, а одинарные — имя файла. Обработчик события «мышь ушла с объекта» (onMouseOut) стро- ится аналогично. Если вставить такой рисунок в контейнер <а>, он будет служить гиперссылкой. Скрытый блок Иногда на веб-странице нужно сделать скрытые элементы с до- полнительной информацией, которые должны появляется только после щелчка мышью на какой-нибудь ссылке. На рисунке 4.27 показана такая страница до и после щелчка мышью. Скрытый блок Показать детали Скрытый блок Показ ать д етал иД Детали — это гайка, шайба, болт, винт, шуруп, гвоздь и др. Рис. 4.27 Данные, которые должны быть скрыты, поместим в отдель- ный блок (кроме текста он может содержать рисунки, таблицы и другие элементы): <div id=”details” class="hidden"> Детали &#151; это гайка, шайба, болт, винт, шуруп, гвоздь и др. </div> Этот блок имеет идентификатор details, по которому мы будем к нему обращаться из программного кода. Кроме того, он относится к классу hidden (англ, hidden — скрытый). Заметим, что на странице можно сделать несколько скрытых блоков — для них нужно указать класс hidden, однако все они должны иметь разные идентификаторы. Теперь нужно сообщить браузеру, что элементы класса hidden должны быть скрытыми. Для этого в стилевом файле (назовем его test, css) установим для свойства display (англ, display — показывать) значение попе (англ, попе — никакой): 226
Динамический HTML §29 .hidden { display:none; } После щелчка на ссылке мы будем с помощью JavaScript ме- нять это свойство, устанавливая для него значение block (блок начинается с новой строки) или inline (в той же строке, без перехода на новую строку). Как правило, веб-мастера выносят весь код на JavaScript в отдельные файлы, которые обычно имеют расширение js и под- ключаются на всех страницах сайта с помощью тэга <script> в заголовке страницы. Например, для использования JavaScript- файла test.js нужно записать: <head> <script type="text/ j avascript" src="test. j s"x/script> </head> Атрибут src задает имя файла, а атрибут type — его тип. Мно- готочие обозначает другие тэги, помещенные внутрь контейнера <head>. Файл test.js можно создать в любом текстовом редакторе: function show (name) { var elem = document.getElementByld(name); if (elem) elem. style .display = ’’block”; } Этот файл содержит одну функцию с именем show, которая принимает один параметр name — идентификатор (имя) скрытого элемента. Тело функции ограничено фигурными скобками, син- таксис языка очень похож на язык С. В первой строке вызывается метод getElementByld, который ищет в документе элемент с идентификатором name. Ссылка на него (иными словами, адрес в памяти, через который к этому элементу можно будет обращаться) записывается в новую пере- менную elem. Далее с помощью условного оператора проверяем, найден ли такой элемент. Если значение elem «не пустое», условный опера- тор срабатывает, и меняется стиль элемента (style) — свойству display присваивается значение block. Осталось оформить гиперссылку так, чтобы при щелчке мы- шью не происходил переход на другую страницу, а выполнялся 227
4 Создание веб-сайтов код функции show, который показывает блок с идентификатором details. Для этого используем такой код: <а href=”#” onClick=”show (’details’) ; return false; ”> Показать детали </a> Атрибут onClick подключает обработчик события «щелчок мы- шью» (англ, click). А данном случае это код show('details');return false; Сначала вызывается функция show (из файла test.js), которая «открывает» блок с идентификатором details. Оператор return false («вернуть результат — ложное значение») говорит о том, что больше никаких действий выполнять не нужно. Если поль- зователь отключил выполнение JavaScript в браузере, сработает гиперссылка (href=”#”) и загрузится та же самая страница (блок, естественно, не появится). Итак, для работы этого примера нужны три файла: test.css, test.js и основной файл с HTML-кодом, который мы приведём полностью: <!DOCTYPE html> <html> <head> <Ь1Ь1е>Скрытый 6noK</title> <script type="text/javascript” src="test. j s"x/script> clink rel=”stylesheet” type=”text/css" href=”test.css"> </head> <body> <a href=# onClick=”show (’details’) ; return false; "> Показать детали</а> <div id=”detaiIs” class=”hidden”> Детали &#151; это гайка, шайба, болт, винт, шуруп, гвоздь и др. </div> </body> </html> Формы Форма на веб-странице — это набор элементов для ввода данных пользователем: текстовые поля, переключатели, списки, кнопки и т. д. Как правило, введённые данные отправляются на сер- вер, где они заносятся в базу данных или как-то иначе обра- батываются. В этом случае необходимо, чтобы на сервере была 228
Динамический HTML §29 «принимающая программа», написанная на одном из серверных языков (например, на РНР). Этот материал выходит за рамки школьного курса, поэтому мы покажем простой пример примене- ния формы для тестирования, который можно использовать без сервера: все действия по обработке данных выполняет программа на JavaScript, которая работает в браузере (на стороне клиента). Пользователь должен ввести ответ на вопрос в поле ввода и щёлкнуть на кнопке Готово, после чего он получает сообщение «Правильно!» или «Неправильно! » (рис. 4.28). Сколько будет 2 + 2? Готово Рис. 4.28 Форма состоит из двух элементов: поля ввода и кнопки, ко- торые помещены в контейнер <form> (от англ, form — форма): <form name="calc"> <input name=,,answer"> <input type="button" value="Готово" onClick="check();"> </form> Для формы задано имя calc (атрибут name), по этому имени можно обращаться к форме и её элементам. Поле ввода с именем answer задаётся с помощью непарного тэга <input> (от англ. input — ввод). Тот же самый тэг <input> используется и для кнопки, атри- бут type задаёт тип элемента (англ, button — кнопка), атрибут value (от англ, value — значение) — текст на кнопке, а атри- бут onClick подключает обработчик события «щелчок мышью». Если вспомнить предыдущий пример, станет понятно, что по- сле щелчка на кнопке вызывается функция check для проверки правильности ввода данных. Эта функция будет расположена в отдельном файле calc.js: function check() { if (calc.answer.value == "4") alert("Правильно!"); else alert("Неправильно!"); } 229
4 Создание веб-сайтов Запись calc.answer.value нужно расшифровывать с конца: «зна- чение элемента answer, который входит в форму calc». Если это значение равно 4, пользователь видит в отдельном окошке надпись «Правильно!», иначе — надпись «Неправильно!». Обра- тите внимание, что в JavaScript (как и в языке С) для проверки условия «равно» используется два знака « = ». Вывод сообщений здесь выполняет функция alert (англ, alert — тревога), которую часто применяют для отладки программ. Полный код HTML-страницы вы уже можете составить само- стоятельно. Выводы • Динамический HTML (DHTML) — это технология создания интерактивных сайтов, использующая HTML, CSS, язык JavaScript и объектную модель документа (DOM). • Язык JavaScript — это скриптовый язык, используемый для программирования браузера. • Веб-страница — это иерархия (дерево) объектов — рисунков, блоков, параграфов, ссылок и т. п. • С помощью JavaScript можно обратиться к любому элементу и изменить его свойства. • Любой элемент можно найти по его идентификатору (атри- буту id). • Скрипты, выполняющиеся на веб-страницах, обычно хранятся в файлах с расширением js. • Форма — это набор элементов для ввода данных пользова- телем. Введённые данные могут обрабатываться в браузере (с помощью скиптов) или на сервере. Нарисуйте в тетради интеллект-карту этого параграфа. Вопросы и задания 1. Чем пользователей не устраивает «чистый» HTML? 2. Что такое динамический HTML? Какие технологии он исполь- зует? 3. Что такое DOM1 Зачем нужна такая структура? 4. Как можно найти нужный элемент на веб-странице из J avaScript-код а? 5. Что такое «ролл-овер»? Приведите примеры, когда этот эф- фект действительно полезен. 6. Как вы понимаете слово «событие»? С какими событиями мы работали в приведённых примерах? 7. Что такое обработчик события? 230
Динамический HTML §29 8. Что означает запись this.src? 9. Как вы думаете, зачем могут понадобиться скрытые блоки на веб-странице? 10. Объясните, зачем скрытому блоку присвоен и класс, и иден- тификатор. 11. Какое свойство блока нужно изменить, чтобы скрыть или по- казать его? 12. Как вы думаете, зачем JavaScript-код выносят в отдельные файлы? 13. Как подключаются к веб-странице файлы, содержащие J avaScript-ко д ? 14. Зачем в функцию show добавлен условный оператор? 15. Как понимать запись elem. style . display? 16. Зачем в обработчик гиперссылки добавлена команда return false? 17. Как можно использовать формы без «принимающей» сервер- ной программы? 18. Зачем нужен атрибут name для формы и её элементов? 19. Как браузер отличает кнопку от поля ввода (оба элемента задаются тэгом <input>)? 20. Какая функция используется для вывода сообщения пользо- вателю в отдельном окне? Подготовьте сообщение а) «Обработка данных формы на Javascript» б) «Меню сайта на Javascript» в) «Библиотека jQuery» г) «Сервисы для проверки DHTML-страниц» Проекты а) Тестирование с обработкой данных на сервере б) Тренажёр для изучения DHTML Интересные сайты javascript.ru — сайт, посвященный программированию на Javascript learn.javascript.ru — учебник по языку Javascript jquery.com — библиотека jQuery jqbook.net.ru — учебник по работе с библиотекой jQuery для начинающих livetools.uiparade.com/form-builder.html — генератор форм jsfiddle.net — сервис для проверки DHTML-страниц 231
4 Создание веб-сайтов О §30 Размещение веб-сайтов Ключевые слова: • хостинг • трафик • доменное имя • тарифный план Хранение файлов Обычно веб-сайты создаются для того, чтобы их можно было просматривать с любого компьютера, имеющего выход в Интер- нет. Поэтому сайт нужно размещать на компьютере, который подключён к Интернету круглые сутки. Конечно, можно хранить сайт на диске своего домашнего компьютера, но этот вариант имеет много недостатков: • нестабильность канала связи с Интернетом, например при сбо- ях питания; • компьютер должен быть постоянно включён; • придется покупать у провайдера персональный внешний 1Р-адрес; • на компьютере нужно установить и настроить веб-сервер — программу, которая принимает запросы браузеров с других компьютеров и возвращает им нужные веб-страницы; • придётся самостоятельно организовывать защиту сайта от взломщиков, вредоносных программ и сетевых атак. Поэтому чаще всего сайты находятся на серверах компаний, которые оказывают услуги хостинга, т. е. размещают сайты, занимаются их обслуживанием и отвечают за сохранность дан- ных. Как правило, хостинг — это платная услуга, её стоимость зависит от выбранного тарифного плана. Тарифный план опреде- ляет максимально допустимый объём сайта, возможность созда- ния динамических страниц, поддержку работы с базами данных и т. п. Поскольку каналы связи имеют ограниченную пропускную способность, хостинговые компании вводят для каждого тарифа ограничения на количество трафика (англ, traffic — поток дан- ных), т. е. на объём передаваемой информации. Например, если на сайт ежедневно заходят 100 пользователей и каждый просма- тривает 10 страниц по 100 Кбайт, дневной трафик составит около 100 Мбайт, а трафик за месяц — примерно 3 Гб. Если с сайта будут часто скачивать объёмные файлы (архивы, музыку, фильмы и т. п.), количество трафика значительно возрастёт. 232
Размещение веб-сайтов §29 В простейшем случае на одном мощном компьютере-сервере размещаются несколько сайтов (иногда — до 1000) — это вирту- альный хостинг, подходящий для небольших сайтов. Для сайта с большой нагрузкой у хостинговой компании обычно арендуется выделенный сервер — отдельный компьютер, который поступает в полное распоряжение владельца сайта. С по- мощью удалённого доступа можно устанавливать на нём любое нужное программное обеспечение. Возможно также размещение оборудования заказчика в дата-центре хостинговой компании (та- кой вариант называется колокацией). Промежуточный вариант — виртуальный частный сервер (англ. VPS: virtual private server). В этом случае ресурсы од- ного сервера (память, время работы процессора) делятся меж- ду несколькими сайтами, но для каждого владельца сайта сер- вер выглядит как отдельный компьютер, который он полностью контролирует. Существуют и бесплатные хостинги (например, ucoz.ru), где можно размещать небольшие и несложные сайты. Обычно на них нельзя использовать динамические веб-страницы и базы данных. «Платой» за размещение сайтов служит реклама, которая автома- тически встраивается в каждую веб-страницу. Иногда бесплатный хостинг (без рекламы) предоставляется образовательным сайтам и сайтам учебных заведений. Доменное имя Чтобы обращаться к сайту, пользователям нужно знать его адрес. Как вы знаете, в Интернете существует два типа адресов: число- вые IP-адреса (например, 94.100.101.202) и символьные доменные имена (например, www.mail.ru). Людям неудобно запоминать IP- адреса, поэтому обычно сайты имеют доменные имена. На некоторых сайтах доменное имя можно получить бесплат- но, для этого нужно просто зарегистрироваться. Это будет домен третьего (или более высокого) уровня, например на сайте ucoz.ru можно зарегистрировать доменное имя типа vasya.ucoz.ru — здесь первая часть (vasya) выбирается пользователем, а домены второго и первого уровней (ucoz.ru) изменить нельзя. Регистрация доменов второго уровня, например vasya.ru, — платная. На сайтах компаний, оказывающих такие услуги (на- пример, на сайте www.nic.ru), можно проверить, свободно ли нужное доменное имя, и оплатить его регистрацию. После того как имя зарегистрировано, необходимо связать его с IP-адресом сервера, на котором хранятся файлы. Как вы зна- ете, для этого используются серверы DNS (англ, domain пате 233
Создание веб-сайтов system — доменная система имён). Владелец сайта должен сооб- щить регистратору домена адреса DNS-серверов хостинговой ком- пании, и через несколько часов к сайту можно будет обращаться по доменному имени. Загрузка файлов Чаще всего для загрузки файлов на сайт используется протокол FTP (англ, file transfer protocol — протокол передачи файлов). Владельцу сайта выдаётся имя пользователя (логин) и пароль для входа на FTP-сервер хостинговой компании. С помощью специаль- ных программ — FTP-клиентов — можно на удалённом сервере работать с файлами и папками так же, как на своём компьютере: создавать и удалять папки, скачивать файлы на свой компьютер, загружать файлы на сервер, переименовывать и удалять их. Один из популярных FTP-клиентов — кроссплатформенная свободная программа FileZilla (filezilla-project.org), версии которой есть для операционных систем Windows, macOS, Linux. Многие HTML-редакторы, например Dw Adobe Dreamweaver (www.adobe.com), поддерживают загрузку файлов на сайт прямо из программы по протоколу FTP. На многих хостингах можно работать с файлами через веб- интерфейс, заходя на специальную веб-страницу. Однако этот спо- соб не очень удобен, когда сайт состоит из большого количества страниц. Выводы • Сайты размещаются на серверах, которые имеют собственный внешний IP-адрес и постоянно включены. • Хостинг — это набор услуг по размещению и обслуживанию сайта. • Тарифный план определяет максимально допустимый объём сайта, возможность создания динамических страниц, поддерж- ку работы с базами данных и т. п. • Трафик — это объём передаваемой информации. • Существует три варианта размещения сайта: виртуальный хо- стинг, виртуальный частный сервер и выделенный сервер. • Страницы сайта обычно загружаются на сервер по протоколу FTP. Нарисуйте в тетради интеллект-карту этого параграфа.
Размещение веб-сайтов §29 Вопросы и задания 1. Что такое хостинг? 2. Почему не имеет смысла размещать сайт на своём домашнем компьютере? 3. За счёт чего зарабатывают бесплатные хостинги? 4. Что такое тарифный план? 5. Почему вводится ограничение на трафик сайтов? 6. Как зарегистрировать доменное имя второго уровня? 7. Как связать доменное имя с сервером, на котором хранятся файлы? 8. Какими способами можно загружать файлы на сервер? Подготовьте сообщение а) «Регистрация доменных имён» б) «Хостинг сайтов» в) «FTP-клиенты» Проекты а) Сравнение бесплатных хостингов б) Локальный школьный веб-сервер Интересные сайты nic.ru — хостинг-провайдер RU-CENTER hts.ru — хостинг-провайдер «Хостинговые телесистемы» ucoz.ru — бесплатный конструктор сайтов ЭОР к главе 4 на сайте ФЦИОР (http://fcior.edu.ru) WWW • Основные теги HTML • Структура и логика языка разметки. Особенности создания HTML-страниц • Форматирование текста в HTML • Оформление страниц с использованием CSS • Создание стилей (CSS) • Создание веб-страницы с использованием основных тегов HTML • Создание списков с использованием языка HTML • Вставка графических объектов с использованием языка HTML • Создание таблиц и работа с ними в HTML • Работа со ссылками на примере HTML • Создание формы • Передача файлов на сервер с помощью форм HTML 235
4 Создание веб-сайтов WWW Практические работы к главе 4 Работа № 24 «Текстовая веб-страница» Работа № 25 «Оформление страницы» Работа № 26 «Оформление страницы» Работа № 27 «Вставка рисунков» Работа № 28 «Вставка звука и видео» Работа № 29 «Таблицы» Работа № 30 «Блоки» Работа № 31 «ХМЬ» Работа № 32 «Динамический HTML» Работа № 33 «Услуги хостинга» 236
ОГЛАВЛЕНИЕ От авторов ...........................................3 Проекты ..............................................5 Глава 1. Информация и информационные процессы.........7 § 1. Количество информации........................7 § 2. Передача данных............................ 16 § 3. Сжатие данных...............................24 § 4. Информация и управление.....................40 § 5. Информационное общество.....................49 Глава 2. Моделирование...............................59 § 6. Модели и моделирование......................59 § 7. Игровые модели..............................65 § 8. Модели мышления.............................72 § 9. Этапы моделирования.........................83 § 10. Моделирование движения......................90 § 11. Математические модели в биологии............95 § 12. Вероятностные модели...................... 102 Глава 3. Базы данных................................110 § 13. Введение.................................. 110 § 14. Многотабличные базы данных................ 122 § 15. Реляционная модель данных................. 129 § 16. Работа с таблицей......................... 137 § 17. Запросы................................... 144 § 18. Формы..................................... 153 § 19. Отчёты.................................... 164 § 20. Нереляционные базы данных................. 167 § 21. Экспертные системы........................ 173 237
Оглавление Глава 4. Создание веб-сайтов.........................178 § 22. Веб-сайты и веб-страницы................... 178 § 23. Текстовые веб-страницы..................... 184 § 24. Оформление веб-страниц..................... 196 § 25. Рисунки, звук, видео........................204 § 26. Таблицы.....................................211 § 27. Блоки.......................................215 § 28. XML и XHTML.................................219 § 29. Динамический HTML...........................223 § 30. Размещение веб-сайтов.......................232 238
Учебное издание Поляков Константин Юрьевич Еремин Евгений Александрович ИНФОРМАТИКА 11 класс Базовый и углубленный уровни В 2 частях Часть 1 Ведущий редактор О. Полежаева Ведущий методист И. Хлобыстова Художник Н. Новак Технический редактор Е. Денюкова Корректор Е. Клишина Компьютерная верстка: Е. Голубова
Подписано в печать 01.03.17. Формат 70x100/16. Усл. печ. л. 19,5. Тираж 3000 экз. Заказ № м4365. ООО «БИНОМ. Лаборатория знаний» 127473, Москва, ул. Краснопролетарская, д. 16, стр. 1, тел. (495)181-5344, e-mail: binom@Lbz.ru http://www.Lbz.ru, http://metodist.Lbz.ru Отпечатано в филиале «Смоленский полиграфический комбинат» ОАО «Издательство «Высшая школа». 214020, Смоленск, ул. Смольянинова, 1. Тел.: +7 (4812) 31-11-96. Факс: +7 (4812) 31-31-70. E-mail: spk@smolpk.ru http://www.smolpk.ru