ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.

Slides:



Advertisements
Apresentações semelhantes
TIPOS ABSTRATOS DE DADOS
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
Análise e Projeto Orientado a Objetos
Curso de aprofundamento na linguagem C
Paulo Marques Hernâni Pedroso
Programação Orientada a Objetos C++ Prof. Érico Olavo Weissheimer
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Introdução à Programação Orientada à Objetos Prof. Daniel Merli Lamosa Maio de 2002.
Classes C++ Class nome da classe { private: membros privados
Orientação a Objetos: Encapsulamento e Classificação
Java: Pacotes e Modificadores de Visibilidade
INF Computação Gráfica
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Estruturas de Dados e Algoritmos
Polimorfismo e Classes Abstratas Profa
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Diagrama de Classes.
Modelagem de Interações
Classes e objetos P. O. O. Prof. Grace.
Curso de extensão em Desenvolvimento Web
Classes, Objetos e Encapsulamento
Programação Orientada a Objetos com Java
Aula prática 13 Orientação a Objetos – C++ Parte 1
Singleton e Adapter Professor: Nazareno Andrade
JAVA Orientação a Objetos
Linguagens Orientadas a Objeto
Caio Argolo Luiz Daud Jorge Roberto
Tópicos avançados em internet A
Métodos de Construção de Software: Orientação a Objetos
Linguagem de Programação JAVA
Paradigmas da Programação – Semestre 1 – Aula 2 Professores: Eduardo Mantovani Fábio de Paula.
Tipos Abstratos de Dados
Classes, Objetos, Atributos e Métodos JAVA
Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)
Generic Programming Daniel Terzella Leandro Amancio
if669 - Introdução à Programação
Java Bytecode Software Básico Mitsuo Takaki.
Orientação a Objetos Parte I
Pilhas Profa. Nádia Félix.
Programação orientada a objectos em C++
Programação Orientada à Objetos
Definição Classe Objeto Construtor de Classes Manipulando o objeto Namespace Utilização do namespace Herança Polimorfismo Encapsulamento Propriedades.
Prof. Silvestri – todos os direitos reservados SISTEMAS DISTRIBUIDOS Aula 5 Eduardo Silvestri
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Implementação Orientada a Objetos – Aula 03
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Aula Prática 4 Monitoria IP/CC (~if669).
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Linguagens de Programação
Construtores e Destrutores
Bruno Inojosa MCP .NET Framework
Introdução a Programação Orientada a Objetos
Modificadores Programação II.
Conceitos de Orientação a Objetos zConceito de tipo zTipos Abstratos de Dados zMódulos/Pacotes zEncapsulamento.
Introdução a Orientação a Objetos
Módulo II Capítulo 1: Orientação a Objetos
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Implementação Orientada a Objetos – Aula 03 Atributos e Encapsulamento Prof. Danielle Martin/ Marcia Bissaco Universidade de Mogi das Cruzes
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
Desenvolvendo sotfware com UML1 Visão Geral de Orientação a Objetos.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Alocação Dinâmica de Memória e Tipo Abstrato de Dados Cristiano Arbex Valle Vinicius Fernandes dos Santos
Programação para Internet Aula 06 Linguagem Java (Orientação a Objetos – Atributos e Métodos)
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo é considerada somente pelos seus atributos particulares os atributos comuns às entidades do grupo são desconsiderados (ficam "ocultos" ou "abstraídos")

ABSTRAÇÃO de processos de dados

ABSTRAÇÃO DE PROCESSOS o conceito de abstração de processos é um dos mais antigos no projeto de linguagens absolutamente crucial para a programação historicamente anterior à abstração de dados todos os subprogramas são abstrações de processo exemplo: chamadas sort(array1, len1), sort(array2, len2), ...

MÓDULOS módulos são "containers" sintáticos contendo subprogramas e grupos de dados relacionados logicamente modularização: processo de projetar os módulos de um programa a compreensão do programa pelos mantenedores seria impossível sem organização modularizada além disso, há um ponto crítico: quando o projeto de um programa estende-se por milhares de linhas, recompilá-lo totalmente a cada atualização do código é absolutamente inviável - daí a necessidade de modularizá-lo

ENCAPSULAMENTO um agrupamento de subprogramas+dados que é compilado separada/independentemente chama-se uma unidade de compilação ou um encapsulamento um encapsulamento é portanto um sistema abstraído muitas vezes os encapsulamentos são colocados em bibliotecas exemplo: encapsulamentos C (não são seguros porque não há verificação de tipos de dados em diferentes arquivos de encapsulamento)

