Modularidade - Departamento de Engenharia Informáticanfreire/MODULARIDADE - Algoritmia e...

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

Transcript of Modularidade - Departamento de Engenharia Informáticanfreire/MODULARIDADE - Algoritmia e...

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