Programación Orientada A Objetos (C#) - Microsoft Docs
Programación Orientada A Objetos (C#) - Microsoft Docs
Programación Orientada A Objetos (C#) - Microsoft Docs
Docs /
.NET /
Guía de C# /
Aspectos básicos / 1
En este artículo
Creación de diferentes tipos de cuentas
Diferentes reglas de descubierto
Resumen
el tutorial anterior.
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 1/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
Una cuenta que devenga intereses que genera beneficios al final de cada mes.
Una línea de crédito que puede tener un saldo negativo, pero cuando sea así, se
producirá un cargo por intereses cada mes.
Una cuenta de tarjeta de regalo de prepago que comienza con un único depósito y
solo se puede liquidar. Se puede recargar una vez al principio de cada mes.
Todas estas cuentas diferentes son similares a la clase BankAccount definida en el tutorial
anterior. Podría copiar ese código, cambiar el nombre de las clases y realizar
modificaciones. Esa técnica funcionaría a corto plazo, pero a la larga supondría más
trabajo. Cualquier cambio se copiará en todas las clases afectadas.
En su lugar, puede crear nuevos tipos de cuenta bancaria que hereden métodos y datos
de la clase BankAccount creada en el tutorial anterior. Estas clases nuevas pueden
extender la clase BankAccount con el comportamiento específico necesario para cada
tipo:
C# = Copiar
Cuando cree las clases como se muestra en el ejemplo anterior, observará que ninguna
de las clases derivadas se compila. La inicialización de un objeto es responsabilidad de un
constructor. Un constructor de clase derivada debe inicializar la clase derivada y
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 2/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
C# = Copiar
C# = Copiar
Los parámetros de este nuevo constructor coinciden con el tipo de parámetro y los
nombres del constructor de clase base. Utilice la sintaxis de : base() para indicar una
llamada a un constructor de clase base. Algunas clases definen varios constructores, y
esta sintaxis le permite elegir el constructor de clase base al que llama. Una vez que haya
actualizado los constructores, puede desarrollar el código para cada una de las clases
derivadas. Los requisitos para las clases nuevas se pueden indicar de la siguiente manera:
Puede ver que los tres tipos de cuenta tienen una acción que tiene lugar al final de cada
mes. Sin embargo, cada tipo de cuenta realiza diferentes tareas. Utiliza el polimorfismo
para implementar este código. Cree un método virtual único en la clase BankAccount :
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 3/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
C# = Copiar
El código anterior muestra cómo se usa la palabra clave virtual para declarar un
método en la clase base para el que una clase derivada puede proporcionar una
implementación diferente. Un método virtual es un método en el que cualquier clase
derivada puede optar por volver a implementar. Las clases derivadas usan la palabra
clave override para definir la nueva implementación. Normalmente, se hace referencia a
este proceso como "reemplazar la implementación de la clase base". La palabra clave
virtual especifica que las clases derivadas pueden invalidar el comportamiento.
También puede declarar métodos abstract en los que las clases derivadas deben
reemplazar el comportamiento. La clase base no proporciona una implementación para
un método abstract . A continuación, debe definir la implementación de dos de las
nuevas clases que ha creado. Empiece por InterestEarningAccount :
C# = Copiar
C# = Copiar
C# = Copiar
C# = Copiar
C# = Copiar
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 5/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
Verifique los resultados. Ahora, agregue un conjunto similar de código de prueba para
LineOfCreditAccount :
= Copiar
Al agregar el código anterior y ejecutar el programa, verá algo parecido al siguiente error:
Consola = Copiar
7 Nota
La salida real incluye la ruta de acceso completa a la carpeta con el proyecto. Los
nombres de carpeta se omitieron para ser más breves. Además, dependiendo del
formato del código, los números de línea pueden ser ligeramente diferentes.
Este código produce un error porque BankAccount supone que el saldo inicial debe ser
mayor que 0. Otra suposición incorporada en la clase BankAccount es que el saldo no
puede entrar en cifras negativas. Lo que sucede que es se rechazan las retiradas que
provocan un descubierto en la cuenta. Ambas suposiciones deben cambiar. La línea de la
cuenta de crédito comienza en 0, y generalmente tendrá un saldo negativo. Además, si un
cliente retira demasiado dinero, generará un cargo. La transacción se acepta, solo que
cuesta más. La primera regla se puede implementar agregando un argumento opcional al
constructor BankAccount que especifica el saldo mínimo. El valor predeterminado es 0 .
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 6/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
La segunda regla requiere un mecanismo que permita que las clases derivadas
modifiquen el algoritmo predeterminado. En cierto sentido, la clase base "pregunta" al
tipo derivado qué debe ocurrir cuando hay un descubierto. El comportamiento
predeterminado es rechazar la transacción generando una excepción.
realiza el constructor existente. Además, establece la propiedad del saldo mínimo. Podría
copiar el cuerpo del constructor existente. Sin embargo, esto implica que dos ubicaciones
cambiarán en el futuro. Lo que puede hacer es usar un encadenamiento de constructores
para que un constructor llame a otro. En el código siguiente se muestran los dos
constructores y el nuevo campo adicional:
C# = Copiar
Owner = name;
_minimumBalance = minimumBalance;
if (initialBalance > 0)
MakeDeposit(initialBalance, DateTime.Now, "Initial balance");
}
Esta implementación solo llama a MakeDeposit si el saldo inicial es mayor que 0 . Esto
conserva la regla de que los depósitos deben ser positivos, pero permite que la cuenta de
crédito se abra con un saldo de 0 .
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 7/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
Ahora que la clase BankAccount tiene un campo de solo lectura para el saldo mínimo, el
último cambio es modificar la codificación rígida 0 a minimumBalance en el método
MakeWithdrawal :
C# = Copiar
código siguiente:
C# = Copiar
C# = Copiar
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 8/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
C# = Copiar
El método agregado es protected , lo que significa que solo se puede llamar desde clases
derivadas. Esa declaración impide que otros clientes llamen al método. También es
virtual para que las clases derivadas puedan cambiar el comportamiento. El tipo de
C# = Copiar
C# = Copiar
Resumen
Si se ha quedado bloqueado, puede consultar el origen de este tutorial en el repositorio
de GitHub .
En este tutorial se han mostrado muchas de las técnicas que se usan en la programación
orientada a objetos:
Usó la abstracción cuando definió clases para cada uno de los distintos tipos de
cuenta. Esas clases describían el comportamiento de ese tipo de cuenta.
Usó la encapsulación cuando mantuvo muchos detalles private en cada clase.
Usó la herencia cuando aprovechó la implementación ya creada en la clase
BankAccount para guardar el código.
Usó el polimorfismo cuando creó métodos virtual que las clases derivadas
podrían reemplazar para crear un comportamiento específico para ese tipo de
cuenta.
Contenido recomendado
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 10/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
Guía de programación de C#
Utilice estos recursos para obtener información detallada sobre las funcionalidades y
características claves del lenguaje C# a las que C# puede acceder a través de .NET.
Mostrar más S
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 11/12
19/5/22, 19:20 Programación orientada a objetos (C#) | Microsoft Docs
https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/tutorials/oop 12/12