Universidade Federal de Uberlândia

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

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

Universidade Federal de Uberlândia

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

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

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

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

Programação por Objectos. Java

Linguagem de Programação II Herança

Programação Orientada a Objeto

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

Professor Leonardo Cabral da Rocha Soares Lattes:

Orientação a Objetos - Herança

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

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

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

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

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

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

9 Classes Abstractas e Interfaces

Herança e Propriedades

COMPORTAMENTOS - Observações

Aula 9 POO 1 Polimorfismo. Profa. Elaine Faria UFU

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

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

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

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

Linguagem de Programação. Diagrama de classes

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

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

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

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

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

Sobrecarga, Sobreposição e Polimorfismo

Prof. Tiago Alves de Oliveira

15/04/2013. Outro Diagrama de Classes. Primeiro Diagrama de Classes. Diagrama de Classes. Atributos. Eduardo Figueiredo

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

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

Programação Orientada a Objetos

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

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

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

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

Orientação a Objetos (OO)

Programação Orientada a Objetos

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

Conceitos de Programação Orientada a Objetos

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

Orientação a Objetos AULA 06

POO29004 Programação Orientada a Objetos

7. Herança. Copyright 2003, Cecília Rubira. Todos os direitos reservados.

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

Diagrama de Classes. Régis Patrick Silva Simão. Régis Simão Diagrama de Classes 1/42

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

POO29004 Programação Orientada a Objetos

Aula 3 POO 1 Classe e Objeto. Profa. Elaine Faria UFU

Interfaces e Classes Abstratas

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

POO29004 Programação Orientada a Objetos

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

Herança e Classes Abstratas. João Paulo Q. dos Santos

Programação Orientada a Objetos Relacionamentos entre classes

Herança Sendo uma linguagem orientada a objetos Java oferece mecanismos para definir classes derivadas a partir de classes existentes; As classes deri

Notas de Aula 04: Herança e polimorfismo.

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

Introdução. Universidade Federal de Uberlândia. Programação Orientada a Objetos. Prof. Fabiano Dorça

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

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

JAVA. Professor: Bruno Toledo


Computação II Orientação a Objetos

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

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

Programação Orientada a Objetos

Auto-Referenciamento e Herança

JAVA. Professor: Bruno Toledo

Classe Abstrata e Interface

Unidade: sobrecarga, construtores e herança

Orientação a Objetos parte 2 ENCAPSULAMENTO, CLASSES, HERANÇAS

Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

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

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

Programação Orientada por Objetos

Análise e Projeto Orientados a Objetos

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

Programação Orientada a Objetos II

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Programação Orientada a Objetos

Classes e Objetos. Sintaxe de classe em Java

Orientação a Objetos e Java

Programação Orientada a Objetos

Programação Orientada a Objetos para Redes de Computadores

Relacionamentos entre objetos

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

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos

Palavras Reservadas da Linguagem Java

Transcrição:

Universidade Federal de Uberlândia Programação Orientada a Objetos Herança, Generalização-Especialização Prof. Fabiano Azevedo Dorça

Princípio da POO que permite a criação de novas classes a partir de outras previamente criadas. Essas novas classes são chamadas de subclasses, ou classes filhas. As classes já existentes, que deram origem às subclasses, são chamadas de superclasses, ou classes pai.

É possível criar uma hierarquia de classes, definindo classes mais gerais e classes mais específicas. Uma sub-classe (+específica) herda métodos e atributos de sua super-classe (+geral); A sub-classe pode reescrever métodos, dando uma forma mais específica para um método herdado.

Exemplo: Em UML Super-classe: generalização ou abstração Herança: relacionamento é-um float float float Sub-classe: Especialização

