Anda di halaman 1dari 27

Concepto y terminologa

Tipos de Datos coleccin de valores + operaciones


Enteros, reales, booleanos, caracteres Enumerados, subrango Son opacos Riesgo de crear valores sin semntica Tipos de datos creados por el programador, que deben ser opacos

Tipos Estructurados genericidad

Tipos de Datos Abstractos (TDA)

Tipos de Datos Abstractos y Programacin Orientada a Objetos


1.1 Concepto de Tipo de Datos Abstracto. 1.2 Clasificacin de Tipos de Datos Abstractos. 1.3 Especificacin de Tipos de Datos Abstractos. 1.3.1 Especificaciones informales. 1.3.2 Especificaciones formales. 1.4 Programacin Orientada a Objetos 1.4.1 Clases y Objetos. 1.4.2 Propiedades y Mtodos. 1.4.3 Herencia y Polimorfismo. 1.4.4 Pautas generales en diseo orientado a objetos. 1.4.5 Tcnicas de implementacin 1.4.5.1 Implementaciones estticas y dinmicas. 1.4.5.2 Representaciones contiguas y enlazadas. 1.4.6 Utilizacin correcta de objetos. 1.4.6.1 Privacidad de los objetos. 1.4.6.2 Previniendo efectos laterales. 1.4.6.3 Comparacin de objetos. 1.4.6.4 Tratamiento de excepciones. 1.4.7 Ejemplos en Java.

Concepto y terminologa

Tipos de Datos Abstractos:


Coleccin de valores + operaciones Se definen mediante una especificacin, que es independiente de cualquier representacin (abstraccin) Acceso a los valores limitado al uso de las operaciones (interfaz con el usuario limitada) Establecida la interfaz, el programador elige la representacin adecuada (implementacin) Los usuarios del TDA slo conocen su nombre y la especificacin de las operaciones Cambios en la representacin no afectarn al resto de programas

Concepto y terminologa

Tipos de Datos Abstractos:

El lenguaje de programacin trata a los TDAs de igual forma que a sus propios tipos de datos, es decir, como tipos opacos:

Privacidad de la representacin Proteccin

Para que esto sea posible, la implementacin deber realizarse en un mbito de declaracin inaccesible al resto de los programas

Concepto y terminologa

Tipos de Datos Abstractos:

El conjunto de operaciones ha de permitir generar cualquier valor del tipo Existen dos piezas de documentacin bien diferenciadas:

Especificacin del TDA. Es lo nico que conoce el usuario del TDA. Consiste en el nombre del TDA y la especificacin de las operaciones. Tienen parte sintctica y parte semntica Implementacin del TDA. Conocida slo por el programador del TDA. Se realiza en un lenguaje de programacin concreto. Consiste en la representacin del tipo y en la realizacin de las operaciones

Concepto y terminologa

Tipos de datos abstractos:

Se destacan los detalles (normalmente pocos) del comportamiento observable del tipo, que es estable. Se ocultan los detalles (normalmente numerosos) de la implementacin, que es propensa a cambios.

Clasificacin de Tipos de Datos Abstractos

Tipos de Datos Abstractos simples:

Cambian su valor pero no su estructura espacio de almacenamiento constante Enteros, reales, booleanos, carcter, enumerado, subrango, etc. Cambian su valor y estructura (colecciones de elementos de nmero variable) espacio de almacenamiento variable Listas, colas, pilas, rboles, grafos, conjuntos, etc.

Tipos de Datos Abstractos contenedores:

Clasificacin de Tipos de Datos Abstractos

Tipos de datos abstractos inmutables:

Sus casos no pueden modificarse (se crean y destruyen, pero no existen operaciones de modificacin) Representacin inmutable o mutable Sus casos pueden modificarse (existen operaciones de modificacin) Representacin mutable

Tipos de datos abstractos mutables:

Especificacin de Tipos de Datos Abstractos

TDA Coleccin de valores + Operaciones

Usuario

Especificacin

Implementador

Implementacin del TDA

Representacin elegida

Representacin de las operaciones

Especificacin de Tipos de Datos Abstractos

Especificaciones informales:

Predomina el lenguaje natural Poco precisas y breves ambigedad Sencillas de escribir, leer y entender Lenguaje algebraico verificacin formal de programas Precisas y breves Pueden resultar ms complejas de escribir, leer y entender

Especificaciones formales:

Especificaciones informales

