Repaso: gestor de cuentas bancarias
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 20 de 91.
Desafío
FácilConstruyamos un sistema completo de gestión de cuentas bancarias que reúna todos los conceptos de propiedades de clase que has aprendido en este capítulo. Crearás una clase BankAccount que encapsule correctamente los datos de la cuenta mientras realiza un seguimiento de las estadísticas generales del banco.
Organizarás tu código en dos archivos:
BankAccount.php: Define una claseBankAccountque gestione cuentas individuales y realice un seguimiento de las estadísticas generales del banco. La clase debe incluir:- Una constante
MINIMUM_BALANCEestablecida en100 - Una propiedad pública de solo lectura
string $accountIdque no pueda cambiar después de la creación - Una propiedad pública
$holderNamepara el nombre del titular de la cuenta - Una propiedad privada
$balancepara proteger el saldo de la cuenta - Una propiedad estática privada
$totalAccountsque comience en0 - Una propiedad estática privada
$totalDepositsque comience en0
getBalance(): devuelve el saldo actualdeposit($amount): suma el importe al saldo y actualiza el registro de depósitos totales; devuelve el nuevo saldowithdraw($amount): resta el importe del saldo solo si el saldo restante se mantiene en el mínimo o por encima de este, y devuelve el nuevo saldo (o el saldo sin cambios si no se permite el retiro)- Un método estático
getTotalAccounts(): devuelve el número total de cuentas creadas - Un método estático
getTotalDeposits(): devuelve la suma de todos los depósitos realizados en todas las cuentas
- Una constante
main.php: Incluye el archivo de la clase BankAccount. Recibirás cuatro entradas: el primer ID de cuenta, el nombre del primer titular, el segundo ID de cuenta y el nombre del segundo titular. Crea dos cuentas, ambas con un saldo inicial de500. Para la primera cuenta: deposita200, después retira100. Imprime el ID de cuenta, el nombre del titular y el saldo en una línea con el formato:"[accountId]: [holderName] - $[balance]"Para la segunda cuenta: deposita300, después intenta retirar800(esto debería fallar debido al saldo mínimo). Imprime el mismo formato para esta cuenta. Finalmente, imprime el total de cuentas y el total de depósitos en líneas separadas:"Total Accounts: [count]""Total Deposits: $[amount]"
Este desafío combina propiedades de solo lectura para identificadores inmutables, propiedades privadas con métodos getter para datos protegidos, constantes para reglas fijas y propiedades estáticas con métodos estáticos para las estadísticas generales del banco.
Pruébalo tú mismo
<?php
require_once 'BankAccount.php';
// Leer entradas
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));
// TODO: Crear la primera cuenta con saldo inicial de 500
// TODO: Crear la segunda cuenta con saldo inicial de 500
// TODO: Primera cuenta: depositar 200, luego retirar 100
// TODO: Imprimir info de la primera cuenta: "[accountId]: [holderName] - $[balance]"
// TODO: Segunda cuenta: depositar 300, luego intentar retirar 800
// TODO: Imprimir info de la segunda cuenta: "[accountId]: [holderName] - $[balance]"
// TODO: Print "Total Accounts: [count]"
// TODO: Print "Total Deposits: $[amount]"
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases frente a objetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Repaso: calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasRepaso - Jerarquía de empleados7Encapsulación
Público, protegido, privadoModificadores de acceso en profundidadGetters y settersOcultación de la informaciónPromoción del constructor (8.0)Repaso: sistema de registros de estudiantes10Conceptos avanzados de OOP
Composición vs. herenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibras (PHP 8.1)Análisis profundo de la clonación de objetosGeneradores e iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Namespaces y carga automática
Introducción a los NamespacesLa palabra clave useEstándar de carga automática PSR-4Autoloader de ComposerRepaso: proyecto organizado5Interfaces y contratos
Introducción a las interfacesImplementación de interfacesImplementación de múltiples interfacesInterfaces vs. clase abstractaTipado con interfacesRepaso - Calculadora de formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeRepaso: colección personalizada3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Repaso: gestor de cuentas bancarias6Polimorfismo
Repaso de la sobrescritura de métodosPolimorfismo mediante interfacesAnotaciones de tipo y tipos uniónEnlace estático tardíoRepaso: procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos entre TraitsMétodos abstractos en TraitsTraits frente a la herencia12Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de PHP online