• Nenhum resultado encontrado

Aula 14 - Modularização - Parte 1

N/A
N/A
Protected

Academic year: 2021

Share "Aula 14 - Modularização - Parte 1"

Copied!
44
0
0

Texto

(1)

Heleno Pontes Bezerra Neto -

helenopontes@lccv.ufal.br

Modularização – Parte 1

INTRODUÇÃO À COMPUTAÇÃO

- EPET006 -

(2)

QUAL A MELHOR FORMA DE TRATAR UM PROBLEMA COMPLEXO?

(3)

QUAL A MELHOR FORMA DE TRATAR UM PROBLEMA COMPLEXO?

PODEMOS DECOMPÔ-LO EM VÁRIOS SUBPROBLEMAS!

(4)

QUAL A MELHOR FORMA DE TRATAR UM PROBLEMA COMPLEXO?

PODEMOS DECOMPÔ-LO EM VÁRIOS SUBPROBLEMAS!

VANTAGENS DA DECOMPOSIÇÃO:

. Dividir a complexidade do problema original, simplificando a sua resolução;

. Direcionar a atenção a problemas menores de cada vez, permitindo uma melhor compreensão do todo.

(5)

QUAL A MELHOR FORMA DE TRATAR UM PROBLEMA COMPLEXO?

PODEMOS DECOMPÔ-LO EM VÁRIOS SUBPROBLEMAS!

VANTAGENS DA DECOMPOSIÇÃO:

. Dividir a complexidade do problema original, simplificando a sua resolução;

. Direcionar a atenção a problemas menores de cada vez, permitindo uma melhor compreensão do todo.

A rotina sugerida para modularização de programas é a seguinte: . Dividir o problema em suas partes principais;

. Analisar a divisão;

. Se alguma parte ainda estiver complexa, decompô-la também; . Analisar o resultado, garantindo entendimento e coerência.

(6)

6. MODULARIZAÇÃO

Conceito

Exemplo: Gerenciamento Salarial a) Dados  Nome  Ano Base  Salário/mês  Salário/ano (incluíndo o 13o) b) Pede-se

 Cálculo salário/dia (20 dias/mês)  Cálculo salário/hora (8 horas/dia)

 Novo salário com aumento baseado no índice da inflação  Classificação em classes sociais (A, B, C, D e E)

c) Saída (Resultados)  Nome  Salário/dia  Salário/hora  Novo salário  Classe Social

(7)

6. MODULARIZAÇÃO

Módulos (Funções)

Exemplo: Gerenciamento Salarial a) Dados  Nome  Ano Base  Salário/mês  Salário/ano (incluíndo o 13o) b) Pede-se

 Cálculo salário/dia (20 dias/mês)

 Cálculo salário/hora (8 horas/dia)

 Novo salário com aumento baseado no índice da inflação

 Classificação em classes sociais (A, B, C, D e E) c) Saída (Resultados)  Nome  Salário/dia  Salário/hora  Novo salário  Classe Social Problema Cálculos Entrada Saída Sal./Mês

Sal./Dia Novo Sal. Classe Social

Problema

Cálculos

Entrada Saída

Sal./Mês

Sal./Dia Novo Sal. Classe Social

Para representar a decomposição do problema no algoritmo utilizam-se MÓDULOS (SCRIPTS).

Construir um módulo significa construir um algoritmo em instâncias menores.

(8)

6. MODULARIZAÇÃO

Módulos (Funções)

Problema

Cálculos

Entrada Saída

Sal./Mês

Sal./Dia Novo Sal. Classe Social

Problema

Cálculos

Entrada Saída

Sal./Mês

Sal./Dia Novo Sal. Classe Social

Para representar a decomposição do problema no algoritmo utilizam-se MÓDULOS (SCRIPTS).

Construir um módulo significa construir um algoritmo em instâncias menores.

O problema do exemplo 01 terá 3 módulos: Exemplo: Gerenciamento Salarial

a) Dados  Nome  Ano Base  Salário/mês  Salário/ano (incluíndo o 13o) b) Pede-se

 Cálculo salário/dia (20 dias/mês)

 Cálculo salário/hora (8 horas/dia)

 Novo salário com aumento baseado no índice da inflação

 Classificação em classes sociais (A, B, C, D e E) c) Saída (Resultados)  Nome  Salário/dia  Salário/hora  Novo salário  Classe Social