Em java: class Pessoa{ String nome; String endereco; String telefone; métodos Arquivo Pessoa.java

Em java: import java.util.*; class Cliente extends Pessoa{ float debito; float credito; Date dtultlocacao; Arquivo Cliente.java

Em java: class Funcionario extends Pessoa{ float salario; int horasextras; Arquivo Funcionario.java

Uso do this referência a elementos da classe (atributos/métodos). Exemplo: class Funcionario extends Pessoa{ float salario; int horasextras; float calcsalario(float vhora){ return this.salario+(this.horasextras * vhora);

Uso do super referência a elementos da super-classe. Exemplo: class Pessoa { String nome; String endereco; String telefone; void mostrar() { System.out.println("Nome:" + this.nome); System.out.println("Endereço: " + this.endereco); System.out.println("Telefone: " + this.telefone);

class Funcionario extends Pessoa{ float salario; int horasextras;... void mostrar(){ System.out.println("Nome:" + super.nome); System.out.println("Endereco: " + super.endereco); System.out.println("Telefone: " + super.telefone); System.out.println("Salario: " + this.salario); System.out.println("H.extras: " + this.horasextras);

Uma solução melhor... class Funcionario extends Pessoa{ float salario; int horasextras; void mostrar(){ super.mostrar(); System.out.println("Salario: " + this.salario); System.out.println("H.extras: " + this.horasextras);

Uso correto de herança Exemplo: class Pessoa { String nome; String cpf; Date data_nascimento;

class Professor extends Pessoa { double salario; Date data_admissao; String[] disciplinas;

class Tecnico extends Pessoa { double salario; Date data_admissao; String cargo; PROBLEMA: Repetição de código Fazer: class Tecnico extends Professor{... seria uma solução?? Na dúvida, pergunte: Técnico é um Professor?

Não, Técnico não é um Professor. Neste caso é errado fazer class Tecnico extends Professor Solução? Criar uma nova abstração conceitual capaz de fornecer o que é comum a ambas as classes (Tecnico e Professor)

- Uma saída seria: class Funcionario extends Pessoa{ double salario; Date data_admissao; Comum a ambas as classes //..métodos

class Tecnico extends Funcionario { String cargo; //...métodos Específico de Técnico

class Professor extends Funcionario { String[] disciplinas; //...métodos Específico de Professor

Desta forma, elimina-se a replicação de código; cria-se classes mais coesas e de reuso mais fácil; cria-se um projeto: mais flexível de fácil entendimento de fácil manutenção

Além disto, pode-se estender o projeto com maior facilidade no futuro. Exemplo:

Sobreposição de métodos: Em POO, quando herdamos um método, podemos alterar seu comportamento. Podemos reescrever (reescrever, sobrescrever, override) este método. Ocorre quando a subclasse declara um método com a mesma assinatura da superclasse, mas com um corpo diferente de método. Fizemos isto com o método mostrar nos exemplos anteriores.

Exemplo: Sobreposição de método para cálculo de preço de cópias para alunos e demais pessoas.

class Pessoa { String nome; String cpf; Date data_nascimento; double tirarcopias(int qtd) { return 0.10 * qtd;

class Aluno extends Pessoa { String matricula; double tirarcopias(int qtd) { return 0.07 * qtd;

Importante: Note que a assinatura dos métodos devem ser exatamente a mesma. Ambos têm o mesmo identificador e parâmetros (número e tipo).

O tipo de retorno correspondente (covariante): Se o tipo de retorno é uma classe, então o método da subclasse pode retornar o mesmo tipo ou um subtipo. Se o tipo de retorno é um tipo primitivo, então o método da sub-classe deve retornar exatamente o mesmo tipo.

Se um método definido numa subclasse tiver: o mesmo identificador, mesmos número e tipo de parâmetros, mas o retorno não for correspondente, então ocorre um erro de compilação.

Exemplo: class Funcionario { String nome; String cpf; double salario; double getbonificacao() { return this.salario * 0.10; // métodos

class Gerente extends Funcionario { int senha; int numerodefuncionariosgerenciados; double getbonificacao() { return this.salario * 0.15; //... Neste caso, este método não poderia retornar um float, por exemplo.

Problema: Calcular a bonificação de um Gerente cujo valor é igual ao cálculo de um Funcionario porém adicionando R$ 1000.

Possível solução: class Gerente extends Funcionario { //...atributos e construtor public double getbonificacao() { return this.salario * 0.10 + 1000; //... Replicação da regra de negócio já implementada na classe Funcionario. Qual o Problema?

Solução mais eficiente: class Gerente extends Funcionario { int senha; int numerodefuncionariosgerenciados; double getbonificacao() { return super.getbonificacao() + 1000; //...

Redeclaração (sobreposição) de atributos. Exemplo: public class Classe1 { int codigo = 10; public class Classe2 extends Classe1 { String codigo; void testar() { this.codigo = "uytre"; super.codigo = 1;

Redeclaração (sobreposição) de atributos. Exemplo 2: public class Classe1 { int codigo = 10; public class Classe2 extends Classe1 { int codigo; void testar() { this.codigo = 2; super.codigo = 1;

Referências MELO, Ana, C. Desenvolvendo Aplicações com UML 2.0, 2a. Edição, Brasport, 2005. BOOCK, Grady; JACOBSON, Ivar; RUMBAUGH, James; UML Guia do Usuário, 2ª. Edição, Campus, 2005. LARMAN, Craig; Utilizando UML e Padrões, 2ª. Edição, Bookman, 2004. SCOTT, Kendall. Processo Unificado Explicado. 1a. Edição. Bookman. 2003. STEVENS, Perdita; POODLEY, Rob; POODLEY, R.J.; Using UML: Software Engineering With Objects and Components, 1 st Edition, Addison-Wesley, 1999. http://www.devmedia.com.br/ http://www.caelum.com.br/