OBJETOS um tipo abstrato de dados é um encapsulamento que inclui somente um tipo específico de dado e os subprogramas que fornecem as operações para este tipo detalhes de implementação do tipo ficam ocultos das unidades fora do encapsulamento que o contém um objeto é uma variável (instância) de um tipo abstrato de dados, declarada por alguma unidade programação orientada a objetos consiste no uso de objetos no desenvolvimento do software

EXEMPLO: O PONTO-FLUTUANTE COMO TIPO ABSTRATO DE DADOS embora o tipo ponto-flutuante esteja presente desde o início da programação, raramente nos referimos a ele como tipo abstrato de dados praticamente todas as linguagens permitem que se criem "objetos" do tipo ponto-flutuante observe que existe um conjunto de operações que são válidas para o tipo ponto-flutuante, exatamente como os “métodos” definidos para uma “classe” além disso, a ocultação da informação está presente: o formato real dos dados é inacessível ao programador - isto é exatamente o que se espera de uma abstração isto é o que permite a portabilidade de um programa entre as implementações da linguagem para plataformas particulares

TIPOS DE DADOS ABSTRATOS DEFINIDOS PELO USUÁRIO a definição do tipo e as operações sobre objetos do tipo estão contidas numa única unidade sintática outras unidades de programa podem ter permissão para criar variáveis do tipo definido a implementação do tipo não é visível pelas unidades de programa que usam o tipo as únicas operações possíveis sobre objetos do tipo são aquelas oferecidas na definição do tipo

CLIENTES unidades de programa que utilizam um tipo abstrato chamam-se clientes daquele tipo a ocultação da representação do tipo abstrato é vantajoso para seus clientes: o código no cliente não depende desta representação, e mudanças na representação não exigem mudanças nos clientes (mas se o protocolo de alguma operação for modificado, então é claro que os clientes precisam ser alterados) a ocultação aumenta a confiabilidade: nenhum cliente pode interferir intencional ou acidentalmente na representação

EXEMPLO: UMA PILHA E SUAS OPERAÇÕES ABSTRATAS create(stack) destroy(stack) empty(stack) push(stack, elem) pop(stack) top(stack) create(STK1); % STK1 é um objeto ou uma instância do tipo stack create(STK2); % outra instância do tipo stack

TIPOS DE DADOS ABSTRATOS EM C++ os tipos abstratos de dados em C++ são as chamadas classes as variáveis são declaradas como instâncias de classes classes do C++ são baseadas nas da SIMULA67 e no struct do C os dados definidos numa classe são os membros de dados

FUNÇÕES-MEMBRO as funções definidas em uma classe são as funções-membro as funções-membro são compartilhadas por todas as instâncias de classe mas: cada instância tem seu próprio conjunto de membros de dados uma função membro pode ter sua definição completa dentro da classe ("inlined") ou apenas seu cabeçalho

TEMPO DE VIDA DAS CLASSES as instâncias de classe podem ser estáticas, stack-dinâmicas ou heap-dinâmicas, exatamente como variáveis do C as classes podem incluir membros de dados heap-dinâmicos, não obstante elas próprias não serem heap-dinâmicas

OCULTAÇÃO DA INFORMAÇÃO EM C++ cláusula private: para entidades ocultas na classe cláusula public: para as entidades visíveis aos clientes. Descreve a interface com objetos da classe cláusula protected: relacionada com herança

Construtores Funções-membro usadas para inicializar os membros de dados de um objeto recém-criado Também alocam membros de dados heap-dinâmicos Têm o mesmo nome da classe Pode-se sobrecarregar construtores Não têm tipo de retorno, não usam return

Destrutores Implicitamente chamados quando se encerra o tempo de vida de um objeto Se um objeto é heap-dinâmico, será explicitamente desalocado com delete O destrutor pode conter chamadas delete para desalocar membros de dados heap-dinâmicos Nome do destrutor: ~ <nome_da_classe> Não têm tipo de retorno, não usam return

Exemplo #include <iostream.h> class pilha { private: int *ptr_pilha; int tam_max; int top_ptr ; public: pilha( ){ //** um construtor ptr_pilha = new int [100]; tam_max = 99; top_ptr = -1; }

