Overview
Os alunos são formalmente apresentados aos passos da Design Recipe.
Learning Objectives
Os alunos praticam usando Assinaturas para criar exemplos de funções
Students learn to abstract over examples to create functions
Evidence Statements
Given a definition, students will be able to identify the Name, Type and Value that is defined.
Given a contract and purpose statement for a simple, one-variable function, students will be able to write two Examples
Given two examples for a simple function, students will be able to identify the variable
Given two examples for a simple function, students will be able to write the definition
Product Outcomes
Estudantes usarão a Receita de Projeto para definir uma função, que será usada para fazer o foguete voar.
Materials
Caneta/lápis para os alunos, giz fresquinho para professores
***Class poster (List of rules, language table, course calendar)
***Language Table (see below)
Apostila com nome na capa, e algo para escrever
Preparation
Escreva o plano da aula no quadro
Mostre Cartazes da Classe, Language Table, Receita de Projeto
"Rocket" [Rocket.rkt from source-files.zip | WeScheme] précarregado na máquina dos alunos
Arranjos de assento: idealmente formando grupos
OPCIONAL: Entregue atividade de Aquecimento.
Funções são um ponto chave na animação de programas de computador. Uma função que desenha uma figura estática de um gato, por exemplo, pode colocá-lo em diferentes localizações com base na entrada. Quando a entrada muda ligeiramente com base no tempo ou de uma interação do usuário, o gato parecerá se mover. Isto é similar a maneira como animações flip-book funcionam (animações feitas em caderno), onde cada página desenhada é uma figura estática, que mudou um pouquinho da anterior. Quando as páginas são passadas rapidamente, as figuras parecem mudar sem problemas.
Colocando essas imagens juntas, temos uma animação de foguete subindo na tela. Vamos ver um exemplo deste tipo de animação, usando uma função para fazer o foguete decolar! Vá para Page 11 em sua Apostila, e leia a "Word Problem" atentamente.
O que a fução altura-foguete recebe como entrada? Esssa entrada é de qual tipo de dado?
O que a função produz como saída? De que tipo de dado ela é?
Quais são as três partes da Assinatura?
Qual o Nome da função que você está sendo convidado a definir?
Qual o Domínio da função?
Qual a Imagem da função?
Verifique a compreensão do aluno com cuidado, para garantir que os alunos leiam cuidadosamente o problema. Pode ser útil desenhar um diagrama ou tablea para mostrar a mudança de posição do foguete na placa, e que os alunos andem verbalmente através de alguns exemplos.
- A Assinatura é uma forma de pensar sobre a função de um modo geral, sem ter que se preocupar como exatamente ela vai funcionar ou como ela será usada. Começando com uma simples questão como essa, os próximos passos ficam mais fáceis de se pensar. Contudo, a Assinatura nem sempre tem informção suficiente! O Domínio de star, por exemplo, especifica que a função recebe como entrada um Número e duas Strings, mas não menciona que a primeira String deve ser "solid" ou "outline". Para adicionar essa informação, programadores escrevem Declarações de Propósito, que são frases simples que explicam o que a função faz.
Abaixo da Assinatura, copie a seguinte Declaração de Propósito para foguete-altura.
Essa é uma oportunidade de falar da importância da escrita, clareza e concisão. Wual informação é essencial para a declaração de propósito? Qual informação não é tão importante? Uma boa declaração de propósito nos diz o que é computado e como a entrada é usada; ela deve ir além da informação dada na assinatura e implícita no nome da função.
- Em posse da Assinatura e da Declaração de Propósito, torna-se fácil escrever um EXEMPLO. Todo exemplo começa com o nome da função e uma entrada de exemplo, ambos escritos na Assinatura. Neste caso, você sabe que a função é chamada de foguete-altura e ela espera receber apenas um número como entrada. A Declaração de Propósito vai além, dizendo a você que a entrada é multiplicada por 7. Podemos usar isso para escrever exemplos, com diferentes números de segundos como Entrada. Nota: O exemplo mostrado acima foi quebrado em duas linhas! Como as funções e exemplos ficaram mais complexos, torna-se difícil apertá-los em uma única linha. Em seus cadernos, todo exemplo e definição de agora em diante usará o formato duas linhas.
Em seu caderno, escreva dois novos exemplos de foguete-altura usando diferentes valores para os números de segundos. Ambos os exemplos terão muito em comum (eles usam foguete-altura como nome da função, multiplicam sua entrada por 7, etc). Assim que terminar de escrevê-las, circule apenas as partes dos exemplos que são *** mutáveis, ou seja, que mudam comparando os dois exemplos.
A ideia principal para alunos nessa atividade é perceber que Assinaturas e Declarações de Propósito podem ser invocadas para escrever exemplos. Peça aos alunos para justificar cada parte do exemplo, usando apenas a Assinatura e a Declaração de Propósito. Eles muitas vezes tropeçam em mudar de uma-linha para exemplos em duas-linhas. Tenha muito cuidado ao apontar isso para os alunos, e verifique suas apostilas para ver onde estão escrevendo seus exemplos. No fim da atividade, tenha certeza de que eles circularam APENAS o que mudou.
- Comparando os dois exemplos diferentes, é fácil dizer o que muda. De acordo com a Declaração de Propósitos, é o número de segundos que o foguete esteve voando.
No seu caderno, ***rotule os item que você circulou como "segundos".
Converse com os alunos do porque "segundos" é um melhor nome que "tempo". Fale sobre especificidade, relevância e legibilidade de código.
- Rotulando o que é mutável dá aos programadores um sentido para os nomes das variáveis de uma função. Variáveis são espaços reservados para valores que podem ser diferentes em diferentes momentos. Uma função que calcula o quanto você paga ao mês para mandar mensagens de texto, por exemplo, pode ter uma variável para o número de mensagens que você enviou.(EXEMPLO ULTRAPASSADO? PODERIA SER COM O NUMERO DE MINUTOS FALADOS EM LIGAÇÕES AO MÊS? MAIS ATUAL?). O número de mensagens que você enviou pode variar de um mês para outro, mas o preço por cada mensagem ainda custa 20 centavos.
Quantas variáveis a função foguete-altura tem? Qual o nome de cada variável? Defina a função, usando todas as informações dos seus Exemplos, Assinaturas e Declaração de Propósitos.
Como nos Exemplos, peça que os alunos justifiquem cada parte da difinição. Neste caso, o nome da função pode ser conseguido na Assinatura, e nome da variável e corpo da função podem vir dos Exemplos.
- A Receita de Projeto permite que programadores se concentrem em um passo do problema de cada vez, e usar as estapas anteriores para ajudar a completar o próximo passo.
O que a Assinatura diz ao programador sobre a função?
O que a Declaração de Propósito diz ao programador sobre a função?
Como a Assinatura e a Declaração de Propósito ajudam um programador a escrever Exemplos?
Por que é útil circular e rotular partes dos Exemplos que mudam?
Como fazer todos esses passos ajudam o programador a definir uma função?
- Você pode ter notado que os Exemplos de foguete-altura escreveu a multiplicação como (* 11 7), ao invés da resposta real (77). Por que se preocupar em mostrar como o cálculo é realizado? Ao fazer isso, Exemplos podem fornecer dicas sobre o processo que está ocorrendo. No código de Foguete fornecida(Rocket.rkt de source-files.zip | ou em arquivo online), você verá porque é tão importante mostrar seu trabalho ao escrever exemplos.
Clique em "Run", e espere até uma janela com um foguete aparecer na tela e número para "time" e "height" no topo. Esta anumação está definida para atualizar o foguete toda vez que a Barra de Espaço é pressionada, para simular o tempo passando. Aperte a Barra de Espaço algumas vezes, e perceba que o tempo no topo da janela aumenta. O foguete se move? O tempo está passando, mas a altura do nosso foguete não mudou! Feche a janela do foguete, e veja o código.
A Assinatura para esta função está correta: o Nome da função, Domínio e Imagem estão todos escritos aqui. Entretanto, o próximo passo definitivamente apresenta alguns problemas:
Há apenas um exemplo. Isso torna dificil perceber o que está mudando na função, o que poderia levar a erros na identificação de variáveis
O exemplo não mostra como a altura é calculada - em vez disso, o programador escreveu apenas o "resultado", ***sem mostrar como calculou a resposta.
- Ao pular esses passos nos Exemplos, pode ser fácil cometer erros ao definir a função.
Você pode ver o erro que o programador cometeu?
Sem ver vários Exemplos, o programador não conseguiu perceber que a altura do foguete tem que ser calculada a cada entrada. Em vez disso, o programa produz o mesmo número(neste caso, zero). Como resultado, o foguete está sempre em zero, não importa quantos segundos se passaram.Conserte o Exemplo do programador para mostrar o cálculo realizado.
Escreva um segundo Exemplo, abaixo do primeiro.
Corrija a definição da função, de modo que multiplica o número de segundos por 7.
Clique em "Run", e use a barra de espaço para fazer o foguete voar!