Linguagem de Programação Aula 7 Modularização Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Técnico em Informática Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno
Dividir para conquistar
Módulos Modularizar significa dividir um grande problema em pequenos problemas que cooperam entre si. Na medida em que os problemas se tornam mais complexos e extensos percebemos algumas situações que nos remetem à modularização, em especial: Códigos repetidos (inclusive entre aplicações); Códigos muito extensos que dificultam compreensão do todo;
Vantagens de um código modularizado: Facilita a detecção de erros; Facilita a tarefa de testes, afinal é mais fácil testar os módulos individualmente do que o programa completo; Facilita a manutenção (correção de erros, melhoramentos, etc.) uma correção em um determinado módulo se reflete em todo o programa; Permite o desenvolvimento independente dos módulos, simplificando e reduzindo o problema; Reutilização do código desenvolvido.
Subprogramas Modularizar um programa pode significar dividi-lo em subprogramas; Um subprograma É um bloco de código definido, preocupado em resolver uma determinada tarefa; Podem ser chamados pelo programa ou até mesmo por outros subprogramas; Se comunicam com o código que os chamou através de parâmetros ou argumentos. Podem apenas desviar o fluxo de execução (procedimentos) ou então retornar valores (funções);
Subprogramas sem valor de retorno
Procedimentos São as subrotinas mais comuns; Desviam o fluxo de execução para a primeira instrução do procedimento, que passa então a ser executada; Ao final o fluxo de execução retorna para o código que o chamou (programa principal ou outra subrotina);
Procedimentos - Sintaxe procedure NomeDoProcedure( <parametro1 : tipo>; <parametro2 : tipo>; <parametro n : tipo>); var //Variáveis locais do procedimento const //Constantes locais do procedimento begin //início do procedimento //Corpo do procedimento end; //fim do procedimento
Procedimentos - Exemplo Procedimento que recebe como parâmetro uma frase, um valor de linha e coluna e escreve o texto posicionado:
Variáveis Globais x Variáveis Locais Com a utilização de subrotinas surge a necessidade de diferenciarmos 2 tipos de variáveis... Globais Variáveis que tem validade (podem ser acessadas) por todas as partes do programas; Locais Variáveis que são declaradas dentro de subrotinas e somente podem ser acessadas pela subrotina que as criou.
Variáveis Globais x Variáveis Locais Variáveis globais Variável local
Subprogramas com valor de retorno
Funções São tipos especiais de subprogramas que além de desviar o fluxo de execução normal, como os procedimentos, retornam um valor... A função sempre possui a indicação de um tipo de retorno... seu valor de retorno dever respeitar este tipo; Funções podem também podem ter parâmetros/argumentos; O retorno de uma função pode ser utilizado em expressões ou armazenado.
Funções - Sintaxe function NomeDaFunction( <parametros : tipo> ) : tipo; var //Variáveis locais da função const //Constantes locais da função begin //início da função //Corpo da função NomeDaFuncao := valor_de_retorno; //Retorno da função end; //fim da função
Funções - Exemplo Função que recebe como parâmetro um número e retorna true se ele for par ou false se ele for impar. Tipo de retorno da função Retorno da função Utilização da função
Por referência ou por valor
Parâmetros Também conhecidos por argumentos; São um mecanismo de comunicação da subrotina (procedimento ou função) com o meio externo; Ao desenvolver uma subrotina devemos nos perguntar: o que vou precisar para codificar essa subrotina? Quais são os valores que poderão variar e que devem ser informados pelo código que está chamando a subrotina? Por exemplo, para desenhar um círculo na tela, o que o procedimento precisaria saber?
Parâmetros (cont.) Parâmetros se comportam como variáveis locais, ou seja, variáveis que só tem validade no corpo da subrotina. O comportamento da subrotina pode ser alterado em função dos parâmetros/argumentos recebidos. O conjunto de parâmetros de um subprograma constituem a interface ou assinatura do mesmo. Parâmetros em um sentido mais amplo, servem para configurar, ou seja, mudar o comportamento padrão de uma aplicação.
Parâmetros (exemplo) Essa subrotina não possui parâmetros Essa subrotina possui um parâmetro inteiro (NumEstrelas) Chamada das subrotinas: Os valores 50 e 25 são passados como parâmetro.
Tipos de passagem de parâmetros Por valor Apenas o valor é passado para a subrotina; Após a execução da subrotina a variável externa a subrotina utilizada para passar como parâmetro não possui seu valor alterado. Por referência Neste caso o endereço de memória da variável é passada ao subprograma, e não apenas seu valor; Ao final da execução da subrotina o valor do parâmetro permanece, uma vez que foi atribuído ao endereço que referencia a variável.
Passagem de parâmetro por valor Neste caso, apenas o valor da variável numero é passado para a subrotina, ao final seu valor permanece 5
Passagem de parâmetro por referência Neste caso, a referência (endereço) da variável numero é passada para a subrotina de forma que ao final seu valor é de 15 A palavra reservada var indica que o parâmetro é passado por referência e não por valor.
Bibliotecas de funções
Units - Unidades Units são bibliotecas (libraries) com um conjunto de funções, procedimentos, tipos, variáveis e constantes pré-definidos e que podem ser utilizados pelo programador. Ao declarar a utilização de uma biblioteca o compilador anexa seu código ao executável gerado.
Definindo uma unidade Interface da biblioteca (indicação de quais funções e procedimentos fazem parte da mesma). Em Pascal a unidade tem END. mas não tem begin Implementação funções e procedimentos com seus códigos.
Utilizando uma unidade Declaração na seção uses O procedimento escrever_centralizado é importado da unit rotinasuteis
Exercícios para fixação http://www.cafw.ufsm.br/~bruno/disciplinas/ling_programacao/exercicios/lista7.html