Programación II. Guía No.11 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Punteros: Puntero this en C#. Objetivos Conocer el manejo de los punteros en C#. Utilizar el puntero this. Implementar programas en C# que incluyan el uso de punteros a Objetos y la utilización del puntero this. Materiales y Equipo Computadora con el software C#. Guía Número 11. Introducción Teórica Punteros en C#. Los punteros son un tipo especial de variable que tiene direcciones de memoria como sus valores. Por ser una variable, aunque sea especial, su declaración no varía de gran forma con lo estudiado hasta el momento. La sintaxis: <tipo_de_dato>*<nombre_puntero> El tipo de una variable de tipo puntero se corresponde con el tipo de dato de la variable a la que apunta. Los punteros pueden ser inicializados cuando se declaran o en un enunciado de la asignación. Pueden inicializarse a 0, NULL o una dirección específica (cuyo formato se presenta en hexadecimal); un puntero con un valor NULL apunta a nada. Para declarar un puntero, debe utilizarse un tipo de dato: int *ptrEntero; 2 Programación II. Guía No. 11 float *ptrReal; char *ptrDireccion; Si se desea declarar varios punteros en la misma línea de código, C# permite hacer lo siguiente: int* p1, p2, p3; Luego, no se podrá utilizar un puntero declarado int con variables de tipo char o float. La idea anterior significa que los punteros deben declararse del mismo tipo de dato al cual apuntan. En un programa pueden aparecer errores en tiempo de ejecución y advertencias en tiempo de compilación cuando se define un puntero a determinado tipo de dato y, a continuación, se utiliza para apuntar a algún otro tipo de dato. Para entender los punteros y los vectores, es necesario primero conocer cómo se almacenan los números en la memoria del ordenador. El valor de cada variable en un programa de ordenador se guarda en una sección de memoria cuyo tamaño está determinado por el tipo de dato de la variable. La localización de esta sección de memoria es almacenada en la dirección de la variable. Por tanto, es así como si cada variable estuviera compuesta de dos partes: su valor y su dirección de memoria. Cada celda de memoria se puede considerar de una parte con el contenido, y la otra parte que se almacena en la dirección. Las direcciones se representan normalmente por un número hexadecimal, pudiendo contener un carácter, un entero o un real (aunque en realidad todos son almacenados como números binarios, lo cual es más entendible para la máquina a la hora de compilar los programas). Una forma de acceder a la información de una variable es por medio de una segunda variable que contiene la dirección de la variable a la que se pretende acceder. Este tipo de variable se conoce como apuntador o puntero. Operadores para Punteros El operador de dirección (&) es un operador unario que devuelve la dirección de memoria de su operando. El operador de indireccón (*) regresa el valor del objeto hacia el cual se apunta. Código Inseguro (Unsafe Code) Con unsafe code o código inseguro nos referimos a una región de código en la que está permitida la declaración y operaciones con punteros. La palabra clave para marcar un Programación II. Guía No. 11 3 método, miembro o bloque es unsafe. Ejecutar una aplicación en modo inseguro (unsafe) Dado que los punteros manipulan la memoria de nuestro ordenador, para cada aplicación que vayamos a ejecutar vamos a activar la ejecución en modo inseguro, la cual la activamos de la siguiente manera: Project Properties Build Allow unsafe code. Ejemplos de declaraciones de tipos de punteros: El puntero implícito "this". El puntero this es un atributo especial del objeto, el cual guarda la dirección de memoria del objeto para poder referirse a si mismo en cualquier momento, esto es usado por la manera de distribuir los objetos en memoria: los atributos de cada objeto son independientes de los de otro objeto, pero los métodos son compartidos por todos los objetos declarados del mismo tipo de clase, así cuando se llama un método del objeto, implícitamente se manda como parámetro el puntero this de ese objeto para que el método sepa a que atributos referirse a la hora de procesarlos. El puntero this se inicializa para apuntar al objeto para el cual se llama a la función miembro. Este puntero es muy útil cuando se trabaja con punteros y especialmente en listas enlazadas, cuando se necesita referenciar un puntero al objeto que se está insertando en la lista. La palabra clave this hace referencia a la instancia actual de la clase y también se utiliza como modificador del primer parámetro de un método de extensión. Procedimiento Ejemplo 1: Bibliografía Uso de punteros y paso por valor y por referencia. Guía 1 4 Programación II. Guía No. 11 Ejemplo_2 Procedimientos de paso por valor y por referencia. Programación II. Guía No. 11 Ejemplo_3 Uso del puntero this para hacer referencia a los miembros de la clase. Perfil.cs Program.cs 5 6 Programación II. Guía No. 11 Análisis de Resultados Ejercicio 1: Desarrollar una aplicación que permita recorrer un vector a través de un puntero. El programa debe solicitar los datos al usuario y deberá mostrar un menú: A) Ordenar Ascendente. B) Ordenar Descendente. C) Mostrar elemento por elemento. D) Salir. Ejercicio 2: Modificar el ejemplo 3, de manera que sean solicitados los datos desde teclado. Agregar los campos: Cargo, Salario, Empresa. Programación II. Guía No. 11 7 Investigación Complementaria Desarrolle un programa que simule una agenda. La aplicación debe solicitar los datos y mantenerlos en tiempo de ejecución (el programa debe estar activo hasta que se escoja la opción salir). Los datos que se deben solicitar son los siguientes: Nombre, DUI, Dirección, Teléfono, Email, Profesión u Oficio. El menú debe tener las opciones: 1. Ingresar Datos. 2. Mostrar Datos. 3. Buscar Persona. 4. Salir. En la opción 3, debe buscar por DUI, ya que es un datos que es único para cada usuario, al encontrar dicha persona el programa debe mostrar los datos encontrados. 8 Programación II. Guía No. 11 Guía 6: Punteros a Objetos. Puntero this. Hoja de cotejo: Alumno: Máquina No: Docente: GL: 6 1 Fecha: EVALUACIÓN % CONOCIMIENTO Del 20 al 30% APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% TOTAL 100% 1-4 5-7 8-10 Conocimiento deficiente de los fundamentos teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. Nota