PROGRAMAÇÃO - INTRODUÇÃO
George Gomes Cabral
DECOMPOSIÇÃO

Dividir para conquistar: Paradigma básico para
tratamento de grandes problemas.


Nossa meta na decomposição de um programa é a
criação de módulos que são programas menores que
interagem entre si de maneira simples e bem
definida.
Durante a decomposição, o problema original é
quebrado de forma que:
Cada subproblema está no mesmo nível de detalhe
(dificuldade);
 Cada subproblema pode ser resolvido
independentemente; e
 As soluções dos subproblemas podem ser combinadas
de forma a resolver o problema original.

DECOMPOSIÇÃO

Exemplo: Mergesort.
DECOMPOSIÇÃO

Exemplo: Sistema de Vendas.
Módulo de
estoque
Módulo de
faturamento
Módulo de
clientes
Sistema de
vendas
Módulo de
canais de
venda
DECOMPOSIÇÃO

Porém.....

Se o problema é grande e mal entendido, a
decomposição pode gerar subproblemas que não
resolvem o todo. Nem sempre é simples decompor um
problema.
ABSTRAÇÃO


Maneira de realizar a decomposição de forma
produtiva, alterando o nível de detalhamento a
ser considerado.
Nos permite esquecer informações e dessa forma
tratar coisas diferentes como se fossem a mesma.

Isso é feito no intuito de simplificar nossa análise,
separando atributos relevantes de irrelevantes.
Mamíferos
Primatas
Macacos
Roedores
Humanos
ABSTRAÇÃO
//nivel baixo de abstração
found = false
for(int i = 0; i < a.length; i++){
if(a[i] == e){
z = i;
found = true;
}
}
//nível alto de abstração
found = a.isIn(e);
if(found)
z = a.indexOf(e);
ABSTRAÇÃO


O quê é preferível ? Uma linguagem com um alto
grau de abstração ou uma linguagem que forneça
a seu usuário mecanismos para criar suas
próprias abstrações ?
Mecanismos disponíveis de abstração:
Abstração por parametrização.
 Abstração por especificação.

ABSTRAÇÃO POR PARAMETRIZAÇÃO


Importante forma de conseguir generalização em
programas.
Abstrai a identidade dos dados os substituindo
por parâmetros.
Nos permite representar um conjunto potencialmente
infinito de diferentes computações com um único
programa que é uma abstração de todas as computações.
 Exemplo: x * x + y * y


Programadores freqüentemente utilizam
abstração por parametrização sem notar que o
estão utilizando.
ABSTRAÇÃO POR ESPECIFICAÇÃO


Nos permite abstrair a computação (ou computações) realizadas no
corpo do procedimento.
Fazemos isso associando a cada procedimento uma especificação de
seu efeito desejado e dessa forma considerando o significado da
chamada ao procedimento ao invés do que está contido no corpo do
procedimento.
float sqrt(float coef){
//requer: coef > 0
//efeito: retorna uma aproximação da raiz
//quadrada do coeficiente
float ans = coef/2.0;
int i = 1;
while(i < 7){
ans = ans – ((ans * ans – coef)/(2.0*ans));
i++;
}
return ans;
}
ABSTRAÇÃO DE DADOS




Mecanismo mais importante de abstração
Nos permite estender a linguagem de
programação em uso com novos tipos de dados.
Os novos tipos de dados devem incorporar
abstração por especificação e parametrização (A
criação de um novo tipo inclui a criação de
operações para o mesmo).
Em JAVA Novos tipos são definidos por classes
ou interfaces.
ABSTRAÇÃO DE DADOS

Forma da especificação de abstração de dados.
visibilidade class dname {
//OVERVIEW: rápida descrição do
//comportamento dos objetos desse tipo.
//construtores
//especificação dos construtores
//métodos
//especificações dos métodos
}
ABSTRAÇÃO DE DADOS

Exemplo
public class IntSet {
//OVERVIEW: IntSets são modificáveis, //ilimitados conjuntos de inteiros.
// Um típico IntSet é {x1, ... , xn}
//construtores
public IntSet(){}
public void insere(int x)
//MODIFICA: esse objeto
//EFEITO: adiciona x aos elementos desse objeto.
..
..
}
UTILIZANDO ABSTRAÇÕES DE DADOS
Public static IntSet getElements (int[] a) throws
NullPointerException{
//EFEITO: Se a é nulo levanta uma exceção do tipo
//NullPointerException, senão, retorna um conjunto contendo os
//elementos de a.
IntSet s = new IntSet();
for(int i = 0; i < a.length; i++) s.insert(a[i]);
return s;
}
ABSTRAÇÃO DE DADOS



Exercício:
Implementar uma abstração de um triângulo que
verifique se ele é isósceles, escaleno, eqüilátero e
retângulo. No construtor deve se checar se a
entrada do usuário consiste em um triângulo
válido.
Implementar um tipo de dados Fila.
ABSTRAÇÃO DE DADOS




Métodos Adicionais. Cada tipo abstrato deve ter
implementações únicas desses métodos.
Equals : verifica se dois objetos de um
determinado tipo são iguais.
Clone : deve retornar um objeto que tem o mesmo
estado do objeto clonado.
toString : retorna uma string mostrando o tipo e
o estado atual do objeto.
Download

Abstração