33
Estrutura de Dados Funções e Procedimentos Prof. Adriano Teixeira de Souza

Estrutura de Dados em Java (Funções e Procedimentos)

Embed Size (px)

Citation preview

Page 1: Estrutura de Dados em Java (Funções e Procedimentos)

Estrutura de DadosFunções e Procedimentos

Prof. Adriano Teixeira de Souza

Page 2: Estrutura de Dados em Java (Funções e Procedimentos)

Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado.

Funções – são procedimentos que retornam um valor ao seu término.

A Linguagem Java não faz distinção.

Procedimentos e Funções

Prof. Adriano Teixeira de Souza

Page 3: Estrutura de Dados em Java (Funções e Procedimentos)

Porque utilizar procedimentos e funções?

Evitam que os blocos do programa fiquem

grandes demais e mais difíceis de ler e entender.

Ajudam a organizar o programa.

Permitem reaproveitamento de códigos

construídos anteriormente.

Evitam repetição de trechos de códigos,

minimizando erros e facilitando alterações.

Prof. Adriano Teixeira de Souza

Page 4: Estrutura de Dados em Java (Funções e Procedimentos)

<tipo> nome_da_função (<tipo> arg1, <tipo> arg2, ..., <tipo> argN)

{

<corpo da função>

return valor_de_retorno;

}

<tipo> nome_da_função (<tipo> arg1, <tipo> arg2, ..., <tipo> argN)

{

<corpo da função>

return valor_de_retorno;

}

Funções:: Como declarar

Prof. Adriano Teixeira de Souza

Page 5: Estrutura de Dados em Java (Funções e Procedimentos)

int soma(int a, int b){

int c;c = a + b;return c;

}

int soma(int a, int b){

int c;c = a + b;return c;

}

Exemplo de uma função:

Funções:: Como declarar

Prof. Adriano Teixeira de Souza

Page 6: Estrutura de Dados em Java (Funções e Procedimentos)

int soma(int a, int b){

int c;c = a + b;return c;

}

int soma(int a, int b){

int c;c = a + b;return c;

}

Funções:: Como declarar

Toda função deve ter um tipo (String, int, float), o qual indicará o tipo de seu valor de retorno (saída).

Os argumentos (ou parâmetros) indicam o tipo e quais valores são

esperados para serem manipulados pela função (entrada).

Corpo da função

Prof. Adriano Teixeira de Souza

Page 7: Estrutura de Dados em Java (Funções e Procedimentos)

Uma função pode não ter argumentos, basta não informá-los. Exemplo:

Funções:: Como declarar

int random(){

Random rand = new Random();

return rand.nextInt(100);}

int random(){

Random rand = new Random();

return rand.nextInt(100);}

Prof. Adriano Teixeira de Souza

Page 8: Estrutura de Dados em Java (Funções e Procedimentos)

A expressão contida no comando return é chamado de valor de retorno da função.

Esse comando é sempre o último a ser executado por uma função. Nada após ele será executado.

As funções só podem ser declaradas fora de outras funções. Lembre-se que o corpo do programa principal (main(String[] args)) é uma função!

Funções:: Como declarar

Prof. Adriano Teixeira de Souza

Page 9: Estrutura de Dados em Java (Funções e Procedimentos)

Uma forma clássica de realizarmos a invocação (ou chamada) de uma função é atribuindo o seu valor a uma variável:

Na verdade, o resultado da chamada de uma função é uma expressão, que pode ser usada em qualquer lugar que aceite uma expressão:

resultado = soma(x,y);resultado = soma(x,y);

System.out.println("Soma: ”+ soma(a,b) );System.out.println("Soma: ”+ soma(a,b) );

Funções:: Invocando

Prof. Adriano Teixeira de Souza

Page 10: Estrutura de Dados em Java (Funções e Procedimentos)

Função que calcula a soma dos valores de x e y:

static int x, y, resultado;static int soma(int a, int b){ return (a + b);}

public static void main(String[] args){ x = 3; y = 5; resultado = soma(x, y); System.out.println(resultado);}

static int x, y, resultado;static int soma(int a, int b){ return (a + b);}

public static void main(String[] args){ x = 3; y = 5; resultado = soma(x, y); System.out.println(resultado);}

Funções:: Invocando

Prof. Adriano Teixeira de Souza

Page 11: Estrutura de Dados em Java (Funções e Procedimentos)

As variáveis x e y no exemplo anterior são chamadas de parâmetros reais.

Conforme exemplo anterior, os argumentos não possuem necessariamente os mesmos nomes que os parâmetros que a função espera.

Seus valores são apenas copiados para a função chamada, sem ser afetados pelas alterações nos parâmetros dentro da função.

Funções:: Invocando

Prof. Adriano Teixeira de Souza

Page 12: Estrutura de Dados em Java (Funções e Procedimentos)

O tipo void É utilizado em procedimentos. É um tipo que representa o “nada”, ou seja:

