Java - Herança e Interface

Documentos relacionados
PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

Programação Orientada a Objetos

Java para Desktop. Programação Orientada à Objetos 2 JSE

Interfaces e Classes Abstratas

Entender o princípio do Polimorfismo; Conhecer Polimorfismo de Sobreposição e de Inclusão;

Conceitos de Programação Orientada a Objetos

Orientação a Objetos Classes Abstratas

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Computação II Orientação a Objetos

A modelagem é tida como a parte central de todas as atividades para a construção de um bom sistema, com ela podemos:

Classes e Objetos. Sintaxe de classe em Java

Generics - Java. Fernando Santos. Programação Orientada a Objetos

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Lição 11 Herança, polimorfismo e interfaces

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

Sobreposição de Métodos

Orientação a Objetos AULA 09

PROGRAMAÇÃO I HERANÇA E POLIMORFISMO

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Programação Orientada a Objetos JAVA - NETBEANS

Herança e Polimorfismo

Programação Orientada a Objetos

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

POO29004 Programação Orientada a Objetos

Orientação a objetos. Objetos ou Instâncias I

Programação Orientada a Objetos

Linguagens de Programação Aula 12

Interface vs. Implementação Herança vs. Composição

Projeto de Linguagem. Linguagens de Programação

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Programação Orientada a Objetos para Redes de Computadores

POO UML e Outros Conceitos. Prof. Vicente Paulo de Camargo

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Aula 2 Princípios Básicos da Orientação a Objetos (Parte II)

Herança e Polimorfismo

Programação Orientada a Objetos

9 Classes Abstractas e Interfaces

PROGRAMAÇÃO EM C#

POO e C++: Herança e Polimorfismo

Fundamentos de Orientação à objetos

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

Capítulo 2. Orientação a Objetos

Conceitos de Orientação a Objetos

Programação Orientada a Objetos II Java Décima primeira aula

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Orientação a Objetos - Herança

Orientação a objetos Disciplina: Linguagens de Programação. Prof. Alexandre Cassimiro Andreani

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

POO29004 Programação Orientada a Objetos

Introdução ao GAM. Agora queremos aumentar a Segurança da aplicação, tanto na parte web como a de Smart Device. Page1

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

O PARADIGMA ORIENTADO POR OBJETOS

Programação Java (nível intermediário) 4. Polimorfismo

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

Programação Orientada a Objetos

Os princípios do desenho orientado a objetos

Classes e Objetos. Prof. Leonardo Barreto Campos 1

O que se pretende, agora, é acrescentar Segurança ao aplicativo, tanto na parte para Internet como para Smart Devices.

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

[Linguagem de Programação 3] [Aula 01] [Gustavo Yoshio Maruyama]

Orientação a Objetos Parte I. Introdução a POO (Programação Orientada a Objetos)

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Programação Orientada a Objetos com Java. Prof. Júlio Machado

COMPORTAMENTOS - Observações

Orientação a Objetos (OO) Java Avançado Revisão do Paradigma de. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

Desenvolvimento de um sistema de leilão utilizando JavaServer Pages

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Se a senha tem de 2 a 30 caracteres. Se tiver mais ou menos caracteres, ela não será válida e deve mostrar a mensagem de erro abaixo:

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

Orientação a Objetos (OO) LPG II - Java. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Transcrição:

Java - Herança e Interface BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Exemplo extraído de www.caelum.com.br

Polimorfismo Imagine que un sistema de controle de Banco pode ser acessado, além dos gerentes, também pelos Diretores, ambos precisam autenticar-se. 1/24

Funcionario Diretor Secretario Gerente Engenheiro 2/24

