Programação Java - Dei-Isep

Propaganda
Algoritmia e Programação
APROG
Modularidade
Algoritmia e Java
Nelson Freire (ISEP–DEI-APROG 2012/13)
1/29
Modularidade
Sumário
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
2/29
Introdução
Noção de Modularidade

Mecanismo fornecido pelas Linguagens de Programação ...
... que permite decomposição dum programa em módulos

Estrutura Geral de um Programa Modular
Módulo 1
Módulo 2
Módulo 3
Módulo
Principal
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
3/29
Execução de Programa Modular
Introdução
 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
instrução 1
Módulo
instrução m
Chamada
Retorno
instrução 1
instrução i
Módulo
Principal
instrução i+1
ou
Outro Módulo
instrução n
Nelson Freire (ISEP–DEI-APROG 2012/13)
4/29
Motivações para Usar
Introdução
 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
Programa
Módulo 1
Módulo 2
 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
Reutilização
n
(C p 
n!
( n  p )! p!
)
Módulo 3
Módulo 4
Decomposição
( g ( x )  f 1( x )  f 2( x ))
Módulo
Principal
desenvolvimento de programas
Nelson Freire (ISEP–DEI-APROG 2012/13)
5/29
Modularidade
Sumário
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
6/29
Comunicação
entre Módulos
Formas
 Variáveis Globais
 Passagem de Parâmetros
Módulo 1
Módulo n
Módulo Principal
Programa
Nelson Freire (ISEP–DEI-APROG 2012/13)
7/29
Comunicação
entre Módulos
Variáveis Globais
 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
Declaração de Variáveis Globais
Módulo 1
Módulo n
Módulo Principal
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
8/29
Comunicação
entre Módulos
Variáveis Locais
 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
Módulo 1
Variáveis Locais
Módulo n
Variáveis Locais
Módulo Principal
Variáveis Locais
 Vantagens
 Módulos são independentes
 Facilitam desenvolvimento e testes dos programas
Nelson Freire (ISEP–DEI-APROG 2012/13)
// caixas negras
9/29
Comunicação
entre Módulos
Passagem de Parâmetros
 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
Módulo Chamado
Parâmetros Formais
Dados
Resultados
Parâmetros Actuais
Módulo que Chama
Módulo
Nelson Freire (ISEP–DEI-APROG 2012/13)
10/29
Modularidade
Sumário
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
11/29
Algoritmia
Tipos de Módulos
 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
Função 1
Programa
Principal
Nelson Freire (ISEP–DEI-APROG 2012/13)
12/29
Função
Algoritmia
1/2
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
13/29
Função
Algoritmia
2/2
 Declaração
 Sintaxe
DEFINIR tipo_retornado nome (tipo pf1, ..., tipo pfn)
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:
 Exemplo:
nome(pa1,pa2, ..., pan)
resultado  5 + funcao(23, 2)
Nelson Freire (ISEP–DEI-APROG 2012/13)
// cabeçalho
• 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
(*)
• Têm âmbito local
• Só visíveis dentro da função
• Só existem durante execução da função
(**)
• Só pode retornar 1 valor
• Termina execução 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
14/29
Procedimento
Algoritmia
 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)
Nelson Freire (ISEP–DEI-APROG 2012/13)
15/29
Modularidade
Estrutura Geral de Algoritmo Modular
//Programa Principal
ED
 Ordem dos módulos
é arbitrária
// declarações de variáveis e constantes locais
INÍCIO
// Corpo do programa principal
FIM
// Procedimento
DEFINIR nomeProcedimento(lista_parâmetros_formais)
ED
// declarações de variáveis e constantes locais
INÍCIO
// corpo do procedimento
FDEF
// cabeçalho
// Função
DEFINIR tipo_de_valor_retornado nomeFunção(lista_parâmetros_formais)
ED
// declarações de variáveis e constantes locais
INÍCIO
// corpo da função contendo a instrução RETORNAR
FDEF
Nelson Freire (ISEP–DEI-APROG 2012/13)
// cabeçalho
16/29
Modularidade
Sumário
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
17/29
Gestão de
Memória
Modelo de Memória de um Programa
 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
