p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

Documentos relacionados
Java - Herança e Interface

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

Orientação a Objetos Interfaces

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

Computação II Orientação a Objetos

Classe Abstrata e Interface

Linguagem de Programação III

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

PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

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

PROGRAMAÇÃO ORIENTADA A

Computação II Orientação a Objetos


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

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Interfaces POO. Prof. Marcio Delamaro

Orientação a Objetos - Herança

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

p Ja usamos, por diversas vezes, a classe String. Vimos o sistema de pacotes do Java e nunca precisamos dar um import nessa classe.

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

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

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Orientação a Objetos AULA 09

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

Programação por Objectos. Java

Avançando em Java com

Computação II Orientação a Objetos

Herança e Polimorfismo

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Computação II Orientação a Objetos

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Construtores e Especificadores de Acesso

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

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

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

Interfaces e Classes Abstratas

Threads. Linguagem Java. Adenilso da Silva Simão 17/05/05

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

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Programação Orientada a Objetos II

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Computação II Orientação a Objetos

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

LÓGICA DE PROGRAMAÇÃO (JAVA) POLIMORFISMO. Professor Carlos Muniz

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

LISTA DE EXERCÍCIO 7 Interfaces

1 Introdução e Conceitos básicos

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça. Prática 02 Herança

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

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

Repetindo mais código?

Programação Orientada a Objetos Relacionamentos entre classes

COMPORTAMENTOS - Observações

Computação II Orientação a Objetos

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos 2 Prof. Fabiano Dorça. Padrões de Projeto.

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Programação Orientada a Objetos

9 Classes Abstractas e Interfaces

Boas práticas com Orientação a Objetos. Paulo Silveira

Polimorfismo em Java TM. por Jorge H C Fernandes CESAR-DI-UFPE Recife, 1999

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

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Computação II Orientação a Objetos

AULA TEÓRICA 10. Tema 9. Interface. Tema 10. Recursividade

Modificadores de Acesso e Atributos de Classe

Programação Orientada a Objetos II

Programação Estruturada e Orientada a Objetos. Objetos e Métodos

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

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

Collections Framework

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

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Classes e Objetos. Sintaxe de classe em Java

Abstract Factory. Prover uma interface para criar uma família de objetos relacionados ou dependentes sem especificar suas classes concretas

Linguagem de Programação III

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

A classe ArrayList. IFSC/Florianópolis - Programação Orientada a Objetos com Java - prof. Herval Daminelli

Computação II Orientação a Objetos

Linguagens de Programação

Interfaces e Classes Internas

POO29004 Programação Orientada a Objetos

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

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

Composição e Herança. carro meucarro = new carro();

Palavras Reservadas da Linguagem Java

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Computação II Orientação a Objetos

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

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

Transcrição:

1

