Pular para o conteúdo
Bruno Dórea
Todos os posts

4 mins de leitura


Calculando Desconto

Desafios de Código Java Intermediários - S.O.L.I.D. - 3/5


Java AI Powered
Java AI Powered

Descrição

O Princípio Aberto/Fechado (Open/Closed Principle - OCP), juntamente com o Princípio da Responsabilidade Única (Single Responsibility Principle - SRP), faz parte dos fundamentos do design de software que visam promover a flexibilidade e extensibilidade dos sistemas. Esse princípio enfatiza que uma classe ou módulo deve ser aberto para extensões, permitindo a adição de novas funcionalidades, mas fechado para modificações, evitando alterações frequentes em seu código existente.

Seguindo o Princípio Aberto/Fechado, neste desafio você deve criar uma classe base Discount e classes derivadas para diferentes tipos de descontos, como StudentDiscount e MembershipDiscount. Os estudantes recebem um desconto de 10% e os afiliados recebem um desconto de 15%. Ao seguirmos o OCP, criamos sistemas mais fáceis de estender sem comprometer a estabilidade das partes já implementadas, resultando em códigos mais robustos, coesos e adaptáveis, características essenciais para o desenvolvimento de software escalável e de alta qualidade.

Entrada

A entrada é composta pelo tipo de desconto (estudante ou afiliado) e o valor original exibidos em uma linha separada.

Saída

A saída esperada é o valor com desconto aplicado (double).

Exemplos

A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.

EntradaSaída
student
10090.00
EntradaSaída
membership
10085.00
EntradaSaída
membership
245208.25

Resolução

import java.util.Scanner;
 
class Discount {
  public double calculateDiscount(double originalValue) {
    return originalValue;
  }
}
 
final class StudentDiscount extends Discount {
  @Override
  public double calculateDiscount(double originalValue) {
    return originalValue * 0.90;
  }
}
 
final class MembershipDiscount extends Discount {
  @Override
  public double calculateDiscount(double originalValue) {
    return originalValue * 0.85;
  }
}
 
public class Main {
  public static void main(String[] args) {
    try(Scanner scanner = new Scanner(System.in)) {
      String discountType = scanner.next();
      double originalValue = scanner.nextDouble();
 
      Discount discount;
      if ("student".equals(discountType)) {
          discount = new StudentDiscount();
      } else if ("membership".equals(discountType)) {
          discount = new MembershipDiscount();
      } else {
          discount = new Discount();
      }
 
      double discountValue = discount.calculateDiscount(originalValue);
      System.out.printf("%.2f", discountValue);
    }
  }
}

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.