Занятие №11 "Создаем большие программы маленькими шажками"
Написанные вами до настоящего момента скрипты были короткими и простыми. Скоро вы будете писать длинные и сложные скрипты, содержащие сотни блоков. А понять их структуру и управлять ими непросто. Подход, известный как структурное программирование, был разработан в середине 1960-х, чтобы упростить процесс написания компьютерных программ и поддержки их работоспособности. Вместо того чтобы писать одну большую программу, вы можете разделить ее на несколько фрагментов, каждый из которых решает часть общей задачи
Представьте себе процесс выпекания пирога. Возможно, вы не задумываетесь об отдельных его шагах, но следуете четкому рецепту, который перечисляет необходимые действия. Он может включать в себя такие инструкции, как «смешайте 4 яйца, 60 г муки и 1 стакан воды»; «вылейте смесь в форму»; «поставьте форму в духовку»; «пеките 1 час при температуре 180°» и т.д. По сути, рецепт разбивает задачу выпекания пирога на определенные логические действия.

А когда вы создаете решение для задачи программирования, проще разбить задачу на более «обозримые» фрагменты. Такой подход позволит вам четко понимать программу и взаимоотношения между ее компонентами.

Взгляните на рисунок. На нем показан длинный скрипт для рисования на Сцене простой формы. Вы видите, что он может быть разделен по признаку функций на небольшие логически обоснованные блоки. Первые шесть, например, приводят спрайт в исходное положение.
Первый блок повторить рисует квадрат, второй — треугольник и т. д. Структурное программирование позволяет сгруппировать родственные блоки под общим названием, чтобы сформировать процедуру.

Написав процедуры, мы можем вызывать их в определенной последовательности, чтобы решить нашу задачу. На рисунке видно, как отдельные процедуры могут быть объединены вместе, чтобы выполнять ту же функцию, что и исходный скрипт. Очевидно, что скрипт, использующий процедуры (справа), более универсален и понятен, чем оригинал (слева).

Процедуры также помогут вам избежать переписывания одного и того же кода дважды. Если набор команд выполняется в нескольких местах в рамках одной программы, вы можете написать процедуру, которая отвечает за них, и использовать его. Такая стратегия для избегания дублирования называется повторным использованием кода. Например, процедура Нарисовать квадрат была повторно использована.

Использование процедур дает вам возможность применить к решению сложных задач стратегию «разделяй и властвуй». Вы делите большую и сложную задачу на подзадачи и решаете их отдельно, тестируя каждую из них. После того как готово решение для всех подзадач, вы складываете фрагменты так, чтобы получить решение исходной задачи. Это похоже на стратегию выпекания пирога: мы совершаем нужные шаги в правильном порядке, чтобы получить конечный продукт.

Здесь вы могли бы спросить: «А как же создаются эти процедуры?» До появления среды Scratch 2 вы не смогли бы создать блок Исходная позиция, показанный на рис, а затем вызвать его из вашего скрипта. Единственным способом имитировать процедуры и сделать программу более структурированной тогда был механизм передачи сообщений. Это изменилось с появлением среды Scratch 2 и мощной функции пользовательских блоков.

Поскольку спрайты получают сообщения, которые сами отправляют, мы можем внедрить идею процедур, дав спрайту команду передать сообщение себе и выполнить указанное в нем задание по сигналу блока-триггера когда я получу. Можно использовать команду передать и ждать, чтобы гарантировать, что наши процедуры будут вызываться в правильной последовательности. Тогда наши программы будут более структурированными и построенными по модульному принципу.
Создаем процедуры при помощи передачи сообщений

Мы рассмотрим, как работают процедуры и как они могут улучшить ваш код, на примере уже знакомой нам программы Flowers, которую мы воссоздадим.

Откройте файл Flowers. Скрипт для Сцены остался таким же, как и раньше (она передает сообщение Рисовать, когда распознает клик мышью), но на этот раз наша программа будет использовать только один спрайт вместо пяти. У него пять костюмов: leaf1, leaf2 и так до leaf5, — и он вызовет процедуру, чтобы нарисовать цветок для каждого костюма.

