Classes Abstratas

Propaganda
Programação Orientada a Objetos
Engenharia da Computação
Professor: Rosalvo Ferreira de Oliveira Neto
Dados Pessoais
Rosalvo Ferreira de Oliveira Neto
•
MSc. em ciência da computação (UFPE)
•
•
[email protected]
www.univasf.edu.br/~rosalvo.oliveira
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
3
Tópicos
•Definição de atributos Static
•Técnicas de abstração adicionais
•Classes Abstratas
•Interface
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Especificação de uma classe usuário
Requisitos
- Todo usuário deve ter um login, uma senha e um id (identificador
único do sistema, que deve ser auto incremental);
- A classe deve ter os métodos get para senha, login e id;
- Os métodos set apenas para login e senha;
-Um método chamado incrementarId para atualizar o ID, que
deverá ser chamado no construtor. O método incrementarId não
pode ser chamado fora da classe usuário.
-Criar uma classe programa, e instanciar três usuários e imprimir o
id de cada um.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Especificação de uma classe usuário
Qual foi o resultado?
O id do usuário: a é 1
O id do usuário: b é 1
O id do usuário: c é 1
Porque o atributo id é uma variável de estância, cada objeto aloca
um espaço de memória diferente.
Para solucionar este problema, devemos colocar a palavra
reservada static, pois com isso os objetos compartilharão o mesmo
espaço de memória.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Classes Abstratas
•Usamos a palavra chave abstract para impedir as instanciações de
uma classe;
•Classes abstratas normalmente possuem um ou mais métodos
abstratos;
•Um método abstrato não possui corpo, apenas define a assinatura
(protótipo) do método;
•Classes abstratas são úteis quando uma classe define métodos a
serem implementados apenas pelas suas subclasses.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Regras sobre métodos abstratos e as
classes que os contêm:
•Toda classe que possui métodos abstratos é automaticamente
abstrata e deve ser declarada como tal;
•Uma classe pode ser declarada abstrata mesmo se ela não possuir
métodos abstratos;
•Uma classe abstrata não pode ser instanciada;
•Uma subclasse de uma classe abstrata pode ser instanciada se:
• Sobreescrever cada um dos métodos abstratos de sua superclasse;
• Fornece uma implementação para cada um deles.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Regras sobre métodos abstratos e as
classes que os contêm:
•Se uma subclasse de uma classe abstrata não implementa todos os
métodos abstratos que ela herda, então a subclasse também é
abstrata;
•Para declarar um método abstrato coloque a palavra-chave
ABSTRACT no início do protótipo do método;
•Para declarar uma classe abstrata coloque a palavra-chave
ABSTRACT no início da definição da classe;
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Declaração de classe abstrata em JAVA
public abstract class NomeDaClasse{
public abstract void NomeDoMetodo();
}
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Exemplo – Conta Corrente e Poupança
Construir um mini sistema bancário que possui os seguintes requisitos:
•Cliente possui um nome e uma lista de contas;
•Uma conta possui um atributo saldo e dois métodos: getSaldo e sacar, este
último recebe como parâmetro o valor a ser debitado da conta;
•O método sacar verifica se o saldo retornado em getSaldo é maior do que
o saldo da conta, em caso positivo o valor é debitado do saldo;
•Uma conta de um cliente deve obrigatoriamente ser do tipo ContaCorrente ou Conta-Poupança.
•Uma Conta-Corrente possui como atributo um limite, e este deve ser
utilizado para calcular o seu saldo;
•Uma Conta-Poupança possui como atributos rendimentos, e este deve ser
utilizado para calcular o seu saldo.
Crie um programa que instancia um cliente demonstrando os conceitos de
classes abstratas e polimorfismos com o exemplo acima.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Problema
•Suponha que você defina as classes abstratas Forma e Desenhavel
e a classe Circulo (que estende Forma)
•Como criar a classe CirculoDesenhavel que é ao mesmo tempo
Circulo e Desenhavel?
Java não permite que uma classe possua duas superclasses
diretas, ou seja, não suporta herança múltipla!!!
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Solução
• Para resolver esse tipo de problema Java define o conceito de
interfaces;
•Uma interface é semelhante a uma classe abstrata, exceto
pelo fato de utilizar a palavra-chave INTERFACE no lugar de
abstract class na definição da classe;
•Interface é um contrato onde quem assina se responsabiliza por
implementar os métodos definidos na interface (cumprir o
contrato);
•Ela só expõe o que o objeto deve fazer, e não como ele faz, nem o
que ele tem. Como ele faz vai ser definido em uma implementação
dessa interface.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Interface em Java
•Declarando uma Interface:
• public interface NomeDaClasse
•Implementando uma Interface:
•public class NomeDaclasse implements NomeDaInterface;
•public class NomeDaclasse extends OutraClasse implements
NomeDaInterface;
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Quais as diferenças entre interface e
classe abstrata?
•Declaração de métodos
•Em uma classe abstrata podem ser definidos métodos
abstratos e não abstratos;
•Todos os métodos de uma interface são implicitamente
abstratos.
•Declaração de variáveis
•Em uma classe abstrata podem ser definidas variáveis de
instância, de classe e constantes;
•Todos os atributos de uma interface são sempre public static
final (constantes), mesmo que essas palavras reservadas não
sejam utilizadas.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Como implementar o diagrama?
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Herança entre interfaces
• Diferentemente das classes, uma interface pode herdar de mais
de uma interface;
• É como um contrato que depende de que outros contratos sejam
fechados antes deste valer;
• Você não herda métodos e atributos e sim responsabilidades.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Para que utilizar interfaces?
•Para deixar o código mais flexível, e possibilitar a mudança de
implementação sem maiores traumas.
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
Dúvidas
Download