Capítulo 18: Transmissão de Mensagens (Comunicação Entre Atores)

🎯 Objetivo da Aula

Em um sistema complexo, os objetos não operam de forma isolada: quando um caminhão se aproxima da guarita, ele precisa avisar a cancela para que ela abra; quando a cancela abre, ela precisa avisar o semáforo para ficar verde; e quando a carreta estaciona na doca, ela precisa avisar os operadores de esteira para iniciar o descarregamento. No Scratch, a comunicação entre diferentes atores é realizada através da Transmissão de Mensagens (Broadcasting).

Ao final desta aula, você será capaz de:

  1. Compreender o padrão de mensageria Publicador/Assinante (Pub/Sub Pattern).
  2. Utilizar o bloco transmissor 🟡 transmita [mensagem].
  3. Compreender a diferença para o bloco síncrono 🟡 transmita [mensagem] e espere.
  4. Utilizar os blocos receptores de escuta 🟡 quando eu receber [mensagem].
  5. Construir a Rede Integrada de Portaria, Semáforo e Cancela Automatizada da FastLog.

📥 Material de Apoio e Roteiro de Blocos:


🏢 O Cenário Prático (Seu Desafio)

Situação: O pátio da FastLog possui três atores interdependentes:

  1. O Caminhão: Avança até a cancela e solicita abertura.
  2. A Cancela: Recebe a ordem, ergue a barra de segurança e avisa que o caminho está livre.
  3. O Semáforo: Ao ouvir que a cancela abriu, troca a luz para verde.
  4. O Caminhão: Ao ver a luz verde, cruza a portaria e, ao terminar de passar, avisa a cancela para fechar novamente.

Missão: Programar essa coreografia perfeita de atores utilizando exclusivamente troca de mensagens no Scratch.


🧠 Fundamentos: O Mecanismo de Mensageria no Scratch

1. O Conceito do “Rádio Walkie-Talkie”

Transmitir uma mensagem no Scratch é como dar uma ordem no rádio da empresa:

  • O transmissor grita no rádio: "LIBERAR_ENTRADA".
  • Todos os outros atores do projeto escutam a transmissão.
  • Apenas os atores que possuem o bloco quando eu receber [LIBERAR_ENTRADA] tomarão uma atitude!
graph TD
    A["Ator: Caminhão"] -- "transmita [ABRIR_PORTAO]" --> B((Barramento de Mensagens do Scratch))
    B --> C["Ator: Cancela<br/>(quando eu receber ABRIR_PORTAO)"]
    B --> D["Ator: Semáforo<br/>(quando eu receber ABRIR_PORTAO)"]
    C --> E["Gira barra 90 graus para cima"]
    D --> F["Muda fantasia para Verde"]
    
    style A fill:#2980b9,stroke:#fff,color:#fff
    style B fill:#f1c40f,stroke:#fff,color:#000
    style C fill:#27ae60,stroke:#fff,color:#fff
    style D fill:#8e44ad,stroke:#fff,color:#fff

2. transmita vs transmita e espere

BlocoComportamentoQuando Usar?
[transmita (msg)]Dispara a mensagem e continua seu próprio código imediatamente (Assíncrono).Quando a ação seguinte não depende do término da animação do outro ator.
[transmita (msg) e espere]Dispara a mensagem e pausa sua execução até que todos os receptores terminem suas ações (Síncrono).Quando o caminhão só pode andar depois que a cancela tiver concluído 100% da abertura física!

📖 Exemplo Guiado: O Sistema Integrado de Portaria

Passo a Passo no Scratch 3.0:

  1. Crie 3 atores: Caminhao, Cancela e Semaforo.
  2. Programe os scripts de cada um:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// ==========================================
// 1. CÓDIGO DO CAMINHÃO (O Iniciador do Fluxo)
// ==========================================
quando clicar em 🏁
vá para x: (-200) y: (-80)
diga [Aproximando-se da guarita...] por (1.5) segundos
deslize por (2) segs até x: (-60) y: (-80)

// Pede abertura e ESPERA a cancela subir
transmita [SOLICITAR_ENTRADA v] e espere

// Cruza a portaria com segurança
deslize por (2) segs até x: (180) y: (-80)

// Avisa para fechar o portão atrás dele
transmita [VEICULO_PASSOU v]


// ==========================================
// 2. CÓDIGO DA CANCELA (O Atuador Mecânico)
// ==========================================
quando clicar em 🏁
mude para a fantasia [Fechada v]

quando eu receber [SOLICITAR_ENTRADA v]
toque o som [Door Creak v]
mude para a fantasia [Aberta v]
espere (1) segundos // Garante que a barra subiu totalmente

quando eu receber [VEICULO_PASSOU v]
espere (0.5) segundos
mude para a fantasia [Fechada v]
toque o som [Door Slam v]


// ==========================================
// 3. CÓDIGO DO SEMÁFORO (A Sinalização Visual)
// ==========================================
quando clicar em 🏁
mude para a fantasia [Vermelho v]

quando eu receber [SOLICITAR_ENTRADA v]
espere (0.5) segundos
mude para a fantasia [Verde v]

quando eu receber [VEICULO_PASSOU v]
mude para a fantasia [Vermelho v]

🛠️ Prática Obrigatória 1: Alerta Geral de Evacuação

O Desafio:

