Anda di halaman 1dari 44

Abstração

Sumário

Parte 01 Definição
Parte 02 Tipos de Abstração
Parte 03 Tipos Abstratos de Dados
Parte 04 Questões de Projeto
Definição
Definição - Abstração

“ Uma abstração é uma visualização ou uma representação de uma


entidade que inclui somente os atributos de importância em um
contexto particular. Ela permite que se colete instâncias de entidades


em grupos onde todos os atributos comuns são abstraídos. Somente
os atributos que distinguem as instâncias precisam ser considerados.
R. W. Sebesta (2012)
Definição - Abstração

❏ Representação dependente do contexto:


❏ A abstração de uma entidade dependerá do problema a
ser resolvido e do indivíduo que a criará

❏ É uma arma contra a complexidade da programação:


❏ Simplifica bastante o processo de desenvolvimento
❏ Necessário na realização de uma Modelagem Conceitual
Modelagem Conceitual

A empresa CompreMais deseja elaborar um sistema


para automatizar a venda de seus produtos. Você ficou
responsável por fazer o algoritmo responsável pela
elaboração da nota fiscal das vendas.
Modelagem Conceitual

TAMANHO COR

PREÇO CÓDIGO

TECIDO NOME
Modelagem Conceitual

TAMANHO COR
“M” “BRANCA”

PREÇO CÓDIGO
“R$ 40,00” “BL42”

TECIDO NOME
“ALGODÃO” “BLUSA”
Modelagem Conceitual

TAMANHO COR
“M” “Branca”

PREÇO CÓDIGO
“R$ 40,00” “BL42”

TECIDO NOME
“ALGODÃO” “BLUSA”
Na nota fiscal estaria assim: “BLUSA DE ALGODÃO R$ 40,00”
Modelagem Conceitual

❏ Problema computacional define um problema do mundo real


❏ Representar o mundo real de maneira simplificada:
❏ Não é necessário o tamanho da camisa para a nota fiscal
❏ Mas o tamanho pode ser necessário para o estoque
❏ O objetivo é minimizar a complexidade do problema:
❏ Reflete os aspectos mais importantes do desenvolvimento
❏ Deixa em segundo plano os aspectos não relevantes
Encapsulamento
Considere o Problema

Considere o caso onde você está desenvolvendo um


sistema em C. Inicialmente, tratava-se de um sistema
pequeno e simples. Contudo, com o passar do tempo, o
sistema se estendeu para além de algumas milhares de
linhas de código e aumentou sua complexidade. Isso
pode gerar problemas correto?
Dois problemas práticos

Problema na Recompilação
Recompilação pode ser dispendiosa e demorada

Problema Organizacional
Manutenção adminstrável de subprogramas
Solução dos Problemas

❏ Formas de organizar o código e simplificar a recompilação


❏ Forma de organizar o código:
❏ Organizar subprogramas e dados em containers sintáticos
❏ Cada container conterá dados logicamente relacionados
❏ Forma de simplificar a recompilação:
❏ Verificar se partes de um programa foram alteradas ou não
❏ Organização através de unidades de compilação:
❏ Partes não alteradas não precisam ser recompiladas
Atenção!

Perceba que, embora na prática e de maneira natural se


queira associar os conceitos de container sintático e
unidade de compilação, na teoria, eles são recursos
distintos. Contudo, de uma forma geral, ambos são
caracterizados pelo mesmo recurso.
Encapsulamento

Os dois problemas práticos descritos anteriormente


podem ser solucionados através da técnica do
encapsulamento de subprogramas e informações.
Definição - Encapsulamento

“ O encapsulamento é um agrupamento de subprogramas e dos


dados que eles manipulam. O encapsulamento constitui um sistema
abstraído. Trata-se de uma organização lógica para uma coleção de
computações relacionadas.

R. W. Sebesta (2012)

Definição - Encapsulamento

❏ Organiza-se o código baseado em um critério lógico:


❏ Códigos encapsulados são abstraídos pelos invocadores

❏ Encapsulamentos são postos em bibliotecas ou módulos:


❏ Disponibilizados para a comunidade visando o seu reuso
❏ Mais fácil de organizar, mais simples de recompilar
❏ Mas e quanto a questão de restrição de acesso?
Atenção!

Embora se tratem de conceitos comumente associados


como um só, note que, pela definição, encapsulamento
e ocultação de informação não representam a mesma
coisa. O encapsulamento está relacionado a uma
questão organizacional e não faz nenhum restrição em
relação a ocultação de informação.
Tipos de Abstração
Tipos de Abstrações

Abstrações de Processos
Abstrações sobre o fluxo de controle

Abstrações de Dados
Abstrações sobre as estruturas de dados
Abstração de Processo

❏ Especifica um processo que deve ser feito:


