Upload
truongdung
View
215
Download
0
Embed Size (px)
Citation preview
Nelson Freire (ISEP–DEI-APROG 2012/13) 1/29
Modularidade Algoritmia e Java
APROG Algoritmia e Programação
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
Modularidade Sumário
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
Introdução Noção de Modularidade
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
Introdução Execução de Programa Modular
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
)!)!(
!(
ppn
nnpC
))(2)(1)(( xfxfxg
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
Modularidade Sumário
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
Programa
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 entre Módulos Variáveis Globais
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 entre Módulos Variáveis Locais
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 entre Módulos Passagem de Parâmetros
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
Modularidade Sumário
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
Algoritmia Tipos de Módulos
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 Algoritmia
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 INTEIRO funcao(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
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
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
Modularidade Estrutura Geral de Algoritmo Modular
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
Modularidade Sumário
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 Memória Modelo de Memória de um Programa
Nelson Freire (ISEP–DEI-APROG 2012/13) 19/29
// Módulo Principal ED : INTEIRO n, r, s INÍCIO n3 r factorial(n) s factorial(n-1) FIM
DEFINIR INTEIRO factorial(INTEIRO x) ED : INTEIRO f, i INÍCIO f 1 PARA (ix 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
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
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
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
Modularidade Sumário
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
Linguagem Java Tipos de Módulos
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
Linguagem Java Tipos de Métodos
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
Linguagem Java Métodos de Classe
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
≠ void
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
Modularidade Sumário
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 Algoritmo Estrutura Básica do Programa
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