SlideShare une entreprise Scribd logo
1  sur  17
Tipo y jerarquía de objetos Los tipos a los que se refiere CTS no son sólo aquellos utilizables al declarar una variable, en realidad incluyen todo aquello que se pueda instanciar en el código. Es decir, los tipos son realmente objetos, e incluyen todos los objetos utilizables en el código, con lo que el CTS da instrucciones al CLR para la gestión de todo tipo de objetos. Todos los tipos heredan de la clase base System.Object, por lo que los métodos y atributos de esta estarán disponibles en cualquier tipo que definamos. Los tipos se dividen en dos categorías principales: tipos por valor y tipos por referencia, los cuales se diferencian en la forma en la que se gestionan en memoria.  Los tipos por valor se almacenan en la memoria rápida o pila (Stack), los tipos por referencia guardan en la pila la dirección de memoria lenta o montón (Heap) en la que realmente están situados los datos.
Tipo y jerarquía de objetos Esta diferenciación viene debida a que la memoria rápida no es muy grande, con lo que los datos ahí almacenados tienen una limitación de tamaño. Por lo tanto los tipos por valor siempre serán datos con poca ocupación de memoria, en cambio los tipos por referencia pueden tener cualquier tamaño, no sufriendo de las mismas limitaciones. Las variables de tipos por referencia pueden ser varias apuntando a la misma dirección de memoria, por lo que si se ejecuta alguna modificación en los datos mediante una de ellas, se estará afectando a todas ellas, por existir sólo una copia de los datos. Las variables de tipos por valor, en cambio, no sufren de éste problema, al tener, cada una de ellas, su propia copia de los datos. El esquema de organización de los tipos en .NET Framework es el siguiente: Tipos por valor Integrados o Nativos Enumeraciones Definidos por el programador Tipos por referencia Auto-descritos Arrays o Matrices Delegados Clases Clases del programador Punteros Embalados (Boxing) Interfaces
Tipo y jerarquía de objetos Un ejemplo de utilización de variables de los dos tipos, para que puedas apreciar las diferencias antes enumeradas: class ClasePrueba {    public int Valor = 0; } class Program {    static void Main(string[] args)    {       int valorA = 0;       int valorB = valorA;       valorB = 999;       ClasePrueba refA = new ClasePrueba();       ClasePrueba refB = refA;       refB.Valor = 999;       Console.WriteLine("Val: {0}, {1}", valorA, valorB);       Console.WriteLine("Ref: {0}, {1}", refA.Valor, refB.Valor);       Console.ReadLine();    } } El resultado sería: Valores: 0, 999 Referencias: 999, 999
Tipo y jerarquía de objetos La definición de tipos por parte del programador es intrínseca al módulo en el que se realice, es decir, si defines dos tipos diferentes, pero con el mismo nombre, en diferentes módulos de ejecución, el sistema los tratará como tipos distintos y no habrá ningún problema.  Para definir un nuevo tipo siempre se partirá de un tipo existente, aunque sólo sea System.Object, y será necesario especificar su contenido: Su nombre, que ha de ser una cadena de caracteres. El tipo del que hereda, uno y sólo uno, ya que la herencia múltiple no está soportada por el entorno. Como mínimo, System.Object, si ningún otro tipo puede servirte de base para el que estés definiendo. Sus atributos, o Metadatos adicionales proporcionados por el usuario. Su visibilidad, public, protected, private, internaloassembly, ya se verá más adelante en detalle. Las interfaces implementadas, sin limitación de número, pero deberán implementarse todas las del tipo base o heredado. La definición de cada uno de sus miembros (eventos, campos, tipos anidados, métodos y propiedades), incluyendo su firma única.
Tipo y jerarquía de objetos Boxing (Embalaje) y Unboxing (desembalaje) La operación de Boxingo embalaje sólo se aplica a los tipos por valor, consiste en la conversión de un tipo por valor a una variable Object almacenada en el Stack y una copia del tipo por valor almacenado en el Heap, al que apuntará la nueva variable de tipo Object.  La operación opuesta Unboxing o desembalaje, consiste en pasar de un tipo Object a un tipo por valor. static void Main(string[] args) { // Tipo por valor     int Importe = 1500; // Embalaje - BOXING:     object OtroImporte = Importe; /* Si cambiamos el tipo por valor, la variable Object mantiene el valor        original ya que los valores de ambas variables son copias independientes */     Importe = 999;     /* Desembalaje - UNBOXING:        Crear un nuevo tipo por valor y asignarle el tipo Object */     int NuevoImporte = (int)OtroImporte;     Console.WriteLine("Valor: {0}, Referencia: {1}, Nuevo: {2}",  	Importe, OtroImporte, NuevoImporte);     Console.ReadLine(); } Valor: 999, Referencia: 1500, Nuevo: 1500
Tipo y jerarquía de objetos Tipos por valor predefinidos más utilizados: Aunque hay unos 300 más.
Tipo y jerarquía de objetos Tipos por referencia predefinidos más utilizados: Aunque hay unos 2.500 más.
Tipo y jerarquía de objetos Tipos genéricos: Son la solución aportada para solventar los problemas de boxing y unboxing antes mencionados en el paso de parámetros a las clases, estructuras, interfaces y métodos que definamos, ya que permiten retrasar la definición del tipo concreto de dato a utilizar hasta la declaración e instanciación del objeto por parte del código cliente. También nos permiten la definición de código no dependiente del tipo de dato, evitando la duplicidad de clases con la única diferencia del tipo de datos recibidos y/o devueltos. La sintaxis específica es la de nombreClase<T>, en la que T es el nombre del tipo de dato que deberá suministrarse en el momento de definir o crear el objeto. El IntelliSense integrado en el IDE nos facilitará una validación inicial del uso de nuestras clases genéricas. Se pueden especificar restricciones a los tipos de datos que se admitan como argumentos.
Tipo y jerarquía de objetos Nullable<bool> b = null;   bool? b = null; if (b.HasValue)  	Console.WriteLine("b is {0}.", b.Value);    else  	Console.WriteLine("b is not set."); Tipos nullables: Son aquellos tipos por valor que pueden contener un valor nulo (null). Su sintaxis es Nullable<T> o T?
Tipo y jerarquía de objetos Tipos definidos por el usuario - Estructuras: Son tipos de dato por valor, con lo que contendrán directamente sus valores, almacenándose en el stack, siendo esto lo que las diferencia de las clases. Las estructuras se componen de otros tipos de dato, combinados para facilitar su manipulación. Un ejemplo sencillo es System.Drawing.Point, la cual contiene unas propiedades enteras, X e Y, que definen la posición horizontal y vertical de una coordenada espacial. Esta estructura dispone también de un constructor y unos miembros, para facilitar su utilización. Using System.drawing; // Creamos un punto System.Drawing.Point p = new System.Drawing.Point(20, 30);   // Movemos el punto diagonalmente p.Offset(-1, -1);   Console.WriteLine("Point X {0}, Y {1}", p.X, p.Y);
Tipo y jerarquía de objetos Para definir una estructura hemos de utilizar la palabra clave struct. Las estructuras se pueden convertir de tipos por valor a tipos por referencia cambiando esta palabra clave por class.  Aunque las estructuras suelen ser más eficientes que las clases, siempre y cuando cumplan las siguientes condiciones: Representen un valor lógico único. El tamaño de instancia no sea superior a 16 bytes. Que no cambie frecuentemente después de la creación. Que no se transforme a tipo por referencia mediante casting.
Tipo y jerarquía de objetos Tipos definidos por el usuario - Enumeraciones: Las enumeraciones son tipos que podemos definir para almacenar listas de valores fijos relacionados. Los valores almacenados serán una lista de enteros, aunque nos referiremos a ellos, y visualizaremos sus valores,  mediante sus símbolos correspondientes. Evitando de esta manera los habituales errores de índice en nuestra programación. Unos ejemplos de enumeraciones podrían ser los siguientes:  La lista de meses. Los días de la semana. Los mensajes de error. ¿Alguno más? Para declarar una enumeración deberemos utilizar la palabra clave enum, seguida de su nombre y de la lista de los símbolos correspondientes a sus valores. enum diaSemana {lunes, martes, miércoles, jueves, viernes, sébado, domingo};
Tipo y jerarquía de objetos Tipos por referencia – String y StringBuilder Los tipos, además de contener los datos correspondientes, suministran los medios para su manipulación y almacenamiento, en caso necesario, mediante los diferentes miembros definidos. Por ejemplo: string cadena = "Este es el texto almacenado"; cadena = cadena.Replace("almacenado","sustituido"); Console.WriteLine(cadena"); Este es el texto sustituido El problema con este tipo de operaciones es que los objetos de tipo string son inmutables, es decir, la sustitución anterior no se efectuará sobre los datos iniciales de la instancia. En su lugar se creará una segunda copia de la cadena inicial, con el texto sustituido y se cambiará el puntero del objeto al nuevo contenido, quedando los datos anteriores sin referencia, a expensas de ser eliminados por el Garbage Collector.
Tipo y jerarquía de objetos Tipos por referencia – String y StringBuilder Este comportamiento es, por supuesto, transparente al programador, por lo que uno se puede preguntar cuál pueda ser la repercusión real de este comportamiento. Se puede fácilmente imaginar una larga lista de valores de cadena de caracteres a la que se deba aplicar una modificación, concatenando un texto adicional o añadiendo una fecha, … Cada modificación que se realice sobre cada una de las cadenas de texto creará una nueva cadena. Dada la velocidad actual de proceso de los ordenadores, la realización de la operación anterior puede llegar a procesar grandes cantidades de datos en muy poco tiempo. Lo cual, inicialmente, es lo adecuado. El problema es que esa cantidad de variables descartadas y pendientes de limpieza, puede llegar a saturar la memoria del ordenador, obligando a efectuar paginaciones y operaciones que harán más lenta la operativa.
Tipo y jerarquía de objetos Tipos por referencia – String y StringBuilder Como alternativa a este comportamiento del tipo string, disponemos del tipo stringBuilder, el cual ha sido optimizado para este tipo de manipulaciones y efectúa las modificaciones sobre la misma instancia de datos, evitándose de esta forma la saturación antes comentada. Adicionalmente, el tipo stringBuilder dispone de una sobrecarga de operadores que simplifica la operativa con ellos:
Tipo y jerarquía de objetos // Declaración del Array Int[] tabla = {3, 1, 2}; // Ordena los valores mediante el método del tipo Array.Sort(tabla); // Muestra el resultado Console.Writeline("{0}, {1}, {2}", tabla[0], tabla[1], tabla[2]); 1, 2, 3 Tipos por referencia – Arrays Permiten almacenar colecciones de valores en un único objeto, accesibles mediante índice. Se declaran utilizando los corchetes y separando sus elementos mediante comas. Se pueden ordenar mediante su método sort:
Tipo y jerarquía de objetos Tipos por referencia – Streams Permiten el acceso de lectura y/o escritura a dispositivos, tanto discos, como comunicaciones. La clase System.IO.Stream es la clase base para los streams específicos para cada tipo de acceso. Disponiéndose también de streams de acceso a redes en el espacio de nombres System.Network.Sockets y de streams encriptados en System.Security.Criptography. Los streams básicos más comunes son:

Contenu connexe

Tendances

programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()Clara Patricia Avella Ibañez
 
06 diagrama de clases1
06 diagrama de clases106 diagrama de clases1
06 diagrama de clases1ViReal
 
Cesar adrian barrios alarcon unidad 2
Cesar adrian barrios alarcon      unidad 2       Cesar adrian barrios alarcon      unidad 2
Cesar adrian barrios alarcon unidad 2 Cesar Mcfly
 
6 A Arrays
6 A Arrays6 A Arrays
6 A Arraysjcpp67
 
Apunte paradigma orientado a objetos
Apunte paradigma orientado a objetosApunte paradigma orientado a objetos
Apunte paradigma orientado a objetosAlejandro Canosa
 
Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.Juan Carlos Espinoza
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc X
 
Tema 5 arreglos y cadenas - lsia por gio
Tema 5   arreglos y cadenas - lsia por gioTema 5   arreglos y cadenas - lsia por gio
Tema 5 arreglos y cadenas - lsia por gioRobert Wolf
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visualLibertad25
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosale8819
 
Programación ii presentación tema 5
Programación ii presentación tema 5Programación ii presentación tema 5
Programación ii presentación tema 5Joel Mieses
 

Tendances (20)

03 Oop
03   Oop03   Oop
03 Oop
 
Colabora2
Colabora2Colabora2
Colabora2
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()
 
06 diagrama de clases1
06 diagrama de clases106 diagrama de clases1
06 diagrama de clases1
 
Cesar adrian barrios alarcon unidad 2
Cesar adrian barrios alarcon      unidad 2       Cesar adrian barrios alarcon      unidad 2
Cesar adrian barrios alarcon unidad 2
 
Diagramadeclase
DiagramadeclaseDiagramadeclase
Diagramadeclase
 
Taller 1 3
Taller 1 3Taller 1 3
Taller 1 3
 
6 A Arrays
6 A Arrays6 A Arrays
6 A Arrays
 
Apunte paradigma orientado a objetos
Apunte paradigma orientado a objetosApunte paradigma orientado a objetos
Apunte paradigma orientado a objetos
 
Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumerados
 
Tema 5 arreglos y cadenas - lsia por gio
Tema 5   arreglos y cadenas - lsia por gioTema 5   arreglos y cadenas - lsia por gio
Tema 5 arreglos y cadenas - lsia por gio
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visual
 
Java basico
Java basicoJava basico
Java basico
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Colas de prioridad
Colas de prioridadColas de prioridad
Colas de prioridad
 
Programación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para Python
 
Programación ii presentación tema 5
Programación ii presentación tema 5Programación ii presentación tema 5
Programación ii presentación tema 5
 

Similaire à Framework .NET 3.5 05 Tipo y jerarquía de objetos

Arreglos y Estructuras
Arreglos y EstructurasArreglos y Estructuras
Arreglos y EstructurasVitin30
 
Arquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NETArquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NETRoberto Taborda
 
Estructuras de datos en Introducción a la Programación
Estructuras de datos en Introducción a la ProgramaciónEstructuras de datos en Introducción a la Programación
Estructuras de datos en Introducción a la ProgramaciónFacultad de Ciencias y Sistemas
 
Programación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxProgramación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxhassanbadredun
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentacionesmary taipe
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentacionesmary taipe
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosAntonio Palomares Sender
 
Tipos de datos para C++
Tipos de datos para C++Tipos de datos para C++
Tipos de datos para C++juliancetis109
 
Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_oscar020615
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2Velmuz Buzz
 
TiposDeDatos de estructuras de datos en Java
TiposDeDatos de estructuras de datos en JavaTiposDeDatos de estructuras de datos en Java
TiposDeDatos de estructuras de datos en JavaJuan Carlos Mendez N.
 

Similaire à Framework .NET 3.5 05 Tipo y jerarquía de objetos (20)

Arreglos y Estructuras
Arreglos y EstructurasArreglos y Estructuras
Arreglos y Estructuras
 
Arquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NETArquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NET
 
Estructuras de datos en Introducción a la Programación
Estructuras de datos en Introducción a la ProgramaciónEstructuras de datos en Introducción a la Programación
Estructuras de datos en Introducción a la Programación
 
Bdo r en oracle
Bdo r en oracleBdo r en oracle
Bdo r en oracle
 
Programación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxProgramación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptx
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentaciones
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentaciones
 
Lotus script
Lotus scriptLotus script
Lotus script
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetos
 
Tipos de datos para C++
Tipos de datos para C++Tipos de datos para C++
Tipos de datos para C++
 
Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_
 
colas de prioridad
colas de prioridad colas de prioridad
colas de prioridad
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2
 
Lenguajes de Programación: Tutorial csharp
Lenguajes de Programación: Tutorial csharpLenguajes de Programación: Tutorial csharp
Lenguajes de Programación: Tutorial csharp
 
Dp2
Dp2Dp2
Dp2
 
Leguaje de programacion C#
Leguaje de programacion C#Leguaje de programacion C#
Leguaje de programacion C#
 
TiposDeDatos de estructuras de datos en Java
TiposDeDatos de estructuras de datos en JavaTiposDeDatos de estructuras de datos en Java
TiposDeDatos de estructuras de datos en Java
 
Benita ppp unidad 1
Benita ppp unidad 1Benita ppp unidad 1
Benita ppp unidad 1
 
Implementación de Aplicaciones Basadas en Texto
Implementación de Aplicaciones Basadas en TextoImplementación de Aplicaciones Basadas en Texto
Implementación de Aplicaciones Basadas en Texto
 
tipos
tipos tipos
tipos
 

Plus de Antonio Palomares Sender

Framework .NET 3.5 15 Configuración y despliegue de soluciones
Framework .NET 3.5 15 Configuración y despliegue de solucionesFramework .NET 3.5 15 Configuración y despliegue de soluciones
Framework .NET 3.5 15 Configuración y despliegue de solucionesAntonio Palomares Sender
 
Framework .NET 3.5 13 Programación orientada a la red
Framework .NET 3.5 13 Programación orientada a la redFramework .NET 3.5 13 Programación orientada a la red
Framework .NET 3.5 13 Programación orientada a la redAntonio Palomares Sender
 
Framework .NET 3.5 12 Uso de system.drawing
Framework .NET 3.5 12 Uso de system.drawingFramework .NET 3.5 12 Uso de system.drawing
Framework .NET 3.5 12 Uso de system.drawingAntonio Palomares Sender
 
Framework .NET 3.5 09 Depuración, monitorización y pruebas
Framework .NET 3.5 09 Depuración, monitorización y pruebasFramework .NET 3.5 09 Depuración, monitorización y pruebas
Framework .NET 3.5 09 Depuración, monitorización y pruebasAntonio Palomares Sender
 
Framework .NET 3.5 08 Validación de datos
Framework .NET 3.5 08 Validación de datosFramework .NET 3.5 08 Validación de datos
Framework .NET 3.5 08 Validación de datosAntonio Palomares Sender
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netAntonio Palomares Sender
 
Framework .NET 3.5 04 El common language runtime
Framework .NET 3.5 04 El common language runtimeFramework .NET 3.5 04 El common language runtime
Framework .NET 3.5 04 El common language runtimeAntonio Palomares Sender
 
Framework .NET 3.5 02 Entorno de desarrollo (ide)
Framework .NET 3.5 02 Entorno de desarrollo (ide)Framework .NET 3.5 02 Entorno de desarrollo (ide)
Framework .NET 3.5 02 Entorno de desarrollo (ide)Antonio Palomares Sender
 
Framework .NET 3.5 14 Gestión de archivos y serialización
Framework .NET 3.5 14  Gestión de archivos y serializaciónFramework .NET 3.5 14  Gestión de archivos y serialización
Framework .NET 3.5 14 Gestión de archivos y serializaciónAntonio Palomares Sender
 
Framework .NET 3.5 01 Conceptos básicos y entorno
Framework .NET 3.5 01 Conceptos básicos y entornoFramework .NET 3.5 01 Conceptos básicos y entorno
Framework .NET 3.5 01 Conceptos básicos y entornoAntonio Palomares Sender
 

Plus de Antonio Palomares Sender (12)

Framework .NET 3.5 15 Configuración y despliegue de soluciones
Framework .NET 3.5 15 Configuración y despliegue de solucionesFramework .NET 3.5 15 Configuración y despliegue de soluciones
Framework .NET 3.5 15 Configuración y despliegue de soluciones
 
Framework .NET 3.5 13 Programación orientada a la red
Framework .NET 3.5 13 Programación orientada a la redFramework .NET 3.5 13 Programación orientada a la red
Framework .NET 3.5 13 Programación orientada a la red
 
Framework .NET 3.5 12 Uso de system.drawing
Framework .NET 3.5 12 Uso de system.drawingFramework .NET 3.5 12 Uso de system.drawing
Framework .NET 3.5 12 Uso de system.drawing
 
Framework .NET 3.5 11 Seguridad
Framework .NET 3.5 11 SeguridadFramework .NET 3.5 11 Seguridad
Framework .NET 3.5 11 Seguridad
 
Framework .NET 3.5 10 Linq
Framework .NET 3.5 10 LinqFramework .NET 3.5 10 Linq
Framework .NET 3.5 10 Linq
 
Framework .NET 3.5 09 Depuración, monitorización y pruebas
Framework .NET 3.5 09 Depuración, monitorización y pruebasFramework .NET 3.5 09 Depuración, monitorización y pruebas
Framework .NET 3.5 09 Depuración, monitorización y pruebas
 
Framework .NET 3.5 08 Validación de datos
Framework .NET 3.5 08 Validación de datosFramework .NET 3.5 08 Validación de datos
Framework .NET 3.5 08 Validación de datos
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 
Framework .NET 3.5 04 El common language runtime
Framework .NET 3.5 04 El common language runtimeFramework .NET 3.5 04 El common language runtime
Framework .NET 3.5 04 El common language runtime
 
Framework .NET 3.5 02 Entorno de desarrollo (ide)
Framework .NET 3.5 02 Entorno de desarrollo (ide)Framework .NET 3.5 02 Entorno de desarrollo (ide)
Framework .NET 3.5 02 Entorno de desarrollo (ide)
 
Framework .NET 3.5 14 Gestión de archivos y serialización
Framework .NET 3.5 14  Gestión de archivos y serializaciónFramework .NET 3.5 14  Gestión de archivos y serialización
Framework .NET 3.5 14 Gestión de archivos y serialización
 
Framework .NET 3.5 01 Conceptos básicos y entorno
Framework .NET 3.5 01 Conceptos básicos y entornoFramework .NET 3.5 01 Conceptos básicos y entorno
Framework .NET 3.5 01 Conceptos básicos y entorno
 

Dernier

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Dernier (15)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

Framework .NET 3.5 05 Tipo y jerarquía de objetos

  • 1. Tipo y jerarquía de objetos Los tipos a los que se refiere CTS no son sólo aquellos utilizables al declarar una variable, en realidad incluyen todo aquello que se pueda instanciar en el código. Es decir, los tipos son realmente objetos, e incluyen todos los objetos utilizables en el código, con lo que el CTS da instrucciones al CLR para la gestión de todo tipo de objetos. Todos los tipos heredan de la clase base System.Object, por lo que los métodos y atributos de esta estarán disponibles en cualquier tipo que definamos. Los tipos se dividen en dos categorías principales: tipos por valor y tipos por referencia, los cuales se diferencian en la forma en la que se gestionan en memoria. Los tipos por valor se almacenan en la memoria rápida o pila (Stack), los tipos por referencia guardan en la pila la dirección de memoria lenta o montón (Heap) en la que realmente están situados los datos.
  • 2. Tipo y jerarquía de objetos Esta diferenciación viene debida a que la memoria rápida no es muy grande, con lo que los datos ahí almacenados tienen una limitación de tamaño. Por lo tanto los tipos por valor siempre serán datos con poca ocupación de memoria, en cambio los tipos por referencia pueden tener cualquier tamaño, no sufriendo de las mismas limitaciones. Las variables de tipos por referencia pueden ser varias apuntando a la misma dirección de memoria, por lo que si se ejecuta alguna modificación en los datos mediante una de ellas, se estará afectando a todas ellas, por existir sólo una copia de los datos. Las variables de tipos por valor, en cambio, no sufren de éste problema, al tener, cada una de ellas, su propia copia de los datos. El esquema de organización de los tipos en .NET Framework es el siguiente: Tipos por valor Integrados o Nativos Enumeraciones Definidos por el programador Tipos por referencia Auto-descritos Arrays o Matrices Delegados Clases Clases del programador Punteros Embalados (Boxing) Interfaces
  • 3. Tipo y jerarquía de objetos Un ejemplo de utilización de variables de los dos tipos, para que puedas apreciar las diferencias antes enumeradas: class ClasePrueba { public int Valor = 0; } class Program { static void Main(string[] args) { int valorA = 0; int valorB = valorA; valorB = 999; ClasePrueba refA = new ClasePrueba(); ClasePrueba refB = refA; refB.Valor = 999; Console.WriteLine("Val: {0}, {1}", valorA, valorB); Console.WriteLine("Ref: {0}, {1}", refA.Valor, refB.Valor); Console.ReadLine(); } } El resultado sería: Valores: 0, 999 Referencias: 999, 999
  • 4. Tipo y jerarquía de objetos La definición de tipos por parte del programador es intrínseca al módulo en el que se realice, es decir, si defines dos tipos diferentes, pero con el mismo nombre, en diferentes módulos de ejecución, el sistema los tratará como tipos distintos y no habrá ningún problema. Para definir un nuevo tipo siempre se partirá de un tipo existente, aunque sólo sea System.Object, y será necesario especificar su contenido: Su nombre, que ha de ser una cadena de caracteres. El tipo del que hereda, uno y sólo uno, ya que la herencia múltiple no está soportada por el entorno. Como mínimo, System.Object, si ningún otro tipo puede servirte de base para el que estés definiendo. Sus atributos, o Metadatos adicionales proporcionados por el usuario. Su visibilidad, public, protected, private, internaloassembly, ya se verá más adelante en detalle. Las interfaces implementadas, sin limitación de número, pero deberán implementarse todas las del tipo base o heredado. La definición de cada uno de sus miembros (eventos, campos, tipos anidados, métodos y propiedades), incluyendo su firma única.
  • 5. Tipo y jerarquía de objetos Boxing (Embalaje) y Unboxing (desembalaje) La operación de Boxingo embalaje sólo se aplica a los tipos por valor, consiste en la conversión de un tipo por valor a una variable Object almacenada en el Stack y una copia del tipo por valor almacenado en el Heap, al que apuntará la nueva variable de tipo Object. La operación opuesta Unboxing o desembalaje, consiste en pasar de un tipo Object a un tipo por valor. static void Main(string[] args) { // Tipo por valor int Importe = 1500; // Embalaje - BOXING: object OtroImporte = Importe; /* Si cambiamos el tipo por valor, la variable Object mantiene el valor original ya que los valores de ambas variables son copias independientes */ Importe = 999; /* Desembalaje - UNBOXING: Crear un nuevo tipo por valor y asignarle el tipo Object */ int NuevoImporte = (int)OtroImporte; Console.WriteLine("Valor: {0}, Referencia: {1}, Nuevo: {2}", Importe, OtroImporte, NuevoImporte); Console.ReadLine(); } Valor: 999, Referencia: 1500, Nuevo: 1500
  • 6. Tipo y jerarquía de objetos Tipos por valor predefinidos más utilizados: Aunque hay unos 300 más.
  • 7. Tipo y jerarquía de objetos Tipos por referencia predefinidos más utilizados: Aunque hay unos 2.500 más.
  • 8. Tipo y jerarquía de objetos Tipos genéricos: Son la solución aportada para solventar los problemas de boxing y unboxing antes mencionados en el paso de parámetros a las clases, estructuras, interfaces y métodos que definamos, ya que permiten retrasar la definición del tipo concreto de dato a utilizar hasta la declaración e instanciación del objeto por parte del código cliente. También nos permiten la definición de código no dependiente del tipo de dato, evitando la duplicidad de clases con la única diferencia del tipo de datos recibidos y/o devueltos. La sintaxis específica es la de nombreClase<T>, en la que T es el nombre del tipo de dato que deberá suministrarse en el momento de definir o crear el objeto. El IntelliSense integrado en el IDE nos facilitará una validación inicial del uso de nuestras clases genéricas. Se pueden especificar restricciones a los tipos de datos que se admitan como argumentos.
  • 9. Tipo y jerarquía de objetos Nullable<bool> b = null; bool? b = null; if (b.HasValue) Console.WriteLine("b is {0}.", b.Value); else Console.WriteLine("b is not set."); Tipos nullables: Son aquellos tipos por valor que pueden contener un valor nulo (null). Su sintaxis es Nullable<T> o T?
  • 10. Tipo y jerarquía de objetos Tipos definidos por el usuario - Estructuras: Son tipos de dato por valor, con lo que contendrán directamente sus valores, almacenándose en el stack, siendo esto lo que las diferencia de las clases. Las estructuras se componen de otros tipos de dato, combinados para facilitar su manipulación. Un ejemplo sencillo es System.Drawing.Point, la cual contiene unas propiedades enteras, X e Y, que definen la posición horizontal y vertical de una coordenada espacial. Esta estructura dispone también de un constructor y unos miembros, para facilitar su utilización. Using System.drawing; // Creamos un punto System.Drawing.Point p = new System.Drawing.Point(20, 30); // Movemos el punto diagonalmente p.Offset(-1, -1); Console.WriteLine("Point X {0}, Y {1}", p.X, p.Y);
  • 11. Tipo y jerarquía de objetos Para definir una estructura hemos de utilizar la palabra clave struct. Las estructuras se pueden convertir de tipos por valor a tipos por referencia cambiando esta palabra clave por class. Aunque las estructuras suelen ser más eficientes que las clases, siempre y cuando cumplan las siguientes condiciones: Representen un valor lógico único. El tamaño de instancia no sea superior a 16 bytes. Que no cambie frecuentemente después de la creación. Que no se transforme a tipo por referencia mediante casting.
  • 12. Tipo y jerarquía de objetos Tipos definidos por el usuario - Enumeraciones: Las enumeraciones son tipos que podemos definir para almacenar listas de valores fijos relacionados. Los valores almacenados serán una lista de enteros, aunque nos referiremos a ellos, y visualizaremos sus valores, mediante sus símbolos correspondientes. Evitando de esta manera los habituales errores de índice en nuestra programación. Unos ejemplos de enumeraciones podrían ser los siguientes: La lista de meses. Los días de la semana. Los mensajes de error. ¿Alguno más? Para declarar una enumeración deberemos utilizar la palabra clave enum, seguida de su nombre y de la lista de los símbolos correspondientes a sus valores. enum diaSemana {lunes, martes, miércoles, jueves, viernes, sébado, domingo};
  • 13. Tipo y jerarquía de objetos Tipos por referencia – String y StringBuilder Los tipos, además de contener los datos correspondientes, suministran los medios para su manipulación y almacenamiento, en caso necesario, mediante los diferentes miembros definidos. Por ejemplo: string cadena = "Este es el texto almacenado"; cadena = cadena.Replace("almacenado","sustituido"); Console.WriteLine(cadena"); Este es el texto sustituido El problema con este tipo de operaciones es que los objetos de tipo string son inmutables, es decir, la sustitución anterior no se efectuará sobre los datos iniciales de la instancia. En su lugar se creará una segunda copia de la cadena inicial, con el texto sustituido y se cambiará el puntero del objeto al nuevo contenido, quedando los datos anteriores sin referencia, a expensas de ser eliminados por el Garbage Collector.
  • 14. Tipo y jerarquía de objetos Tipos por referencia – String y StringBuilder Este comportamiento es, por supuesto, transparente al programador, por lo que uno se puede preguntar cuál pueda ser la repercusión real de este comportamiento. Se puede fácilmente imaginar una larga lista de valores de cadena de caracteres a la que se deba aplicar una modificación, concatenando un texto adicional o añadiendo una fecha, … Cada modificación que se realice sobre cada una de las cadenas de texto creará una nueva cadena. Dada la velocidad actual de proceso de los ordenadores, la realización de la operación anterior puede llegar a procesar grandes cantidades de datos en muy poco tiempo. Lo cual, inicialmente, es lo adecuado. El problema es que esa cantidad de variables descartadas y pendientes de limpieza, puede llegar a saturar la memoria del ordenador, obligando a efectuar paginaciones y operaciones que harán más lenta la operativa.
  • 15. Tipo y jerarquía de objetos Tipos por referencia – String y StringBuilder Como alternativa a este comportamiento del tipo string, disponemos del tipo stringBuilder, el cual ha sido optimizado para este tipo de manipulaciones y efectúa las modificaciones sobre la misma instancia de datos, evitándose de esta forma la saturación antes comentada. Adicionalmente, el tipo stringBuilder dispone de una sobrecarga de operadores que simplifica la operativa con ellos:
  • 16. Tipo y jerarquía de objetos // Declaración del Array Int[] tabla = {3, 1, 2}; // Ordena los valores mediante el método del tipo Array.Sort(tabla); // Muestra el resultado Console.Writeline("{0}, {1}, {2}", tabla[0], tabla[1], tabla[2]); 1, 2, 3 Tipos por referencia – Arrays Permiten almacenar colecciones de valores en un único objeto, accesibles mediante índice. Se declaran utilizando los corchetes y separando sus elementos mediante comas. Se pueden ordenar mediante su método sort:
  • 17. Tipo y jerarquía de objetos Tipos por referencia – Streams Permiten el acceso de lectura y/o escritura a dispositivos, tanto discos, como comunicaciones. La clase System.IO.Stream es la clase base para los streams específicos para cada tipo de acceso. Disponiéndose también de streams de acceso a redes en el espacio de nombres System.Network.Sockets y de streams encriptados en System.Security.Criptography. Los streams básicos más comunes son: