Scratch это язык программирования или нет

Скретч (язык программирования)

Скретч создан как продолжение идей языка Лого и конструктора Лего. Скретч 1 был написан на языке Squeak, Скретч 2 ориентирован на работу онлайн и переписан на Flash и ActionScript. Скретч разрабатывается небольшой командой программистов для детей [2] в Массачусетском технологическом институте. Текущая версия — 2.0, выпущена 9 мая 2013 года.

Программы на Скретче состоят из графических блоков, подписи к которым зависят от выбранного для интерфейса языка. Может быть выбран один из 50 языков интерфейса, включая русский. Для подключения интерфейса на новом языке используются стандартные gettext-файлы.

Также недавно был создан Scratch 3.0 (А точнее его тест-версия). Попробовать её можно по здесь Команда Скретч заявила, что релизная версия будет доступна пользователям с января 2019 года.

Содержание

Программирование

Для программирования сценариев в Скретче используется drag-and-drop-подход: блоки из палитры блоков перетаскиваются в область скриптов.

По функциональному назначению блоки делятся на 8 групп, принадлежность блока к той или иной группе обозначается его цветом.

Группа английское название Цвет Примечание
Движение motion синий управляют движением спрайта
Внешность looks сиреневый управляют внешностью спрайта
Звук sound розовый управляют звуком спрайта
Перо pen зелёный используется для черепашьей графики
События events жёлто-коричневый проверка наличия событий, отправка сигналов ко всем спрайтам
Контроль control жёлтый управляющие конструкции, заголовки обработчиков событий
Сенсоры sensing голубой опрос устройств ввода
Операции [4] operators салатовый арифметико-логические операции
Переменные variables оранжевый раздел для управления переменными и списками

У многих блоков имеется редактируемое белое поле для вводимых скретч-программистом параметров.

Блоки бывают трёх видов: блоки стека, блоки заголовков и блоки ссылок.

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

Блоки заголовков (их также называют шапками) (англ. Hats ) имеют выпуклый верхний край и выступ для объединения снизу — они образуют заголовки скретч-стеков. К блокам-заголовкам относятся блоки «когда …» (англ. when … ) из группы «Контроль», позволяющие организовать обработчики сообщений: внешних — от клавиатуры и мыши, и внутренних — передаваемых между спрайтами и позволяющих объектно-ориентированное программирование в smalltalk-стиле.

Наконец, блоки ссылок (англ. Reporters ) предназначаются для заполнения внутренних полей других блоков.

Язык Скретч (как и Лого) оперирует числами, текстовыми строками, логическими значениями, а также списками, играющими роль динамических массивов.

Хотя архитектура скретч-программ в виде набора спрайтов Скретча, обменивающиеся друг с другом событиями, напоминает объектно-ориентированную, Скретч не является объектно-ориентированным языком: в нём (ни в каком виде) нет механизмов наследования (в последних версиях расширенного диалекта скретча BYOB введено прототипное наследование).

Исходный код

После выхода версии 1.4 исходный код Скретча был открыт на условиях Scratch Source Code License — представляющей собой простую копилефтную лицензию, с дополнительными ограничениями по неиспользованию оригинальных торговых марок (в более мягкой форме подобные ограничения включены, к примеру, в PHP License).

Распространяемый исходный код уже удовлетворяет данным условиям: в нём заменены логотип и спрайт с котом и удалён код сохранения Скретч-проекта на сайт.

Модификации и дальнейшее развитие

BYOB (Snap!)

Разработан в Университете Беркли. Основным расширением языка, которое было введено в BYOB, стала возможность построения составных пользовательских блоков — аналога процедур обычных языков программирования. Поддерживаются рекурсия, замыкания и лямбда-выражения. Также добавлены отладчик и возможность компиляции в исполняемые файлы, вложенные спрайты, многомерные списки, улучшенная работа со скроллингом и компиляция исполняемых файлов. Начиная с версии 3.1 в BYOB добавлена поддержка ООП — спрайты BYOB теперь позволяют наследование на основе прототипов. Для этого в язык, в частности, введён механизм клонирования спрайтов.

