resumenes de fundamentos de programación. uned

4
TEMA_14 --------------- TADS 1. ¿Qué se conoce como TAD? Un TAD es una agrupación de una colección de valores y una colección de operaciones de manipulación. En C++ la implementación de TADs se realiza a partir de clases. En cambio el C+- no se contempla la implementación de clases, está más limitado en este sentido. En C + - podemos utilizar la estructura registro para poder suplir esta carencia. Podemos añadir a parte de los campos que forman la estructura registro, operaciones o procedimientos que podemos aplicar a esos campos. Ejemplo de TAD typedef struct TipoPunto { float x; float y; void Leer (); void Escribir (); float Distancia (TipoPunto p); }; Uso de un TAD TipoPunto p, q; px = 3.3; py = 4.4; p.Leer (); p.Escribir (); printf ("% f", p.Distancia (q)); Aparte de definir dentro del registro los procedimientos y funciones estos subprogramas deben implementarse fuera del registro de la siguiente manera: void TipoPunto::Leer( ) { printf ("Coordenada X?"); scanf ("% f", & x); printf ("Coordenada Y?"); scanf ("% f", & y); } void TipoPunto::Escribir( ) { printf (“(%f, %f)”, x, y); } 1

Upload: pericodlp

Post on 31-Oct-2014

25 views

Category:

Documents


2 download

DESCRIPTION

Resumenes de fundamentos de programación. Tema 14. TADS.

TRANSCRIPT

Page 1: Resumenes de fundamentos de programación. UNED

TEMA_14 --------------- TADS 1. ¿Qué se conoce como TAD? Un TAD es una agrupación de una colección de valores y una colección de operaciones de manipulación. En C++ la implementación de TADs se realiza a partir de clases. En cambio el C+- no se contempla la implementación de clases, está más limitado en este sentido. En C + - podemos utilizar la estructura registro para poder suplir esta carencia. Podemos añadir a parte de los campos que forman la estructura registro, operaciones o procedimientos que podemos aplicar a esos campos. Ejemplo de TAD typedef struct TipoPunto { float x; float y; void Leer (); void Escribir (); float Distancia (TipoPunto p); }; Uso de un TAD TipoPunto p, q; px = 3.3; py = 4.4; p.Leer (); p.Escribir (); printf ("% f", p.Distancia (q));

Aparte de definir dentro del registro los procedimientos y funciones estos subprogramas deben implementarse fuera del registro de la siguiente manera:

void TipoPunto::Leer( ) { printf ("Coordenada X?"); scanf ("% f", & x); printf ("Coordenada Y?"); scanf ("% f", & y); } void TipoPunto::Escribir( ) { printf (“(%f, %f)”, x, y); } float TipoPunto::Distancia (TipoPunto p) { float deltaX, deltaY; deltaX = xp.x; deltaY = yp.y; return sqrt (deltaX * deltaX + deltaY * deltaY); }

1

Page 2: Resumenes de fundamentos de programación. UNED

Ejemplo: Programa que haciendo uso de un registro como TAD calcula la distancia entre dos puntos A y B.

2

Page 3: Resumenes de fundamentos de programación. UNED

2. Ocultación Para que un tipo sea realmente abstracto haría falta que los detalles de implementación no fueron visibles. Tanto en las campos como en los procedimientos. En el caso anterior de TipoPunto los campos x e y son visibles en todo momento, y pueden funcionar consultados y modificados por los procedimientos de exija estructura sin ningún tipo de problema, ya que cualquier pareja de coordenadas define un punto válido.

No ocurre lo mismo con otros tipos de datos. Por ejemplo, si guardamos el valor de una fecha como una tupla numérica (día, mes, año) no se puede admitir cualquier combinación de valores. La fecha (20,7,2010) sería válida, pero (7,20,2010) no sería correcta.

Si se quiere definir el tipo fecha como un tipo abstracto habría que ocultar los detalles de representación interna de los valores, de forma que sólo se puedan construir fechas utilizando operaciones que garantizan la corrección de los valores de los tipos.

Para permitir esta ocultación los tipos struct admiten la posibilidad de declarar ciertos elementos componentes como privados, utilizando la palabra clave private para delimitar una zona de declaraciones privadas dentro de la estructura. Ejemplo typedef struct TipoData { void pone (int día, int mes, int año); int Día (); int Mes (); int Año (); void Leer (); bool EsCorrecta (int día, int mes, int año); ........ private: int día, mes, año; }; Las variables día, mes, año sólo son visibles (accesibles) desde las funciones y procedimientos que están definidos dentro de la estructura, ya que están definidas con el modificador private.

3