Exemplo (continuação) ... ~pilha( ){ //** um destrutor delete [ ] ptr_pilha; } void push ( int elem) { if (top_ptr = = tam_max) cout << “Erro - pilha cheia\n”; else ptr_pilha[ + + top_ptr ] = elem; void pop ( ) { if (top_ptr = = -1) cout << “Erro - pilha vazia\n”; else top_ptr -- ;

Exemplo (continuação) ... int top { return ( ptr_pilha[top_ptr] ); } int empty { return ( top_ptr = = -1 ); } } \\** fim da classe pilha Código no cliente: void main ( ) { int top_one; pilha stk; stk.push(42); stk.push(17); top_one = stk.top( ); stk.pop( ); ... }

Avaliação das classes C++ As classes são tipos Não há construções de encapsulamento generalizadas Exemplo: temos uma classe “matriz” e uma classe “vetor”, e precisamos multiplicar um objeto “matriz” por um objeto “vetor”. Em qual classe essa operação deve ser definida?

Solução para “matriz  vetor” class Matriz { friend Vetor mult(const Matriz&, const Vetor&); ...} class Vetor { Vetor mult(const Matriz& m1, const Vetor& v1){ ..} Se Matriz e Vetor pudessem ser definidas num único pacote, evitaríamos esta construção pouco natural.

Java Suporte para tipos abstratos similar a C++ Todos os tipos de dados definidos pelo usuário são classes Todos os objetos são heap-dinâmicos e acessados por variáveis de referência Todos os subprogramas (métodos) em Java somente podem ser definidos em classes public e private são modificadores anexados às definições de métodos/variáveis

Java Suporte para tipos abstratos similar a C++ Todos os tipos de dados definidos pelo usuário são classes Todos os objetos são heap-dinâmicos e acessados por variáveis de referência Todos os subprogramas (métodos) em Java somente podem ser definidos em classes public e private são modificadores anexados às definições de métodos/variáveis

Pacotes Java Em C++ as classes são a única construção de encapsulamento Java inclui uma construção adicional: os pacotes Pacotes podem conter mais de uma classe public e private são os chamados modificadores Os membros sem modificador (e os membros public) de uma classe são visíveis a todas as classes do mesmo pacote (escopo de pacote) Não há, portanto, necessidade de declarações friend explícitas em Java

Exemplo import java.io.* class Pilha { private int [ ] ref_pilha; private int tam_max, top_index ; public Pilha( ){ // um construtor ref_pilha = new int [100]; tam_max = 99; top_index = -1; }

Exemplo (continuação) ... public void push ( int elem) { if (top_index = = tam_max) System.out.println(“Erro”); else ref_pilha[ + + top_index ] = elem; } public void pop ( ) { if (top_index = = -1) else --top_index ; public int top { return ( ref_pilha[top_index] ); } public boolean empty { return ( top_index = = -1 ); } } \\** fim da classe Pilha

Exemplo (continuação) - uso da classe Pilha public class Testa_Pilha { public static void main (String [ ] args) { Pilha p1 = new Pilha( ); p1.push(42); p1.push(29); p1.pop( ); p1.pop( ); // Produz msg de erro ... } Não há destrutor (eliminado pela coleta de lixo implícita em Java) Observe o uso de variável de referência em vez de ponteiro

Classes parametrizadas em C++ Exemplo: suponha que o método construtor para a classe pilha fosse: pilha (int size ){ ptr_pilha = new int [size]; tam_max = size-1; top_ptr = -1; } No cliente: ... pilha(150) p1;

Classes genéricas em C++ #include <iostream.h> template < class TIPO > class pilha { private: TIPO *ptr_pilha; int tam_max; int top_ptr ; public: pilha( ){ //** um construtor ptr_pilha = new TIPO [100]; tam_max = 99; top_ptr = -1; }

Classes genéricas em C++ (continuação) pilha (int size ){ // outro construtor sobrecarregado ptr_pilha = new TIPO [size]; tam_max = size-1; top_ptr = -1; } ~pilha( ){ delete ptr_pilha; } void push ( TIPO elem) { if (top_ptr = = tam_max) cout << “Erro - pilha cheia\n”; else ptr_pilha[ + + top_ptr ] = elem; void pop ( ) {...}

Classes genéricas em C++ (continuação) ... TIPO top { return ( ptr_pilha[top_ptr] ); } int empty { return ( top_ptr = = -1 ); } } \\** fim da classe pilha