Código
Program
Counter
 Stack
 Guarda dados do programa
 Sempre que é chamado um módulo
 É adicionado um segmento de memória, chamado
registo de activação (RA)
Environment
 O RA serve para guardar os parâmetros formais e as
Pointer (EP)
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
Registos
 O EP é colocado a apontar para a sua posição anterior
 Registos
 Para guardar temporariamente endereços e dados
Nelson Freire (ISEP–DEI-APROG 2012/13)
...
Dados
Stack
...
...
18/29
Gestão de
Memória
L
1
2
3
5
6
7
8
Mecanismo de Passagem de Parâmetros
// 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
S
S
L
S
L
S
L
S
L
S
L
S
n
6 n 3
7 n 3
6 n 3
5 n 3
6 n 3
8 n 3
r
r
r
r
r
r
r
s
s
s
s
s
s
1 n 3
x 3
x 3
x 3
x 2
x 2
r
f 1
f
6
f
6
f
f
2
s
i 3
i
2
i
0
i
i
1
6
1
6
7 n 3
6 n 3
8 n 3
6 n 3
7 n 3
r
r
r
r
r
r
s
s
s
s
x 3
x 3
x 3
f
f 3
i 3
3
f
6
r
i
1
s
5 n 3
6 n 3
7 n 3
r
r
r
s
s
s
x 3
x 3
f 1
i
Nelson Freire (ISEP–DEI-APROG 2012/13)
6
3 n 3
6
x 2
6
6
s
s
x 2
x 2
f
1
f
2
i
2
i
1
7 n 3
6 n 3
f
r
r
i
s
s
x 3
x 2
x 2
f 3
f
6
f
2
f
2
i 2
2
i
1
i
2
i
0
6
6
s 2
2 n 3
i
Legenda:
RA do módulo principal
RA do factorial
Alteração corrente
S: Stack
L: Linha do programa
L
1/3
6
19/29
Gestão de
Memória
Mecanismo de Passagem de Parâmetros
2/3
 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
RAM
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;
}
(do main) c
...
(do m)
c
0
Na chamada de m
RAM
(do main) c
}
// Programa escreve C=0
0
0
...
(do m)
c
1
Na execução de m
Nelson Freire (ISEP–DEI-APROG 2012/13)
20/29
Gestão de
Memória
Mecanismo de Passagem de Parâmetros
3/3
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
21/29
Modularidade
Sumário
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
22/29
Tipos de Módulos
Linguagem Java
 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
Método 1
Método 2
Classe 1
Método n
Programa
Método 1
Método 2
Método main
Nelson Freire (ISEP–DEI-APROG 2012/13)
Classe
Principal
Main
Class
23/29
Linguagem Java
Tipos de Métodos
 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
Construção de
um Objeto
 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) { ... } )
Nelson Freire (ISEP–DEI-APROG 2012/13)
24/29
Linguagem Java
Métodos de Classe
 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;
}
≠ void
 Nota
 Cabeçalhos com static
Nelson Freire (ISEP–DEI-APROG 2012/13)
25/29
Métodos de Instância
Linguagem Java
 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
≠ void
 Cabeçalho sem static
Nelson Freire (ISEP–DEI-APROG 2012/13)
26/29
Modularidade
Sumário
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
27/29
Codificação de
Algoritmo
Estrutura Básica do Programa
 Pseudo-Código (Algoritmia)
 Linguagem Java
 Estrutura Geral de Algoritmo Modular
 Programação Procedimental
Procedimento 1
 Não é Programação Orientada por Objetos
Método 1
Função 1
Método 2
Módulo
Principal
Método
main
Classe
Principal
(Main Class)
 Todos Métodos de Classe (Estáticos)
 Porque método estático só pode invocar
diretamente métodos estáticos
Nelson Freire (ISEP–DEI-APROG 2012/13)
28/29
Codificação de
Algoritmo
Codificação dos Módulos do Algoritmo
Procedimento
private static void nome (..., tipo nome_parâmetro_formal, ...){
// corpo do procedimento
}
Função
private static tipo_retornado nome (..., tipo nome_parâmetro_formal, ...){
// corpo do método
return expressão;
}
 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
Nelson Freire (ISEP–DEI-APROG 2012/13)
29/29
Download