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



Documentos relacionados
Técnicas de Programação II

Java 2 Standard Edition Como criar classes e objetos

Modulo IIa Extra: Object

Orientação a Objetos e a Linguagem Java

Computação II Orientação a Objetos

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Orientação a Objetos com Java

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Programação Orientada a Objetos (DPADF 0063)

Herança. Alberto Costa Neto DComp - UFS

Reuso com Herança a e Composiçã

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Guia de Fatores de Qualidade de OO e Java

Análise e Projeto Orientados por Objetos

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Profº. Enrique Pimentel Leite de Oliveira

Programação por Objectos. Java

1. Herança. Sobrescrevem métodos - redefinem métodos herdados. Subclasse herda de uma superclasse

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Programação Orientada a Objetos (DPADF 0063)

POO Programação Orientada a Objetos. Classes em Java

Programação por Objectos. Java

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos

Prof. Jhonatan Fernando

Padrão Básico de Projeto: Interfaces e Polimorfismo

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação Orientada a Objetos em Java

3 Classes e instanciação de objectos (em Java)

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Orientação a Objetos

Módulo 06 Desenho de Classes

Lição 9 Trabalhando com bibliotecas de classes

UM ESTUDO PARA A EVOLUÇÃO DO PHP COM A LINGUAGEM ORIENTADA A OBJETOS

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Técnicas de Programação Avançada TCC Profs.: Anselmo Montenegro Conteúdo: Introdução à Orientação a Objetos

Classes, Superclasses e Subclasses

Análise e Projeto de Sistemas

PHP INTRODUÇÃO CLASSES E OBJETOS

Polimorfismo. Prof. Leonardo Barreto Campos 1

Desenvolvimento OO com Java Orientação a objetos básica

Capítulo 5 Reuso de Classes

Módulo 07 Características Avançadas de Classes

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Tópicos da Aula. Classes e Objetos. Classe Pública em Java. Classes em Java. Assinatura de Métodos. Corpo de Classes e Métodos. Conceitos de classe

Programas eram lineares e com poucos módulos (Programação estruturada) Aumento da complexidade dos sistemas e difícil reusabilidade dos mesmos

Prototype, um Design Patterns de Criação

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Revisão OO Básico. Orientação a Objetos em Java

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Classes Abstratas e Interfaces

Implementando uma Classe e Criando Objetos a partir dela

Java Como Programar, 8/E. (C) 2010 Pearson Education, Inc. Todos os direitos reservados.

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

sobre rogério gonçalves gerente de projetos > digitale agência digital rogerio@digitale.com.br h7p:// h7p://leveme.

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Herança. Algoritmos e Programação II. Aula 5 Herança

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

Introdução a Java. Hélder Nunes

Aula 3 Objeto atual com referencia THIS e Classes com Herança

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Material de Apoio 5. int getres() { return res; O que estas classes possuem em comum? 1) 2) 3)

FBV - Linguagem de Programação II. Um pouco sobre Java

Curso Java Starter. 1

Programação Orientada a Objetos em Java. Threads Threads Threads. Threads

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

THREADS EM JAVA. George Gomes Cabral

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

2ª Lista de Exercícios Orientação a Objetos

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

Programação com Acesso a BD. Programação com OO Acesso em Java

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Orientação a Objetos

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Tópicos em Engenharia de Computação

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

POO usando Java Programa

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

Sobre o Professor Dr. Sylvio Barbon Junior

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

A Introdução à Programação Orientada a Objetos. Programação e Sistemas de Informação

Implementação de Classe e Auto-Relacionamento em Java

UML Unified Modeling Language

Desenvolvimento Web TCC Turma A-1 /

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Factory Method. Edeyson Andrade Gomes

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Análise de Programação

3. PARADIGMA ORIENTADO A OBJETOS

Transcrição:

Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Herança Professor: César Melo Slides baseados em materiais preparados pela Profa. Rosiane Freitas, pelo prof. Horácio Fernandes e sugestões de alunos.

