• Nenhum resultado encontrado

Algoritmia e Programação APROG. Modularidade. Algoritmia e Java. Nelson Freire (ISEP DEI-APROG 2012/13) 1/29

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmia e Programação APROG. Modularidade. Algoritmia e Java. Nelson Freire (ISEP DEI-APROG 2012/13) 1/29"

Copied!
29
0
0

Texto

(1)

Nelson Freire (ISEP–DEI-APROG 2012/13) 1/29

Modularidade

Algoritmia e Java

(2)

Nelson Freire (ISEP–DEI-APROG 2012/13) 2/29

 Introdução

 Noção de Modularidade

 Execução de Programa Modular

 Motivações para Usar

 Formas de Comunicação entre Módulos

 Variáveis Globais  Passagem de Parâmetros  Algoritmia  Tipos de Módulos  Função  Procedimento  Algoritmo Modular  Estrutura Geral

 Comunicação entre Módulos  Gestão de Memória  Linguagem Java  Tipos de Módulos  Classe  Método  Classe  Instância

 Codificação de Algoritmo Modular em Java

(3)

Nelson Freire (ISEP–DEI-APROG 2012/13) 3/29

Mecanismo fornecido pelas Linguagens de Programação ...

... que permite decomposição dum programa em módulos  Estrutura Geral de um Programa Modular

 Módulo

 Sequência de instruções que executa tarefa específica  Exemplos

 RAIZQUADRADA() e ALEATORIO() // Módulos pré-definidos  Módulo Principal (ou Programa Principal)

 Primeiro módulo executado  Controla execução do programa

Módulo 1 Módulo 2 Módulo 3

Módulo Principal

(4)

Nelson Freire (ISEP–DEI-APROG 2012/13) 4/29 instrução 1 instrução i instrução i+1 instrução n instrução 1 instrução m Módulo Principal ou Outro Módulo Módulo Chamada Retorno

 Controlada pelo Módulo Principal

 Na chamada de um módulo, controlo passa temporariamente para módulo chamado  Após execução de módulo, controlo retorna para módulo que o chamou

(5)

Nelson Freire (ISEP–DEI-APROG 2012/13) 5/29

 Principais

 Decomposição de programa em blocos mais pequenos  Reduzir a complexidade do desenvolvimento

 Aplicação direta da estratégia dividir-para-conquistar (abordagem top-down)  Tornar mais rápido o desenvolvimento

 Módulos independentes podem ser criados em paralelo  Reutilização de módulos

 Tornar mais rápido desenvolvimento  Tornar programa mais pequeno  Abstração da implementação de tarefa

 Facilitar o desenvolvimento

 Programador abstrai-se dos detalhes da implementação

 Exemplo

 RAIZQUADRADA(x)  Síntese

 Facilitar

 Tornar mais rápido

Introdução

Motivações para Usar

