Baixe o app para aproveitar ainda mais
Prévia do material em texto
Abstração de Dados Renata Carvalho UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Pacotes • Grupo de componentes nomeados e declarados com um propósito comum • Tipos, constantes, variáveis, procedimentos etc. • Estruturam sistemas de grande porte, facilitando a localização dos componentes • Oferece um nível mais alto de abstração Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Pacotes • Em Java package br.unicap; import br.unicap.util.Endereco; public class Pessoa { private Endereco endereco; private String nome; public Pessoa (String nome) { this.nome = nome; } } Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Encapsulamento • Encapsulamento significa tornar alguns componentes de uma unidade de programa (pacote, Rpo abstrato ou classe) privado • Níveis de privacidade • Um componente privado é visível apenas dentro da unidade de programa • Um componente protegido é visível apenas dentro da unidade de programa e em unidades relacionadas • Um componente público é visível ao código da aplicação fora da unidade de programa • A API (applica.on program interface) de uma unidade de programa consiste apenas dos bindings públicos Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos Abstratos • Um Rpo abstrato possui representação privada, mas as operações são públicas • Suportado diretamente por algumas linguagens de programação • Incluindo Java Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Classes • Um objeto é uma tupla de variáveis componente (variáveis de instância) e um grupo de operações que acessam estas variáveis • Uma classe é um conjunto de objetos similares • Um construtor é uma operação que cria e inicializa um novo objeto da classe • Um método é uma operação que inspeciona ou atualiza (ou ambos) um objeto existente de uma classe Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Classes • Uma declaração de classe em Java • Declara todas as variáveis de instância • Define todos os construtores • Define todos os métodos • Especifica quais são privados, protegidos ou públicos • Em Java, uma chamada de método da forma “o.m(...)”: • A expressão o determina o objeto alvo • m é o nome do método a ser chamado • A chamada executa o corpo do método, com this denotando o objeto alvo Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Subclasses • Uma subclasse de C, S, é um conjunto de objetos que são similares uns aos outros, porém mais ricos que os objetos de C • Um objeto de S possui todas as variáveis de instância de um objeto de C, mas pode ter variáveis de instância extras • De forma semelhante, um objeto da classe S é equipado com todos os métodos da classe C, porém pode ter métodos extras • Se S é uma subclasse de C, dizemos que C é uma superclasse de S Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Subclasses • Comportamento • Objetos da subclasse comportam-‐se como os objetos da superclasse • SubsRtuição • Objetos da subclasse podem ser usados no lugar de objetos da superclasse Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Superclasses • Reuso de código • A descrição da superclasse pode ser usada para definir a subclasse • Extensibilidade • Algumas operações da superclasse podem ser redefinidas na subclasse Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Herança • Dizemos que uma subclasse herda variáveis de instância e métodos de uma superclasse • Uma subclasse pode sobrescrever (override)alguns dos métodos de sua superclasse, provendo versões mais especializadas destes métodos Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Sobrescrita • Cada método de uma classe C é herdado pela subclasse S, a menos que tenha sido sobrescrito por S • O método na classe S (que que sobrescreve) tem o mesmo nome e Rpo que o método original da classe C • Algumas LPs OO permitem a programadores especificar se um método pode ser sobrescrito ou não • Java: final, não pode ser sobrescrito • C++: virtual, pode ser sobrescrito Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Dynamic Dispatch • Se métodos são sobrescritos e se uma LP permite a uma variável de uma classe se referir a um objeto de uma subclasse, então uma chamada leva a dynamic dispatch • Considere a chamada de método “o.m(e1,...,en)” em Java: • O compilador infere o Rpo de o, digamos classe C • O compilador verifica se a classe C possui um método nomeado m, com Rpo adequado • Em tempo de execução o alvo da chamada pode ser da classe S, subclasse de C • Se o método for sobrescrito por qualquer subclasse de C, um teste em tempo de execução vai determinar a classe à qual o objeto pertence e qual dos métodos com nome m será chamado Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Herança Simples • Herança simples permite que cada classe tenha no máximo uma superclasse • Determinar uma hierarquia de classes • Tem suporte na maioria das linguagens de programação OO, incluindo Java e Ada95 Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Herança Múltipla • Permite que cada classe tenha mais de uma superclasse • Surgem problemas conceituais e de implementação • C++ oferece suporte linguísRco Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Herança Múltipla • Exemplo • Suponha • Classe Animal define um método chamado mover • Classes Mamifero e Voador sobrescrevem esse método • Classe Morcego herda de Mamifero e de Voador • Que método a classe Morcego herda? Morcego m; m.mover(); • Respostas • Chamada ao método de Mamifero (Mamifero é a primeira superclasse nomeada de Morcego) • Forçar o programador a escolher • Proibir esta chamada de método (ambígua) Que método será chamado? Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercício • Suponha • Classe Conta com métodos creditar e debitar • Classe Poupanca que herda de Conta, sobrescreve o método creditar e adiciona um método renderJuros • O que acontece em cada uma dos códigos abaixo: • Conta c = new Poupanca(); c.creditar(10); c.renderJuros(0.01); • Poupanca p = new Conta(); p.renderJuros(0.01); • Conta c = (Conta) new Poupanca(); c.creditar(10); Pacotes Encapsulamento Tipos Abstratos Classes Subclasses Superclasses Herança Sobrescrita Dynamic Dispatch Herança Simples Herança MúlRpla Exercício
Compartilhar