programaÇÃo modular - 2011 · programaÇÃo modular tempo de vida de uma variável é o intervalo...

Post on 28-Dec-2018

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

É uma metodologia para projetar programas como um conjunto de unidades individuais inter-relacionadas (sub-programas ou módulos).

PROGRAMAÇÃO MODULAR

É uma metodologia para projetar programas como um conjunto de unidades individuais inter-relacionadas (sub-programas ou módulos).

PROGRAMAÇÃO MODULAR

A decomposição em módulos será uma estratégia fundamental no desenvolvimento de programas de médio/grande porte.

VANTAGENS DA MODULARIZAÇÃO:

● Qualidade dos Programas

A solução de um problema é buscada através da combinação das soluções de subproblemas (menos complexos).

PROGRAMAÇÃO MODULAR

VANTAGENS DA MODULARIZAÇÃO:

● Qualidade dos Programas

PROGRAMAÇÃO MODULAR

Um módulo que realiza uma função simples e bem definida pode ser facilmente compreendido.

VANTAGENS DA MODULARIZAÇÃO:

● Qualidade dos Programas

PROGRAMAÇÃO MODULAR

Um módulo que realiza uma função simples e bem definida pode ser facilmente compreendido.

A atenção do programador se concentra nos detalhes da lógica de cada parte do programa isoladamente.

VANTAGENS DA MODULARIZAÇÃO:

● Qualidade dos Programas

PROGRAMAÇÃO MODULAR

Um módulo que realiza uma função simples e bem definida pode ser facilmente compreendido.

A atenção do programador se concentra nos detalhes da lógica de cada parte do programa isoladamente.

ABSTRAÇÃO

VANTAGENS DA MODULARIZAÇÃO:

● Flexibilidade no desenvolvimento

PROGRAMAÇÃO MODULAR

Como o programa é dividido em módulos individuais, tem-se maior flexibilidade na alocação de recursos e pessoal para o desenvolvimento.

VANTAGENS DA MODULARIZAÇÃO:

● Padronização e reuso

PROGRAMAÇÃO MODULAR

Quando se escreve uma série de programas, é comum que certas funções sejam necessárias em mais de um...

VANTAGENS DA MODULARIZAÇÃO:

● Padronização e reuso

PROGRAMAÇÃO MODULAR

Quando se escreve uma série de programas, é comum que certas funções sejam necessárias em mais de um...

A existência da uma biblioteca de funções evitará grande parte da repetição e garantirá padronização.

VANTAGENS DA MODULARIZAÇÃO:

● Planejamento

PROGRAMAÇÃO MODULAR

Quando se trabalha com pequenas unidades, pode-se estimar com certa precisão a quantidade de trabalho envolvido.

VANTAGENS DA MODULARIZAÇÃO:

● Planejamento

PROGRAMAÇÃO MODULAR

Quando se trabalha com pequenas unidades, pode-se estimar com certa precisão a quantidade de trabalho envolvido.

Isto possibilita um melhor planejamento de recursos, prazos, etc.

VANTAGENS DA MODULARIZAÇÃO:

● Manutenção

PROGRAMAÇÃO MODULAR

Os problemas de manutenção são reduzidos.

É mais fácil entender um módulo do sistema (e alterá-lo) do que tentar entender o sistema como um todo.

OBS:

PROGRAMAÇÃO MODULAR

A técnica de modularização é empregada em vários ramos de desenvolvimento, como uma forma de lidar com a complexidade.

OBS:

PROGRAMAÇÃO MODULAR

A técnica de modularização é empregada em vários ramos de desenvolvimento, como uma forma de lidar com a complexidade.

Ex1: não há um “fabricante de computador”. Há fabricantes de discos rígidos, de processadores, etc.

OBS:

PROGRAMAÇÃO MODULAR

A técnica de modularização é empregada em vários ramos de desenvolvimento, como uma forma de lidar com a complexidade.

Ex2: não há um “fabricante de carros”. Há montadoras que encomendam de terceiros motor, câmbio, pneus, condicionador de ar, etc.