◦ uma variável desse tipo armazena conteúdo indeterminado,

◦ uma função desse tipo retorna um conteúdo indeterminado.

Indica que uma função não retorna nenhum valor, ou seja, é um procedimento.

Prof. Adriano Teixeira de Souza

Page 13: Estrutura de Dados em Java (Funções e Procedimentos)

void nome_do_procedimento (<tipo> parâmetro1, <tipo> parâmetro2, ..., <tipo> parâmetroN)

{<corpo do procedimento>

}

void nome_do_procedimento (<tipo> parâmetro1, <tipo> parâmetro2, ..., <tipo> parâmetroN)

{<corpo do procedimento>

}

Procedimentos:: Como declarar

Prof. Adriano Teixeira de Souza

Page 14: Estrutura de Dados em Java (Funções e Procedimentos)

Exemplo de procedimento:

void imprime_dobro(int x) {

System.out.println("Dobro de x: ”+ 2*x);}

void imprime_dobro(int x) {

System.out.println("Dobro de x: ”+ 2*x);}

Procedimentos:: Como declarar

Prof. Adriano Teixeira de Souza

Page 15: Estrutura de Dados em Java (Funções e Procedimentos)

Para invocarmos um procedimento, devemos utilizá-lo como qualquer outro comando:

Compare a diferença de invocação de uma função:

procedimento(parâmetros);procedimento(parâmetros);

resultado = função(parâmetros);resultado = função(parâmetros);

Procedimentos:: Invocando

Prof. Adriano Teixeira de Souza

Page 16: Estrutura de Dados em Java (Funções e Procedimentos)

static int x, y, resultado;

static void soma() {

resultado = x + y;}

public static void main(String[] args) {

x = 3; y = 5;soma();System.out.println(resultado);

}

static int x, y, resultado;

static void soma() {

resultado = x + y;}

public static void main(String[] args) {

x = 3; y = 5;soma();System.out.println(resultado);

}

Procedimentos:: Invocando

Prof. Adriano Teixeira de Souza

Page 17: Estrutura de Dados em Java (Funções e Procedimentos)

Parâmetros ou argumentos são os valores recebidos e/ou retornados por uma função.

Podem ser divididos em duas categorias:

◦ Formais: correspondem aos parâmetros utilizados na definição da função.

◦ Reais: correspondem aos parâmetros da função chamadora utilizados para chamar a função.

Parâmetros

Prof. Adriano Teixeira de Souza

Page 18: Estrutura de Dados em Java (Funções e Procedimentos)

static int soma(int a, int b){

return (a + b);}

public static void main(String[] args) {

int x = 3; int y = 5;System.out.println(soma(x + y));

}

static int soma(int a, int b){

return (a + b);}

public static void main(String[] args) {

int x = 3; int y = 5;System.out.println(soma(x + y));

}

Parâmetros reais

Parâmetros formais

Parâmetros

Prof. Adriano Teixeira de Souza

Page 19: Estrutura de Dados em Java (Funções e Procedimentos)

É o mecanismo de informar sobre quais valores o processamento definido na função deve ser realizado.

Os parâmetros são passados para uma função de acordo com a sua posição.

Os parâmetros formais de uma função se comportam como variáveis locais (criados na entrada e destruídos na saída)

No caso do Java, esta variável pode representar um tipo primitivo ou um objeto.

Existem duas categorias:◦ Por valor◦ Por referência

Passagem de Parâmetros

Prof. Adriano Teixeira de Souza

Page 20: Estrutura de Dados em Java (Funções e Procedimentos)

1011 0011

1111 0101

0101 1010

0001 1001

0000 00011011 0011

1111 0101

0101 1010

0001 1001

0000 00011011 0011

1111 0101

0101 1010

0001 1001

0000 00011011 0011

1111 0101

0101 1010

0001 1001

0000 0001

1011 0011

1111 0101

0101 1010

0001 1001

var

var_interna

1111 0101

0101 1010

0001 1001

0000 0001

Passagem de Parâmetros:: Passagem por valor

Os valores das variáveis externas (função chamadora) são copiados para as variáveis internas da função chamada.

Alteração no valor das variáveis terá efeito local à função chamada.

Prof. Adriano Teixeira de Souza

Page 21: Estrutura de Dados em Java (Funções e Procedimentos)

Passagem de Parâmetros:: Passagem por valor

Quando passamos uma variável do tipo primitivo para um método chamamos esta passagem de passagem por valor.

A variável original que foi informada na chamada da função não é alterada. Uma cópia do valor da mesma é passada para ser utilizada dentro do método.

Por isso chamamos de passagem por valor.

Page 22: Estrutura de Dados em Java (Funções e Procedimentos)

Passagem de Parâmetros:: Passagem por valor

public class PassagemValor { public static int quadrado(int x) { x=x*x; return x; }

public static void main(String args[]) { int x = 3,y; y = quadrado(x); System.out.println(“quadrado de ”+x+“=”+y); } }

Exemplo de passagem de parâmetro por valor

Page 23: Estrutura de Dados em Java (Funções e Procedimentos)

Passagem por valor

Toda passagem de parâmetros no Javaé feita por valor!

A cada chamada de método, os parâmetros são copiados e estas cópias são utilizadas na execução do mesmo.

Page 24: Estrutura de Dados em Java (Funções e Procedimentos)

Os valores das variáveis externas não são passados para a função, mas sim os seus endereços.

Ocorre alteração no valor das variáveis externas.

Passagem de Parâmetros:: Passagem por referência

Prof. Adriano Teixeira de Souza

Page 25: Estrutura de Dados em Java (Funções e Procedimentos)

1011 0011

1111 0101

0101 1010

0001 1001

0000 00011011 0011

1111 0101

0101 1010

0001 1001

0000 00011011 0011

1111 0101

0101 1010

0001 1001

0000 00011011 0011

1111 0101

0101 1010

0001 1001

0000 00011011 0011

1111 0101

0101 1010

0001 1001

var

Passagem de Parâmetros:: Passagem por referência

Prof. Adriano Teixeira de Souza

Page 26: Estrutura de Dados em Java (Funções e Procedimentos)

Uma desvantagem da passagem por valor é que, se um item de dados grande está sendo passado, copiar esses dados pode consumir um tempo de processamento considerável.

Passagem de Parâmetros

Prof. Adriano Teixeira de Souza

Page 27: Estrutura de Dados em Java (Funções e Procedimentos)

Passagem de objetos No caso de objetos, a referência dos

mesmos é passada por valor, portanto não é possível alterar a referência de uma variável através de um método.

Mas o conteúdo dos objetos podem ser alterados e estes são mantidos mesmo após a execução do método. Por isso merecem um tratamento diferenciado.

Page 28: Estrutura de Dados em Java (Funções e Procedimentos)

Passagem por objetos Quando passamos uma variável do tipo

objeto, na realidade apenas a referência do objeto é passada para o método. O objeto em questão está ativo e acessível através desta referência.

Os atributos dos objetos podem ser alterados e estas alterações serão mantidas mesmo após a execução do método.

Page 29: Estrutura de Dados em Java (Funções e Procedimentos)

Passagem por objetos

public class PassagemObjetos { public static void alteraMsg(StringBuffer sb) { sb.append(“ alterada”); }

public static void main(String args[]) { StringBuffer sb = new StringBuffer(“mensagem”); alteraMsg(sb); System.out.println(sb.toString()); } }

Page 30: Estrutura de Dados em Java (Funções e Procedimentos)

Passagem por objetos

Outra forma de se utilizar objetos para passar parâmetros é utilizando “arrays”.

Ao invés de passar uma variável diretamente por parâmetro utilizamos um vetor da seguinte forma:

Page 31: Estrutura de Dados em Java (Funções e Procedimentos)

Passagem por objetospublic class PassagemObjetosArray { public static void quadrado(int i[]) { i[0]=i[0]*i[0]; }

public static void main(String args[]) { int i[] = new int[1]; i[0]=3; quadrado(i); System.out.println(“resultado=”+i[0]); } }

Note que utilizamos um vetor de uma posição só. Não é uma solução elegante, pois à primeira vista do programa podemos equivocadamente imaginar que o vetor possui uma função diferente. Pois o conceito de vetor não foi idealizado para esta finalidade.

Page 32: Estrutura de Dados em Java (Funções e Procedimentos)

Prof. Adriano Teixeira de Souza

1) Faça um programa que:◦ Leia um vetor “turma” de 5 alunos◦ Cada registro/objeto de aluno deve ter o numero

de matrícula do aluno e suas notas de 4 bimestres.

◦ Faca um procedimento que Imprima a lista de matrícula e notas de cada aluno

◦ Faca uma funcao que tenha como parametro um objeto Aluno e retorne a média das 4 nota

◦ Percorra o vetor de alunos e imprima a matricula e a média calculada( pela funcao criada) para cada aluno.

Exercício

Page 33: Estrutura de Dados em Java (Funções e Procedimentos)

Prof. Adriano Teixeira de Souza

2) Escreva um programa em Java que manipule um vetor de registros com dados de 10 trabalhadores de uma empresa, conforme a estrutura a seguir:

◦ int id;◦ String nome;◦ char sexo;◦ float salario;

O programa deve ter as seguintes funções:

◦ a) uma função para ler os dados dos 10 funcionários.◦ b) uma procedimento que receba por referência a lista e exiba os dados dos 10

funcionários.◦ c) uma função que receba, como parâmetro, um caractere correspondente ao

sexo e a lista para exibir os dados somente dos funcionários do respectivo sexo.◦ d) uma procedimento que receba por referência a lista de funcionários e

atualize o salário de todos os funcionários de acordo com o percentual informado como parâmetro.

Exercício