(9)

6. MODULARIZAÇÃO

Módulos (Funções)

Para representar a decomposição do problema no algoritmo utilizam-se MÓDULOS (SCRIPTS).

Construir um módulo significa construir um algoritmo em instâncias menores.

O problema do exemplo 01 terá 3 módulos:

Módulo 1  Entrada dos dados

Módulo 2  a) Cálculo do Novo Sal.; b) Sal./Dia

c) Sal./Mês

d) Classe Social

Módulo 3  saída dos dados

Exemplo: Gerenciamento Salarial a) Dados  Nome  Ano Base  Salário/mês  Salário/ano (incluíndo o 13o) b) Pede-se

 Cálculo salário/dia (20 dias/mês)

 Cálculo salário/hora (8 horas/dia)

 Novo salário com aumento baseado no índice da inflação

 Classificação em classes sociais (A, B, C, D e E) c) Saída (Resultados)  Nome  Salário/dia  Salário/hora  Novo salário  Classe Social

(10)

6. MODULARIZAÇÃO

Módulos (Funções)

Existe, então, a necessidade de “conectar” os vários scripts do programa, de forma que eles se comuniquem.

(11)

6. MODULARIZAÇÃO

Módulos (Funções)

Existe, então, a necessidade de “conectar” os vários scripts do programa, de forma que eles se comuniquem.

(12)

6. MODULARIZAÇÃO

Módulos (Funções)

Existe, então, a necessidade de “conectar” os vários scripts do programa, de forma que eles se comuniquem.

Isso pode ser feito no módulo principal do programa.

O programa seria algo do tipo: O fluxo de execução do programa seria: Linha 1 – comentário

Linha 2 – chama (executa) o script entrada Executa todos os comandos desse script Linha 3 – chama (executa) o script calculos

Executa todos os comandos desse script Linha 4 – chama (executa) o script imprime

(13)

6. MODULARIZAÇÃO

Módulos (Funções)

PARA FACILITAR A TROCA E EVITAR USO INDEVIDO DE INFORMAÇÃO ENTRE OS MÓDULOS, EM VEZ DE TRABALHAR A CONEXÃO DE SCRIPTS, INTRODUZ-SE O USO DE FUNÇÕES.

COM ISSO, OS MÓDULOS DEIXAM DE SER SIMPLES SCRIPTS, PARA SER FUNÇÕES.

(14)

6. MODULARIZAÇÃO

Módulos (Funções)

SCRIPT

x FUNÇÃO

Entrada de dados convencional (script) do ex. 01

func.nome = input(‘Nome: ’, ‘s’); func.ano = input(‘Ano: ’);

func.sal_mes = input(‘Salario Mensal: ’); func.sal_ano = input(‘Salario Anual: ’);

(15)

6. MODULARIZAÇÃO

Módulos (Funções)

SCRIPT

x FUNÇÃO

Entrada de dados convencional (script) do ex. 01

func.nome = input(‘Nome: ’, ‘s’); func.ano = input(‘Ano: ’);

func.sal_mes = input(‘Salario Mensal: ’); func.sal_ano = input(‘Salario Anual: ’);

Entrada de dados usando função do ex. 01 function f = entrada

f.nome = input(‘Nome: ’, ‘s’);

f.ano = input(‘Ano: ’);

f.sal_mes = input(‘Salario Mensal: ’); f.sal_ano = input(‘Salario Anual: ’);

(16)

6. MODULARIZAÇÃO

Módulos (Funções)

Entrada de dados convencional (script) do ex. 01

func.nome = input(‘Nome: ’, ‘s’); func.ano = input(‘Ano: ’);

func.sal_mes = input(‘Salario Mensal: ’); func.sal_ano = input(‘Salario Anual: ’);

Entrada de dados usando função do ex. 01 function f = entrada

f.nome = input(‘Nome: ’, ‘s’); f.ano = input(‘Ano: ’);

f.sal_mes = input(‘Salario Mensal: ’); f.sal_ano = input(‘Salario Anual: ’);

(17)

