La capacidad de abstracción y descomposición de problemas te ayuda a dividir un problema en partes más pequeñas que serán más fáciles de comprender, programar y depurar.
Cuando se comienza a programar con Scratch, en ocasiones puede parecer que la solución más sencilla es programar todo el comportamiento de un personaje en un único programa. Sin embargo,lo ideal es que el comportamiento del personaje sea controlado por diferentes programas y que cada uno de estos programas se ocupe de una cuestión concreta. Veamos un ejemplo:
al presionar
borrar
ir a x: -100 y: 30
bajar lápiz
mover 10 pasos
subir lápiz
esperar 1 segundos
ir a x: -44 y: -24
fijar color de lápiz a
mover 100 pasos
subir lápiz
Este proyecto, que pinta un dibujo en la pantalla, ha sido programado en un único programa que dibuja las dos líneas que componen el dibujo. Aunque es una opción válida, una opción más sencilla de programar y de mantener es dividir el programa en dos partes, de forma que tengamos dos programas diferentes, uno para pintar la primera línea y otro para pintar la segunda:
al presionar
borrar
ir a x: -100 y: 30
bajar lápiz
mover 10 pasos
subir lápiz
al presionar
esperar 1 segundos
ir a x: -44 y: -24
fijar color de lápiz a
mover 100 pasos
subir lápiz
De este modo, si queremos por ejemplo realizar alguna modificación en una de las líneas dibujadas, es mucho más sencillo saber a qué parte del programa tenemos que dirigirnos para llevar a cabo los cambios.
Scratch permite crear nuevos bloques definidos por los usuarios que se componen de una secuencia de instrucciones. Estas abstracciones permiten crear programas más sencillos de leer, de programar y de mantener. Veamos un ejemplo:
al presionar
borrar
ir a x: -200 y: 40
fijar color de lápiz a
bajar lápiz
mover 100 pasos
subir lápiz
esperar 1 segundos
ir a x: -200 y: 0
fijar color de lápiz a
bajar lápiz
mover 10 pasos
subir lápiz
Este proyecto Scratch dibuja dos líneas naranjas de diferente longitud en la pantalla. En lugar de repetir el código 2 veces, tal como vemos en el ejemplo, es posible definir un bloque“PintaNaranja” que se compone de los bloques que pintan una línea naranja en la pantalla y al que se le puede indicar cuál es la longitud de la línea. Para ello hay que irse a la categoría “Más Bloques” y pulsar en el botón Crear un bloque:
definirPintaNaranjalongitud
fijar color de lápiz a
bajar lápiz
mover longitud pasos
subir lápiz
Una vez definido el bloque “PintaNaranja” es posible utilizarlo en cualquier programa del proyecto, tal como vemos a continuación:
al presionar
borrar
ir a x: -200 y: 40
PintaNaranja 100
esperar 1 segundos
ir a x: -200 y: 0
PintaNaranja 200
De este modo, evitamos la repetición de código, lo que hace que nuestros proyectos sean más fáciles de programar y mantener. Tal como se puede observar, la primera vez que se usa el bloque PintaNaranja se le indica una longitud de 100 pasos, mientras que la segunda vez la longitud es de 200 pasos.
En algunos proyectos Scratch queremos tener muchos personajes iguales que realizan exacatamente las mismas acciones. La primera idea que se nos ocurre para conseguirlo es crear un personaje, programar todo su comportamiento y, una vez que está listo, crear tantas copias como necesitemos. Por tanto, si queremos 20 marcianitos, hay que crear 20 objetos iguales. Sin embargo, ¿qué ocurriría si quiero realizar un cambio en un programa? Tendría que ir objeto por objeto realizando esa modificación.
Para este tipo de situaciones es preferible utilizar clones, un tipo de abstracción que nos ayuda a poder programar un solo objeto, y crear de forma dinámica copias exactas con el mismo comportamiento.
Veamos cómo funcionan con un ejemplo. Imagina que queremos simular que está nevando en un proyecto. Podemos dibujar un objeto que sea un copo de nive, y una vez que comience la ejecución del proyecto, ir creando clones constantemente que aparezcan en la parte superior de la pantalla y vayan cayendo hasta la parte inferior:
al presionar
por siempre
crear clon de yo
esperar 0.2 segundos
ir a x: número al azar entre -200 y 200 y: 200
deslizar en 3 segs a x: posicion en x y: -180
borrar este clon
De este modo, tan solo programando un personaje podemos tener infinitos clones, que se crean en un momento determinado de la ejecución del proyecto y se borran cuando ya no son necesarios.