OBS:

PROGRAMAÇÃO MODULAR

Um “módulo” pode ser decomposto em outros mais simples. Por exemplo, o fabricante de motor pode terceirizar a fabricação das velas de ignição, pistons, etc.

OBS:

PROGRAMAÇÃO MODULAR

Um “módulo” pode ser decomposto em outros mais simples. Por exemplo, o fabricante de motor pode terceirizar a fabricação das velas de ignição, pistons, etc.

Ou seja, para produção de objetos muito complexos, haverá um processo de decomposição sucessiva...

RECOMENDAÇÃO BÁSICA

PROGRAMAÇÃO MODULAR

Os módulos devem resolver uma tarefa (ou função) muito bem definida.

RECOMENDAÇÃO BÁSICA

PROGRAMAÇÃO MODULAR

Os módulos devem resolver uma tarefa (ou função) muito bem definida.

Dica prática: deve-se poder dizer o que um módulo faz em poucas palavras (sem uso de “ou“, “se“, etc.)

RECOMENDAÇÃO BÁSICA

PROGRAMAÇÃO MODULAR

Os módulos devem resolver uma tarefa (ou função) muito bem definida.

Dica prática: deve-se poder dizer o que um módulo faz em poucas palavras (sem uso de “ou“, “se“, etc.)

● Calcula o fatorial de um número● Ordena um vetor de forma ascendente

Ex:

TIPOS DE MÓDULOS

PROGRAMAÇÃO MODULAR

Procedimento: realiza uma tarefa. Ao final não há retorno de valores ao módulo que o ativou.

TIPOS DE MÓDULOS

PROGRAMAÇÃO MODULAR

Procedimento: realiza uma tarefa. Ao final não há retorno de valores ao módulo que o ativou.

Função: realiza algum processamento e retorna uma única informação de saída.

TIPOS DE MÓDULOS

PROGRAMAÇÃO MODULAR

Procedimento: realiza uma tarefa. Ao final não há retorno de valores ao módulo que o ativou.

Função: realiza algum processamento e retorna uma única informação de saída.

OBS:

● Funções possuem um tipo associado, que é o tipo da informação que será retornada.

TIPOS DE MÓDULOS

PROGRAMAÇÃO MODULAR

Procedimento: realiza uma tarefa. Ao final não há retorno de valores ao módulo que o ativou.

Função: realiza algum processamento e retorna uma única informação de saída.

OBS:

● Funções possuem um tipo associado, que é o tipo da informação que será retornada.● Funções e procedimentos podem receber informações de entrada (parâmetros).

EXEMPLOS:

FUNÇÕES

PROGRAMAÇÃO MODULAR

A := round(1.5);write(ln(num));S := concat('ABC','DEF');S2 := copy(S,2,3);

EXEMPLOS:

FUNÇÕES PROCEDIMENTOS

PROGRAMAÇÃO MODULAR

ordenaVet(V);insert(S1,S2,5);delete(S, 5,2); inc(x);

A := round(1.5);write(ln(num));S := concat('ABC','DEF');S2 := copy(S,2,3);

EXEMPLOS:

FUNÇÕES PROCEDIMENTOS

PROGRAMAÇÃO MODULAR

ordenaVet(V);insert(S1,S2,5);delete(S, 5,2); inc(x);

Obs: uma função é um tipo de expressão: produz um resultado, que deve ter algum destino.

A := round(1.5);write(ln(num));S := concat('ABC','DEF');S2 := copy(S,2,3);

EXEMPLOS:

FUNÇÕES PROCEDIMENTOS

PROGRAMAÇÃO MODULAR

ordenaVet(V);insert(S1,S2,5);delete(S, 5,2); inc(x);

… já um procedimento é empregadona forma de comando.

A := round(1.5);write(ln(num));S := concat('ABC','DEF');S2 := copy(S,2,3);

PROCEDIMENTOS (sintaxe Pascal):

procedure <nome> (<list_parâm>); ...var <variáveis locais>begin comando 1; comando 2; . . comando nend;

