programaÇÃo - introduÇÃo george gomes cabral. decomposiÇÃo dividir para conquistar: paradigma...
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc15e497959413d8e5d81/html5/thumbnails/17.jpg)