Unit 2:   Unidade 2:   Assinaturas, Strings e Figuras

imageUnit 2Unidade 2: Assinaturas, Strings e Figuras
Unit Overview

Alunos são iniciados no mapeamento e na representações de funções, em como o objeto Função existe como um meio de traduzir pontos de um Domínio para uma Imagem. Em conjunto com sua compreensão de Círculos de Avaliação, os alunos aprimoram seu entendimento das funções para incluir outros tipos de dados, incluindo Strings e Figuras.

Product Outcomes:
  • Students will enter (evaluate) expressions for generating Strings and Images

  • Students will write down Contracts for arithmetic expressions, as well as several image-producing expressions

Standards and Evidence Statements:

Standards with prefix BS are specific to Bootstrap; others are from the Common Core. Mouse over each standard to see its corresponding evidence statements. Our Standards Document shows which units cover each standard.

  • A-SSE.1-2: O aluno interpreta a estrutura de expressões para resolver problemas no contexto

    • interpretation of complicated expressions by viewing one or more of their parts as a single entity

  • F-IF.1-3: The student uses function notation to describe, evaluate, and interpret functions in terms of domain and range

    • description of a function using terms domain and range

  • N-Q: The student reasons quantitatively in using units to solve problems

    • correct interpretation of units consistently in formulas

  • BS-CE: The student translates between structured expressions as arithmetic, code, and Circles of Evaluation

    • translating a nested (multi-operation) equation into a Circle of Evaluation

    • translating a Circle of Evaluation into its equivalent programming syntax

  • BS-IDE: The student is familiar with using a REPL, entering expressions properly, and interpreting error messages

    • look to error messages as a way of diagnosing syntax errors

  • BS-PL.1: The student is familiar with declaring values and applying built-in functions using the programming language

    • representing (numeric, string, boolean, or image) values in the programming language

    • interpreting a function application and identifying its arguments

  • BS-PL.2: The student is comfortable using and writing Contracts for built-in functions

    • representing a function’s input and output using a contract

    • identifying correct and incorrect use of a function, based on its contract

    • using a function by refering to its contract

Length: 90 minutes
Glossary:
  • assinatura: uma declaração com o nome, domínio, e imagem de uma função

  • domínio: o tipo de dado que a função espera receber

  • figura: um tipo de dado para figuras

  • função: um objeto matemático que recebe algo como entrada e produz uma saída

  • imagem: o tipo de dado que a função produz

  • mensagens de erro

  • nome: como nós nos referimos a uma função ou valor definido na linguagem (exemplos: +, *, star, circle)

  • produzem

  • string: qualquer sequência de caracteres entre aspas (exemplos:"olá", "42", "isto é uma string!")

  • tipo: refere-se a um tipo geral de dado, como Número, String, Figura ou Booleano

  • valores

Materials:
  • Editing environment (WeScheme or DrRacket with the bootstrap-teachpack installed)

Preparation:
  • OPTIONAL: Hand out Warmup activity sheet.

  • Student Workbooks, and something to write with.

  • Computer for each student (or pair), running WeScheme or DrRacket

  • Student Workbooks, and something to write with

Types

Functions

Number

+ - * / sq sqrt expt


Revisão de Círculos de Avaliação

Overview

Students practice converting arithmetic expressions into Circles of Evaluation, and then converting those into Code.

