Universidad de Costa Rica
Sede Central Rodrigo Facio
Escuela de Ciencias de la Computación e Informática
San José, Costa Rica
CI-1201: Programación II
Tarea Programada 3
“Implementación de una lista”
Profesor:
Adolfo Di-Mare
Integrantes:
Jason Salazar Murillo A75898
Oscar Madrigal Delgado A02422
4 de abril del 2008
Tabla de contenidos e índice
1- Introducción
2- Dirección Internet en dónde está la documentación
3- Descripción del problema a resolver
3.1- Planteo (problema ==> solución ==> objetivos ==> plan)
3.2- Objetivos
3.3- Requerimientos
4- Abstracción
4.1- Especificación de la clase
4.2- Operaciones / métodos
4.3- Eficiencia
4.4- Especificación del programa
4.5- Arquitectura del programa
5- Implementación
5.1- Modelo de la clase (dibujo)
5.2- Invariante de la clase
5.3- Arquitectura interna del programa
5.4- Compilador usado
5.5- ¿Cómo compilar el programa?
6- Guía de uso del programa
7- Bibliografía
Introducción
La clase list es una clase template(plantilla) en la biblioteca estándar de C++. Esta nos permiten crear listas de cualquier tipo de objeto y nos brinda muchas herramientas para trabajarla.
Las especificaciones son necesarias para definir exactamente cuáles son los servicios que cada uno de los módulos del programa brindará para así poder comprenderlo posteriormente y crear su implementación.
Para comprobar el funcionamiento correcto de la implementación se utilizan los datos de prueba
2- Enlace hacia la documentación
http://www.geocities.com/oscar.madrigald/doc-tpg3.html
3- Descripción del problema a resolver
La tarea programada 3 consiste en tomar las versiones vistas en clase de la clase <list> de la biblioteca estándar C++ y complementar sus especificaciones incluyéndoles datos de prueba relevantes. Además de examinar la implementación de la lista de la biblioteca STL, que está en el subdirectorio "include" del compilador y usar esta como patrón de referencia para construir su implementación.
3.1- Planteo (problema ==> solución ==> objetivos ==> plan)
Es necesaria la comprensión de los métodos para construir las especificaciones. Una vez hecho esto se deberá comprobar su funcionamiento mediante la implementación de estos junto con los datos de prueba.
3.2- Objetivos
Crear las especificaciones para los método
-
Crear una documentación en Doxygen
-
Crear datos de prueba
-
Construir la implementación para los datos de prueba
3.3- Requerimientos
-Dev-C++
-Doxygen
4- Abstracción
4.1- Especificación de la clase
La clase list funciona por medio de una secuencia enlazada de nodos. Hay un nodo al comienzo llamado cabeza y un nodo al final de la lista llamado cola. Esta lista solo puede ser recorrida hacia delante.
4.2- Operaciones / métodos
list::list(): Es el constructor de la lista
list::list(const list& L): Constructor de lista constante
list::clear(): Elimina el valor del final de la lista.
list::push_front(): Agrega una copia del valor \c "v" al principio de la lista \c "*this".
list::push_back(): Agrega una copia del valor \c "v" al final de la lista \c "*this".
list::pop_front(): Elimina el valor del principio de la lista.
list::pop_back(): Elimina el valor del final de la lista.
list::empty(): Retorna "true" si la lista está vacía
list::size(): Cantidad de valores almacenados en \c "*this"
list::front(): Referencia al primer valor de la lista. \pre <code> ! empty() </code>
list::back(): Referencia al último valor de la lista. \pre <code> ! empty() </code>
list::swap(): Intercambia <code>*this <==> L</code>
list::move(): Traslada el valor de \c "LO" a \c "*this"
list::insert(): Agrega el valor \c "v" al contenedor.
list::remove(): Elimina del contenedor cada uno de los valores iguales a \c "v"
list::splice(): Traslada el valor \c "from" de la lista \c "L" y lo coloca antes de \c "p".
operator=(): Copia ==> <code>L = LO</code>
operator==(): ¿<code>L == LL</code>?
4.3- Eficiencia
Es un programa muy elegante que maneja la lista de una forma muy simple. Los métodos están diseñados para ser flexibles y concretos.
4.4- Especificación del programa
Este programa logra crear listas de alguna clase de objetos mediante el uso de list::insert() para insertarlos y list::remove() para removerlos y asi ir creando los nodos que estan conectados por punteros que van hacia una sola direccion
4.5- Arquitectura del programa
5- Implementación
5.1- Modelo de la clase
NULL
+-----+---+ +-----+---+ +-----+---+
L.m_first-->| v_1 | *-|-->| v_2 | *-|-->| v_3 | 0 |
^ +-----+---+ +-----+---+ +-----+---+
| m_val next ^
| |
| |
| +---+---+ |
+-----<------|-* | *-|-----+
+---+---+
m_L m_p
last_node(L)
5.2- Invariante de la clase
Una lista contiene size() cantidad de nodos almacenados. Cada uno de esos nodos contiene un valor y un puntero al proximo nodo. La lista no tiene una cantidad límite de nodos. El valor list::front() es un puntero que apunta a el primer nodo y el valor list::back() es otro puntero que apunta asía el final de la lista, la lista solo podrá ser recorrida hacia delante.
5.3- Arquitectura interna del programa
5.4- Compilador usado
El compilador usado para este programa fue Dev C++
5.5- ¿Cómo compilar el programa?
A continuación se presenta una pequeña guía que lo llevara paso a paso en el proceso de compilación y ejecución del programa.
-
Abra Dev C++
-
Arrastre la carpeta ADH_list a Dev C++
-
Presione ctrl+F9 para compilar
-
Presione ctrl+F10 para ejecutar
6- Guía de uso del programa
Una vez ejecutado el programa realizara todas las instrucciones de las datos de prueba y solo se vara si hubiese algún error con los datos de prueba, si desea poder ver mas en detalle su funcionamiento deberá depurarlo, para esto haga clic en depurar y seleccione un punto de ruptura para empezar a depurar desde el, luego presione F8.
7- Bibliografía