Classe Diretor p u b l i c c l a s s D i r e c t o r e x t e n d s F u n c i o n a r i o { p u b l i c b o o l e a n a u t e n t i c a ( i n t senha ) { // verifica se a senha confere Classe Gerente p u b l i c c l a s s G e r e n t e e x t e n d s F u n c i o n a r i o { p u b l i c b o o l e a n a u t e n t i c a ( i n t senha ) { // verifica se a senha confere 3/24

O método de autenticação de cada tipo de Funcionario pode variar muito Considere o SistemaInterno que recebe um Diretor ou Gerente como argumento e verificar se ele se autentica e colocá-lo dentro do sistema p u b l i c c l a s s S i s t e m a I n t e r n o { p u b l i c v o i d l o g i n ( F u n c i o n a r i o f u n c i o n a r i o ) { // invocar o método autentica? // não da, nem todo funcionario tem autorização 4/24

Problema: aceita qualquer tipo de Funcionario, nem todo Funcionario possui o método autentica Não é possível chamar ao método com a refêrencia a Funcionario p u b l i c c l a s s S i s t e m a I n t e r n o { p u b l i c v o i d l o g i n ( F u n c i o n a r i o f u n c i o n a r i o ) { f u n c i o n a r i o. a u t e n t i c a (... ) ; 5/24

Solução? : criar dois métodos login no SistemaInterno um para Gerente e outro para Diretor 6/24

p u b l i c c l a s s S i s t e m a I n t e r n o { // design problemático p u b l i c v o i d l o g i n ( D i r e t o r f u n c i o n a r i o ) { f u n c i o n a r i o. a u t e n t i c a (... ) ; // design problemático p u b l i c v o i d l o g i n ( G e r e n t e f u n c i o n a r i o ) { f u n c i o n a r i o. a u t e n t i c a (... ) ; 7/24

Se for criado um novo Funcionario autenticável? Será necessário adicionar um novo método de login no SistemaInterno 8/24

Uma solução mais interessante seria criar uma classe no meio da hierarquia de herença FuncionarioAutenticavel p u b l i c c l a s s F u n c i o n a r i o A u t e n t i c a v e l e x t e n d s F u n c i o n a r i o { p u b l i c b o o l e a n a u t e n t i c a ( i n t senha ) { // faz autenticacao padrão // outros atributos e métodos 9/24

As classes Diretor e Gerente passariam a estender de FuncionarioAutenticavel O SistemaInterno receberia referências desse tipo 10/24

p u b l i c c l a s s S i s t e m a I n t e r n o { p u b l i c v o i d l o g i n ( F u n c i o n a r i o A u t e n t i c a v e l f a ) { i n t senha = //pega senha de um lugar, ou de um scanner de polegar // aqui eu posso chamar o autentica! // Pois todo FuncionarioAutenticavel tem b o o l e a n ok = f a. a u t e n t i c a ( senha ) ; 11/24

Funcionario Secretario FuncionarioAutenticavel Engenheiro Diretor Gerente 12/24

FuncionarioAutenticavel é uma forte candidata a classe abstrata O método autentica também pode ser um método abstrato O uso de herança resolve este caso em particular 13/24

Vejamos uma outra situação mais complexa: precisa-se que todos os clientes também tenham acesso ao SistemaInterno Criamos outro método login em SistemaInterno? Essa opção já foi descartada 14/24

Uma outro opção, por certo errada, seria Cliente herdar de FuncionarioAutenticavel Resolve o problema parcialmente, já trará diversos outros Cliente não é um FuncionarioAutenticavel, pode invocar métodos da classe FuncionarioAutenticavel que não lhe corresponde Não faça herança quando a relação não é estritamente é um 15/24

Funcionario Secretario FuncionarioAutenticavel Engenheiro herança sem sentido Diretor Gerente Cliente 16/24

Como resolver o problema? Arranjar uma forma de referenciar Diretor, Gerente e Cliente de uma mesma maneira Solução: estabelecer um tipo de contrato que defina o que uma classe deve fazer se quiser um deterinado status: quem q u i s e r s e r A u t e n t i c a v e l p r e c i s a r s a b e r f a z e r : 1. a u t e n t i c a r dada uma senha, d e v o l v e n d o um b o o l e a n o 17/24

Quem quiser pode assinar esse contrato A classe assinante deve explicar como será feita essa autenticação Pode-se criar esse contrato em Java p u b l i c i n t e r f a c e A u t e n t i c a v e l { b o o l e a n a u t e n t i c a ( i n t senha ) ; 18/24

Interface: é a maneira através da qual conversamos com um objeto Interface quem desejar ser autenticável precisa saber autenticar dado um inteiro e retornando um booleano Uma interface pode definir métodos, mas nunca conter implementaçao deles 19/24

Para o Gerente assinar o contrato, deve implementar a interface p u b l i c c l a s s G e r e n t e e x t e n d s F u n c i o n a r i o implements A u t e n t i c a v e l { p r i v a t e i n t senha ; // outros atributos e métodos p u b l i c b o o l e a n a u t e n t i c a ( i n t senha ) { i f ( t h i s. senha!= senha ) { r e t u r n f a l s e ; // pode fazer outras possíveis verificações, como saber se esse // departamento do gerente tem acesso ao Sistema r e t u r n t r u e ; 20/24

Funcionario interface Autenticavel Secretario Engenheiro Diretor Gerente Cliente 21/24

Apartir de agora, pode-se tratar um Gerente como sendo Autenticavel Ganhamos mais polimorfismo, existe mais de uma forma de referencias a Gerente Quando se cria uma variável do tipo Autenticavel, está se criando uma referência para qualquer objeto que implemente Autenticavel A u t e n t i c a v e l a = new G e r e n t e ( ) ; // posso aqui chamar o método autentica! 22/24

p u b l i c c l a s s S i s t e m a I n t e r n o { p u b l i c v o i d l o g i n ( A u t e n t i c a v e l a ) { i n t senha = // pega senha de um lugar, ou de um scanner de polegar b o o l e a n ok = a. a u t e n t i c a ( senha ) ; // aqui eu posso chamar o autentica! // não necessariamente é um Funcionario! // Mais ainda, eu não sei que objeto a // referência. a. es tá apontando exatamente! Flexibilidade. No dia que for necessário permitir que mais um funcionario tenha acesso ao sistema, basta implementar a interface 23/24

FIM 24/24