Поскольку спрайт у нас один, нам понадобится только одна копия кода для рисования (а не пять дублированных скриптов, как в первой версии). Программа будет меньше, а код — более понятным. Когда в этой программе спрайт получает сообщение Рисовать, он выполняет скрипт, показанный ниже.
Вы можете назвать процедуру как хотите, но рекомендуется выбрать имя, которое отражает ее назначение. Это поможет вам, когда вы вернетесь к программе, написанной много месяцев назад. Например, если вы хотите показать игрокам, сколько баллов они набрали, вы можете создать процедуру под названием «Показать счет». Если вы назовете такой скрипт «Мэри» или «Альфред», это вряд ли напомнит вам (или человеку, читающему вашу программу), какую функцию он выполняет.
Скрипт устанавливает координату х и костюм, чтобы начать рисовать первый цветок, а затем входит в цикл, чтобы создать пять цветов. При каждом повторе цикл устанавливает для нового цветка координату у и вызывает команду Рисовать цветок, передавая самому себе сообщение. Этот вызов останавливает выполнение скрипта до того момента, когда будет выполнена команда Рисовать цветок. Когда это произойдет, скрипт Рисовать продолжит работу, поменяв координату х и костюм для рисования следующего цветка.
Процедура Рисовать цветок показана ниже. Она задает случайные значения для эффектов цвета и яркости, а также размера спрайта, прежде чем отпечатать поворачивающиеся копии текущего костюма скрипта и тем самым нарисовать цветок.

Первая созданная нами версия программы содержала 5 спрайтов и 5 повторяющихся скриптов. Вторая достигает того же эффекта при помощи одного спрайта, который запускает процедуру для рисования всех пяти цветов. Использование процедур позволяет вам создавать более компактные программы, которые легче понять и с которыми удобнее работать. По мере того как вы будете писать всё более сложные программы, решающие более комплексные задачи, это преимущество будет становиться всё существеннее.
Создайте свой блок

В среде Scratch можно создавать свои блоки. Новый блок появится в разделе Другие блоки, где вы сможете использовать его точно так же, как и любые другие блоки в Scratch.

Чтобы показать вам, как создавать и использовать такие блоки, мы модифицируем программу Flowers, которую обсудили выше, так, чтобы использовать пользовательский блок для процедуры Рисовать цветок. Вот пошаговая инструкция по созданию этой новой версии

  1. Для начала откройте файл Flowers, который мы уже рассматривали. Выберите ФайлСкачать на свой компьютер из меню Файл и сохраните файл как Flowers3.. Можете выбрать и другое название.
  2. Кликните по иконке спрайта Цветок, чтобы выбрать его. Затем выберите раздел Другие блоки и в нем функцию Создать блок. Вы увидите диалоговое окно. Введите «Рисовать цветок» в качестве названия блока и нажмите OK. Теперь в разделе Другие блоки должен появиться новый Рисовать цветок, а блок определить «Рисовать цветок» — в поле скриптов, как показано на рисунке справа.
Отсоедините скрипт, прикрепленный к блоку когда я получу «Рисовать цветок», и присоедините его к блоку определить «Рисовать цветок», как покaзано ниже. Получается новая процедура, которую мы назвали «Рисовать цветок», внедренная нами в виде пользовательского блока. Удалите блок когда я получу «Рисовать цветок»: он нам больше не нужен.
Теперь, когда мы создали процедуру Рисовать цветок, нам нужно вызывать ее из нашего обработчика сообщения Рисовать. Измените сообщение, как показано на рисунке. Мы всего лишь заменили блок передать «Рисовать цветок» и ждать нашим новым пользовательским блоком Рисовать цветок
Теперь программа готова, и вы можете протестировать ее. Кликните мышкой по Сцене, чтобы удостовериться, что программа работает как раньше.
ЗАПУСК БЕЗ ОБНОВЛЕНИЯ ЭКРАНА

Внедрение процедуры Рисовать цветок пользовательскими блоками подводит нас к еще одной функции, которая позволяет уменьшить время выполнения скрипта. Чтобы продемонстрировать ее, сделаем следующее.

  1. Кликнем правой кнопкой мыши по блоку Рисовать цветок в разделе Другие блоки и выберем в выпадающем меню строку редактировать. Появится такое же диалоговое окно, как ранее, только называться оно будет не Новый блок, а Редактировать блок.
  2. Кликните по стрелке вниз в графе Параметры, поставьте галочку в окошке Запуск без обновления экрана и нажмите OK
  3. Теперь кликните мышью по Сцене и посмотрите, что произойдет. Вместо постепенного вращения и печати пяти цветов вы увидите, что они появятся почти одновременно. И вот почему.
Процедура Рисовать цветок содержит много блоков, которые меняют внешний вид спрайта, в том числе установить цвет, установить яркость, установить размер и печать.

После выполнения такого блока обычно Scratch делает небольшую паузу, чтобы обновить (нарисовать заново) экран. Вот почему раньше мы могли наблюдать процесс рисования.

Если вы выбираете опцию Запуск без обновления экрана, блоки будут запускаться без пауз на обновление экрана, что позволит процедуре выполняться гораздо быстрее. Экран обновится после того, как Scratch выполнит весь алгоритм. Это также помогает предотвратить мелькание, которое может возникнуть при повторяющемся перерисовывании.

Scratch - Учись играя!
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website