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



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

Orientação a Objetos e a Linguagem Java

Programação Orientada a Objetos (DPADF 0063)

Algoritmos e Programação II. Sobrecarga

Análise e Projeto Orientados por Objetos

Programação Orientada a Objetos em Java

Técnicas de Programação II

3.1 Definições Uma classe é a descrição de um tipo de objeto.

Herança. Alberto Costa Neto DComp - UFS

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

Encapsulamento de Dados

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

Objetivos: Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Capítulo 8. Introdução UML

Programação por Objectos. Java

Programação Orientada a Objetos (DPADF 0063)

Implementando uma Classe e Criando Objetos a partir dela

Programação Orientada a Objetos. Encapsulamento

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

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

Análise de Programação

FUNDAMENTOS DA ORIENTAÇÃO A OBJETOS- REVISÃO

Programação por Objectos. Java

Programação Orientada a Objeto

UML Aspectos de projetos em Diagramas de classes

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

UML: Diagrama de Casos de Uso, Diagrama de Classes

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

Linguagem de Programação I. Orientação a Objetos em Java

Métodos de Construção de Software: Orientação a Objetos. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

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

Reuso com Herança a e Composiçã

Programação Orientada a Objetos: Lista de exercícios #1. Bruno Góis Mateus

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

Prof. Jhonatan Fernando

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

2 Engenharia de Software

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

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

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

Java 2 Standard Edition Como criar classes e objetos

Programação Orientada a Objetos C++

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

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Capítulo 4. Packages e interfaces

Banco de Dados. MER Estendido. Profa. Flávia Cristina Bernardini

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

Computação II Orientação a Objetos

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

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

Linguagem de Programação III Herança

Programação Orientada a Objetos

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

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

Tópicos em Engenharia de Computação

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

Engenharia de Software Engenharia de Requisitos. Análise Orientada a Objetos Prof. Edison A M Morais prof@edison.eti.

Orientação a Objetos com Java

Polimorfismo. Prof. Leonardo Barreto Campos 1

Curso Java Starter. 1

Análise e Projeto de Sistemas

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

Orientação a Objeto e UML Questões 2014 Prof. Felipe Leite

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

Persistência e Banco de Dados em Jogos Digitais

BSI UFRPE Prof. Gustavo Callou

PHP INTRODUÇÃO CLASSES E OBJETOS

UML & Padrões Aula 3. UML e Padrões - Profª Kelly Christine C. Silva

Franklin Ramalho Universidade Federal de Campina Grande - UFCG

Guia para elaboração do Modelo de Domínio Metodologia Celepar

Modificador static e Pacotes. Alberto Costa Neto DComp - UFS

PROVA DISCURSIVA - PROFISSIONAL BÁSICO (FORMAÇÃO DE ANÁLISE DE SISTEMAS - DESENVOLVIMENTO) 2 a FASE

Curso Java Starter. 1

Banco de Dados. Aula 5 - Prof. Bruno Moreno 06/09/2011

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

FACULDADE PITÁGORAS DE UBERLÂNDIA PROGRAMAÇÃO ORIENTADA A OBJETOS EM JAVA LISTA DE EXERCÍCIOS (Compilação) Versão 2.0

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

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

Java. Marcio de Carvalho Victorino

UML & Padrões. Aula 1 Apresentação. Profª Kelly Christine C. Silva

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

DIAGRAMA DE ATIVIDADES

Capítulo 13. Encapsulamento. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

ORIENTAÇÃO A OBJETOS. Professora Lucélia Oliveira

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

Linguagem de Programação III

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções

Classes, Superclasses e Subclasses

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

Guia de Fatores de Qualidade de OO e Java

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

Orientação a Objetos

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

Programação aplicada de computadores Andréa Maria Pedrosa Valli

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

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

Transcrição:

Algoritmos e Programação II Aula 5 Herança *Adaptado do material do Prof. Júlio Machado Herança Uma característica importante da programação orientada a objetos é permitir a criação de novas classes com base em uma classe já existente. Esta classe pode ser tanto uma classe própria como uma classe padrão do Java, ou ainda uma classe construída por outra pessoa Superclasse: classe já existente Subclasse: classe criada a partir da superclasse Objetivo: proporcionar o reuso de software. Herança é a capacidade de reusar código pela especialização de soluções genéricas já existentes Novas classes são criadas a partir de outras já existentes Subclasse herda de uma Superclasse atributos métodos Subclasse Absorve atributos e comportamentos além de adicionar os seus próprios Pode sobrescrever métodos da superclasse 1

Subclasses herdam de: Superclasse direta - subclasse herda explicitamente Superclasse indireta - subclasse herda de dois ou mais níveis superiores na hierarquia de classes Todo objeto da subclasse também é um objeto da superclasse, mas NÃO vice-versa A idéia na herança é ampliar a funcionalidade de uma classe Subclasse contém tudo que a superclasse tem, além de novos atributos e métodos Notação UML Superclasse direta de B Superclasse indireta de C Superclasse direta de C Subclasse direta de A Subclasse direta de B Subclasse indireta de A 2