Crie um botão vermelho no palco chamado Botao_Panico:

  1. Quando este ator for clicado:
    • Transmita a mensagem "ALARME_GERAL".
  2. No ator Caminhao:
    • quando eu receber [ALARME_GERAL]: Pare imediatamente de andar e diga [PARADA DE EMERGÊNCIA ATIVADA!].
  3. No ator Sirene:
    • quando eu receber [ALARME_GERAL]: Toque o som [Alert] e pisque a luz em vermelho.

🛠️ Prática Obrigatória 2: Notificação de Doca Pronta para Descarregamento

Crie a comunicação entre o caminhão e a doca de descarga:

  1. Quando o caminhão terminar de estacionar, faça-o transmitir "CHEGUEI_NA_DOCA".
  2. No ator Operador_Doca:
    • quando eu receber [CHEGUEI_NA_DOCA]:
      • Diga [Iniciando conferência de romaneio e despaletização...] por 3 segundos.
      • Toque o som de abertura de baú.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo do projeto com o nome: Atividade_18_SeuNome_SeuSobrenome.sb3.
  2. Execute e observe a coordenação milimétrica entre o caminhão, a cancela e o semáforo.
  3. No Microsoft Teams, envie na tarefa “Scratch Cap 18 - Transmissão de Mensagens”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de aplicar o conceito de Arquitetura Orientada a Mensagens (Message-Oriented Middleware - MOM) e Barramento de Eventos (Event Bus). É exatamente assim que microsserviços em nuvem (AWS SNS/SQS, Google Cloud Pub/Sub e Apache Kafka) comunicam sistemas de pagamento com sistemas de separação em centros de distribuição da Amazon.


🔥 Desafio de Fixação: Troca de Telas (Menu Principal ➔ Pátio)

Crie um ator de tela inicial com o botão "INICIAR SIMULAÇÃO". Ao ser clicado, ele transmite "COMEÇAR_TURNO". O cenário troca de tela, o botão se esconde com 🟣 esconda e todos os caminhões e cancelas só aparecem com 🟣 mostre quando receberem essa mensagem!


🔑 Gabarito de Código (Blocos do Scratch)

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[Ator: Botao_Panico]
quando este ator for clicado
transmita [ALARME_GERAL v]
diga [ALERTA DISPARADO!] por (1) segundos

[Ator: Caminhao]
quando eu receber [ALARME_GERAL v]
pare [outros scripts do ator v]
toque o som [Car Brake v]
diga [PARADA DE EMERGÊNCIA ATIVADA!] por (3) segundos

[Ator: Sirene]
quando eu receber [ALARME_GERAL v]
repita (5) vezes
    mude o efeito [cor v] para (0)
    toque o som [Alert v] até o fim
    mude o efeito [cor v] para (50)
fim

Prática 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Ator: Caminhao]
quando clicar em 🏁
vá para x: (-180) y: (0)
deslize por (3) segs até x: (120) y: (0)
transmita [CHEGUEI_NA_DOCA v]

[Ator: Operador_Doca]
quando eu receber [CHEGUEI_NA_DOCA v]
toque o som [Door Creak v]
diga [Iniciando conferência de romaneio e despaletização...] por (3) segundos

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[Ator: Botao_Iniciar]
quando clicar em 🏁
mostre
vá para x: (0) y: (0)

quando este ator for clicado
esconda
mude para o cenário [Patio_Cargas v]
transmita [COMEÇAR_TURNO v]

[Ator: Caminhao]
quando clicar em 🏁
esconda

quando eu receber [COMEÇAR_TURNO v]
mostre
diga [Simulação de pátio iniciada!] por (2) segundos

📥 Download do Roteiro Completo desta Aula:
Baixe o arquivo consolidado Capitulo_18.txt ou o pacote compactado (.zip) com os scripts e desafios da aula.


📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.

  1. Qual é a diferença de comportamento entre os blocos transmita [mensagem] e transmita [mensagem] e espere, segundo os Fundamentos?
  2. Qual bloco é usado por um ator para “escutar” e reagir a uma mensagem transmitida por outro ator?
  3. No Exemplo Guiado, quais são as duas mensagens transmitidas ao longo do fluxo entre o Caminhão, a Cancela e o Semáforo?
  4. No Exemplo Guiado, qual variante do bloco de transmissão o Caminhão usa para solicitar a abertura da cancela, e por que essa variante é necessária nesse ponto do script?
  5. Na Prática Obrigatória 1, qual é o nome do ator que, ao ser clicado, transmite a mensagem "ALARME_GERAL"?
  6. Na Prática Obrigatória 1, o que o ator Caminhao deve fazer ao receber a mensagem "ALARME_GERAL"?
  7. Na Prática Obrigatória 2, qual mensagem o caminhão transmite ao terminar de estacionar, e qual ator é responsável por recebê-la?
  8. Segundo o Checkpoint de Lógica & Engenharia de Software, a que padrão de arquitetura de mensageria o mecanismo de transmissão do Scratch é comparado, e quais exemplos de serviços de nuvem são citados?
  9. Segundo os Fundamentos (a analogia do “Rádio Walkie-Talkie”), quem escuta a transmissão de uma mensagem, e quem de fato toma uma atitude?
  10. No Exemplo Guiado, quais são as duas fantasias entre as quais o ator Cancela alterna, e em qual mensagem recebida cada uma delas é ativada?