Laboratório de Java Herança e Agregação (Lab II) Prof. Guido Araújo
Herança class ContaCor { : private String titular; -nome do Titular -número da conta -senha -saldo atual +creditaValor() +debitaValor() +obtemSaldo() class ContaCor { : private String titular; private int numConta; private int senha; private double saldoAtual; } class ContaEsp extends ContaCor { private double limite; ContaEsp +limite -alteraLimite() -getCreditoUtilizado()
Herança (cont.) ContaCor ContaCor ContaCor -nome do Titular -número da conta -senha -saldo atual +creditaValor() +debitaValor() +obtemSaldo() ContaCor ContaCor
Herança (cont.) ContaCor ContaEsp ContaEsp -nome do Titular -número da conta -senha -saldo atual -limite +creditaValor() +debitaValor() +obtemSaldo() +alteraLimite() +getCreditoUtilizado() ContaEsp ContaCor
Usando super class ContaCor { protected String titular; protected int numConta; protected double saldoAtual; : Conta(String nome, float val, int num, int pwd) { titular = nome; } class ContaEsp extends ContaCor { double limite; ContaEsp (String nome, float val, int num, int pwd) { super(nome, val, num, pwd); numConta = 1234; limite = 200; } :
Exercício 1 Do diretório documento Compilar todos. Documento.java Carta.java Telegrama.java ExemploDocumento2.java Compilar todos. Executar e estudar ExemploDocumento2.java e entender o que está ocorrendo.
Exercício 2 Definir CartaRegistrada Definir Encomenda subclasse de Carta atributos: data e local Definir Encomenda subclasse de CartaRegistrada atributo: conteudo Carta CartaRegistrada Encomenda
Exercício 3 Implemente um programa que cria objetos: CartaRegistrada Encomenda Chame o método imprimir de cada objeto. Compile e execute.
Visibilidade Protegida class ContaCor { : protected double saldoAtual; } class ContaEsp extends ContaCor { public float getCreditoUsado { return saldoAtual > limite ? 0 : limite – saldoAtual; Viola regra: Membros devem ser privados !!
Visibilidade Protegida class ContaCor { : private double saldoAtual; protected float getSaldoAtual() { } class ContaEsp extends ContaCor { public float getCreditoUsado { return getsaldoAtual() > limite ? 0 : limite – getsaldoAtual(); Agora sim !! Via método protegido
Exercício 4 Do diretório contaCor: ContaCor.java ContaEsp.java ExemploConta.java Compilar as três classes e executar a última O que aconteceu durante a compilação de ContaEsp? Você saberia explicar ? Como usar protected para contornar isto ? Existe outra solução?
Herança vs. Agregação ContaEsp É-UMA ContaCor Carro CONTÉM Motor class ContaCor { : } class ContaEsp extends ContaCor { class Motor { class Carro { Motor motor; ContaEsp É-UMA ContaCor Carro CONTÉM Motor
Exercício 5 Do diretório veiculos: Carro.java Definir e agregar a classe abaixo à Carro. Motor Definir os seguintes métodos para Motor ligar isLigado Definir os seguinte métodos para Carro
Exercício 6 (extra) Definir nova classe Caminhao: numEixos capacidade Projete um construtor Projete programa ExemploCaminhao Instacia caminhão e imprime eixos e carga Carros e caminhões são parecidos Como evitar repetir operações em comuns ?
Exercício 7 (extra) Definir nova classe Aviao Atributos Tanque combustível (idêntico ao anterior) Duas turbinas (parecida com Motor) potência máxima potência atual (%) Compartimento de carga: capacidade máxima capacidade atual (%) Projete um construtor para inicialização Projete ExemploAviao e voe…
Exercício 8 (extra) Do diretório fila: Lista.java Fila.java ExemploFila.java Compilar as três classes e executar a última O comportamento de uma fila não é respeitado Por quê ? Agregue Fila e Lista de modo que a respeitar o comportamento