6. MODULARIZAÇÃO

Módulos (Funções)

Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function;

(18)

6. MODULARIZAÇÃO

Módulos (Funções)

Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function;

(19)

6. MODULARIZAÇÃO

Módulos (Funções)

Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function;

• Todas funções têm um nome associado. Neste exemplo, o nome é entrada; • Cada função deve ser armazenada em um arquivo .m separado (um arquivo para cada função);

• O nome do arquivo deve ser igual ao nome da função armazenada nele. No exemplo acima, o arquivo deve se chamar entrada.m;

(20)

6. MODULARIZAÇÃO

Módulos (Funções)

Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function;

• Todas funções têm um nome associado. Neste exemplo, o nome é entrada; • Cada função deve ser armazenada em um arquivo .m separado (um arquivo para cada função);

• O nome do arquivo deve ser igual ao nome da função armazenada nele. No exemplo acima, o arquivo deve se chamar entrada.m;

• A variável f, que é um registro, só é válida dentro da função entrada. Dizemos que ela é uma variável local. Ou seja, todas as variáveis criadas dentro de uma função só podem ser usadas na própria função. Elas não existem fora deste contexto.

(21)

6. MODULARIZAÇÃO

Módulos (Funções)

Até agora, já usamos diversas funções pré-definidas pelo próprio MATLAB...

plot disp input sqrt mod log sen cos . . .

(22)

Módulos (Funções)

Sintaxe no MATLAB

6. MODULARIZAÇÃO

function [lista de variáveis de saída] = nome (lista de variáveis de entrada)

(23)

function [lista de variáveis de saída] = nome (lista de variáveis de entrada)

Módulos (Funções)

Sintaxe no MATLAB

valores de retorno (opcionais)

argumentos(opcionais)

palavra-chave (obrigatória)

nome da função (obrigatório)

(24)

function [lista de variáveis de saída] = nome (lista de variáveis de entrada)

...instruções para inicialização de variáveis ...instruções de execução

...

Módulos (Funções)

Sintaxe no MATLAB

valores de retorno (opcionais)

argumentos(opcionais)

palavra-chave (obrigatória)

nome da função (obrigatório)

6. MODULARIZAÇÃO

Argumentos são as variáveis de entrada que as

funções vão receber. É por meio delas que as funções

(25)

Módulos (Funções)

6. MODULARIZAÇÃO

Exemplo 52 – Implemente uma função para calcular e fornecer a área de um triângulo. Essa função recebe como argumentos a base e a altura do triângulo correspondente.

% arquivo ‘areatri.m’

function a = areatri( b, h ) a = 0.5 * b * h;

(26)

%arquivo imprime.m

function imprime disp(c);

6. MODULARIZAÇÃO

Módulos (Funções)

Programas modularizados e uso de Variáveis Locais

Ex: Criar um programa para operar o produto de dois números

%arquivo produto.m

function produto a=3;

b=2; c=a*b;

% modulo principal, arquivo teste.m

produto; imprime;

(27)

%arquivo imprime.m

function imprime disp(c);

6. MODULARIZAÇÃO

Módulos (Funções)

%arquivo produto.m

function produto a=3;

b=2; c=a*b;

% modulo principal, arquivo teste.m

produto; imprime;

Erro!!! A variável “c” não existe em imprime, ela está restrita à função

produto, ou seja, é variável local da função produto.

Programas modularizados e uso de Variáveis Locais

(28)

%arquivo imprime.m

function imprime(c) disp(c);

6. MODULARIZAÇÃO

Módulos (Funções)

%arquivo produto.m

function c=produto a=3;

b=2; c=a*b;

% modulo principal, arquivo teste.m

c=produto; imprime(c);

A solução para este tipo de problema, que garante a correta

comunicação entre as funções, está no uso de:

. argumentos de uma função

. valores de retorno de uma função

A variável “c” foi retornada pela função produto, recebida pelo módulo principal, depois fornecida para a função imprime

Programas modularizados e uso de Variáveis Locais

(29)

Módulos (Funções)

Fazer um programa, usando funções, para ler, calcular e imprimir o

produto de dois números.

a, b e c são variáveis locais da função produto

6. MODULARIZAÇÃO

% arquivo ‘produto.m’ functionproduto(a,b) c = a*b; disp(c);

(30)

Módulos (Funções)

Fazer um programa, usando funções, para ler, calcular e imprimir o

produto de dois números.

a, b e c são variáveis locais da função produto

nessa chamada da função produto,a assume o valor 3 e b assume o valor 5

as variáveis x e y são válidas apenas dentro do módulo principal teste

obs1: Uma função pode ser chamada indefinidas vezes!

obs2: O número de argumentos de uma função deve ser compatível entre a sua definição e a sua execução.

6. MODULARIZAÇÃO

% arquivo ‘produto.m’

functionproduto(a,b) c = a*b;

disp(c);

% arquivo principal: ‘teste.m’ produto(3,5);

produto(2,3); x = input(‘X: ‘); y = input(‘Y: ‘); produto(x,y);

(31)

Módulos (Funções)

É desejável que exista uma função específica para imprimir o valor do

produto:

imprime não conhece a

variável c

O uso de valores de retorno resolve o problema!

6. MODULARIZAÇÃO

% arquivo ‘produto.m’ functionproduto(a,b) c = a*b; disp(c); % arquivo ‘imprime.m’ functionimprime (c) disp(c);

% arquivo principal: ‘teste.m’ a = input(‘Numero: ‘);

b = input(‘Numero: ‘); produto(a,b);

(32)

Valores de retorno são as variáveis de saída que as

funções vão disponibilizar para outras aplicações.

Módulos (Funções)

6. MODULARIZAÇÃO

% arquivo ‘produto.m’ functionc=produto(a,b) c = a*b; % arquivo ‘imprime.m’

functionimprime (a,b,c) disp(a);

disp(b); disp(c);

% arquivo principal: ‘teste.m’ x = input(‘Numero: ‘); y = input(‘Numero: ‘); z=produto(x,y); imprime(x,y,z);

(33)

Valores de retorno são as variáveis de saída que as

funções vão disponibilizar para outras aplicações.

Módulos (Funções)

6. MODULARIZAÇÃO

% arquivo ‘produto.m’ functionc=produto(a,b) c = a*b; % arquivo ‘imprime.m’

functionimprime (a,b,c) disp(a);

disp(b); disp(c);

% arquivo principal: ‘teste.m’ x = input(‘Numero: ‘);

y = input(‘Numero: ‘); z=produto(x,y);

imprime(x,y,z);

a, b e c são variáveis locais da função produto

a, b e c são variáveis locais da função imprime

essas variáveis podem conter valores

(34)

Valores de retorno são as variáveis de saída que as

funções vão disponibilizar para outras aplicações.

Módulos (Funções)

6. MODULARIZAÇÃO

% arquivo ‘produto.m’ functionc=produto(a,b) c = a*b; % arquivo ‘imprime.m’

functionimprime (a,b,c) disp(a);

disp(b); disp(c);

% arquivo principal: ‘teste.m’ x = input(‘Numero: ‘);

y = input(‘Numero: ‘); z=produto(x,y);

imprime(x,y,z);

a, b e c são variáveis locais da função produto

a, b e c são variáveis locais da função imprime

essas variáveis podem conter valores

diferentes em ambas as funçoes

x, y e z são variáveis locais do módulo principal teste z armazena uma cópia do valor

(35)

Módulos (Funções)

6. MODULARIZAÇÃO

Exercício 53 – Implemente uma função para calcular a área de um triângulo. Essa função recebe como argumentos a base e a altura do triângulo correspondente. Escreva o módulo principal.

(36)

Módulos (Funções)

6. MODULARIZAÇÃO

Exercício 53 – Implemente uma função para calcular a área de um triângulo. Essa função recebe como argumentos a base e a altura do triângulo correspondente. Escreva o módulo principal.

% arquivo ‘areatri.m’

function a = areatri( b, h ) a = 0.5 * b * h;

(37)

Módulos (Funções)

6. MODULARIZAÇÃO

Exercício 53 – Implemente uma função para calcular a área de um triângulo. Essa função recebe como argumentos a base e a altura do triângulo correspondente. Escreva o módulo principal.

% arquivo ‘areatri.m’

