Herança e UML
Subclasses em Simula-67 (a primeira linguagem OO da história)
Herança - funcionamento do sistema de execução ao receber uma mensagem
Notação UML
Classe, atributos, operações (métodos)
Representação de Herança e associações
Lição de casa: Leitura https://www.javatpoint.com/uml-class-diagram
Herança: Relação é-um
Hierarquia de Classes
Bom exemplos de Herança
Pessoas numa Universidade
Animal
Stream em Java
Exemplos de mau-uso de Herança
Carro e suas partes
Implementação de Herança em Java: usar palavra reservada extends
Construtores e herança
class Animal {
int peso;
Animal () {
System.out.println("Eu respiro e me mexo.");
}
Animal (int peso) {
this.peso = peso;
System.out.println("Eu respiro e me mexo e peso" + peso + " gramas");
}
}
class AnimalVertebrado extends Animal {
AnimalVertebrado (){
System.out.println("Eu tenho coluna vertebral.");
}
class Cachorro extends AnimalVertebrado {
Cachorro (){
System.out.println("Eu tenho coluna vertebral e lato.");
}
Cachorro (int peso) {
super(peso);
System.out.println("Eu tenho coluna vertebral e lato.");
}
public static void main(String args[]) {
Animal totó = new Cachorro ();
Cachorro rex = new Cachorro (12000);
}
}
O construtor da classe filha chama o construtor padrão da classe mãe.
Se quisermos chamar um outro construtor, devemos colocar explicitamente
super (parâmetros) no início do construtor da classe filha
Herança e sobreposição de métodos
class Veículo {
void movimente () {
System.out.println ("Eu me movimento por aí.");
}
}
class Carro extends Veículo {
void movimente () {
super.movimente (); // opcional
System.out.println("Eu gasto combustível, gero trânsito e poluo o ar.");
}
class Ferrari extends Carro {
void movimente () {
super.movimente (); // opcional
System.out.println("Sou vermelha, super-da-hora mas faço um barulhão.");
}
class Bicicleta extends Veículo {
void movimente () {
super.movimente (); // opcional
System.out.println("Faço bem para a saúde física e mental e não poluo.");
}
Exercício: Biblioteca de músicas (usando arrays).
Um aficcionado por música de 50 anos contratou você para organizar sua biblioteca de músicas. Ele possui músicas armazenadas em arquivos mp3 em seu computador, em CDs e, também, alguns LPs de vinil. Ele quer ser capaz de armazenar todas as músicas em um único Banco de Dados e poder fazer buscas por título da música, compositor, intérprete, período (ano de início, ano de fim). Ele quer também ser capaz de descobrir quais arquivos MP3 estão ocupando muito espaço em seu disco. Em qualquer um desses casos, deve ser fácil imprimir uma lista de músicas contendo uma música por linha.
Implemente um conjunto de classes em Java para modelar esse banco de dados.
Um arquivo MP3 possui título da música, nome do álbum, compositor, intérprete, ano, tamanho em bytes.
Uma música num LP possui título, nome do álbum, compositor, intérprete, ano e velocidade (33, 45 ou 78 rotações por minuto).
Uma música em CD possui título, nome do álbum, compositor, intérprete e ano.
Escreva testes em JUnit para testar a busca por título, compositor e intérprete.
Escreva um programa main() que crie uma biblioteca com 10 músicas em diferentes formatos e que depois exercite uma busca por músicas dos anos 90, imprimindo a lista. A impressão deve mostrar as informações armazenadas em todos os atributos dos objetos.
Lembre-se de evitar duplicação de código.
Parte 2: baixe um software livre (open source) para desenhar diagramas UML e desenhe o diagrama UML da sua solução.