Vocabulário: Derivação: definição de uma nova classe baseada em outra já existente Classe derivada: subclasse direta da classe da qual ela deriva Classe base ou superclasse: classe original, que forma a base para a definição das classes derivadas Superclasse de uma classe derivada: classe original Herança cria uma estrutura hierárquica Exemplo Hierarquia de classes para formas geométricas Uma forma geométrica pode ser especializada em dois tipos: bidimensional e tridimensional. Subclasse herda os membros da superclasse São tratados como membros da subclasse, isto é, como se tivessem sido declarados dentro da subclasse. Nem todos os atributos e métodos da superclasse são obrigatoriamente acessíveis na subclasse, pois isto dependerá dos modificadores de acesso. Modificador private não permite acesso direto dentro da subclasse. Um objeto possui seus próprios atributos e métodos, mais os atributos e métodos da superclasse 3

Exemplo Exemplo: Funcionario func; func = new Funcionario ( João, 20338765210); System.out.println(func.getNome()); Motorista mot; mot = new Motorista( José,28765210635,00446677379, 18/02/2004 ); System.out.println(mot.getNome()); System.out.println(mot.getDataExpiracao()); Utiliza-se a palavra-chave extends para definir herança de classes class <subclasse> extends <superclasse> {... Exemplo public class Funcionario{... public class Motorista extends Funcionario{... public class Engenheiro extends Funcionario{... 4

Inclusão de membros da superclasse em uma classe derivada. Observação: nem todos os membros da superclasse são obrigatoriamente acessíveis na classe derivada. Isto dependerá dos modificadores de acesso do membro. Atenção: Atributos private da superclasse NÃO estão acessíveis diretamente na subclasse! Para acessá-los diretamente na subclasse se pode utilizar o modificador de acesso protected Herdando atributos e métodos public x protected x private public: acessível em qualquer classe protected: acessível por métodos da própria classe ou de uma subclasse private: acessível somente nos métodos da própria classe Métodos construtores NUNCA são herdados Os métodos na classe derivada que foram herdados da superclasse, continuam podendo acessar TODOS os membros da superclasse 5

Apesar dos construtores da superclasse não serem herdados, eles podem ser chamados para inicializar os atributos herdados (membros da superclasse), quando necessário Utiliza-se super() Se for chamado dessa forma, deve ser o primeiro comando do construtor da subclasse Exemplo anterior: public class Funcionario { private String nome; private int cpf; public Funcionario(String n, int c) { nome = n; cpf = c; public String getnome() { return nome; public int getcpf() { return cpf; public class Motorista extends Funcionario { private int numcarteira; private String dataexpiracao; public int getnumcarteira() { return numcarteira; public String getdataexpiracao() { return dataexpiracao; public Motorista(String n, int c, int nc, String d) { nome = n; cpf = c; numcarteira = nc; dataexpiracao = d; Não podem ser acessados diretamento pois são private 6

Subclasse tem acesso a todos os métodos da superclasse Construtor da superclasse inicializa os atributos herdados: super() É obrigatória sua utilização! public Motorista(String n, int c, int nc, String d) { super(n,c); numcarteira = nc; dataexpiracao = d; public class Engenheiro extends Funcionario { private int numcrea; public Engenheiro(String n, int c, int nc) { super(n,c); numcrea = nc; public int getnumcrea() { return numcrea; Hierarquia de Classes: Em Java, todas as classes herdam diretamente ou indiretamente da classe Object Object é o topo da hierarquia de classes em Java 7

Hierarquia de Classes: Toda classe criada sem explicitar uma superclasse, herda implicitamente da superclasse Object public class Ponto {... é equivalente a public class Ponto extends Object {... Estudo de caso Os professores de uma universidade dividem-se em 2 categorias professores em dedicação exclusiva (DE) professores horistas Professores em dedicação exclusiva possuem um salário fixo para 40 horas de atividade semanais Professores horistas recebem um valor estipulado por hora O cadastro de professores desta universidade armazena o nome, idade, matrícula e informação de salário Problema pode ser resolvido através de uma modelagem de classes como segue: 8

public class Professor { protected String nome; protected int matricula; protected int cargahoraria; public Professor(String n, int m, int c) { setnome(n); setmatricula(m); setcargahoraria(c); public void setnome(string n) { nome = n; public String getnome() { return nome; public void setmatricula(int m) { matricula = m; public int getmatricula() { return matricula; public void setcargahoraria(int c) { cargahoraria = c; public int getcargahoraria() { return cargahoraria; public double getsalario() { return 0; public class ProfDE extends Professor { private double salario; public ProfDE(String n, int m, double s) { super(n,m,40); setsalario(s); public void setsalario(double s) { salario = s; public double getsalario() { return salario; 9

public class ProfHorista extends Professor { private double salariohora; public ProfHorista(String n, int m, int c, double s) { super(n,m,c); setsalariohora(s); public void setsalariohora(double s) { salariohora = s; public double getsalariohora() { return salariohora; public double getsalario() { return (salariohora * cargahoraria * 4.5); Modificadores de Acesso Relembrando: classes são agrupadas em conjuntos chamados packages (=pacotes), sendo que cada um é guardado em um diretório diferente. Exemplo: o pacote java.lang está armazenado no diretório java/lang. Para usar um pacote: import java.util.*; Modificador Acesso permitido sem modificador - de todas as classes no mesmo pacote public - de qualquer classe em qualquer pacote private - sem acesso de fora da classe protected - de todas as classes no mesmo pacote e a partir de qualquer subclasse em qualquer pacote ATENÇÃO: Para derivar uma classe de fora do pacote contendo a superclasse, a superclasse deve ser declarada como public. 10

Recomendações Métodos que fazem a interface externa de uma classe devem ser declarados como public (sendo portanto herdados pelas subclasses) Atributos devem ser private. Utiliza-se o atributo protected quando classes são definidas dentro de um pacote e se deseja dar ao usuário do pacote (desenvolvedor de classes em outro pacote) acesso apenas às subclasses Classes, em geral, são declaradas como public Exceções: Atributos de uma classe definidos como final possuem valor fixo e podem ser usados de fora da classe. Assim sendo, recomenda-se que sejam declarados como public. Métodos que devem ser usados somente dentro da própria classe, devem ser especificados como private. Notação UML: private: - protected: # public: + Observações: atributo de classe é sublinhado método de classe é sublinhado Sobreescrita de Métodos Uma subclasse pode sobrescrever (override) métodos da superclasse. Sobrescrita permite completar ou modificar um comportamento herdado. Quando um método é referenciado em uma subclasse, a versão escrita para a subclasse é utilizada, ao invés do método na superclasse. É possível acessar o método original da superclasse: super.nomedometodo() 11

Cuidado: O tipo de retorno, nome do método, número e tipo dos parâmetros do método da subclasse deve ser o mesmo do método da superclasse. O modificador de acesso do método da subclasse pode relaxar o acesso, mas não o contrário. Ex.: um método protected na superclasse pode ser tornado public na subclasse mas não private. Uma subclasse não pode sobrescrever um método de classe da superclasse. Exercícios 1)Codifique em Java a seguinte hierarquia de classes para objetos geométricos: Classe Ponto Atributos: x, y Métodos: setx, sety, getx, gety Classe Circulo (extends Ponto) Atributo: raio Métodos: setraio, getraio, getarea Classe Cilindro (extends Circulo) Atributo: altura Métodos: setaltura, getaltura, getarea (superfície), getvolume Obs: para todas as classes devem ser implementados dois construtores, um com parâmetros para inicializar os atributos e outro sem parâmetros 2)Defina uma classe em Java chamada Produto para armazenar as informações de um produto. A classe deve armazenar o nome do produto, a quantidade armazenada e o preço unitário. A rotina construtora deve receber o nome, a quantidade e o preço unitário. A classe deve oferecer rotinas tipo get para todos os campos. Deve oferecer ainda uma rotina onde se informa uma certa quantidade a ser retirada do estoque e outra onde se informa uma certa quantidade a ser acrescida ao estoque. A rotina onde se informa uma quantidade a ser retirada do estoque deve retornar a quantidade que efetivamente foi retirada (para os casos em que havia menos produtos do que o solicitado). 12

3)Defina uma classe em Java derivada da classe Produto chamada ProdutoPerecivel que possui um atributo extra que guarda a data de validade do produto. As rotinas através das quais se informa as quantidades a serem retiradas ou acrescidas do estoque devem ser alteradas. A rotina de retirada deve receber também por parâmetro a data do dia corrente. Se os produtos já estiverem armazenados há mais de 2 meses a rotina deve zerar o estoque e devolver 0, pois produtos vencidos são jogados fora. A rotina de acréscimo no estoque só deve acrescentar os novos produtos caso o estoque esteja zerado, de maneira a evitar misturar produtos com prazos de validade diferenciados. 4) Defina uma classe Java derivada da classe ProdutoPerecivel chamada ProdPerEsp que oferece uma rotina de impressão de dados capaz de imprimir uma nota de controle onde consta o nome do produto, a quantidade em estoque e a data de validade. 5) Defina uma classe ProdutoComPreco derivada de Produto que possua campos para armazenar o preço unitário do produto. A classe deve oferecer rotinas para permitir obter o preço unitário, alterar o preço unitário (sempre positivo). 13