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ácilVamos a construir un sistema de procesamiento de pagos completo que reúna todo lo que has aprendido sobre interfaces en este capítulo. Crearás un sistema flexible donde diferentes métodos de pago pueden procesarse de manera uniforme 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 implementePayableque 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 de 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 el 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 (últimos 4 dígitos), una dirección de correo electrónico y un monto de pago. Crea unPaymentProcessor, luego úsalo para procesar pagos tanto con unaCreditCardcomo con una cuenta dePayPalpara el monto dado. 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 monto del pago (double).
Formatea los montos con dos decimales en tu salida. ¡Observa cómo el mismo PaymentProcessor maneja tipos de pago completamente diferentes a través del 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 electrónico de PayPal
double amount = scanner.nextDouble(); // Monto del pago
// TODO: Crear un PaymentProcessor
// TODO: Crear una CreditCard con el cardNumber
// TODO: Crear una cuenta de PayPal con el email
// TODO: Procesar el pago con CreditCard e imprimir el resultado
// TODO: Procesar el pago con PayPal e imprimir 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 Iterator