Resumen - Sistema de Pagos
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy. Lección 40 de 87.
Desafío
FácilConstruyamos un sistema completo de procesamiento de pagos que reúna todo lo que has aprendido sobre las interfaces en este capítulo. Crearás un sistema flexible en el que se puedan procesar de manera uniforme distintos métodos de pago a través de una interfaz común.
Organizarás tu código en cinco archivos:
Payable.java: Define la interfaz principal que todos los métodos de pago deben implementar. Debe declarar un único métodopay(double amount)que devuelva un String describiendo la acción de pago.CreditCard.java: Crea una clase que implementePayabley represente pagos con tarjeta de crédito. Un CreditCard tiene un campocardNumber(String) que almacena los últimos 4 dígitos. Incluye un constructor para inicializarlo. El métodopaydebe devolver:Paid [amount] using Credit Card ending in [cardNumber]PayPal.java: Crea otra clase que implementePayablepara pagos con PayPal. Una cuenta de PayPal tiene un campoemail(String). Incluye un constructor para inicializarlo. El métodopaydebe devolver:Paid [amount] via PayPal account [email]PaymentProcessor.java: Crea una clase procesadora que pueda manejar cualquier objetoPayable. Debe tener un métodoprocessPayment(Payable paymentMethod, double amount)que llame al métodopaydel método de pago y devuelva el resultado. Esto demuestra cómo las interfaces permiten un comportamiento polimórfico: ¡el procesador no necesita conocer el tipo de pago específico!Main.java: Reúne todo. Recibirás tres entradas: un número de tarjeta (los últimos 4 dígitos), una dirección de correo electrónico y un importe de pago. Crea unPaymentProcessory, después, úsalo para procesar pagos con unaCreditCardy una cuenta dePayPalpor el importe indicado. Imprime cada resultado en una línea separada.
Recibirás tres entradas: los últimos 4 dígitos del número de tarjeta (String), el correo electrónico de PayPal (String) y el importe del pago (double).
Da formato a los importes con dos decimales en la salida. ¡Observa cómo el mismo PaymentProcessor gestiona tipos de pago completamente diferentes gracias al poder de las interfaces!
Pruébalo tú mismo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leer entradas
String cardNumber = scanner.nextLine(); // Últimos 4 dígitos
String email = scanner.nextLine(); // Correo de PayPal
double amount = scanner.nextDouble(); // Monto del pago
// TODO: Crea un PaymentProcessor
// TODO: Crea un CreditCard con el cardNumber
// TODO: Crea una cuenta de PayPal con el email
// TODO: Procesa el pago con CreditCard e imprime el resultado
// TODO: Procesa el pago con PayPal e imprime el resultado
}
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón IteratorPractica por tu cuenta: Compilador de Java online