Sistemas computacionais que exigem reaproveitamento de código, geralmente, são projetados para facilitar a sua manutenção. Para isso, é utilizado, com muita frequência, o conceito de herança e polimorfismo. Atrelados ao uso desses conceitos, podem ser utilizadas classes genéricas que nunca serão instanciadas (abstratas), ou até mesmo a implementação de métodos alheios a contratos (interface).
Você, como programador de linguagem Java, é convidado para desenvolver um sistema para uma banca de jornal, cujo proprietário deseja expandir seus negócios para o meio digital. Ele quer algo simples, uma vez que o negócio recém foi estabelecido. A banca tem apenas livros (que pode ser classe abstrata) e revistas, os quais implementam o produto dessa banca. O produto será adicionado como interface para que livros e revistam tenham, futuramente, um sistema de desconto. Os livros por sua vez, podem ser ampliados para livro físico, e-book e minilivro.
Assim, escreva o código de implementação para esse novo sistema.
Para ajudar você em sua programação e guiá-lo no seu passo inicial, veja a modelagem em UML.
Lista de comentários
Aqui está um exemplo de como o código para esse sistema poderia ser implementado em Java:
Código
// Interface Produto
interface Produto {
public void adicionarDesconto();
}
// Classe abstrata Livro
abstract class Livro implements Produto {
private String titulo;
private String autor;
private double preco;
public Livro(String titulo, String autor, double preco) {
this.titulo = titulo;
this.autor = autor;
this.preco = preco;
}
public String getTitulo() {
return titulo;
}
public String getAutor() {
return autor;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
public abstract void adicionarDesconto();
}
// Classe LivroFisico que estende Livro
class LivroFisico extends Livro {
private double peso;
public LivroFisico(String titulo, String autor, double preco, double peso) {
super(titulo, autor, preco);
this.peso = peso;
}
public double getPeso() {
return peso;
}
@Override
public void adicionarDesconto() {
double desconto = this.getPreco() * 0.1;
this.setPreco(this.getPreco() - desconto);
}
}
// Classe Ebook que estende Livro
class Ebook extends Livro {
private String formato;
public Ebook(String titulo, String autor, double preco, String formato) {
super(titulo, autor, preco);
this.formato = formato;
}
public String getFormato() {
return formato;
}
@Override
public void adicionarDesconto() {
double desconto = this.getPreco() * 0.15;
this.setPreco(this.getPreco() - desconto);
}
}
// Classe MiniLivro que estende Livro
class MiniLivro extends Livro {
private double tamanho;
public MiniLivro(String titulo, String autor, double preco, double tamanho) {
super(titulo, autor, preco);
this.tamanho = tamanho;
}
public double getTamanho() {
return tamanho;
}
@Override
public void adicionarDesconto() {
double desconto = this.getPreco() * 0.2;
this.setPre
Leia mais sobre programação em java aqui: https://brainly.com.br/tarefa/23913039
#SPJ1