Cabecera: Aparece el nombre de las operaciones. Descripcin: Se describe de forma general en qu consiste la abstraccin, sin decir nada acerca de la implementacin. Los casos del TDA pueden describirse en trminos de otros tipos para los cuales se espera que el lector de la especificacin est ms familiarizado. Se pueden utilizar grficos y abstracciones matemticas. Se puede incluir en la descripcin si el TDA es mutable o inmutable Especificacin de las operaciones: Para la especificacin de una abstraccin operacional seguiremos el siguiente modelo:
nombre de la operacin (entrada) devuelve (salida)
requerimientos: Esta clusula muestra las restricciones de uso modifica: Esta clusula identifica las entradas que van a ser modificadas efecto: Esta clusula define el comportamiento

Especificaciones informales
Observamos los siguientes componentes: Cabecera: Es la informacin sintctica. Se indica el nombre de la operacin y el nmero, orden y tipos de sus entradas y salidas. Deben darse nombres para las entradas y pueden darse para las salidas Cuerpo: Es la informacin semntica. Consta de las siguientes clusulas:

Requerimientos: Restringen el dominio del procedimiento o funcin. Cuando introducimos requerimientos, obtenemos una abstraccin operacional parcial (en caso contario se dice que la abstraccin es total). El que use la abstraccin es el responsable de que los requerimientos se cumplan; si estos no se cumplen, los resultados pueden ser impredecibles. Si la abstraccin es total, la clusula de requerimientos puede omitirse. Se supone como requerimiento implcito (y por tanto no tiene que ser explicitado en la clusula de requerimientos) que las entradas que figuran en la lista de parmetros de la abstraccin han sido correctamente construidas mediante algn constructor del tipo Modifica: Indica los argumentos de entrada que cambian de valor tras una llamada a la abstraccin operacional Efecto: Se indica el efecto que se produce al ejecutar la operacin para las entradas que cumplen los requerimientos. Debe definir qu salidas son producidas y tambin qu modificaciones son hechas en la lista de entradas de la clusula modifica. La clusula efecto se escribe bajo la asumpcin de que se satisface la clusula requerimientos, y no se dice nada sobre el efecto de la abstraccin cuando dicha clusula no se satisface

Especificacin de Tipos de Datos Abstractos

El usuario de la abstraccin es el responsable de que se cumplan los requerimientos Implementaciones robustas: se autoprotegen frente a valores inconsistentes Mecanismos de proteccin frente a errores:

Manejo de excepciones Parmetros de salida de error en cada operacin

Puesto que las especificaciones son independientes de las implementaciones, existen requerimientos de uso (informacin adicional de cara al usuario)

Especificaciones informales

Racional = tipo de datos es crea, num, den, suma, resta, multiplica, divide, simplifica DESCRIPCIN: Los valores del TDA racional son nmeros racionales. El TDA Racional es inmutable. OPERACIONES:

crea(a,b:entero) devuelve (Racional) requerimientos: b<>0. efecto: Devuelve un nmero racional cuyo numerador es a y cuyo denominador es b. num(a:Racional) devuelve (entero) efecto: Devuelve el numerador del nmero racional a. den(a:Racional) devuelve (entero) efecto: Devuelve el denominador del nmero racional a. suma(a,b:Racional) devuelve (Racional) efecto: Devuelve un nmero racional que es la suma de los nmeros racionales a y b. resta(a,b:Racional) devuelve (Racional) efecto: Devuelve un nmero racional que es la resta de los nmeros racionales a y b. multiplica(a,b:Racional) devuelve (Racional) efecto: Devuelve un nmero racional que es la multiplicacin de los nmeros racionales a y b. divide(a,b:Racional) devuelve (Racional) efecto: Devuelve un nmero racional que es la divisin de los nmeros racionales a y b. simplifica(a:Racional) devuelve (Racional) efecto: Devuelve un nmero racional que es la simplificacin del nmero racional a.

Especificaciones formales

Tipo: Nombre del TDA Sintasis: Forma de las operaciones


nombre de la funcin (tipo de los argumentos) tipo del resultado

Semntica: Significado de las operaciones


nombre de la funcin (valores particulares) expresin del resultado

Especificaciones formales

No se definen reglas semnticas (se consideran axiomas) para ciertas funciones, como son algunas funciones constructoras o las funciones destructoras. La expresin del resultado puede ser recursiva, conteniendo referencias a la misma funcin o a otras del TDA. Las expresiones pueden contener referencias a otros tipos que consideramos predefinidos. En particular es importante considerar como predefinido el tipo booleano, con los valores cierto y falso, o el valor predefinido error, para indicar los valores de los argumentos en los que ciertas funciones parciales no estn definidas. Cualquier implementacin del TDA deber cumplir las condiciones impuestas por la semntica. Las reglas han de intentar aplicarse en el orden indicado para la verificacin formal de programas.

Especificaciones formales
Para facilitar la escritura de las expresiones en la parte de semntica, se permite emplear expresiones condicionales, que adoptan la forma: si condicin valor si cierto | valor si falso La condicin ser una expresin que toma un valor booleano. Se considera como predefinida la comparacin de igualdad entre valores del mismo tipo, escrita como valor1 = valor2.

Otra ampliacin de la notacin es permitir la definicin de TDA's genricos, que se expresan en base a otro u otros tipos sin especificar exactamente cules son.

Especificaciones formales

Tipo Bolsa (Elemento) Sintaxis


bolsavacia Bolsa poner(Bolsa,Elemento) Bolsa esvacia(Bolsa) booleano cuantos(Bolsa,Elemento) natural

Semntica b Bolsa, e,f Elemento:

esvacia(bolsavacia) cierto esvacia(poner(b,e)) falso cuantos(bolsavacia,e) cero cuantos(poner(b,f),e) si f=e sucesor(cuantos(b,e)) | cuantos(b,e)

Tcnicas de implementacin

Implementaciones estticas y dinmicas Representaciones contiguas y enlazadas

Implementaciones estticas y dinmicas

Implementaciones estticas asignacin de memoria en tiempo de compilacin Implementaciones dinmicas asignacin de memoria en tiempo de ejecucin

Implementaciones stticas y dinmicas

Variables dinmicas:

Variables cuyo espacio de almacenamiento requerido se asigna en tiempo de ejecucin Se accede a ellas por medio de apuntadores Podemos crear variables dinmicas asignndoles memoria Podemos destruir variables dinmicas liberando memoria Se alojan en el segmento montn (heap)

Implementaciones stticas y dinmicas

En Programacin Orientada a Objetos:


Un Objeto es internamente un apuntador a los datos que lo componen. Cuando se crea un objeto mediante su constructor, la reserva de memoria se hace de forma dinmica. La liberacin de memoria se realiza mediante el destructor del objeto; en Java esto se realiza de forma automtica mediante el Garbaje Collector.

El uso de objetos abstrae al programador del manejo directo de apuntadores y ofrece mecanismos para conseguir privacidad y proteccin.

Representaciones contiguas y enlazadas


En la representacin de TDAs formados por colecciones de elementos, nos encontramos las siguientes situaciones: 1. La cantidad de elementos de los casos del TDA es fija y conocida a priori (en tiempo de compilacin) 2. La cantidad de elementos de los casos del TDA es fija, pero se conoce en tiempo de ejecucin 3. La cantidad de elementos de los casos del TDA es variable en tiempo de ejecucin

Representaciones contiguas y enlazadas


Ante la situacin (1) probablemente la mejor opcin es representar los casos del TDA mediante un array.
public class Estructura { public Object dato[]; static private int longitud = 10; public Estructura() { dato = new Object[longitud]; } // resto de mtodos de la clase } // fin class Estructura Estructura estructura; estructura = new Estructura(); estructura.dato[i]=x; y=estructura.dato[i];

Representaciones contiguas y enlazadas


Para la situacin (2), Java permite la siguiente forma de representacin contigua:
public class Estructura { public Object dato[]; private int longitud; public Estructura(int n) { longitud = n; dato = new Object[n]; } // resto de mtodos de la clase } // fin class Estructura Estructura estructura; estructura = new Estructura(10);

Representaciones contiguas y enlazadas


Para la situacin (3) disponemos de varias alternativas. Si sabemos en tiempo de compilacin el nmero aproximado de elementos, se puede establecer una cantidad mxima maxLongitud de elementos que podrn contener los casos del TDA
public class Estructura { public Object dato[]; static private int maxLongitud = 100; private int longitud = 0; public Estructura() { dato = new Object[maxLongitud]; } // resto de mtodos de la clase } // fin class Estructura

Representaciones contiguas y enlazadas


Cuando en tiempo de compilacin no sabemos ni siquiera de forma aproximada el nmero de elementos es conveniente utilizar una representacin enlazada:
public class Estructura { class Celda { Object dato; Celda siguiente; } private Celda inicio; // mtodos de la clase Estructura } // fin class Estructura

Anda mungkin juga menyukai