PROGRAMAÇÃO MODULAR

FUNÇÕES (sintaxe Pascal):

function <nome>(<list_parâm>):<tipo_ret>; ...var < variáveis locais >begin comando 1; comando 2; . .end;

PROGRAMAÇÃO MODULAR

FUNÇÕES (sintaxe Pascal):

function <nome>(<list_parâm>):<tipo_ret>; ...var < variáveis locais >begin comando 1; comando 2; . .end;

PROGRAMAÇÃO MODULAR

OBS: toda função deverá ter (pelo menos) uma atribuição para o seu nome, com o que se produz o retorno de um valor.

FUNÇÕES (sintaxe Pascal):

function <nome>(<list_parâm>):<tipo_ret>; ...var < variáveis locais >begin comando 1; comando 2; . .end;

PROGRAMAÇÃO MODULAR

OBS: toda função deverá ter (pelo menos) uma atribuição para o seu nome, com o que se produz o retorno de um valor.

… se houver mais de uma atribuição, a segunda anula a primeira e assim sucessivamente.

PROGRAMAÇÃO MODULAR

OBS:

A execução de um módulo é ativada pela referência ao seu nome.

PROGRAMAÇÃO MODULAR

OBS:

A execução de um módulo é ativada pela referência ao seu nome.

Quando for encontrada uma chamada, o módulo em execução será suspenso, e o controle será passado ao módulo chamado.

PROGRAMAÇÃO MODULAR

OBS:

A execução de um módulo é ativada pela referência ao seu nome.

Quando for encontrada uma chamada, o módulo em execução será suspenso, e o controle será passado ao módulo chamado.

Após a execução, ocorrerá o retorno do controle para o comando imediatamente após a chamada.

PROGRAMAÇÃO MODULAR

ESCOPO E TEMPO DE VIDA

Escopo de uma variável é a área do programa onde ela pode ser legalmente referenciada.

PROGRAMAÇÃO MODULAR

Quanto ao escopo, as variáveis podem ser:

Globais: São declaradas fora de qualquer módulo, e podem ser referenciadas em qualquer parte do programa...

PROGRAMAÇÃO MODULAR

Quanto ao escopo, as variáveis podem ser:

Globais: São declaradas fora de qualquer módulo, e podem ser referenciadas em qualquer parte do programa...

...exceto naqueles módulos onde for declarada outra variável com o mesmo nome.

PROGRAMAÇÃO MODULAR

Quanto ao escopo, as variáveis podem ser:

Globais: São declaradas fora de qualquer módulo, e podem ser referenciadas em qualquer parte do programa...

...exceto naqueles módulos onde for declarada outra variável com o mesmo nome.

Locais: Só existem dentro do módulo onde foram declaradas.

PROGRAMAÇÃO MODULARprogram local_global;var x1,x2:integer;

procedure P()var y1, y2, x2: real;begin ... end;

procedure Q()var z,y1: integer;begin ...end;

begin {principal} end.

PROGRAMAÇÃO MODULARprogram local_global;var x1,x2:integer;

procedure P()var y1, y2, x2: real;begin ... end;

procedure Q()var z,y1: integer;begin ...end;

begin {principal} end.

GLOBAIS

LOCAIS

PROGRAMAÇÃO MODULARprogram local_global;var x1,x2:integer;

procedure P()var y1, y2, x2: real;begin ... end;

procedure Q()var z,y1: integer;begin ...end;

begin {principal} end.

a variável global X2 não estará acessível em P();

PROGRAMAÇÃO MODULAR

Tempo de vida de uma variável é o intervalo de tempo desde a sua criação (alocação de espaço) até a sua destruição.

PROGRAMAÇÃO MODULAR

Tempo de vida de uma variável é o intervalo de tempo desde a sua criação (alocação de espaço) até a sua destruição.

- O tempo de vida de uma variável global é o tempo total de execução de um programa.

PROGRAMAÇÃO MODULAR

Tempo de vida de uma variável é o intervalo de tempo desde a sua criação (alocação de espaço) até a sua destruição.