desenvolvimento de programas Decomposição Reutilização Programa Módulo 1 Módulo 2 Módulo 4 Módulo Principal Módulo 3 ) ! )! ( ! ( p p n n n p C   )) ( 2 ) ( 1 ) ( (g xf xf x

(6)

Nelson Freire (ISEP–DEI-APROG 2012/13) 6/29

 Introdução

 Noção de Modularidade

 Execução de Programa Modular

 Motivações para Usar

 Formas de Comunicação entre Módulos

 Variáveis Globais  Passagem de Parâmetros  Algoritmia  Tipos de Módulos  Função  Procedimento  Algoritmo Modular  Estrutura Geral

 Comunicação entre Módulos  Gestão de Memória  Linguagem Java  Tipos de Módulos  Classe  Método  Classe  Instância

 Codificação de Algoritmo Modular em Java

(7)

Nelson Freire (ISEP–DEI-APROG 2012/13) 7/29

 Variáveis Globais

 Passagem de Parâmetros

Comunicação

entre Módulos

Formas

Módulo 1

Módulo Principal Módulo n

(8)

Nelson Freire (ISEP–DEI-APROG 2012/13) 8/29

 Definição

 Varíáveis de âmbito global  Acessíveis a qualquer módulo  Declaração

 Fora dos módulos  Algoritmia

 Estrutura Geral com Variáveis Globais

 Desvantagens

 Dificultam a compreensão do algoritmo

 Preciso analisar todo algoritmo para verificar forma como são utilizadas  Consequentemente

 Dificuldades de deteção de erros aumentam com dimensão do algoritmo  Dificultam reutilização dos módulos noutros algoritmos

 Requer existência das mesmas variáveis globais  Solução

 Usar apenas variáveis locais

 Comunicação entre módulos através da passagem de parâmetros

Módulo 1

Módulo Principal

Declaração de Variáveis Globais

Módulo n

Comunicação

(9)

Nelson Freire (ISEP–DEI-APROG 2012/13) 9/29

 Definição

 Declaradas dentro de módulos

 Âmbito local, i.e., acessíveis apenas dentro dos módulos aonde são declaradas  Só existem durante execução do respectivo módulo

 Algoritmia

 Estrutura Geral com Variáveis Locais

 Vantagens

 Módulos são independentes // caixas negras

 Facilitam desenvolvimento e testes dos programas Módulo 1 Variáveis Locais

Módulo Principal

Módulo n Variáveis Locais Variáveis Locais Comunicação

(10)

Nelson Freire (ISEP–DEI-APROG 2012/13) 10/29

 Meio de Comunicação entre Módulos Independentes  Módulos que usam apenas variáveis locais

 Mecanismo de Passagem de Parâmetros  Parâmetros

 Funcionam como variáveis locais // âmbito local

 Suportam a transferência de informação entre módulos // por cópia  Entrada de Dados

 Saída de Resultados  Tipos de Parâmetros

 Formais // do módulo chamado; também designados apenas parâmetros

 Atuais // usados na chamada dum módulo para inicializar os seus parâmetros formais // designados também argumentos

Módulo

Dados Resultados

Módulo que Chama Módulo Chamado

Parâmetros Formais

Módulo

Parâmetros Actuais

Comunicação

(11)

Nelson Freire (ISEP–DEI-APROG 2012/13) 11/29

 Introdução

 Noção de Modularidade

 Execução de Programa Modular

 Motivações para Usar

 Formas de Comunicação entre Módulos

 Variáveis Globais  Passagem de Parâmetros  Algoritmia  Tipos de Módulos  Função  Procedimento  Algoritmo Modular  Estrutura Geral

 Comunicação entre Módulos  Gestão de Memória  Linguagem Java  Tipos de Módulos  Classe  Método  Classe  Instância

 Codificação de Algoritmo Modular em Java

(12)

Nelson Freire (ISEP–DEI-APROG 2012/13) 12/29

 Paradigma de Programação  Procedimental

 Orientada aos procedimentos // Procedimentos = Módulos  Tipos de Módulos

 Função

 Procedimento

 Estrutura Geral de Algoritmo Modular

Procedimento 1

Programa

Principal

Função 1

(13)

Nelson Freire (ISEP–DEI-APROG 2012/13) 13/29

 Definição

 Módulo que executa uma sequência de instruções e, no final, retorna um valor no ponto da sua chamada

 Exemplo do SENO de um ângulo

resultado  2 + seno(pi/2) // seno(pi/2) é substituído por 1 (valor retornado)  Motivação para Criar

 Usar numa expressão  Exemplos de expressões

 Numérica

resultado  100 + raízquadrada(25)  Alfanumérica

nome  apelido(“Rui Costa”)  Booleana

SE ( valido(valor) = VERDADEIRO ) ENTÃO ESCREVER(valor)

FSE

Função

1/2

(14)

Nelson Freire (ISEP–DEI-APROG 2012/13) 14/29

 Declaração  Sintaxe

DEFINIR tipo_retornado nome (tipo pf1, ..., tipo pfn) // cabeçalho ED // variáveis e constantes locais (*)

INÍCIO

// corpo da função

RETORNAR expressão_do_tipo_retornado (**) FDEF

 Exemplo

DEFINIR INTEIROfuncao(INTEIRO x, INTEIRO y) ED INTEIRO res INÍCIO SE (x≥0) ENTÃO res  x+y SENÃO res  x-y FSE

RETORNAR res // res é do tipo_retornado FDEF

 Chamada

 Sintaxe: nome(pa1,pa2, ..., pan)

 Exemplo: resultado  5 + funcao(23, 2)

• Lista de parâmetros formais (pf) • Opcionais (  lista pode ser vazia) • Nome pode ser qualquer

• Independente dos param. actuais • Funcionam como variáveis locais

• Só visíveis dentro da função

• Inicializadas pelos parâmetros actuais no momento da chamada da função

• Lista de parâmetros actuais (argumentos) • Coincidem em número e tipo com os pf

• Inicializam os parâmetros formais com uma cópia

(*)

• Têm âmbito local

• Só visíveis dentro da função

• Só existem durante execução da função

Função

2/2

Algoritmia

(**)

• Só pode retornar 1 valor • Termina execução da função

(15)

Nelson Freire (ISEP–DEI-APROG 2012/13) 15/29

 Definição

 Módulo que executa sequência de instruções  Motivação para Criar

 Usar como instrução  Exemplo

 ESCREVER(“Olá”)  Declaração

DEFINIR nome (tipo pf1, tipo pf2, ...., tipo pfn) ED // variáveis locais INÍCIO // corpo do procedimento FDEF  Chamada  Sintaxe: nome(pa1, pa2, ..., pan) Algoritmia

Procedimento

(16)

Nelson Freire (ISEP–DEI-APROG 2012/13) 16/29 //Programa Principal

ED // declarações de variáveis e constantes locais INÍCIO

// Corpo do programa principal FIM

// Procedimento

DEFINIR nomeProcedimento(lista_parâmetros_formais) // cabeçalho ED // declarações de variáveis e constantes locais

INÍCIO

// corpo do procedimento FDEF

// Função

DEFINIR tipo_de_valor_retornado nomeFunção(lista_parâmetros_formais) // cabeçalho ED // declarações de variáveis e constantes locais

INÍCIO

// corpo da função contendo a instrução RETORNAR FDEF

 Ordem dos módulos é arbitrária

(17)

Nelson Freire (ISEP–DEI-APROG 2012/13) 17/29

 Introdução

 Noção de Modularidade

 Execução de Programa Modular

 Motivações para Usar

 Formas de Comunicação entre Módulos

 Variáveis Globais  Passagem de Parâmetros  Algoritmia  Tipos de Módulos  Função  Procedimento  Algoritmo Modular  Estrutura Geral

 Comunicação entre Módulos  Gestão de Memória  Linguagem Java  Tipos de Módulos  Classe  Método  Classe  Instância

 Codificação de Algoritmo Modular em Java

(18)

Nelson Freire (ISEP–DEI-APROG 2012/13) 18/29

 Código e Dados estão separados  Program Counter

 Controla a execução do Código

 Guarda o endereço da instrução corrente do programa  Incrementado depois da execução de cada instrução  Stack

 Guarda dados do programa

 Sempre que é chamado um módulo

 É adicionado um segmento de memória, chamado registo de activação (RA)

 O RA serve para guardar os parâmetros formais e as variáveis locais do módulo

 O EP é colocado a apontar para esse registo de activação  Quando termina a execução do módulo

 O RA é libertado da stack // disciplina LIFO

 O EP é colocado a apontar para a sua posição anterior  Registos

 Para guardar temporariamente endereços e dados

... Registos ... Program Counter Environment Pointer (EP) Código ... Dados Stack Gestão de

(19)

Nelson Freire (ISEP–DEI-APROG 2012/13) 19/29 // Módulo Principal ED : INTEIRO n, r, s INÍCIO n3 r  factorial(n) s  factorial(n-1) FIM

DEFINIR INTEIRO factorial(INTEIRO x) ED : INTEIRO f, i

INÍCIO

f  1

PARA (ix ATÉ 1 PASSO -1) FAZER f  f * i FIMPARA RETORNAR f FIMDEFINIR L 1 2 3 5 6 7 8 S L n r s S L 3 n 7 r 3 x 6 s f 2 i S L RA do factorial RA do módulo principal Legenda: Alteração corrente S: Stack L: Linha do programa 3 n 2 r s 3 x f i 3 n 5 r s 3 x 1 f i 3 n 6 r s 3 x 1 f 3 i i 3 n 7 r 3 x 3 3 s f 3 S L 3 n 5 6 r 2 x 1 s f i 3 n 6 6 r s 2 x 1 f 2 i S L 3 n 1 r s S L 3 n 8 6 r 2 s 3 n 6 6 r 2 x 2 s f 1 i 3 n 7 r 3 x 6 s f 1 i 3 n 6 r 3 x 6 s f 1 i S L 3 n 6 r 3 3 s 2 2 x f i 3 n 6 r 3 x 6 s f 0 i 3 n 8 6 r s 3 n 7 6 r 2 x 2 s f 1 i 3 n 7 6 r 2 x 2 s f 2 i 3 n 6 6 r 2 x 2 s f 0 i 3 n 3 6 r 2 x s f i

Mecanismo de Passagem de Parâmetros

1/3

Gestão de Memória

(20)

Nelson Freire (ISEP–DEI-APROG 2012/13) 20/29

 Conclusões

 É passado para módulo chamado uma cópia do parâmetro actual  Parâmetro Formal de Tipo Primitivo

 Passada cópia de um valor

 Módulo chamado não tem acesso ao parâmetro atual

 Alterações posteriores do parâmetro formal não afetam parâmetro actual  Funciona apenas como parâmetro de entrada

 Exemplo

public class Exemplo{

public static void main(String[] args){ int c=0;

m(c);

System.out.println("C=" + c); }

private static void m(int c){ c=1; } } // Programa escreve C=0 RAM (do main) c 0 0 ... (do m) c RAM (do main) c 0 1 ... (do m) c Na chamada de m Na execução de m

Mecanismo de Passagem de Parâmetros

2/3

Gestão de Memória

(21)

Nelson Freire (ISEP–DEI-APROG 2012/13) 21/29

 Conclusões (continuação)

 Parâmetro Formal de Tipo Não-Primitivo  Passada cópia de uma referência

 Módulo chamado tem acesso ao parâmetro actual

 Alterações posteriores do parâmetro formal afetam parâmetro atual  Pode funcionar como parâmetro de entrada e saída

 Classe String é excepção

 Chamadas a módulos têm custos de desempenho  Porque é preciso

 Criar e eliminar registo de activação  Copiar parâmetros atuais

 Criação de módulos é um compromisso entre  Facilidade de desenvolvimento

 Desempenho do programa

Mecanismo de Passagem de Parâmetros

3/3

Gestão de Memória

(22)

Nelson Freire (ISEP–DEI-APROG 2012/13) 22/29

 Introdução

 Noção de Modularidade

 Execução de Programa Modular

 Motivações para Usar

 Formas de Comunicação entre Módulos

 Variáveis Globais  Passagem de Parâmetros  Algoritmia  Tipos de Módulos  Função  Procedimento  Algoritmo Modular  Estrutura Geral

 Comunicação entre Módulos  Gestão de Memória  Linguagem Java  Tipos de Módulos  Classe  Método  Classe  Instância

 Codificação de Algoritmo Modular em Java

(23)

Nelson Freire (ISEP–DEI-APROG 2012/13) 23/29

 Tipos de Módulos

 Classe // modularidade ao nível do programa

 Método // modularidade dentro da classe

 Estrutura Geral de Programa Modular  Programação Orientada por Objetos

 Ordem de métodos dentro de uma classe é arbitrária

Classe 1 Classe Principal Main Class Método 1 Método 2 Método n Método 1 Método 2 Método main Programa

(24)

Nelson Freire (ISEP–DEI-APROG 2012/13) 24/29

 Método de uma Classe

 É uma sequência de instruções que realizam uma tarefa específica e no final pode retornar:  Um valor //  Função do algoritmo

ou

 Nada (tipo void) //  Procedimento do algoritmo  Tipos de Métodos

 Métodos de instância  Métodos de classe  Métodos de Instância

 Aplicam-se aos objetos da classe ( Ex: Scanner ler = new Scanner(System.in);

String s = ler.next(); )

 Declarados como métodos não estáticos (static) ( Ex: public String next() { ... } )  Métodos de Classe

 Aplicam-se à classe ( Ex: JOptionPane.showInputDialog(“N?”) )

 Declarados como métodos estáticos ( Ex: public static showInputDialog(String s) { ... } ) Construção de

um Objeto

(25)

Nelson Freire (ISEP–DEI-APROG 2012/13) 25/29  Tipos  Função  Procedimento  Declaração  Tipo Procedimento

modificador_acesso static void nome(tipo pf1, tipo pf2, ...., tipo pfn){ // corpo do método

}

 Tipo Função

modificador_acesso static tipo_retornado nome(tipo pf1, tipo pf2, ...., tipo pfn){ // corpo do método

return expressão; }

 Nota

 Cabeçalhos com static

≠ void

(26)

Nelson Freire (ISEP–DEI-APROG 2012/13) 26/29  Tipos  Função  Procedimento  Declaração  Tipo Procedimento

modificador_acesso void nome(tipo pf1, tipo pf2, ...., tipo pfn){ // corpo do método

}

 Tipo Função

modificador_acesso tipo_retornado nome(tipo pf1, tipo pf2, ...., tipo pfn){ // corpo do método

return expressão; }

 Nota

 Cabeçalho sem static

Linguagem Java

Métodos de Instância

(27)

Nelson Freire (ISEP–DEI-APROG 2012/13) 27/29

 Introdução

 Noção de Modularidade

 Execução de Programa Modular

 Motivações para Usar

 Formas de Comunicação entre Módulos

 Variáveis Globais  Passagem de Parâmetros  Algoritmia  Tipos de Módulos  Função  Procedimento  Algoritmo Modular  Estrutura Geral

 Comunicação entre Módulos  Gestão de Memória  Linguagem Java  Tipos de Módulos  Classe  Método  Classe  Instância

 Codificação de Algoritmo Modular em Java

(28)

Nelson Freire (ISEP–DEI-APROG 2012/13) 28/29

 Linguagem Java

 Pseudo-Código (Algoritmia)

 Estrutura Geral de Algoritmo Modular  Programação Procedimental Procedimento 1

Módulo

Principal

Função 1 Classe Principal (Main Class)  Não é Programação Orientada por Objetos

Método 1

Método 2

Método main

 Todos Métodos de Classe (Estáticos)

 Porque método estático só pode invocar diretamente métodos estáticos

Codificação de

(29)

Nelson Freire (ISEP–DEI-APROG 2012/13) 29/29 private static tipo_retornado nome (..., tipo nome_parâmetro_formal, ...){ // corpo do método

return expressão; }

private static void nome (..., tipo nome_parâmetro_formal, ...){ // corpo do procedimento

} Procedimento

Função

Codificação de

Algoritmo

Codificação dos Módulos do Algoritmo

 Modificadores de Acesso

 private // método só pode ser chamado por métodos da própria classe

 public // método pode ser chamado também por métodos de outras classes

 Sem modificador // método pode ser chamado também por métodos de classes da mesma package // Daí designado modificador de acesso package

Referências

Documentos relacionados