Orientação a Objetos - Herança

Documentos relacionados
Modificadores de Acesso e Atributos de Classe

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

AULA 16 HERANÇA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

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

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Notas de Aula 04: Herança e polimorfismo.

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

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Notas de Aula 05: Diretivas de atributos, métodos e classes e o uso de Interfaces.

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

Programação Orientada a Objetos II

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

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

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

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

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

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

Linguagem de Programação II Implementação

Linguagem de Programação III

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Nome do Aluno: Matrícula: Turma: Data: 08/04/2013

JAVA TÓPICOS ESPECIAIS DE PROGRAMACAO ORIENTADA A OBJETOS

OO Orientação a Objetos

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

4 Conceito de Herança

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

[Desenvolvimento OO com Java] Modificadores de acesso e atributos de classe

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

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

Palavras Reservadas da Linguagem Java

Herança e Propriedades

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

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

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

Programação Orientada a Objetos

Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos.

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

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

Programação Orientada a Objetos

Conceitos de Programação Orientada a Objetos

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Introdução. Extends e Super. Exercício Prático 5 Herança. Nome:

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Introdução à Programação. Encapsulamento e Herança

Aula 7 POO 1 Herança. Profa. Elaine Faria UFU

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Herança; Sobrescrita, Sobrecarga e Polimorfismo; Classes abstratas e concretas (finais).

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

Orientação a Objetos AULA 06

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

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

Programação por Objectos. Java

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

COMPORTAMENTOS - Observações

Herança (parte 2) Redefinição de métodos AULA 11

Programação Orientada a Objetos

Linguagem de Programação II Implementação

LISTA DE EXERCÍCIO 7 Interfaces

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

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Programação Orientada a Objetos JAVA - NETBEANS

Linguagem de programação Programação Orientada a objetos

POO29004 Programação Orientada a Objetos

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

p Pacotes, a grosso modo, são apenas pastas ou diretórios do sistema operacional onde ficam armazenados os arquivos fonte de Java.

Linguagem de Programação. Diagrama de classes

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

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

OO - Orientação a Objetos

Transcrição:

Orientação a Objetos - Herança 1

