programaÇÃo - introduÇÃo george gomes cabral. decomposiÇÃo dividir para conquistar: paradigma...

17
PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral

Upload: internet

Post on 21-Apr-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

PROGRAMAÇÃO - INTRODUÇÃOGeorge Gomes Cabral

Page 2: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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.

Page 3: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

DECOMPOSIÇÃO

Exemplo: Mergesort.

Page 4: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

DECOMPOSIÇÃO

Exemplo: Sistema de Vendas.

Sistema de vendas

Módulo de estoque

Módulo de faturamento

Módulo de clientes

Módulo de canais de venda

Page 5: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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.

Page 6: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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

HumanosMacacos

Roedores

Page 7: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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);

Page 8: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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.

Page 9: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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.

Page 10: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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 coeficientefloat ans = coef/2.0;int i = 1;while(i < 7){ ans = ans – ((ans * ans – coef)/(2.0*ans)); i++;}return ans;

}

Page 11: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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.

Page 12: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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

}

Page 13: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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.

..

..

}

Page 14: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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;

}

Page 15: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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.

Page 16: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta

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.

Page 17: PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta