Recapitulação - Sistema de Pagamento
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 40 de 87.
Desafio
FácilVamos criar um sistema completo de processamento de pagamentos que reúne tudo o que você aprendeu sobre interfaces neste capítulo. Você criará um sistema flexível no qual diferentes métodos de pagamento podem ser processados uniformemente por meio de uma interface comum.
Você organizará seu código em cinco arquivos:
Payable.java: Defina a interface principal que todos os métodos de pagamento devem implementar. Ela deve declarar um único métodopay(double amount)que retorna uma String descrevendo a ação de pagamento.CreditCard.java: Crie uma classe que implementePayablee represente pagamentos com cartão de crédito. Um CreditCard tem um campocardNumber(String) que armazena os últimos 4 dígitos. Inclua um construtor para inicializá-lo. O métodopaydeve retornar:Paid [amount] using Credit Card ending in [cardNumber]PayPal.java: Crie outra classe que implementePayablepara pagamentos via PayPal. Uma conta do PayPal tem um campoemail(String). Inclua um construtor para inicializá-lo. O métodopaydeve retornar:Paid [amount] via PayPal account [email]PaymentProcessor.java: Crie uma classe processadora que possa lidar com qualquer objetoPayable. Ela deve ter um métodoprocessPayment(Payable paymentMethod, double amount)que chama o métodopaydo método de pagamento e retorna o resultado. Isso demonstra como as interfaces permitem o comportamento polimórfico: a processadora não precisa saber qual é o tipo específico de pagamento!Main.java: Reúna tudo. Você receberá três entradas: um número de cartão (últimos 4 dígitos), um endereço de e-mail e um valor de pagamento. Crie umPaymentProcessore use-o para processar pagamentos tanto com umCreditCardquanto com uma conta doPayPalpara o valor informado. Imprima cada resultado em uma linha separada.
Você receberá três entradas: os últimos 4 dígitos do número do cartão (String), o e-mail do PayPal (String) e o valor do pagamento (double).
Formate os valores com duas casas decimais na saída. Observe como o mesmo PaymentProcessor lida com tipos de pagamento completamente diferentes por meio do poder das interfaces!
Experimente você mesmo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Ler entradas
String cardNumber = scanner.nextLine(); // Últimos 4 dígitos
String email = scanner.nextLine(); // E-mail do PayPal
double amount = scanner.nextDouble(); // Valor do pagamento
// TODO: Crie um PaymentProcessor
// TODO: Crie um CreditCard com o cardNumber
// TODO: Crie uma conta PayPal com o email
// TODO: Processe o pagamento com CreditCard e imprima o resultado
// TODO: Processe o pagamento com PayPal e imprima o resultado
}
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão IteratorPratique por conta própria: Compilador de Java online