- O tempo de vida de uma variável global é o tempo total de execução de um programa.

- Já o de uma variável local é o período durante o qual está ativo o módulo a que ela pertence.

PROGRAMAÇÃO MODULAR

Tempo de vida de uma variável é o intervalo de tempo desde a sua criação (alocação de espaço) até a sua destruição.

O conteúdo de uma variável local se perde após o encerramento do módulo onde ela está declarada.

- O tempo de vida de uma variável global é o tempo total de execução de um programa.

- Já o de uma variável local é o período durante o qual está ativo o módulo a que ela pertence.

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end.

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end.

o módulo principal chama P()...

VARIÁVEIS ALOCADASg, x1, x2

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2 y1, y2

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2 y1, y2

P(), por sua vez, chama Q()...

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2 y1, y2

z

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2 y1, y2

z

retorno...

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2 y1, y2

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2 y1, y2

retorno...

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2

Ativação ”direta” de Q()...

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2 z

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2 z

retorno...

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

g, x1, x2

...encerramento.

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end. VARIÁVEIS ALOCADAS

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end.

Note que a alocação funcionou em um esquema de PILHA...

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end.

Note que a alocação funcionou em um esquema de PILHA...

...em uma pilha (de pratos, por exemplo) o último adicionado será o primeiro a sair.

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end.

Note que a alocação funcionou em um esquema de PILHA...

...em uma pilha (de pratos, por exemplo) o último adicionado será o primeiro a sair.

Isso porque um módulo sempre encerra antes daquele que o chamou.

PROGRAMAÇÃO MODULARprogram local_global;var g: integer; x1,x2: real;

procedure Q();var z: integer;begin ...end;

procedure P();var y1: real; y2: integer;begin ... Q();end;

begin {principal} P(); ... Q();end.

ALOCAÇÃO EM FUNÇÃO DO TEMPO

PROGRAMAÇÃO MODULAR

...v: array[1..100] of integer; ...function Soma( ): LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...

Observe o código abaixo:

PARÂMETROS E ARGUMENTOS

PROGRAMAÇÃO MODULAR

...v: array[1..100] of integer; ...function Soma( ): LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...

Observe o código abaixo:

A função Soma sempre calculará a soma dos elementos de um vetor em particular v (global).

PARÂMETROS E ARGUMENTOS

PROGRAMAÇÃO MODULAR

...v: array[1..100] of integer; ...function Soma( ): LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...

Observe o código abaixo:

A função Soma sempre calculará a soma dos elementos de um vetor em particular v (global).

...a utilidade da função, portanto, é bastante limitada!

PARÂMETROS E ARGUMENTOS

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor;function Soma(v:Vetor ):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1); ...

Acrescentando um parâmetro...

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor;function Soma(v:Vetor ):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1); ...

Acrescentando um parâmetro...

Agora Soma possui um parâmetro v e o processamento interno será feito sobre ele.

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor;function Soma(v:Vetor ):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1); ...

Acrescentando um parâmetro...

➔ v será alocado de forma similar a uma variável local (na ativação do módulo).

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor;function Soma(v:Vetor ):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1); ...

Acrescentando um parâmetro...

➔ v será alocado de forma similar a uma variável local (na ativação do módulo).➔ Em seguida, v receberá uma cópia de v1.

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor;function Soma(v:Vetor ):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1); ...

Acrescentando um parâmetro...

➔ v será alocado de forma similar a uma variável local (na ativação do módulo).➔ Em seguida, v receberá uma cópia de v1.

Assim, o valor retornado será a soma dos valores de v1 (v é apenas um ”suporte”...

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor;function Soma(v:Vetor ):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1); ...

Acrescentando um parâmetro...

Na chamada foi passado v1, assim como poderia ter sido passado v2, ou outro vetor qualquer de mesmo tipo.

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor;function Soma(v:Vetor ):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to 100 do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1); ...

Acrescentando um parâmetro...

Na chamada foi passado v1, assim como poderia ter sido passado v2, ou outro vetor qualquer de mesmo tipo.

