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