A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta."— Transcrição da apresentação:

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

2 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.

3 DECOMPOSIÇÃO Exemplo: Mergesort.

4 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

5 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.

6 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

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

8 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.

9 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.

10 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; }

11 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.

12 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 }

13 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... }

14 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; }

15 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.

16 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.

17


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

Apresentações semelhantes


Anúncios Google