Programación 2 Universidad de Los Andes Escuela de Ingeniería de Sistemas Departamento de Computación Estructuras. Tipos abstractos de datos Estructura ● Colección de una o mas variables, de tipos que pueden ser diferentes, agrupadas en un solo nombre Generalmente define un nuevo tipo de dato struct Estudiante { char nombres[60]; char apellidos[60]; char carrera[150]; }; 04/07/16 Variables relacionadas semánticamente S. Solé - Programación 2 2 Partes de una estructura nombre struct Estudiante { char nombres[60]; char apellidos[60]; char carrera[150]; }; miembros Todos sus componentes están serializados, es decir, se guardan todos los valores de sus miembros uno detrás del otro. 04/07/16 S. Solé - Programación 2 3 Definición de una estructura struct Estudiante { char nombres[60]; char apellidos[60]; char carrera[150]; }; struct Estudiante alumno; alumno.nombres = “Luz”; alumno.apellidos = “Rincon”; alumno.apellidos = “Ing. de Sistemas”; struct Estudiante alumno = {“Luz”,“Rincon”,“Ing. de Sistemas”}; 04/07/16 S. Solé - Programación 2 4 Estructuras anidadas struct Fecha { int dia; int mes; int anho; }; struct Estudiante { char nombres[60]; char apellidos[60]; char carrera[150]; struct Fecha fechanac; }; 04/07/16 S. Solé - Programación 2 5 Operaciones sobre una estructura Copiar ●Asignar ●Tomar su dirección (&) ●Acceder a sus miembros ● 04/07/16 S. Solé - Programación 2 6 Estructuras y funciones ● Pueden ser parámetros pasados por valor o por referencia a funciones Pasar la estructura completa Pasar miembros de la estructura Pasar una apuntador a la estructura Mas eficiente pasar un apuntador a una estructura grande que copiar la estructura completa. 04/07/16 S. Solé - Programación 2 7 Apuntadores a estructuras struct Estudiante { char nombres[60]; char apellidos[60]; char carrera[150]; struct Fecha fechanac; }; struct Estudiante alumno, *ptr; ptr = &alumno; ptr->nombres = “Juan”; 04/07/16 S. Solé - Programación 2 8 Arreglos de estructuras struct Estudiante { char nombres[60]; char apellidos[60]; char carrera[150]; struct Fecha fechanac; }; struct Estudiante listaEst[30]; listaEst[0].nombres = “Juan”; listaEst[0].apellidos = “Sanoja”; 04/07/16 S. Solé - Programación 2 9 Ejercicio Guardar en un arreglo de estructuras el nombre, apellido, cédula, ingreso mensual durante un año y fecha de ingreso de los empleados de una pequeña empresa (max. 10). A partir de esta información calcule los años de antiguedad de cada empleado y el monto total cobrado en el año. 15 minutos para hacerlo en el laboratorio 04/07/16 S. Solé - Programación 2 10 Desventajas de estructuras Es posible tener datos sin inicializar. ● Es posible asignar valores inválidos a los datos (fuera de rango valores válidos semánticamente) ● Si se modifica su implementación todos los programas que la usan deben ser modificados. ● La estructuras no se pueden imprimir como unidad ● No se pueden comparar en su totalidad ● 04/07/16 S. Solé - Programación 2 Programa accede directamente a los datos Programador manipula directamente la representación de los datos 11 Tipos abstractos de datos ● TAD Objetivo: crear una abstracción para un concepto. ● 70s: un TAD es el conjunto de valores + sus operaciones con sus propiedades. ● Ej en C++: tipos de datos primitivos 04/07/16 S. Solé - Programación 2 12 TAD Protege a la entidad que representa, ocultando la representación e implementación de la entidad y sus operaciones. ● Los datos de la entidad sólo se manipulan a través de sus operaciones. 04/07/16 S. Solé - Programación 2 13 Especificación TAD Descripción formal del TAD ● Decir qué es sin decir cómo se hace (interfaz) ● Objetivo: presentar la lista de operaciones necesarias. 04/07/16 S. Solé - Programación 2 14 Especificación sintáctica TAD Nombre del TAD: Complejo Nombre de la operación Dominio Rango Tipo SUMAR COMPLEJOXCOMPLEJO COMPLEJO T IGUAL COMPLEJOXCOMPLEJO COMPLEJO A CREAR_COMPLEJO COMPLEJOXCOMPLEJO COMPLEJO C T: operaciones de transformación ; A: operaciones de acceso que permiten consultar componentes de TAD; C: operación para crear objetos del tipo abstracto de datos. 04/07/16 S. Solé - Programación 2 15 Especificación semántica TAD función SUMAR (X,Y: COMPLEJO): COMPLEJO Pre-Cond: X,Y son del tipo complejo Si X = (X1,X2) y Y = (Y1,Y2) entonces: Z = (Z1,Z2) donde Z1 = X1 + Y1 y Z2 = X2 + Y2 Post-Cond: Z es del tipo complejo, Z = X + Y finfunción 04/07/16 S. Solé - Programación 2 16 Implementación TAD Representación concreta del TAD en términos de las estructuras de datos provistas por un lenguaje de programación o pseudo lenguaje y codificar los procedimientos basándose en la estructura seleccionada. 04/07/16 S. Solé - Programación 2 17 Implementación TAD en C++ Clases Permiten modelar objetos que tienen atributos y operaciones. ● Al definir una clase su nombre se vuelve un tipo de dato. ● Las operaciones se invocan en respuesta a los mensajes que se envían los objetos. ● 04/07/16 S. Solé - Programación 2 18 TAD en C++ class Tiempo { int hora; int minuto; int segundo; public: Tiempo(); ~Tiempo(); void asignarTiempo(int, int, int); void imprimirTiempoUniversal(); void imprimirTiempoEstandar(); }; 04/07/16 S. Solé - Programación 2 privado 19 Recursos http://www.cplusplus.com ● http://www.cplusplus.com/reference/ (Referencia) ● 04/07/16 S. Solé - Programación 2 20 Documentación código ● Doxygen – http://doxygen.org $ doxygen -g crea archivo “Doxyfile” de configuración para mi proyecto – $ doxygen Doxyfile genera la documentación de mi proyecto 04/07/16 S. Solé - Programación 2 21 Estilo de documentación /** ... text ... */ /** @file vehiculo.h @brief Tipo abstracto de datos Tiempo @author S. Sole [email protected] @date Julio, 2016 @version 1.0 */ 04/07/16 S. Solé - Programación 2 22