Learning Objectives

    Evidence Statements

      Product Outcomes

        Materials

          Preparation

          Revisão de Círculos de Avaliação (Time 30 minutos)

          • Practice the Circles of Evaluation, using the activity sheet on Page 6 in your workbook.

            • In each row, there is a mathematical expression written on the left-hand column.

            • Go through each of these expressions, and draw the Circle of Evaluation for each one in the second column.

            • Once you’ve converted each of them, go to the third column and convert each one into a program that can be entered on the computer. Don’t forget to check your parentheses, and to be careful about leaving a space between each input.

            Make sure students have the opportunity to practice drawing Circles from the outside-in (beginning with a large Circle and filling it in), and from the inside-out (starting with the innermost expression, and building out).

          Strings e Figuras

          Overview

          Students extend the Circle of Evaluation metaphor to include new functions and datatypes.

          Learning Objectives

          • Students will be able to use functions that produce Images

          • Students will understand the concept of datatype

          • Students will understand that each value has a datatype

          • Students will understand that datatypes describe a function’s inputs and outputs

          Evidence Statements

          • When given Circles of Evaluation for novel expression, functions and datatypes, students will be able to apply the rules for converting Circles of Evaluation into code

          • Students will be able to identify what each argument to an image-producing function means

          • Students will be able to write expressions that generate simple images (triangles, circle, stars, etc)

          • Given a value, students will be able to identify its datatype

          • Given an expression, students will be able to identify the datatype it will evaluate to

          • Students will be able to distinguish between types and values

          Product Outcomes

          • Students will enter (evaluate) expressions for generating Strings and Images

          Materials

          • Editing environment (WeScheme or DrRacket with the bootstrap-teachpack installed)

          Preparation

          • Student Workbooks, and something to write with.

          Strings e Figuras (Time 20 minutos)

          • O Círculo de Avaliação é uma poderosa ferramenta, e pode ser usada muito além do que com apenas números. Considere o Círculo de Avaliação mostrado aqui.
            (star 50"solid""red")
            • Qual é o nome da função que está sendo usada?

            • Quantos argumentos foram dados para essa função?

            • O que você acha que essa função irá fazer?

            As mesmas regras usadas para transformar o Círculo de Avaliação em Código ainda se aplicam. Aqui está o código para esse Círculo:
            (star 50"solid""red")

            Os Alunos não precisam saber todas as respostas aqui – o objetivo é fazer com que eles apliquem o que eles já sabem sobre Círculos de Avaliação em uma nova expressão, e discutir com eles o que eles pensam que essa expressão poderia resultar. Peça à eles justificarem suas respostas, e explicarem porque seu pensamento está correto. Relembre os exemplos anteriores dos Círculos de Avaliação, será útil.

          • Digite esse código na janela de Iterações, e pressione “Enter”. O que você recebeu de volta?

            • O que a função star faz?

            • Digite a expressão novamente, mas use um número muito maior que 50. O que o primeiro argumento diz ao computador?

            • Digite a expressão novamente, mas desta vez use "outline" no lugar de "solid", sendo cuidadoso e mantendo as Aspas Duplas! O que o segundo argumento diz ao computador?

            • Agora substitua "red" por alguma outra palavra (mantendo as Aspas Duplas!). O que o terceiro argumento diz ao computador?

            Clique aqui e experimente!

            Essa atividade foi pensada para que os alunos brinquem com os novos termos e conceitos, a partir daí poderão desenvolver seu próprio modelo do que está acontecendo. Neste ponto, NÂO é necessário que o aluno entenda o código detalhadamente. Se você precisar dar a eles muitos trechos de código, não tem problema – apenas deixe eles brincarem!

          • Há um tipo de valor inteiramente novo sendo usado nestas expressões: "solid" e "red" são exemplos de um novo tipo de dados, chamado String. Da primeira vez que você aprendeu sobre valores, você viu que um programa nada mais é do que um valor, como um número. Se você digitar um número na janela de Iterações, por exemplo, retornará ele mesmo. Para lembrá-lo disso, tente calcular 716 na janela de Iterações. O que você espera receber de volta? Já que Strings também são valores , o valor “red” também é um programa Válido. Assim como os valores do tipo Numero, Strings também retornarão elas mesmas na janela de Iterações.

            Tente colocar diferentes Strings na Janela de Iterações. O que acontece se você pôr várias palavras entre Aspas Duplas? E números entre Aspas?

            Alunos devem ver Strings como um tipo semelhante ao tipo Numero: um tipo diferente de valor, mas que ainda o programa pode computá-lo e servir de argumento para uma função. Note que o Numero 42 e a String “42” são valores diferentes! Você pode somar o Número 42 à outro número, porém não pode somar a String “42” á nenhum número.

          • Essa expressão também inclui uma nova função chamada star. Assim como a função + precisa de dois números como entrada, a função star precisa de um Numero e duas Strings, e produz um novo tipo de dado, do tipo Figura.

            Qual é o tipo de dado de cada um dos valores listados abaixo – Numero, String ou Figura?

            • 42

            • "Oi, mãe!"

            • 9273482.42

            • image

            • "84729"

            • "Strings e Números são diferentes tipos de dados!"

            • image

            Os alunos viram até agora Números, Strings e Figura. Você deve certificar-se de que eles conseguem identificar corretamente os exemplos a seguir.

          • Você também viu expressões que produzem valores, como em (* 16 4), que produzirá um Numero, porém outras expressões podem produzir Strings e Imagens.

            Que tipo de dado cada uma das expressões a seguir irão produzir?

            • (/ (+ 7 2) 3)

            • (star 500 "solid" "purple")

            • (star (+ 1 3) "outline" "blue")

            • (- (* 4 2) (+ 1 0))

            Alguns dos itens listados abaixo são tipos, enquanto outros são valores. Você pode diferenciá-los?

            • 792.24

            • String

            • "hi, mom!"

            • "91"

            • Number

            • Image

            • 102

            Para prática adicional, os alunos deve identificar o Tipo de cada argumento dessas expressões. Indo Além - se o tempo permitir, você pode começar a trabalhar Manipulação de Imagens ou Construindo Bandeiras.

          Assinaturas

          Overview

          Students learn to describe functions and their behavior, using formalisms including Contracts (Domain and Range) and Datatypes.

          Learning Objectives

          • Students will start to write and use Contracts, which summarize the name, range, and domain of a function

          • Students will learn how to use a function based on the information in its Contract

          Evidence Statements

          • Given an expression, students will be able to identify the name of the function being used

          • Given an expression, students will be able to identify how many arguments are used

          • Given a value, students will be able to identify its type

          • Students will be able to identify the parts of a contract

          • Students will be able to distinguish between contracts and function calls

          • Given an example of a function being applied, students will be able to write a contract for that function

          Product Outcomes

          • Students will write down Contracts for arithmetic expressions, as well as several image-producing expressions

          Materials

          • Editing environment (WeScheme or DrRacket with the bootstrap-teachpack installed)

          Preparation

          • Computer for each student (or pair), running WeScheme or DrRacket

          • Student Workbooks, and something to write with

          Assinaturas (Time 35 minutos)

          • Você já viu algumas funções que precisam de dois Números como Argumentos, como a função +, e -. Enquanto que, a função star precisa de um Numero e Duas Strings. As funções possuem diferentes argumentos de entrada, e precisamos achar uma maneira de manter o controle dos requisitos de Entrada para cada função.

            Por que é útil conhecer o Domínio de uma função?

            Ao manter uma lista de todas as funções em uma linguagem, e seu Domínio, programadores podem facilmente checar como cada função é usada. Entretanto, é importante também manter controle de que Dado cada função produz! Por exemplo, um programa não usaria a função star se ele está tentando produzir um Numero, porque star produz somente Figura. Domínios e Imagens ajudam programadores a escrever um código melhor, prevenindo erros bobos e dando a eles dicas do que fazer em seguida. O programador que quiser usar star ode checar no Domínio e imediatamente ver que o primeiro Argumento precisa ser do Tipo Numero(como 100), sem ter que lembrar disso toda hora. Ao invés de escrever um simples numero, o programador pode escrever uma expressão matemática, como (* 25 4). Nós sabemos que esse código retornará um valor(Numero) olhando na Imagem de *; portanto, o resultado de * pode ser usado no lugar de qualquer valor Numero.

            Domínio e Imagem são conceitos essenciais, que podem ser reforçados modificando uma simples expressão; ex. (+ 1 2), nós sabemos que a função + recebe dois Números, no caso 1 e 2. Contudo, esses números podem ser substituídos por alguma outra expressão – expressão que produz um Número. Peça aos alunos sistematicamente substituir cada valor, com uma expressão, pedindo-lhes para justificar a sua substituição usando o Domínio e Imagem de cada função.

          • Quando programadores escrevem os Domínios e Imagens de cada função, eles escrevem as chamadas assinaturas, para manter o controle do que cada função precisa.

            A assinatura de star é:   Isto demonstra que o Nome da função é star, seus argumentos de entrada são um Numero e duas Strings que representam o Domínio, e produz uma Figura como Imagem. Escrevemos a Assinatura usando Tipos de Dados ao invés de Valores porque podemos ser mais amplos: a Figura da estrela pode ter qualquer tamanho, então o Domínio de star especifica que poderia ser qualquer número. A Assinatura nos diz como cada função pode ser usada.

          • Assinaturas são tão úteis que devemos manter uma lista delas em algum lugar. Nas últimas páginas do seu livro contém uma folha com o nome “Assinaturas”. Escreva a assinatura da função star na primeira linha da sua tabela.

            São erros comuns dos alunos quando escrevem assinaturas: colocarem valores(exemplo: “red”) ao invés do Tipo de Dado (exemplo:”string”); e também esquecem argumentos. Leia as Assinaturas dos Alunos cuidadosamente, pois isso influenciará muito no decorrer da aprendizagem.

          • Aqui está o contrato de uma nova função:  
            • Qual é o Nome dessa função?

            • Quantos itens o Domínio dessa função possui?

            • Qual o tipo de dado de cada item do Domínio?

            • Qual é a Imagem dessa função?

            A Assinatura diz a você exatamente como usar a função, escrevendo seu nome e, em seguida, usando valores para cada um dos argumentos no Domínio. Aqui está um exemplo de uma expressão usando rectangle:   O que você achar que este código irá produzir?

            Peça aos alunos experimentarem mudar os valores dos argumentos, sempre chamando a atenção ao Domínio da função.

          • Escrevendo a Assinatura para nossas funções, podemos facilmente ver como elas são usadas.

            A Assinatura de + é mostrada a seguir.   Você pode escrever a Assinatura para *, -, / e sqrt?

          • Agora que você sabe como usar uma Assinatura para escrever uma expressão, aqui vai a Assinatura de algumas novas funções que produzem Figuras:  

            Veja se você consegue descobrir como usar essas funções para desenhar novas formas! Aqui está um exemplo para você começar

            Você deve começar a direcionar os alunos a escreverem expressões mais sofisticadas, substituindo valores Numero com expressões inteiras (por exemplo, (star (* 10 5) "solid" "purple"). Alunos devem estar confortáveis olhando a subexpressão como um único argumento para a função circundante. Faça com que os alunos escrevam PRIMEIRO as Assinaturas em seus cadernos antes de deixar eles brincando com as funções.

          • Aqui está uma expressão que usa uma função muito interessante: (bitmap/url "http://bootstrapworld.org/images/icon.gif"). Essa função pega como entrada a URL de qualquer imagem que você pode encontrar online, e irá produzir essa figura que você pode usar em seu programa.
            • Quais são as três partes da Assinatura?

            • Qual o Nome dessa nova função?

            • Quantos itens estão presentes em seu Domínio?

            • Qual o Domínio da função?

            • O que essa expressão irá retornar?

            Se você quer que seus alunos pratiquem usando bitmap/url, é recomendado usar Motores de busca, como o Google Imagens ou Bing Imagens. Tenha certeza de que os alunos peguem a URL da Imagem, e não da página web que a contém.

          • Assinaturas ajudam programadores a escrever código, então é sempre uma boa ideia escrever Assinaturas para cada função que você ver.

            Você pode descobrir a Assinatura de uma função, apenas olhando um exemplo de código? Olhe a função que está sendo usada aqui!, e veja se você pode escrever o Nome, Domínio e Imagem dela.

            Não confunda a Assinatura da função com o Código da função! Alguns dos itens listados abaixo são Assinaturas, mas outros são apenas exemplos dessas funções em uso. Você pode dizer quais são Assinatura e quais são códigos?

            • ; triangle : Number String String -> Image

            • (triangle 100 "outline" "blue")

            • (square (+ 200 5) "solid" "red")

            • ; square : Number String String -> Image

          • Às vezes, cometemos erros enquanto estamos escrevendo código, e usamos um valor que viola a Assinatura. Felizmente, o computador identifica esses casos e fornece Mensagens de Erro para nos ajudar a encontrar e corrigir o problema. Uma mensagem de erro destaca o trecho que contém o erro e mostra onde o computador encontrou o problema.

            Para cada expressão incorreta a seguir, olhe o código e veja se descobre o que está errado. Então, digite o código na janela de Iterações e veja a Mensagem de Erro recebida. A Mensagem de Erro mostrou o mesmo erro que você identificou?

            • (+ 4 "hi")

            • ("hi" + "mom")

            • (* (+ 4 5) "pizza")

            • (star "solid" "red" 40)

            • (star "40" "solid" "red")

            • (star 40 "red" "solid")

            • (star 40 "solid" "yelow")

            • (star (* 4 10) "blue")

            • (cirle 25 "outline" "blue")

            Prática controlada com mensagens de erro ajudam os alunos a ganharem confiança e lidar melhor com erros mais tarde. É bom se os alunos não detectarem o erro no primeiro momento(antes da mensagem de erro), porém ter o aluno explicando o erro com suas próprias palavras deve reforçar o uso correto dessas funções ao longo do curso.

          Enceramento

          Overview

          Learning Objectives

            Evidence Statements

              Product Outcomes

                Materials

                  Preparation

                    Enceramento (Time 5 minutos)

                    • Esse lição aumenta o que você já sabe sobre Círculos de Avaliação, expressões, e código para trabalhar com Strings e Figuras. Você aprendeu que tudo o você já sabia sobre Números também se aplica à Strings e Figuras (fará seus programas mais interessantes). Você também aprendeu como usar funções do tipo Figura e a criar suas próprias figuras, e como usar figuras já existentes em seu programas (através de bitmap/url).

                    • Na próxima unidade , você aprenderá como criar suas próprias funções para salvar seu trabalho escrevendo expressões (isto será uma parte essencial na construção do jogo). Você também vai começar a personalizar seu jogo com figuras para os elementos em seu design do jogo.