Expandindo o Sistema p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco class Diretor extends Funcionario { public boolean autentica(int senha) { // verifica aqui se a senha confere com a recebida como parametro E a classe Gerente: class Gerente extends Funcionario { public boolean autentica(int senha) { // verifica aqui se a senha confere com a recebida como parametro // no caso do gerente verifica tambem se o departamento dele // tem acesso

Expandindo o Sistema p Considere o SistemaInterno e seu controle: precisamos receber um Diretor ou Gerente como argumento, verificar se ele se autentica e coloca lo dentro do sistema. class SistemaInterno { void login(funcionario funcionario) { // invocar o método autentica? não da! Nem todo Funcionario tem 3

Expandindo o Sistema class SistemaInterno { void login(funcionario funcionario) { funcionario.autentica(...); // não compila p Uma possibilidade é criar dois métodos login no SistemaInterno: um para receber Diretor e outro para receber Gerente. Ja vimos que essa não é uma boa escolha. Por que? class SistemaInterno { // design problemático void login(diretor funcionario) { funcionario.autentica(...); // design problemático void login(gerente funcionario) { funcionario.autentica(...); 4

Possível Solução p Uma solução mais interessante seria criar uma classe no meio da árvore de herança, FuncionarioAutenticavel: class FuncionarioAutenticavel extends Funcionario { public boolean autentica(int senha) { // faz autenticacao padrao // outros atributos e metodos p As classes Diretor e Gerente passariam a estender de FuncionarioAutenticavel, e o SistemaInterno receberia referências desse tipo, como a seguir: class SistemaInterno { void login(funcionarioautenticavel fa) { int senha = //pega senha de um lugar, ou de um scanner de polegar // aqui eu posso chamar o autentica! // Pois todo FuncionarioAutenticavel tem boolean ok = fa.autentica(senha); 5

Possível Solução p FuncionarioAutenticavel é uma forte candidata a classe abstrata. Mais ainda, o método autentica poderia ser um método abstrato. p O uso de herança resolve esse caso, mas se precisamos que todos os clientes também tenham acesso ao SistemaInterno 6

Possível Solução p A solução aplicada por novos programadores é fazer uma herança sem sentido para resolver o problema, por exemplo, fazer Cliente extends FuncionarioAutenticavel. 7

p Precisamos arranjar uma forma de poder referenciar Diretor, Gerente e Cliente de uma mesma maneira, isto é, achar um fator comum. Toda classe define 2 itens: o que uma classe faz (as assinaturas dos métodos) como uma classe faz essas tarefas (o corpo dos métodos e atributos privados) Podemos criar um contrato que define tudo o que uma classe deve fazer se quiser ter um determinado status. Imagine: contrato Autenticavel: quem quiser ser Autenticavel precisa saber fazer: 1.autenticar dada uma senha, devolvendo um booleano 8

p Contratos em Java são interfaces; interface Autenticavel { boolean autentica(int senha); p Interface é a maneira através da qual conversamos com um objeto. p Uma interface pode definir uma série de métodos, mas nunca conter implementação deles. p Uma interface 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. 9

p Um gerente pode assinar o contrato, ou seja, implementar a interface. p No momento em que ele implementa essa interface, ele precisa escrever os métodos pedidos pela interface; p Para implementar usamos a palavra chave implements na classe: class Gerente extends Funcionario implements Autenticavel { private int senha; // outros atributos e métodos public boolean autentica(int senha) { if(this.senha!= senha) { return false; // pode fazer outras possiveis verificacoes, como saber se esse // departamento do gerente tem acesso ao Sistema return true; 10

p Ganhamos mais polimorfismo! Temos mais uma forma de referenciar a um Gerente. 11

p Quando crio uma variável do tipo Autenticavel, estou criando uma referência para qualquer objeto de uma classe que implemente Autenticavel, direta ou indiretamente: Autenticavel a = new Gerente(); // posso aqui chamar o metodo autentica! Novamente, a utilização mais comum seria receber por argumento, como no nosso SistemaInterno: class SistemaInterno { void login(autenticavel a) { int senha = /v/pega senha de um lugar, ou de um scanner de polegar boolean ok = a.autentica(senha); // aqui eu posso chamar o autentica! // não necessariamente é um Funcionario! Mais ainda, eu não sei // que objeto a referência "a" está apontando exatamente! Flexibilidade. 12

p Ja podemos passar qualquer Autenticavel para o SistemaInterno. Então precisamos fazer com que o Diretor também implemente essa interface. class Diretor extends Funcionario implements Autenticavel { // metodos e atributos, alem de obrigatoriamente ter o autentica 13

p Qualquer Autenticavel passado para o sistemainterno esta bom. p Pouco importa quem o objeto referenciado realmente é, pois ele tem um método autentica que é o necessário para nosso SistemaInterno funcionar corretamente. Autenticavel diretor = new Diretor(); Autenticavel gerente = new Gerente(); p Lembre-se: a interface define que todos vão saber se autenticar (o que ele faz), enquanto a implementação define como exatamente vai ser 14 feito (como ele faz).

p A maneira como os objetos se comunicam num sistema orientado a objetos é muito mais importante do que como eles executam. p O que um objeto faz é mais importante do que como ele faz. Aqueles que seguem essa regra, terão sistemas mais fáceis de manter e modificar. 15

Regras de Ouro p Uma é evite herança, prefira composição p Programe voltado a interface e não à implementação. 16