Repetindo Código p Todo banco tem funcionário. A classe funcionario ficaria da seguinte forma; class Funcionario { String nome; String cpf; double salario; // métodos devem vir aqui p Além de um funcionário comum, há também outros cargos, como os gerentes. p Os gerentes guardam a mesma informação que um funcionário comum, mas possuem outras informações, além de ter funcionalidades um pouco diferentes

Controlando o acesso p Um gerente também possui uma senha que permite o acesso ao sistema interno do banco, além do número de funcionários que ele gerencia: class Gerente { String nome; String cpf; double salario; int senha; int numerodefuncionariosgerenciados; public boolean autentica(int senha) { if (this.senha == senha) { System.out.println("Acesso Permitido!"); return true; else { System.out.println("Acesso Negado!"); return false; // outros métodos 3

Controlando o acesso p Se tivéssemos um outro tipo de funcionário que tem características diferentes do funcionário comum, precisaríamos criar uma outra classe e copiar o código novamente? p Existe um jeito, em Java, de relacionarmos uma classe de tal maneira que uma delas herda tudo que a outra tem. p No nosso caso, gostaríamos que o Gerente tivesse tudo que um Funcionario tem, gostaríamos que ela fosse uma extensão de Funcionario 4

Controlando o acesso p Fazemos isto através da palavra chave extends. class Gerente extends Funcionario { int senha; int numerodefuncionariosgerenciados; public boolean autentica(int senha) { if (this.senha == senha) { System.out.println("Acesso Permitido!"); return true; else { System.out.println("Acesso Negado!"); return false; // setter da senha omitido p Quando criamos um objeto do tipo Gerente, este objeto possuira também os atributos definidos na classe Funcionario, pois um Gerente é um Funcionario: 5

Representação class TestaGerente { public static void main(string[] args) { Gerente gerente = new Gerente(); // podemos chamar metodos do Funcionario: gerente.setnome("joão da Silva"); // e tambem metodos do Gerente! gerente.setsenha(4231); 6

Modificador Protected p E se precisamos acessar os atributos que herdamos? p Existe um outro modificador de acesso, o protected, que fica entre o private e o public. p Um atributo protected só pode ser acessado (visível) pela própria classe e por suas subclasses; class Funcionario { protected String nome; protected String cpf; protected double salario; // métodos devem vir aqui 7

Herança Simples p Uma classe pode ter várias filhas, mas pode ter apenas uma mãe, é a chamada herança simples do java. 8

Reescrita de Método p Todo fim de ano, os funcionários do nosso banco recebem uma bonificação. Os funcionários comuns recebem 10% do valor do salário e os gerentes, 15%. class Funcionario { protected String nome; protected String cpf; protected double salario; public double getbonificacao() { return this.salario * 0.10; // métodos p Se deixarmos a classe Gerente como ela esta, ela vai herdar o método getbonificacao. 9

Reescrita de Método Gerente gerente = new Gerente(); gerente.setsalario(5000.0); System.out.println(gerente.getBonificacao()); p No Java, quando herdamos um método, podemos alterar seu comportamento. Podemos reescrever (reescrever, sobrescrever, override) este método: class Gerente extends Funcionario { int senha; int numerodefuncionariosgerenciados; public double getbonificacao() { return this.salario * 0.15; //... 10

Invocando o método reescrito p Depois de reescrito, não podemos mais chamar o método antigo que fora herdado da classe mãe. Mas podemos invoca -lo no caso de estarmos dentro da classe. p Imaginem o dia que o getbonificacao do Funcionario mudar, precisaremos mudar o método do Gerente para acompanhar a nova bonificação. Para evitar isso, o getbonificacao do Gerente pode chamar o do Funcionario utilizando a palavra chave super. 11

Invocando o método reescrito class Gerente extends Funcionario { int senha; int numerodefuncionariosgerenciados; public double getbonificacao() { return super.getbonificacao() + 1000; //... p Essa invocação vai procurar o método com o nome getbonificacao de uma super classe de Gerente. p Essa é uma prática comum, pois muitos casos o método reescrito geralmente faz algo a mais que o método da classe mãe. 12

Polimorfismo p O que guarda uma variável do tipo Funcionario? p Uma referência para um Funcionario, nunca o objeto em si. p Vimos que todo Gerente é um Funcionario, pois é uma extensão deste. Gerente gerente = new Gerente(); Funcionario funcionario = gerente; funcionario.setsalario(5000.0); 13

Polimorfismo p Polimorfismo é a capacidade de um objeto poder ser referenciado de várias formas. p Se eu tentar, o código abaixo o que irá aparecer? funcionario.getbonificacao(); p No Java, a invocação de método sempre vai ser decidida em tempo de execução. p O Java vai procurar o objeto na memória e, ai sim, decidir qual método deve ser chamado, sempre relacionando com sua classe de verdade, e não com a que estamos usando para referencia lo. 14

Polimorfismo p Parece estranho criar um gerente e referencia -lo como apenas um funcionário. Por que faríamos isso? p A situação que costuma aparecer é a que temos um método que recebe um argumento do tipo Funcionario: class ControleDeBonificacoes { private double totaldebonificacoes = 0; public void registra(funcionario funcionario) { this.totaldebonificacoes += funcionario.getbonificacao(); public double gettotaldebonificacoes() { return this.totaldebonificacoes; 15

Polimorfismo p Façam o teste no método main; ControleDeBonificacoes controle = new ControleDeBonificacoes(); Gerente funcionario1 = new Gerente(); funcionario1.setsalario(5000.0); controle.registra(funcionario1); Funcionario funcionario2 = new Funcionario(); funcionario2.setsalario(1000.0); controle.registra(funcionario2); System.out.println(controle.getTotalDeBonificacoes()); p Lembrem-se não importa como nos referenciamos a um objeto, o método que será invocado é sempre o que é dele. 16

Polimorfismo p Da maneira que está no dia em que criarmos uma classe Secretaria, por exemplo, que é filha de Funcionario, precisaremos mudar a classe de ControleDeBonificacoes? p Não. Basta a classe Secretaria reescrever os métodos que lhe parecerem necessários. p É exatamente esse o poder do polimorfismo, juntamente com a reescrita de método: diminuir o acoplamento entre as classes, para evitar que novos códigos resultem em modificações em inúmeros lugares. 17

Exemplo p Imagine que vamos modelar um sistema para a faculdade que controle as despesas com funcionários e professores. p Os funcionarios ficariam assim: class EmpregadoDaFaculdade { private String nome; private double salario; double getgastos() { return this.salario; String getinfo() { return "nome: " + this.nome + " com salário " + this.salario; // métodos de get, set e outros 18

Exemplo p O gasto que temos com o professor não é apenas seu salário. Temos de somar um bônus de 10 reais por hora/aula. class ProfessorDaFaculdade extends EmpregadoDaFaculdade { private int horasdeaula; double getgastos() { return this.getsalario() + this.horasdeaula * 10; String getinfo() { String informacaobasica = super.getinfo(); String informacao = informacaobasica + " horas de aula: " + this.horasdeaula; return informacao; // métodos de get, set e outros 19

Exemplo p Como tiramos proveito do polimorfismo? Imagine que temos uma classe de relatório: class GeradorDeRelatorio { public void adiciona(empregadodafaculdade f) { System.out.println(f.getInfo()); System.out.println(f.getGastos()); p Um certo dia, resolvemos aumentar nosso sistema, e colocar uma classe nova, que representa o Reitor. Como ele também é um EmpregadoDaFaculdade, será que vamos precisar alterar algo na nossa classe de Relatorio? 20