Está en la página 1de 4

Clases persistentes con base de datos en C#

Es un lenguaje de programación identificado como el más humano, debido a que puede entender un
ordenador. Su nombre viene de evolucionar un lenguaje anterior “Lenguaje de programación C”, que se
creó en los Laboratorios Bell, desarrollado originariamente por Dennis Ritchie, entre 1969 y 1972. Su
característica principal es la eficiencia del código, y es empleado para crear sistemas operativos,
aplicaciones e incluso juegos. Las clases en C# se definen de forma parecida a los registros (struct), sólo
que ahora, además de variables (que representan sus detalles internos, y que llamaremos sus "atributos"),
también incluirán funciones que son las acciones que puede realizar ese objeto, que son identificadas
como métodos. Atributos y métodos formarán parte de "un todo", en vez de estar separados en distintas
partes del programa. Esto es lo que se conoce como "Encapsulación".
Una clase persistente en C# abarca las mismas funciones que en Python solo tomando el detalle de que
se implementaría los atributos, declaración de los get y set y finalmente implementación del constructor en
dicha clase. Además, se debe tomar en cuenta que estas clases en este lenguaje de programación viene a
aplicar las cuatro reglas esenciales ya mencionadas anteriormente:
 Implementación de un constructor sin argumentos, esto en base de ser un
 constructor predeterminado en cual puede ser no público.
 Una propiedad identificadora o en otras palabras un id, esto vendría a ser
 opcional, aunque no afecte las clases.
 Clases no finales, aunque estas van a depender mucho de la declaración de
 los métodos públicos, también vendría a ser opcional.
 Declaración de métodos, también vendría a ser opcional.

Ventajas al aplicar una Clase Persistente en C#:


Una de las ventajas que podemos obtener en estas clases son; Declaraciones en el espacio de nombres,
Atributos, son miembro de una clase tiene un atributo de acceso del tipo público, protegido, interno, interno
protegido y privado. Inicializador, un inicializador es como una propiedad, con la diferencia de que, en
lugar de un nombre de propiedad, un valor de índice entre corchetes se utiliza en forma anónima para
hacer referencia al miembro de una clase. Este operador permite crear un objeto de cualquier tipo,
incluyendo tipos definidos por el usuario, y devuelve un puntero (del tipo adecuado) al objeto creado. Su
utilización exige que el usuario declarare un puntero del tipo adecuado; a continuación, debe ser
inicializado con el valor devuelto por el operador. Si el objeto creado es tipo T, sería algo así:
T* puntero = valor-devuelto-por-el-operador;
Los objetos creados con new son persistentes, es decir, la vida del nuevo objeto es desde el punto de
creación hasta el final del programa o hasta que el programador lo destruya explícitamente con el operador
delete. Este último desasigna la zona de memoria ocupada por el objeto, de forma que queda disponible
para nuevo uso. Las sucesivas invocaciones de este operador van reservando zonas de memoria en el
montón para los objetos sucesivamente creados. El gestor de memoria del compilador se encarga de
mantener una tabla con los sitios ocupados y libres sin que haya conflictos hasta que la memoria se ha
agota, o no existe espacio contiguo suficiente para el nuevo objeto. En cuyo caso se lanza una excepción
como indicativo del error.
Peligros La persistencia de los objetos creados con new y su independencia del ámbito desde el que han
sido creados, es muy importante y de tener en cuenta, pues suele ser 12 motivo de pérdidas de memoria
en el programa si olvidamos destruirlos cuando ya no son necesarios. Hay que prestar especial atención,
porque en una sentencia como:
voidfunc() {
...
tipoX* Xptr = new tipoX;
... }
el área de almacenamiento señalada por el puntero es persistente, pero Xptr que es una variable local
automática no lo es. Si olvidamos destruir el objeto creado (con delete) antes de salir del ámbito, el área
de almacenamiento permanecerá ocupando espacio en el montón y no podrá ser recuperada nunca, pues
el puntero Xptr habrá desaparecido. La cuestión de pérdida de memoria no es solo cuestión de que el
programador "recuerde" utilizar delete antes de salir del ámbito del puntero. También puede producirse por
otras circunstancias. Por ejemplo, el mecanismo de lanzamiento y captura de excepciones C++ puede
funcionar como un salto, goto o break multinivel, que saque abruptamente de ámbito al puntero con la
consiguiente pérdida irreparable. La situación puede ser esquematiza como sigue (la figura adjunta
muestra el estado de la pila y el alcance del desmontaje -"Stack unwinding"- caso de producirse un error).
fun1() { try {
fun2(); }
catch (...) {
...
}}
fun2() {
A* aptr = new A; // crear objeto
foo();
...
delete aptr; // Ok. destruir el objeto }
// antes de salir de ámbito foo() { ...
if (x) throw "Error";
...
}
La situación anterior es de gran peligro potencial. Si se produce la condición x, y se lanza la excepción en
foo, la pila será desmontada hasta el punto de la sentencia catch en fun1 que recibirá el control. La
secuencia de ejecución no pasará nunca por el delete de fun2, con lo que el espacio del objeto A se
perderá irremediablemente. Conscientes del deficiente maridaje entre el operador new y el sistema C++ de
excepciones, los diseñadores de la Librería Estándar han incluido en esta un puntero "inteligente" auto_ptr,
que resuelve este tipo de problemas.
La persistencia permite al programador el almacenar, transferir y recuperar el estado de los objetos.

Desventajas al aplicar una Clase Persistente en C#:


La persistencia es muy difícil de implementar puesto que es muy compleja ya que le exige al programador
el manejo de Puntero. Todo objeto creado de forma persistente debe de ser destruido cuando ya no se lo
necesita puesto que ocasiona pérdidas de memoria en el programa si olvidamos destruirlos.
Ejemplo en C++:
#include<conio.h>
#include<iostream.h>
#include <vcl.h>
#pragma hdrstop #include <fstream.h> class persona { private:
String nombre; public:
Nacho Cabanes. Programación en C# - 9.1. ¿Por qué la persistencia? Nachocabanes.com. Published 2015.
Accessed December 2, 2022. https://www.nachocabanes.com/csharp/curso2015/csharp09.php

gewarren. Base de datos de persistencia de SQL Server - .NET Framework. Microsoft.com. Published
September 22, 2022. Accessed December 2, 2022.
https://learn.microsoft.com/es-es/dotnet/framework/windows-workflow-foundation/sql-server-persistence-
database

BillWagner. Un recorrido por C#: Tipos y sus miembros. Microsoft.com. Published September 22, 2022.
Accessed December 2, 2022. https://learn.microsoft.com/es-es/dotnet/csharp/tour-of-csharp/types


También podría gustarte