Isso amplia a utilidade da função. Ele se tornou mais amplamente aplicável!

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor; tam: byte;function Soma(v:Vetor,n:byte):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to n do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1,tam); ...

Acrescentando um novo parâmetro...

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor; tam: byte;function Soma(v:Vetor,n:byte):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to n do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1,tam); ...

Acrescentando um novo parâmetro...

Um novo parâmetro (n) determinará até onde a soma deverá ser feita...

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor; tam: byte;function Soma(v:Vetor,n:byte):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to n do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1,tam); ...

Acrescentando um novo parâmetro...

Um novo parâmetro (n) determinará até onde a soma deverá ser feita...

Isso confere maior flexibilidade ainda à função!

PROGRAMAÇÃO MODULAR

PARÂMETROS E ARGUMENTOS

...type Vetor = array[1..100] of integer;var v1,v2:Vetor; tam: byte;function Soma(v:Vetor,n:byte):LongInt;var i: byte; s: LongInt;begin s := 0; for i = 1 to n do s := s + v[i]; Soma := S;end; ...begin ... tot := Soma(v1,tam); ...

Acrescentando um novo parâmetro...

...assim, parâmetros são fundamentais para

a comunicação entre módulos, com aumento significativo

de sua aplicabilidade!!

PROGRAMAÇÃO MODULAR

PARÂMETROS FORMAIS, REAIS E ARGUMENTOS

Argumento é o valor que será passado para o módulo

Parâmetro real é uma expressão que produzirá o argumento.

Parâmetro formal é um identificador pelo qual o módulo terá acesso ao argumento.

PROGRAMAÇÃO MODULAR

PARÂMETROS FORMAIS, REAIS E ARGUMENTOS

var n1,n2,dbr: byte; ...function Dobro(n:byte):byte;begin Dobro := 2 * n;end; ...begin n1:= 2; n2:= 3; dbr := Dobro(n1+n2); ...

Considere o exemplo...

PROGRAMAÇÃO MODULAR

PARÂMETROS FORMAIS, REAIS E ARGUMENTOS

var n1,n2,dbr: byte; ...function Dobro(n:byte):byte;begin Dobro := 2 * n;end; ...begin n1:= 2; n2:= 3; dbr := Dobro(n1+n2); ...

Considere o exemplo...

A expressão n1+n2 constitui o parâmetro real...

PROGRAMAÇÃO MODULAR

PARÂMETROS FORMAIS, REAIS E ARGUMENTOS

var n1,n2,dbr: byte; ...function Dobro(n:byte):byte;begin Dobro := 2 * n;end; ...begin n1:= 2; n2:= 3; dbr := Dobro(n1+n2); ...

Considere o exemplo...

A expressão n1+n2 constitui o parâmetro real...

O valor produzido e que será efetivamente passado (5) é o argumento.

PROGRAMAÇÃO MODULAR

PARÂMETROS FORMAIS, REAIS E ARGUMENTOS

var n1,n2,dbr: byte; ...function Dobro(n:byte):byte;begin Dobro := 2 * n;end; ...begin n1:= 2; n2:= 3; dbr := Dobro(n1+n2); ...

Considere o exemplo...

A expressão n1+n2 constitui o parâmetro real...

O valor produzido e que será efetivamente passado (5) é o argumento.

n é o parâmetro formal: um suporte para o acesso ao argumento.

PROGRAMAÇÃO MODULAR

PARÂMETROS FORMAIS, REAIS E ARGUMENTOS

var n1,n2,dbr: byte; ...function Dobro(n:byte):byte;begin Dobro := 2 * n;end; ...begin n1:= 2; n2:= 3; dbr := Dobro(n1+n2); ...

Considere o exemplo...OBS: deve haver correspondência entre os parâmetros formais e reais quanto a:

➔ número➔ tipo de dados➔ posição entre eles

PROGRAMAÇÃO MODULAR

PARÂMETROS FORMAIS, REAIS E ARGUMENTOS

