Baixe o app para aproveitar ainda mais
Prévia do material em texto
Modularização 27. Modularização 1 20141106 Modularização 20141106 1 / 25 Outline 1 Módulo 2 Módulos Portugol: funções e procedimentos 3 Exercícios Modularização 20141106 2 / 25 1 Módulo 2 Módulos Portugol: funções e procedimentos 3 Exercícios Modularização 20141106 3 / 25 Definição Um módulo é uma unidade do software. É um grupo de comandos com uma funcionalidade ou um objetivo bem definida. Esse componente deve ser o mais independente possível das outras partes do algoritmo. Ele realiza uma tarefa específica dentro duma solução do problema Modularização 20141106 4 / 25 Por que modularizar? Decompor um problema para: facilitar a implementação, isolando as funcionalidades, e especificando o foco delas. facilitar os testes das partes (cada módulo independentemente) facilitar a manutenção : releituras podem ser separadas aumentar o nível de abstração parar de copiar/colar funcionalidades já presentes estender a linguagem com novas funções Estrutura de um programa Geralmente, um algoritmo vai ter um módulo principal e ele vai chamar outros módulos para compor uma solução algorítmica. Modularização 20141106 5 / 25 Componentes Módulo Um módulo tem: uma interface: declaração das funcionalidades ofertas, descrição dos dados de entradas e de saída. É tudo que vocês precisam para utilizar o módulo. um corpo: implementação das funcionalidades, comandos que compões o trecho de algoritmo do módulo Parâmetros duma interface Um parâmetro é um tipo de variável utilizado pelo módulo para receber/comunicar valores de dados das outras partes do algoritmo. Ele pode ser: I de entrada, para passar valores para um módulo; I de saída, para receber valores do módulo; I de entrada e saída, para permitir a passagem de valores tanto para o módulo quanto dele. As categorias dos parâmetros serão especificados na criação da interface. Modularização 20141106 6 / 25 Hierarquia de módulos Módulo principal Procedimento 1 Função 1 Procedimento 2 Procedimento 3 Procedimento 4 Função 2 Função 3 Procedimento 5 Função 4 Modularização 20141106 7 / 25 Módulos e acessos Cada módulo pode: utilizar os objetos (constantes e variáveis) do módulo principal definir os seus próprios utilizar os dois tipos Escopo de variáveis Global: variável que só pode ser utilizada em um módulo interno ao módulo onde foi declarada Local : variável que só pode ser utilizada no módulo interno onde foi declarada, e que não possui qualquer significado fora desse módulo Modularização 20141106 8 / 25 1 Módulo 2 Módulos Portugol: funções e procedimentos 3 Exercícios Modularização 20141106 9 / 25 Descrição Procedimento Módulo que não produz um valor de saída. Exemplos I imprimir o maior elemento de três elementos I ler um elemento Função Módulo que produz um (único valor de saída), pode ser visto como uma função matemática que vai produzir um valor a partir dos argumentos. Exemplos: I dar o valor do maior elemento de três elementos I determinar se um elemento e dentro duma faixa de valores aceitáveis Tipos de parâmetros Os parâmetros declarados são chamados de parâmetros formais. Modularização 20141106 10 / 25 Procedimento Interface 1 procedimento <nome> (<parametros>) <nome> : identificador único da função <parametros> : lista dos parâmetros (<nome> : <tipo>) I separados por ponto-vírgula I pode ser vazia. Não tem tipo de retorno porque não retorna um valor. 1 procedimento imprimir_maior (n1 : inteiro; n2: inteiro ; n3 : inteiro) Corpo 1 Declaração de variáveis, começada por var 2 Sequência de comandos, começada por inicio, terminado por fimprocedimento Modularização 20141106 11 / 25 Exemplo de procedimento 1 procedimento imprimir_maior (n1 : inteiro; n2: inteiro ; n3 : inteiro) 2 var max : inteiro 3 inicio 4 se n1 > n2 entao 5 max <- n1 6 senao 7 max <- n2 8 fimse 9 se n3 > max entao 10 max <- n3 11 fimse 12 escreva(max) 13 fimprocedimento Modularização 20141106 12 / 25 Funções Interface 1 funcao <nome> (<parametros>): <tipo> <nome> : identificador único da função <parametros> : lista dos parâmetros (<nome> : <tipo>) I separados por ponto-vírgula I pode ser vazia. <tipo>: tipo do valor de retorno da função Exemplo: 1 funcao maior (n1 : inteiro; n2: inteiro ; n3 : inteiro) : inteiro Corpo 1 Declaração de variáveis, começada por var 2 Sequência de comandos, começada por inicio, terminado por fimprocedimento I A sequência de comandos tem ≥ 1 comando especial de retorno 1 retorne <valor> Modularização 20141106 13 / 25 Exemplo de função 1 funcao maior (n1 : inteiro; n2: inteiro; n3 : inteiro) : inteiro 2 var max : inteiro 3 inicio 4 se n1 > n2 entao 5 max <- n1 6 senao 7 max <- n2 8 fimse 9 se n3 > max entao 10 max <- n3 11 fimse 12 retorne max 13 fimfuncao Modularização 20141106 14 / 25 Múltiplos pontos de retorno Uma função pode ter vários pontos de retorno Mas um único valor é retornado (de acordo com os parâmetros reais) 1 funcao maior (n1 : inteiro; n2: inteiro; n3 : inteiro) : inteiro 2 inicio 3 se n1 > n2 entao 4 se n2 > n3 entao 5 retorne n1 6 senao 7 se n3 > n1 entao 8 retorne n3 9 senao 10 retorne n1 11 fimse 12 fimse 13 senao 14 se n2 > n3 entao 15 retorne n2 16 senao 17 retorne n3 18 fimse 19 fimse 20 fimfuncao Modularização 20141106 15 / 25 Exemplo completo A seção de declaração do módulo principal (algoritmo) precede a lista das declarações/implementações dos funções/procedimentos. 1 algoritmo "Maior de 3" 2 var ln1, ln2, ln3: inteiro 3 maior_n: inteiro 4 5 funcao maior (n1: inteiro; n2:inteiro; n3: inteiro) : inteiro 6 var max : inteiro 7 inicio 8 se n1 > n2 entao 9 max <- n1 10 senao 11 max <- n2 12 fimse 13 se n3 > max entao 14 max <- n3 15 fimse 16 retorne max 17 fimfuncao 18 19 inicio 20 escreva("Entre com 3 números inteiros: ") 21 leia(ln1, ln2, ln3) 22 maior_n <- maior(ln1, ln2, ln3) 23 escreval("O maior deles é: ", maior_n ) 24 fimalgoritmo Modularização 20141106 16 / 25 Parâmetros Modificação Parâmetros de entrada em Portugol não pode ser modificados/reatribuidos dentro da rotina (salvo casos especiais). Formais Os parâmetros na declaração da rotina são chamado de formais Na função abaixo 1 funcao maior (n1 : inteiro; n2: inteiro; n3 : inteiro) : inteiro n1, n2, n3 são os parâmetros formais. Reais Os parâmetros nos lugares de chamada são chamado de reais Se chamar 1 maior(1, x, 42) 1, x, 42 são os parâmetros reais Modularização 20141106 17 / 25 Agrupamento de parâmetros Parâmetros formais do mesmo tipo podem ser agrupados a fim de I não repetir declarações de tipos I facilitar a leitura Exemplo 1 funcao maior (n1, n2, n3 : inteiro) : inteiro 2 var max : inteiro 3 inicio 4 se n1 > n2 entao 5 max <- n1 6 senao 7 max <- n2 8 fimse 9 se n3 > max entao 10 max <- n3 11 fimse 12 retorne max 13 fimfuncao Modularização 20141106 18 / 25 Parâmetros de sáida Sintaxe Um parâmetro formal pode ser marcado como parâmetro de saída através da palavra-chave var. O valor dele pode ser modificado pela rotina Exemplo 1 procedimento imprimir_maior (inteiro n1, inteiro n2, inteiro n3, 2 var inteiro max) 3 inicio 4 se n1 > n2 entao 5 max <- n1 6 senao 7 max <- n2 8 fimse 9 se n3 > max entao 10 max <- n3 11 fimse 12 fimprocedimento Modularização 20141106 19 / 25 Passagem de parâmetros Categorias de parâmetros Parâmetros de entrada são passados por valor Parâmetros de saída são passados por referência Por valor O valor do parâmetro real é atribuído ao parâmetro formal no lugar da chamada. Esse valor e copiado. Uma alteração do parâmetro formal não impactará o parâmetro real. Por referência O parâmetro formal torna-se igual ao parâmetro real. Eles compartilhama mesma zona de armazenamento. Todas as alterações de valor do formal no procedimento serão refletidas no parâmetro real. Modularização 20141106 20 / 25 Exercício (escopo) Pergunta O que é escrito na tela do computador pelo algoritmo abaixo ? 1 algoritmo "passagem" 2 var m, n, r : inteiro 3 4 funcao p4 (n: inteiro, var m : inteiro): inteiro 5 inicio 6 n <- n * n 7 m <- m * m 8 retorne m * n 9 fimfuncao 10 11 12 inicio 13 m <- 2 14 n <- 3 15 r <- p4 (n, m) 16 escreva (r, n, m) 17 fimalgoritmo Modularização 20141106 21 / 25 Saber identificar os elementos duma rotina 1 funcao verif_int_intervalo (var n: inteiro; limit_inf, limit_sup: inteiro): logico 2 var res: logico 3 inicio 4 se (n < limit_inf) ou (n > limit_sup) entao 5 res <- verdadeiro 6 senao 7 res <- falso 8 fimse 9 retorne res 10 fimfuncao Nome de função ? Tipo de retorno ? Quantos parâmetros formais ela tem ? Quais são os nomes e tipos deles ? Quais são os parâmetros passados por valor ? Por referência ? Quantos variáveis locais ela tem ? (nomes/tipos?) O que será o valor de retorno de: 1 verif_int_intervalo(5, 0, 10) 2 verif_int_intervalo(6, 8, 11) 3 verif_int_intervalo(6, 6, 11) Modularização 20141106 22 / 25 1 Módulo 2 Módulos Portugol: funções e procedimentos 3 Exercícios Modularização 20141106 23 / 25 Permutação Um número a é dito ser uma permutação de um número b se os dígitos e a formam uma permutação dos dígitos de b. Exemplo: 5412434 é uma permutação de 4321445, mas não é uma permutação de 4312455. Observação: considere que o dígito 0 (zero) não aparece nos números. Escreva uma função contadígitos que, dados um inteiro n e um inteiro d , 0 < d ≤ 9, devolve quantas vezes o dígito d aparece em n; Utilizando a função do item anterior, faça um algoritmo que leia dois números a e b e responda se a é permutação de b. Modularização 20141106 24 / 25 Sufixo Um número b é dito ser sufixo de um número a se o número formado pelos últimos dígitos de a são iguais a b. Assim: a b 567890 890 → sufixo 1234 1234 → sufixo 2457 245 → não é sufixo 457 2457 → não é sufixo Construa uma função sufixo que dados dois números inteiros a e b verifica se b é um sufixo de a. Utilizando a função do item anterior, escreva um algoritmo que leia dois números inteiros a e b e verifica se o menor deles é subsequência do outro. Exemplo: a b 567890 678 → b é subsequência de a 1234 2212345 → a é subsequência de b 235 236 → um não é subsequência do outro Modularização 20141106 25 / 25 Módulo Módulos Portugol: funções e procedimentos Exercícios
Compartilhar