❏ Porém não oferece detalhes do que será realizado
❏ Principais exemplos: As funções e os procedimentos
❏ Conceito crucial para a programação:
❏ Permite relevar muitos dos detalhes dos algoritmos em
subprogramas e, assim, construir e entender programas
grandes de maneira mais simplificada
Abstração de Dados

“ Trata-se de um encapsulamento que inclui somente a


representação de dados de um tipo específico de dado e os
subprogramas que fornecem as operações para eses tipo. Detalhes
desnecessários do tipo podem ser ocultados das unidades.

R. W. Sebesta (2012)

Abstração de Dados

❏ Objeto real é representado via um Tipo Abstrato de Dado


❏ Tipo Abstrato de Dado é composto por atributos e métodos:
❏ Atributos: Referem-se a representação dos dados
❏ Métodos: Referem-se aos subprogramas das operações
❏ Permite a implantação de controle de acesso:
❏ Oculta detalhes para unidades fora do encapsulamento
❏ Conceito base para o Paradigma de Orientação a Objetos
Tipos Abstratos de Dados
Tipos Abstratos de Dados

Tipos Nativos
Principal exemplo é o ponto-flutuante

Tipos Definidos pelo Usuário


Principais exemplos são as estruturas de dados
Tipo Nativo

❏ Maioria das linguagens implementa o tipo float:


❏ Tipo de dado que representa números reais em memória
❏ Aplica-se o conceito de ocultação de informação:
❏ Formato real de armazenamento é ocultado do usuário
❏ Não é permitido a manipulação da representação real
❏ Disponibiliza-se apenas algumas operações:
❏ Não é permitida a criação de novas operações sobre os
dados, apenas aquelas compostas por operações básicas
Tipo Definido pelo Usuário

❏ Mesmas características do tipo anterior:


❏ Definição de um tipo, mas sua representação é ocultada
❏ Conjunto de operações para manipular seus objetos
❏ Composto por:
❏ Tipo de dado convencional + conjunto de operações
❏ Por exemplo:
❏ Inteiro (Primitivo) + (adição, subtração e multiplicação)
❏ Vetor (Estruturado) + (inserção, remoção e busca)
Exemplo
Alguém consegue pensar em um exemplo sobre
um Tipo Abstrato de Dados definido pelo usuário?
Definição de Pilha
Tipo Abstrato de Dados de Pilha

Arranjos Estruturas
(Vetores) OU Auto-
Referenciada
s

1. Criar pilha vazia


2. Verificar se a pilha está vazia
3. Empilhar um item no topo da pilha
4. Desempilhar um item do topo da pilha
5. Verificar o tamanho da pilha (...)
Tipo Abstrato de Dados de Pilha
Atenção!

É aconselhada a leitura da Seção 11.4 do livro Concepts


of Programing Languages (10ª Edição) de R. W. Sebesta
onde são apresentadas exemplos de implementações
em diversas outras linguagens de programação do Tipo
Abstrato de Dados de Pilha
Questões de Projeto
Questões de Projeto

Questão da unidade sintática

Questão das poucas operações

Questão da parametrização sobre o tipo base


Questão da unidade sintática

❏ Unidade Sintática:
❏ Elemento sintático para encapsular as definições do tipo
e e subprogramas das operações de abstração

❏ Tipos e cabeçalhos visíveis aos clientes da abstração:


❏ Todavía, as implementações (corpos) podem estar
ocultos
❏ Assim:
❏ Clientes podem declarar variáveis do tipo abstrato
❏ Clientes podem manipular os valores por elas contidos
Questão das operações

❏ Poucas operações gerais aplicáveis:


❏ Definição de tipo, Atribuição, Igualdade e Desigualdade
❏ Tratam-se de operações imprescindíveis
❏ Operações de comparação podem ser pré-definidas ou não:
❏ Nativamente, a comparação está relacionada à endereços
❏ Usuário pode implementar a comparação via conteúdo
Atenção!

Nem todas as operações sobre Tipos Abstratos de Dados


são universais. Por exemplo, operações como
Iteradores, Construtores e Destrutores são opcionais,
embora muito úteis. Fica a critério do projetista definir
quais operações serão suportadas e a sintaxe associada
a tais definições.
Considere o problema

Tome como base a Pilha definida em um dos slides


anteriores. A Pilha foi escrita em C++. Suponha que foi
solicitado à você que fosse criada uma Pilha para
armazenar valores reais (float). O que você faria?
Duas opções...

Criar uma classe StackFloat

Buscar outra alternativa


Opção Correta

Criar uma classe StackFloat

Buscar outra alternativa


Questão da Parametrização

Algumas vezes, é conveniente parametrizar tipos de


dados abstratos. Tal ação consiste em criar um tipo de
dado abstrato genérico, capaz de implementar o mesmo
tipo abstrato de dados para diferentes tipos escalares.
Templates em C++
Paradigma Funcional

Slides baseados em material cedido por


Prof. Me. Filipe Fernandes dos Santos Brasil de Matos

Anda mungkin juga menyukai