var n1,n2,dbr: byte; ...function Dobro(n:byte):byte;begin Dobro := 2 * n;end; ...begin n1:= 2; n2:= 3; dbr := Dobro(n1+n2); ...

Considere o exemplo...OBS: deve haver correspondência entre os parâmetros formais e reais quanto a:

➔ número➔ tipo de dados➔ posição entre eles

Observe que n1+n2 é apenas um parâmetro (uma única expressão), embora possua duas variáveis.

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Por valor: é a forma de passagem presente nos exemplos já apresentados:

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Por valor: é a forma de passagem presente nos exemplos já apresentados:

- o argumento é copiado no parâmetro formal.

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Por valor: é a forma de passagem presente nos exemplos já apresentados:

- o argumento é copiado no parâmetro formal.

- eventuais alterações internas no conteúdo do parâmetro formal (apenas uma cópia) não acarretarão qualquer mudança de valor no parâmetro real.

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Por referência: o parâmetro formal é uma referência para o argumento.

➔ assim, todas as alterações de conteúdo via parâmetro formal, na realidade surtirão efeito diretamente no argumento.

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

O termo var na declaração do parâmetro, designa passagem por referência

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

SIMULANDO...

x

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

SIMULANDO...

x

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

SIMULANDO...

2x

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

SIMULANDO...

x 2

n

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

SIMULANDO...

x 2

n

n não guarda uma cópia de x, mas é uma (nova) forma de referenciar o objeto

identificado por x

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

SIMULANDO...

x 2

n

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

SIMULANDO...

x 4

n

PROGRAMAÇÃO MODULAR

TIPOS DE PASSAGEM DE PARÂMETRO

Exemplo:

var x: byte; ...Procedure Dobrar(var n:byte):byte;begin n := 2 * n;end; ...begin x := 2; Dobrar(x); ...

SIMULANDO...

x 4

n

PROGRAMAÇÃO MODULAR

OBS: A passagem de parâmetro por referência será necessária sempre que se quiser que ações internas ao módulo (feitas sobre o parâmetro formal) produzam efeitos diretos no argumento (e não em uma cópia).

PROGRAMAÇÃO MODULAR

Ex: . . .var  vet: Vetor;procedure OrdenaVetor(var v: Vetor);begin . . .end;begin . . .   OrdenaVetor(vet); . . .

OBS: A passagem de parâmetro por referência será necessária sempre que se quiser que ações internas ao módulo (feitas sobre o parâmetro formal) produzam efeitos diretos no argumento (e não em uma cópia).

PROGRAMAÇÃO MODULAR

Ex: . . .var  vet: Vetor;procedure OrdenaVetor(var v: Vetor);begin . . .end;begin . . .   OrdenaVetor(vet); . . .

o que se pretende éordenar o vetor vet e não uma

cópia (que iria desaparecer com o fim da execução

do módulo!)

OBS: A passagem de parâmetro por referência será necessária sempre que se quiser que ações internas ao módulo (feitas sobre o parâmetro formal) produzam efeitos diretos no argumento (e não em uma cópia).

PROGRAMAÇÃO MODULAR

Ex: . . .var  vet: Vetor; r: LongInt;

function SomaElem(v: Vetor);begin . . .end;begin . . .   r := SomaElem(vet); . . .

Já neste caso...

PROGRAMAÇÃO MODULAR

Ex: . . .var  vet: Vetor; r: LongInt;

function SomaElem(v: Vetor);begin . . .end;begin . . .   r := SomaElem(vet); . . .

Nenhuma alteração precisa ser produzida no

conteúdo de vet......portanto, a passagem deve

ser por valor.

Já neste caso...

PROGRAMAÇÃO MODULAR

Ex: . . .var  vet: Vetor; r: LongInt;

function SomaElem(v: Vetor);begin . . .end;begin . . .   r := SomaElem(vet); . . .

Já neste caso...

Nenhuma alteração precisa ser produzida no

conteúdo de vet......portanto, a passagem deve

ser por valor.

O termo var não é empregado

top related