Herança Mecanismo simples e poderoso do paradigma OO que permite que uma nova classe seja descrita a partir de uma classe já existente. Classe mãe: superclasse, classe base; Classe filha: subclasse, classe derivada; Classe filha (mais específica) herda atributos e métodos da classe mãe (mais geral); Classe filha possui atributos e métodos próprios. Possibilidades Incluir dados e códigos em uma classe sem ter de mudar a classe original. usar o código novamente (reusabilidade). alterar o comportamento de uma classe.

Herança Exemplo: o objeto carro modelo básico. modelo luxuoso. O compartilhamento de recursos leva a ferramentas melhores e produtos mais lucrativos não é necessário reinventar a roda a cada nova aplicação. É possível modificar uma classe para criar uma nova classe com uma personalidade ligeiramente diferente. diversos objetos que executam ações diferentes, mesmo possuindo a mesma origem.

Definição de Herança Herança é um mecanismo que permite a uma classe herdar todo o comportamento e os atributos de outra classe. variáveis Cópia! métodos

Hierarquia transporte terrestre aéreo carro avião OVNI carro luxo

Herança» Hierarquia de Classes Object Animal peso locomover() Em Java, Object é a superclasse de todas as classes. peso é uma variável de instância que está presente em todos os objetos criadas para as classes Animal: Mamífero, Ave e Réptil. Mamífero peso locomover() comer() Ave Ave andar() peso voar() locomover() voar() Réptil Réptil andar() peso nadar() locomover() nadar()

Herança» Hierarquia de Classes Object Animal peso locomover() peso é uma variável de instância que está presente em todos os objetos criadas para as classes Animal, Mamífero, Ave e Réptil. Ave pardal = new Ave(); pardal.peso = 700; Mamífero locomover() comer() Ave locomover() voar() Réptil locomover() nadar() Mamifero boi = new Mamifero() boi.peso = 30000; boi.locomover(); // boi.voar(); não existe!

Herança» Hierarquia de Classes Object Animal peso locomover() Mamifero boi = new Mamifero() boi.peso = 30000; boi.locomover(); boi peso = 0 this Mamífero locomover() comer() Ave locomover() voar() Réptil locomover() nadar()

Herança Estender uma classe causa dois efeitos: criação de um subtipo. todas as declarações da classe estendida (superclasse) são incluídas na subclasse, a menos que elas tenham sido sobrepostas. Estendendo uma classe Forma Geral: class <nome-da-classe> extends SuperClass é permitido apenas uma superclasse. não há herança múltipla em Java. cada classe apresenta exatamente uma superclasse. exceção: java.lang.object caso não exista a cláusula extends, então, assume-se que a superclasse é a classe Object.

A Classe Object A classe java.lang.object forma a raiz da hierarquia de classes. Direta ou indiretamente, toda classe é uma subclasse de Object. Object define alguns métodos úteis, incluindo: String tostring(); boolean equals(object outro); Object clone();

