·

Cursos Gerais ·

Linguagens de Programação

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

1 Aulas Anteriores Herança Criação de uma nova classe a partir de uma classe existente permitindo melhor organização e eventualmente reuso de código Adota um relacionamento hierárquico entre classes Toda subclasse é um da superclasse 2 Exemplo Veículos Contexto de Vendas Veículo Carro Caminhão 3 Exemplo Classe Veículo Atributos básicos Modelo Placa Ano Fabricação Valor Métodos básicos Sets e gets Depreciar valor do veículo Impressão dos dados Quais ou qual método esperamos que tenha exatamente o mesmo comportamento nas classes carro e caminhão Qual deve ser alterado nas classes filhas 4 Subclasse Carro Atributos específicos Número de portas Ano do modelo Métodos Construtor Sets e gets específicos Impressão dos dados do carro 5 Subclasse Caminhão Subclasse Caminhao estende Veiculo Atributos específicos Capacidade Número de eixos Métodos Construtor Sets e gets Impressão dos dados do caminhão Método imprime pode ser invocado a partir da superclasse ou subclasses mas apresenta comportamentos distintos 6 Teste Classe Carro deprecia quando invocado a partir de um objeto Carro comportase exatamente igual a um Veiculo Método foi herdado Já o imprime foi reescrito na subclasse Isto é exemplo de polimorfismo IMPLANTAÇÃO Classe Veículo 8 Exemplo Classe Veículo public class Veiculo private String modelo placa private int anoFabr private double valor public VeiculoString pModelo String pPlaca int pAnoFabr double pValor setModelopModelo setPlacapPlaca setAnoFabrpAnoFabr setValorpValor public void setModeloString pModelo modelo pModelo public void setModeloString modelo thismodelo modelo 9 Exemplo Classe Veículo cont public String getModelo return thismodelo uso opcional nesse caso public void setPlacaString placa thisplaca placa public String getPlaca return placa public void setAnoFabrint anoFabr thisanoFabr anoFabr public int getAnoFabr return anoFabr 10 Exemplo Classe Veículo cont public void setValordouble valor if valor 0 thisvalor valor else thisvalor 0 public double getValor return valor public void depreciafloat taxa setValorvalor valor taxa100 public void imprime Systemoutprintf Veiculo s Placa 7s Ano 4d Valor R2f n modelo placa anoFabr valor Implemente e compile 11 Teste da classe veículo Implemente Compile e execute Resultado 13 Subclasse Carro Atributos específicos Número de portas Ano do modelo Métodos Construtor Sets e gets específicos Impressão dos dados do carro jGRASP exec java TesteVeiculo Veiculo Fiesta Placa ABC1678 Ano 2007 Valor R 3400000 Veículo depreciado Veiculo Fiesta Placa ABC1678 Ano 2007 Valor R 3060000 jGRASP operation complete Subclasse Carro 15 Classe Carro Atributos e construtor public class Carro extends Veiculo private int numPortas private int anoModelo public CarroString modelo String placa int anoFabr int anoModelo int numPortas double valor setModelomodelo setPlacaplaca setAnoFabranoFabr setValorvalor setPortasnumPortas setAnoModeloanoModelo Isso faz sentido Compila 16 Classe Carro Atributos e construtor Caso a superclasse possua construtor definido a subclasse deve utilizálo Isso garante integridade dos atributos básicos public CarroString modelo String placa int anoFabr int anoModelo int numPortas double valor super modelo placa anoFabr valor setPortasnumPortas setAnoModeloanoModelo 17 Classe Carro sets e gets public void setPortasint numPortas thisnumPortas 2 if numPortas 2 thisnumPortas numPortas public int getPortas return numPortas public void setAnoModeloint anoModelo thisanoModelo anoModelo public int getAnoModelo return anoModelo Implemente e compile public class TesteCarro 19 Imprimido dados do carro O método imprime foi herdado da classe Veículo Não possui todos os dados do carro Como codificar método imprime para objetos do tipo Carro No programa teste qual método será executado da classe Veículo ou da classe Carro 20 Alterando a Classe Carro public void imprime Systemoutprintf Veiculo s Placa 7s modelo placa Systemoutprintf Fabr 4d Modelo 4d anoFabr anoModelo Systemoutprintf 02d Portas R 2f numPortas valor O teste do carro funciona public static void mainString args declaração de objeto da subclass 22 Herança Acesso aos membros Acesso protected Subclasses acessam diretamente membros protected de sua superclasse Pode ser usada a palavrachave super Também são acessíveis a classes de um mesmo pacote conjunto de classes Carrojava37 modelo has private access in Veiculo 23 Alterando a classe Veiculo public class Veiculo protected String modelo placa protected int anoFabr protected double valor O teste do carro funcionou Carrojava37 placa has private access in Veiculo Carrojava39 anoFabr has private access in Veiculo 25 Polimorfismo Princípio pelo qual várias classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação assinatura mas comportamentos distintos Veiculo Fiesta 26 Qual a relevância do polimorfismo Exemplo Frota de veículos Algoritmo Solicita quantidade de veículos n Leitura de n veículos Solicita tipo de veiculo v a c Solicita dados de acordo com o tipo Armazena em vetor de tamanho n Imprime dados de n veículos armazenados em cada posição do vetor polimorfismo Qual o tipo do vetor Veículo Carro Caminhão Placa ABC1678 27 Hierarquia Veículo Veículo Carro Caminhão Podemos afirmar que Todo Carro é um Veículo mas nem todo Veículo é um carro Todo Caminhão é um Veículo Fabr 2006 28 Vetor de Veículos Como um vetor preparado para armazenar dados de Veiculos consegue guardar dados do tipo Carro ou Caminhão se eles são maiores que veículo Ou seja tem mais atributos e ocupam mais memória Cada posição do vetor guarda a referência para o objeto instanciado em memória endereço Diferentemente dos tipos primitivos variáveis associadas a objetos não guardam os objetos mas sim sua referência endereçamento em memória Modelo 2007 29 Classe Frota parte 1 de 3 Usa classe Scanner Início da classe Frota Declaração de Variáveis Tamanho da Frota Loop para entrada de dados 03 Portas 30 Classe Frota parte 2 de 3 Dados comuns a qualquer veiculo Dados objeto Carro R 3100000 31 Classe Frota parte 3 de 3 Caminhão Tipo não identificado veículo Polimorfismo O que vai aparecer no imprime Carro depreciado 32 Ligação tardia O método pode ser invocado a partir de uma referência a um objeto do tipo da superclasse apesar de na prática ser uma instância da subclasse Neste caso a decisão sobre qual o método que deve ser selecionado de acordo com o tipo da classe derivada é tomada em tempo de execução através do mecanismo de ligação tardia Ex Classe Frota Diferentemente da classe TesteCarro não possui ligação tardia Veiculo Fiesta 33 Aula 10 Classe Abstrata Lista de Exercícios 03 Dia 1411 Feriado Dia 2111 Prova 02 Placa ABC1678 34 Classe Abstrata Classes demasiadamente gerais para criar objetos reais Utilizadas como superclasses para subclasses concretas Declara atributos e comportamentos comuns das várias classes em uma hierarquia Contém um ou mais métodos abstratos Utiliza palavra abstract para declarar uma classe abstrata ou um método abstrato Tentar instanciar um objeto de uma classe abstrata é um erro de compilação Fabr 2006 35 Exemplo Formas geométricas Formas geométricas área área b x h2 área b x h área π x r2 Modelo 2007 36 Classe Abstrata Forma Geométrica Atributos básicos Número de lados Métodos Set get número de lados métodos não abstratos Área método abstrato Imprime método não abstrato Precisa construtor 03 Portas 37 Classe FormaGeometrica Atributo protected Método concreto Implemente R 2790000 38 Classe concreta X superclasse abstrata Classes abstratas contêm um ou mais métodos abstratos No caso da forma geométrica método area é um exemplo de método abstrato Todas as subclasses concretas devem sobrescrever todos os métodos abstratos herdados No caso do círculo devemos sobrescrever o método area jGRASP operation complete 39 Classe Circulo com Método Area Usa classe Math Implementa Area Implemente 40 Classe TesteFormas public class TesteFormas public static void main String args FormaGeometrica f new FormaGeometrica fimprime Circulo c new Circulo5 cimprime Funciona 41 Alterações Classes abstratas não podem ser instanciadas Corrigir código do teste O que o método imprime quando invocado a partir de um objeto circulo deve imprimir na tela Como imprimir raio junto ao número de lados Altero em Circulo ou FormaGeometrica Redefinir método imprime na classe circulo 42 Classe Circulo Método imprime sobrescreve imprime 43 Mais alterações Como imprimir área da forma geométrica instanciada No caso a área do circulo Altero método imprime na classe Círculo Ou na FormaGeometrica Redefinir método imprime incluindo área public abstract class FormaGeometrica protected int lados public void setLadosint lados if lados0 thislados 0 else thislados lados public abstract double area public void imprime SystemoutprintlnNumero de lados lados SystemoutprintfArea 2f area 45 Exemplo 02 Subclasse Retangulo Atributos básicos Base Altura Métodos Sets Gets Construtor base altura area imprime public class Retangulo extends FormaGeometrica private double base altura public Retangulodouble base double altura supersetLados4 setBasebase setAlturaaltura public void setBasedouble base if base0 thisbase 0 else thisbase base public void setAlturadouble altura if altura0 thisaltura 0 else thisaltura altura public double area return base altura public void imprime SystemoutprintlnDados do Retangulo superimprime SystemoutprintlnBase base SystemoutprintlnAltura altura Teste Formas 49 Atividade Classe abstrata Codifique a classe Triângulo Crie uma classe de teste com as 3 formas geométricas Circulo Retangulo e Triangulo usando polimorfismo