Clase 3 - Web del Profesor

Anuncio
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
Descargar