Panther

Panther — расширяет Скретч поддержкой drag-n-drop управления спрайтами, возможностью клонирования спрайтов (объектов), и подсистемой CYOB (которая, как и BYOB, позволяет создавать собственные командные блоки, но требует для этого знания языка Squeak (современный диалект Smalltalk, на котором написан Скретч и его модификации).

Механизм Mesh

Slash

Slash дополняет возможности BYOB 3.0 новыми возможностями Panther: клонированием и перетаскиванием спрайтов (объектов).

StarLogo TNG

Скретч 2.0

App Inventor

Ещё одной средой программирования, использующей стыковку визуальных логических блоков в стиле мозаики стал App Inventor — экспериментальная система визуального программирования для платформы Android.

Источник

Скретч (язык программирования)

Митчелл Резник (Mitchel Resnick)

Лого, Smalltalk, HyperCard, StarLogo, AgentSheets, Etoys, Tweak

Скретч (произносится «скрэтч») — это визуальная объектно-ориентированная среда программирования для обучения школьников младших и средних классов. Название Scratch произошло от слова scratching — техники, используемой хип-хоп диджеями, которые крутят виниловые пластинки взад-вперёд руками для того, чтобы смешать музыкальные темы. [1]

Скретч создан как продолжение идей языка Лого и конструктора Лего. Написан на языке Сквик. Скретч разрабатывается небольшой командой исследователей из «Lifelong Kindergarten Group» [2] в Массачусетском технологическом институте. Текущая версия — 1.4, выпущена 2 июня 2009 года.

Читайте также:  Здоровый образ жизни английский язык лексика

Программы на скретче состоят из графических блоков, подписи к которым зависят от выбранного для интерфейса языка. Может быть выбран один из 50 языков интерфейса, включая русский. Для подключения интерфейса на новом языке используются стандартные gettext файлы.

Содержание

Программирование

Основными компонентами Скретч-программы являются объекты-спрайты. Спрайт состоит из графического представления — набора кадров-костюмов (англ. costume ) и сценария-скрипта. Для редактирования костюмов спрайтов в скретч встроен графический редактор (англ. Paint Editor ). Действие скретч-программы происходит на сцене (англ. stage ) размером 480×360 (условных) пикселей с центром координат в середине сцены.

Для программирования сценариев в скретче используется drag-and-drop-подход: блоки из Окна блоков перетаскиваются в область скриптов.

По функциональному назначению блоки делятся на 8 групп, принадлежность блока к той или иной группе обозначается его цветом.

Группа английское название Цвет Примечание
Движение movement синий
Внешность looks сиреневый
Звук sound розовый
Перо pen зелёный используется для черепашьей графики
Контроль control жёлтый управляющие конструкции,
заголовки обработчиков событий
Сенсоры sensing голубой опрос устройств ввода
Операции [4] operators салатовый арифметико-логические операции
Переменные variables оранжевый

У многих блоков имеется редактируемое белое поле для вводимых скретч-программистом параметров.

Блоки бывают трёх видов: блоки стека, блоки заголовков и блоки ссылок.

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

Блоки заголовков (англ. Hats ) имеют выпуклый верхний край и выступ для объединения снизу — они образуют заголовки скретч-стеков. К блокам-заголовкам относятся блоки «когда …» (англ. when … ) из группы «Контроль», позволяющие организовать обработчики сообщений: внешних — от клавиатуры и мыши, и внутренних — передаваемых между спрайтами и позволяющих объектно-ориентированное программирование в smalltalk-стиле.

Наконец, блоки ссылок (англ. Reporters ) предназначаются для заполнения внутренних полей других блоков.

Язык скретч (как и Лого) оперирует числами, текстовыми строками, логическими значениями, а также списками, играющими роль динамических массивов.

Хотя архитектура скретч-программ, в виде набора спрайтов скретча, обменивающиеся друг с другом событиями, напоминает объектно-ориентированную, скретч не является объектно-ориентированным языком в нём (ни в каком виде) нет механизмов наследования (в последних версиях расширенного диалекта скретча BYOB введено прототипное наследование).

Исходный код

После выхода версии 1.4 исходный код Скретча был открыт на условиях Scratch Source Code License — представляющей собой простую копилефтную лицензию, с дополнительными ограничениями по неиспользованию оригинальных торговых марок (в более мягкой форме подобные ограничения включены, к примеру, в PHP License).

Код может быть загружен с официального сайта. [5] Условия его использования и распространения следующие:

Распространяемый исходный код уже удовлетворяет данным условиям: в нём заменены логотип и спрайт с котом и удалён код сохранения скретч-проекта на scratch.mit.edu.

Впрочем, поскольку Scratch написан на Squeak, доступ к его исходным текстам существует и без предоставления их пользователю в явном виде — они хранятся вместе с результатом их компиляции в файле образа (англ.) смолток-системы. Хотя доступ к инструментам программирования и отладки языка Smalltalk, таким, как, System Browser по умолчанию в Scratch закрыт, разработчики оставили лёгкий способ получения доступа к этим возможностям. Достаточно зажать клавишу ⇧ Shift и кликнуть мышью по букве «R» в логотипе Scratch в левом верхнем углу окна программы, и выбрать в появившемся выпадающем меню пункт «Turn fill screen off». [6] [7]

Модификации и дальнейшее развитие

На основе исходного кода Scratch 1.4 был создан ряд модификаций языка, [8] таких как:

Разработан в Университете Беркли. Основным расширением языка, которое было введено в BYOB стала возможность построения составных пользовательских блоков — аналога процедур обычных языков программирования. Поддерживаются рекурсия, замыкания и лямбда-выражения. Также добавлены отладчик и возможность компиляции в исполняемые файлы, вложенные спрайты, многомерные списки, улучшенная работа со скроллингом и компиляция исполняемых файлов. Начиная с версии 3.1 в BYOB добавлена поддержка ООП — спрайты BYOB теперь позволяют наследование на основе прототипов. Для этого в язык, в частности, введен механизм клонирования спрайтов.

Panther

Panther — расширяет скретч поддержкой drag-n-drop управления спрайтами, возможностью клонирования спрайтов (объектов), и подсистемой CYOB (которая, как и BYOB, позволяет создавать собственные командные блоки, но требует для этого знания языка Squeak (современный диалект Smalltalk, на котором написан Scratch и его модификации).

Механизм Mesh

И BYOB, и Panther включают поддержку механизма mesh, [15] обеспечивающее взаимодействие scratch-программ через сеть посредством разделяемых переменных и посылки широковещательных сообщений.

Slash

Slash дополняет возможности BYOB 3.0 новыми возможностями Panther: клонированием и перетаскиванием спрайтов (объектов).

StarLogo TNG

В 2008 году в Массачусетском технологическом институте также разработан образовательный язык программирования StarLogo TNG, [16] который расширяет возможности системы StarLogo возможностями трёхмерной графики и скретчподобным языком визуального блочного программирования. В отличие от оригинального OpenStarLogo [17] и MIT Scratch — StarLogo TNG в настоящее время не является программным продуктом с открытым исходным кодом.

Scratch 2

В феврале 2011 была выпущена первая онлайновая бета-версия Scratch 2.0, [18] в который планируется включение некоторых из возможностей BYOB (такие, как создание пользовательских процедур), векторной графики, клонирование спрайтов, возможность групповой работы над проектами и т. д.

App Invertor

Ещё одной средой программирования, использующей стыковку визуальных логических блоков в стиле паззла стал App Inventor — экспериментальная система визуального программирования для платформы Android.

Читайте также:  Диалектизмы что это такое в русском языке

Источник

Scratch это язык программирования или нет

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

Готовые работы на аналогичную тему

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

Писать программы на Scratch можно как в браузерной версии (в режиме онлайн), так и в программе-редакторе, которую можно загрузить с сайта. Существует также мобильное приложение ScratchJr, работающее в средах Android и iOS. Оно проще, чем настольный вариант, и подходит для освоения самыми маленькими.

Основные компоненты Scratch

Рисунок 1. Окно редактора Scratch. Автор24 — интернет-биржа студенческих работ

Блоки, из которых строится сценарий, перетаскиваются в тело программы методом drag-and-drop из палитры. Они разбиты на 10 групп, различающихся по цвету:

Внутри блоков могут быть предусмотрены текстовые поля, в которые вводятся необходимые параметры, например, значения переменных или количество шагов и направление движения.

Блоки также делятся на:

Блоки стека соединяются друг с другом в вертикальную последовательность (стек). Для этого они визуально оснащены выступами (снизу) и выемками (сверху), с помощью которых сцепляются при перетаскивании из палитры. Стек определяет алгоритм, т.е. последовательность действий персонажей. Цепочки блоков, входящих в состав стека, можно перемещать, копировать для многократного использования, удалять группой.

Блоки-циклы, которые могут входить в состав стеков, имеют особый вид: они выглядят как скобка, охватывающая несколько других блоков стека, которые затем будут повторяться до наступления некоторого условия.

Блоки-заголовки размещаются над стеком. У них нет выемки для того, чтобы к ним можно было присоединить еще что-то сверху. Заголовочные блоки нужны для обработки событий, поступающих от пользователя (с клавиатуры или при движении мыши), а также сообщений, передаваемых между стеками. Таким образом в Scratch реализовано подобие объектно-ориентированного программирования.

Блоки-ссылки используются как внутренние значения других блоков.

Типы переменных в Scratch:

Программирование для детей на языке Scratch

Рисунок 2. Митчел Резник. Автор24 — интернет-биржа студенческих работ

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

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

Активным корпоративным участником сообщества является производитель конструкторов LEGO. Выпускаемые этой компанией конструкторы для сборки игрушек-роботов можно программировать с помощью Scratch. В версии Scratch 3.0 появилась совместимость с робототехническими наборами WeDo 2.0 и LEGO MINDSTORMS Education EV3.

Рисунок 3. Набор из серии LEGO MINDSTORMS Education. Автор24 — интернет-биржа студенческих работ

Источник

Scratch для «продвинутых»

Клонирование и переменные в Scratch

Моему ученику нравилась игра — «Зомби против растений». И ему было интересно самому запрограммировать её. Давайте вспомним как данная игра работает? С правой стороны у нас есть шеренга растений, которая расстреливает приближающихся зомби.

Есть множество решений данной задачи, но на мой взгляд более элегантное решение — задействовать минимально возможное количество спрайтов, т.е. использовать клонирование.

Как сделать так, чтобы у каждого отдельного клона был собственный уровень жизни? Что выбрать переменные или списки? Сделали попытку использовать списки, но после более детальной проработки поняли, что данная структура данных не помогает решить проблему. У переменных и списков, в Scratch есть 2 типа видимости для каждого типа данных — это «для всех спрайтов» или «только для этого спрайта». Пришлось проверять область видимости. Начали мы с переменных.

Дойдя до рабочего варианта переменной с областью видимостью «только для этого спрайта». В классических языках программирования такой тип видимости называют — локальным или приватным в зависимости от контекста.

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


Переменная с областью видимости «для всех спрайтов» (рисунок слева) — одна на всех. Кстати, здесь вы можете с детьми посмотреть работу с критическими секциями и что такое гонка за ресурс. А если область видимости переменной — «только для этого спрайта», то у спрайта и у его клонов появляется собственная переменная с тем же именем, с которой они работают (рисунок с права). И клоны не имеют доступа к переменной оригинала и переменной другого клона.
Это стало неожиданным и приятным открытием свойств Scratch для создания подобных алгоритмов.

ВАЖНО: Переменная — это очень мощный инструмент настоящего программиста, поэтому я сразу учу детей правильному именованию переменных, так как этот навык поможет им в проектах разной сложности.

Имена объектов как их идентификаторы

ВАЖНО: все переменные с зоной видимостью «только для этого спрайта».

Читайте также:  Как на макбуке переключать клавишами язык

Данный инструмент для меня стал совсем неожиданным. Давайте начнем с истории о том, как мы с учеником наткнулись на данную особенность языка. Мой ученик решил, создать игру с «искусственным интеллектом». Игра представляет звездные войны на космических кораблях и у игрока есть возможность управлять одним кораблем, в то время как противники гоняются за вами и за друг другом. Чтобы они могли преследовать вас или друг друга, им нужно как-то принимать решение о том, кого преследовать. Данную задачу можно решить в лоб и задать очередность преследования кораблей, но игра потеряет свою интеллектуальность и быстро наскучит. Поэтому ученик решил настроить интеллект таким образом, чтобы корабли с интеллектом преследовали ближайшего противника. Давайте посмотрим, как он начал решать данную задачу.

На мой взгляд хорошее решение для создания быстрого прототипа. Но какие ограничения здесь есть? Первое, усложнение кода по мере добавления новых кораблей. Следовательно, сложность кода повышается и не исключены мутации кода из-за усложнения. Время поиска ошибки и отладки алгоритма будет расти. И конечно, никто не отменял такую прикольную метрику, как старение кода (advance level SW Development). Что же делать? А делать необходимо следующее, нужно сделать обобщеный алгоритм, который будет динамично приспосабливаться к увеличению или уменьшению количества кораблей.

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

Заметьте, что я еще не удалил блоки, а оставил их. Зачем? Потому, что если что-то пойдет не так, мы можем вернуть предыдущий вариант, начав все заново. Но как только я проверю правильность выполнения обновленного скрипта, я сразу же их удалю, чтобы не отвлекаться на них в последующем.

Заметили? Сейчас в блоке «повернуться к …» стоит переменная и эта штука работает. Т.е. мы минимальными усилиями проверили, что данный подход работает. Это просто круто. Теперь мы можем начать писать алгоритмы, которые позволят определять объект преследования ближайшего корабля.

Что нам пригодится? Это из структур данных — это переменные и списки. Из алгоритмов — это нахождение минимального числа (расстояния) в списке. Еще нам необходим алгоритм, который определит имя объекта для преследования по минимальному расстоянию.

Сейчас будет написано много кода. Но для того, чтобы потом не захлебнуться и не запутаться в куче скриптов, нам необходимо использовать еще одну классную функцию, а именно создание собственных блоков. Эта функция очень мощная, но ее редко используют школьники, да и некоторые программисты, а ведь она позволяет создать понятный с первого прочтения алгоритм программы. Кстати, можете почитать про приемы создания понятного кода в книге Мартина Фаулера «Рефакторинг. Улучшение существующего кода»

Как и перед любым масштабным строительством нам необходимо все спланировать. Давайте спланируем в каком порядке будем разрабатывать блоки:

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

И теперь мы готовы описать 1 часть программы. Все пишем для 1-ого корабля. Запускаем отдельно данный скрипт и смотрим результат. Поехали!

Если мы добавим новый корабль, нам нужно изменить в данном алгоритме лишь одну циферку. Клево? Клево!

Погнали дальше. А давайте научим его 2 алгоритму. Смотрим, что получилось. Это сразу конечный результат со вспомогательными функциями.

Ура! Работает. Проверить это можно следующим образом, должен быть обязательно 0 одним из значений в списке расстояний. Если у вас это не так, ищите ошибку.

Едем дальше! Поиск минимального расстояния. Заметили, что расстояние всегда положительно. И всегда будет минимальное число — 0. Ай-я-яй! Вывод — искать минимум, но не ноль. Можете попробовать свои силы и оптимизировать код самостоятельно, чтобы не делать расчет расстояния от корабля 1 до корабля 1 (это не опечатка).

Обучаем спрайт новой функции и получаем.

Не забываем проверять! Для этого можно даже остановить игру и запустить отдельный скрипт.

Мы написали все, что необходимо, теперь главное правильно использовать данные функции.

Если у вас все работает правильно, то вы должны увидеть следующее:

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

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

Подводим итоги

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

Это лишь малая часть инструментария программиста, но она являет очень важной. А в Scratch это объяснить становится чуточку легче.

Источник

Мастерица
Adblock
detector