Construtores de Subclasses class Animal { double velocidade; class Ave extends Animal{ int altura; Animal() { velocidade = 0.0; void locomover(double vel) { velocidade = vel; Ave() { velocidade = 0.0; altura = 0; void locomover(double vel { if(!(vel==0 && altura > 0)) velocidade = vel; void voar(int alt) { altura = alt;

Construtores de Subclasses class Animal { double velocidade; class Ave extends Animal{ int altura; Animal() { velocidade = 0.0; void locomover(double vel) { velocidade = vel; Ave() { super(); altura = 0; primeira linha void locomover(double vel { if(!(vel==0 && altura > 0)) velocidade = vel; void voar(int alt) { altura = alt;

O Construtor Padrão public NomeClasse() { super(); As chamadas aos construtores são encadeadas. sempre que um objeto for criado, uma seqüência de métodos construtores serão invocados, da subclasse para a superclasse, e assim sucessivamente até atingir a classe Object.

Encadeamento de Destrutores Pode-se pensar que o destrutor de uma classe automaticamente chama o destrutor de sua superclasse. Java não faz isso! Na prática, métodos destrutores são relativamente raros e a necessidade de um encadeamento de destrutores raramente acontece.

Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Polimorfismo Sobrecarga, Sobreposição

Polimorfismo Conceito complementar a herança que permite enviar a mesma mensagem a objetos distintos, onde cada objeto responde da maneira mais apropriada para a sua classe. Existem três tipos de polimorfismos em Java: Sobrecarga Sobreposição (entre superclasse e subclasse) Generalização (subtipo & coerção)

Polimorfismo - Sobrecarga x Sobreposição Sobrecarga Métodos (procedimentos) com o mesmo nome, mas com argumentos diferentes. Identificados por: nome do método; Sobreposição tipo de dados dos parâmetros. Métodos (procedimentos) com a mesma interface, mas com funcionalidades diferentes. Permite que uma subclasse herde um método da superclasse e implemente-o de forma diferente. Identificados por: classe do objeto. conteúdo do objeto.

Exemplo de Sobre Posição class Animal { int peso; void locomover() { /* movimentação do animal */ class Mamifero extends Animal { void comer() Sobreposição de método! class Ave extends Animal { void locomover() { void voar() {

Exemplo de Sobrecarga e Sobreposição class Ave extends Animal { private int altura, velocidade; Ave() { altura = 0; velocidade = 0; { void locomover() { velocidade = 2; void locomover(int vel) { velocidade = vel; void parar() { andar(0); void voar() { altura = 10; velocidade = 30; Ave.locomover() sobrepõe o método de Animal.locomover(). locomover() também é sobrecarregado na classe Ave.

Sobreposição de Métodos e Atributos Um método da superclasse pode ser invocado usando a palavra super, se for preciso. Ao sobrepor atributos (variáveis), podemos referenciar o atributo da superclasse também através da palavra super. class A { int i = 1; int f() { return i; class B extends A { int i; // sobrepõe o // atributo i de A int f() { // sobrepõe o método // f() de A i = super.i + 1; //A.i return super.f() + i; //A.f()

Métodos e Classes Finais Se um método for declarado com o modificador final, ele não pode ser sobreposto. Todos os métodos estáticos (static) e privados (private) são finais por definição, da mesma forma que todos os métodos de uma classe final. Importante Se um método for declarado explícita ou implicitamente como final, o compilador pode executar algumas otimizações sobre ele. Classes como Constantes Quando uma classe é declarada com o modificador final, significa que ela não pode ser estendida. java.lang.system é um exemplo de uma classe final. Declarar uma classe como sendo final previne extensões não desejadas da mesma.

Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Polimorfismo Generalização

Coerção entre Objetos Processo de produção de um novo valor que tem um tipo diferente de sua origem (cast). Animal anim = new Animal(); Mamifero boi = new Mamifero(); // subclasse de Animal anim = boi; // uso ascendente: sem coerção boi = (Mamifero)anim;// uso descendente: com coerção Isto é possível pois uma subclasse é um subtipo. Está-se generalizando quando se utiliza um objeto mais específico (boi, da classe Mamífero) através de uma classe mais geral (Animal). Para transformar o objeto para uma classe mais específica (Animal Mamífero), utiliza-se de coerção entre objetos, mais conhecido como cast.

Coerção entre Objetos - Exemplo Animal[] bichos = new Animal[4]; // vetor de Animais! int i; bichos[0] = new Animal(); bichos[1] = new Ave(); // Ave é subclasse de Animal bichos[2] = new Mamifero(); // Subclasse de Animal bichos[3] = new Reptil(); // Subclasse de Animal for(i=0; i< bichos.length(); i++) { bichos[i].locomover(); if (bichos[i] instanceof Ave) // Objeto é da classe Ave? ( (Ave) bichos[i] ).voar(); // Coerção! Mais específico

Generalização Prática de programação orientada a objetos baseada na utilização de classes mais genéricas. Como escrever código genérico em Java? Observe: class Par { int x, y; Par(int a, int b) { x = a; y=b; void permuta() { int temp = x; x = y; y = temp; E se eu precisasse criar uma classe que trabalhasse com um par de doubles ao invés de ints? Possível solução: criar uma nova classe? Duplicação de código Melhor solução: Generalização

Generalização Utilizar classes mais genéricas nos parâmetros. Em Java, a classe mais genérica possível é a Object: class Par { Object x, y; Par(Object a, b) { x = a; y = b; void permuta() { Object temp = x; x = y; y = temp; Uso da classe Par: p = new Par(new Integer(3), new Integer(5)); p.permuta(); q = new Par(new Double(3.2), new Double(5.6)); q.permuta();

Generalização Problema p = new Par(new Integer(3), João ) Não há a possibilidade de coerção Solução: fazer uso da instanceof para verificação de classes

Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Classes Abstratas e Interfaces

Abstração Em uma hierarquia, quanto mais alta a classe, mais abstrata é sua definição. A classe Animal apresenta o método locomover(), mas ela não tem como implementar este método pois não sabe o tipo de animal que está tratando. Java permite definir métodos sem implementá-los! Métodos Abstratos: Não possui corpo (implementação). Apresenta apenas a definição seguida de ; Apresenta o modificador abstract. public abstract class Animal { public int peso; public abstract void locomover(); Se uma classe apresentar pelo menos um método abstrato, ela deve ser declarada como abstract.

Classes Abstratas Classes abstratas não podem ser instanciadas! São geralmente utilizadas como superclasses (são estendidas). Uma subclasse de uma classe abstrata pode ser instanciada se ela sobrepor todos os métodos abstratos e fornecer implementação para cada um deles. Se a subclasse não implementar *todos* os métodos abstratos da superclasse, ela também terá que ser abstrata. public abstract class FiguraGeometrica { public abstract double area(); public abstract double perimetro(); public class Retangulo extends FiguraGeometrica { protected double w, h; public Retangulo() { this(0.0,0.0); public Retangulo(double l, double a) { w = l; h = a; public double area() { return w*h; public double perimetro() { return 2*w*h;

Interfaces Se uma classe abstrata possui apenas métodos abstratos, é melhor usar uma interface. pode haver herança de comportamento de mais de uma (super)classe através das interfaces. Interface NÃO é Classe Especifica operações sem implementá-las. Componentes de Interface: Métodos: Todos os métodos são implicitamente públicos e abstratos. Constantes: São implicitamente públicas e estáticas. Também não podem ser instanciadas.

Interfaces public interface Desenho { public void novacor(color c); public void novaposicao(double x, double y); public void desenha(drawwindow dw); Código armazenado em arquivo Desenho.java public class RetanguloDesenhavel extends Retangulo implements Desenho { private Color c; private double x, y; public RetanguloDesenhavel(double l, double a) { super(a,l); public void novacor(color c) { this.c = c; public void novaposicao(double x, double y) { this.x = x; this.y = y; public void desenha(drawwindow dw) { dw.drawrect(x, y, w, h, c);

Interfaces RetanguloDesenhavel rd = new RetanguloDesenhavel(); rd.area(); rd.perimetro(); rd.novacor(color.red); rd.novaposicao(10.0,20.0); rd.desenha(screen); Interfaces podem estender outras interfaces public interface Escalavel {... public interface Rotacionavel {... public interface Reflectivel {... public interface Transformavel extends Escalavel, Rotacionavel, Reflectivel {... public interface ObjetoDesenho extends Desenho, Transformavel {... public class Forma implements ObjetoDesenho {...

POO em Java Dúvidas? Defina Herança em POO. Exemplifique. O que é a classe Object em Java? O que é Polimorfismo? Quais os tipos de polimorfismo? Diferencie e dê exemplos de cada uma.