function a = areatri( b, h ) a = 0.5 * b * h;

% modulo principal ‘teste.m’ a1 = areatri(3,4);

(38)

Módulos (Funções)

6. MODULARIZAÇÃO

(39)

% arquivo ‘entrada.m’ function [a,b] = entrada

a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);

Módulos (Funções)

6. MODULARIZAÇÃO

(40)

% arquivo ‘entrada.m’ function [a,b] = entrada

a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);

Módulos (Funções)

6. MODULARIZAÇÃO

% arquivo ‘areatri.m’

function a = areatri( x, y ) a = 0.5 * x * y;

(41)

% arquivo ‘entrada.m’ function [a,b] = entrada

a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);

Módulos (Funções)

6. MODULARIZAÇÃO

% arquivo ‘areatri.m’ function a = areatri( x, y ) a = 0.5 * x * y; % arquivo ‘saida.m’ function saida( b, h, ar ) disp( ‘Base: ‘); disp( b ); disp( ‘Altura: ‘); disp( h ); disp( ‘Area: ‘); disp( ar );

(42)

% arquivo ‘entrada.m’ function [a,b] = entrada

a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);

Módulos (Funções)

6. MODULARIZAÇÃO

% arquivo ‘areatri.m’

function a = areatri( x, y ) a = 0.5 * x * y;

% modulo principal – arquivo ‘teste.m’ [b,h] = entrada; ar = areatri( b, h ); saida(b, h, ar); % arquivo ‘saida.m’ function saida( b, h, ar ) disp( ‘Base: ‘); disp( b ); disp( ‘Altura: ‘); disp( h ); disp( ‘Area: ‘); disp( ar );

(43)

% arquivo ‘entrada.m’ function [a,b] = entrada

a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);

Módulos (Funções)

6. MODULARIZAÇÃO

% arquivo ‘areatri.m’

function a = areatri( x, y ) a = 0.5 * x * y;

% modulo principal – arquivo ‘teste.m’ [b,h] = entrada; ar = areatri( b, h ); saida(b, h, ar); % arquivo ‘saida.m’ function saida( b, h, ar ) disp( ‘Base: ‘); disp( b ); disp( ‘Altura: ‘); disp( h ); disp( ‘Area: ‘); disp( ar );

Exercício 53 modificado: Criando funcoes para entrada e saida de dados

Perceber que os nomes das

variaveis nao precisam ser os

mesmos

nas

diferentes

funcoes.

Basta que elas estejam

corretamente

posicionadas

como argumentos e valores

de retorno

(44)

Exercício 54: Fazer um programa que leia 3 números e armazene-os em um vetor. Calcular um novo vetor gerado pelos fatoriais desses números. Imprimir ambos os vetores.

Fazer com um único script e com um programa modularizado

Módulos (Funções)

Referências

Documentos relacionados

Trata-se de um relato de pesquisa e experiência prática, de natureza descritiva, sobre a vivência em um projeto de extensão universitário multidisciplinar realizado na

A solução da estrutura urbana é caracterizada pela existência de uma Alameda Central, que se configura como uma “espinha dorsal” de orientação Norte/Sul,

17.2.1.1 Transporte manual de cargas designa todo transporte no qual o peso da carga é suportado inteiramente por um só trabalhador, compreendendo o levantamento e

Matthiola incana DA não requerida Mimulus x hybridus DA não requerida Momordica charantia Cucumber green mottle mosaic virus DA5 ou DA15 Osteospermum ecklonis DA não requerida

albopictus representa um vetor potencial para diversas arboviroses, sendo de suma importância o seu controle, já que muitas destas doenças podem ser consi- deradas emergentes

Realizou-se estudo do tipo ecológico com o objetivo de investigar o perfil sociodemográfico e epidemiológico, a frequência de casos, os indicadores epidemiológicos

LVT APFCAN-Associação de Produtores Florestais dos Concelhos de Alcobaça e Nazaré SF 02-16B 2004 LVT APFCAN-Associação de Produtores Florestais dos Concelhos de Alcobaça e Nazaré

A União, por intermédio do Ministério da Justiça, representado pela 7ª Superintendência Regional de Polícia Rodoviária Federal no Paraná, torna público que no local, data