Site hosted by Angelfire.com: Build your free website today!

 

UNIVERSIDAD DE COSTA RICA

 

 

ESCUELA DE LAS CIENCIAS DE LA COMPUTACIÓN E INFORMÁTICA

(ECCI)

 

 

PROGRAMACIÓN II (CI-1201)

 

 

CENTRO UNIVERSITARIO:

SEDE CENTRAL RODRIGO FACIO

 

 

TAREA #5

 

LISTA DE LISTAS ENLAZADAS

(el caso de los e-mail’s)

 

 

GRUPO: 01

 

 

PROFESOR:

ADOLFO DI MARE

 

 

ESTUDIANTES:

CARLOS BADILLA MEJÍA

JORGE A. MENOCAL ROJAS

 

 

CARNÉ:

A40617

A43354

 

 

 

27/09/2005

 

Tabla de contenidos

 

Introducción.. 1

Descripción del problema a resolver. 2

Planteo:. 2

Objetivos:. 2

Requerimientos:. 3

Abstracción.. 3

Especificación de las clases: 3

Especificación de los métodos: 3

Operaciones y métodos: 4

Clase Email: ¡Error! Marcador no definido.

Especificación del programa. 4

Eficiencia: 5

Arquitectura del Programa:. 5

Implementación.. 6

Compilador usado: 6

- ¿Cómo compilar el programa?. 6

Guía de uso del programa. 6

Bibliografía. 8

 

 

 

 

 

Introducción

 

Anteriormente, en otras tareas, hemos contado con la ayuda del profesor cuando se nos incluyen archivos iniciales para tener un punto de arranque, en ésta ocasión, recae sobre nosotros la responsabilidad de desarrollar cada parte del programa, modularlo e implementarlo. Aún la escogencia del compilador queda a nuestro gusto. Toda ésta nueva experiencia nos brinda la oportunidad de crecer en nuestras destrezas en programación, el desarrollo de técnicas saludables de especificación es fundamental para que el trabajo en equipo dé los resultados esperados. El buen uso de la abstracción será fundamental y el respeto a no acceder al REP de la clase. Unos de los objetivos de éste trabajo es que el estudiante aprenda a hacer primero la documentación del programa para que posteriormente ésta sea usada como guía, sin embargo, por ser ésta la primera vez que hacemos éste proceso es probable que el diseño aquí planteado varíe un poco del resultado final.

Los documentos de este trabajo, se pueden encontrar en:  www.angelfire.com/cantina/colossus  y en: www.angelfire.com/rock4/a43354, documentaciones y archivos de compilación.

 

 

Descripción del problema a resolver

 

Planteo:

Se debe tener una idea muy clara de lo que significa el diseño, abstracción e implementación de una clase, pues en este caso no hay un punto de partida, sino más bien hay que comenzar de cero, hacer nuestras propias clases, métodos y demás.

El objetivo es separar las direcciones de correo de entre información variada que recibimos de una gran cantidad de archivos de texto de la firma spamTico.com, posterior a la separación, debemos guardar un registro del renglón en el que aparece cada dirección.

Para almacenar las direcciones usaremos una lista de la biblioteca STL de C++, en ella se almacenarán objetos tipo e-mail que tendrán cada uno una lista propia. En ésta lista propia de los objetos e-mail se almacenarán duplicados del renglón en el que se encontró la dirección.

  

                                                                                                                                                    

Objetivos:  

*      Investigar acerca del uso de las bibliotecas STL de C++.

*      Dividir el problema en módulos para su fácil implementación

*      Seguir nuestras propias especificaciones para aprender de nuestros errores durante la etapa de documentación

*      Profundizar en el uso del software generador de especificaciones Doxygen.

 

Requerimientos:   

El programa requiere tener una plataforma de win32 valida con cualquier sistema operativo de Microsoft Windows; además de que requiere la existencia de los sub-directorios que se deseen ordenar.

Además de un archivo para leer, este archivo va a contener cientos de páginas en la que van escritas varias direcciones de correo.

 

 

Abstracción

 

 

Especificación de las clases:

 

            Clase Email:

/** Se encarga de crear nuevas listas de tipo \cemail las cuales van a apuntar a otra lista que contenga los renglones en los que aparece cada dirección.

-          Se encarga de hacer la parte más compleja del progama

-          Recibe las direcciones y sus renglones respectivos para poder realizar su labor

                        **/

                        class Email

 

            Clase p2-ta5:

/** En esta clase se encuentra el \cmain, analiza el archivo para verificar que hayan direcciones de correo y las envía a la otra clase para que las guarde como \clistas.

-          Recibe un archivo de gran tamaño para extraer las direcciones de correo

-          Muestra el resultado final con los emails y sus respectivos renglones

**/

class p2-ta-5

 

 

Especificación de los métodos:

 

            Método de Member:

 

                        /** Este método busca si una dirección ya está dentro de la lista principal.

 

-          Si la dirección está en la lista principal, quiere decir que ya existe un objeto tipo email que contiene una lista propia para almacenar los renglones en los que aparece la misma dirección, entonces sólo se agrega un duplicado del renglón en el último campo de la lista propia de éste objeto.

 

-          Si la dirección no está en la lista principal, entonces se agrega a ésta un nuevo objeto de tipo email que recibe como parámetro la dirección que va a almacenar.

**/

 

void list :: Member (const email &aBuscar)

 

 

            Método InsertEmail:

 

/**     Su función es crear un objeto tipo email y agregarlo a la lista principal. Éste método recibe por parámetros la dirección de correo que va a almacenar el nuevo objeto.

**/

 

void list :: InsertEmail (const string &direccion)

 

            Método InsertRenglon:

 

/**     Su función es agregar un duplicado a la lista propia de email del renglón en el que apareció la dirección. Éste método recibe por parámetro el renglón que va a agregarse.

**/

 

void list :: InsertRenglon (const string &renglon)

 

 

Especificación del programa

 

Éste programa sirve para extraer direcciones de correo electrónico de un texto y guardar un registro de cada renglón en el que aparece dicha dirección. Al final, imprime una lista intercalada de correos seguidos por los renglones en los que apareció cada uno. Se imprime de la siguiente forma:

 

                        cbadillam@yahoo.com: - Te envié el mensaje al correo cbadillam@yahoo.com pero no me has contestado…

                                                                 - …cuando me fijé no había escrito el .com de cbadillam@yahoo.com, ya yo…

                       

adolfo@di-mare.com: - … cuando el profesor Adolfo (adolfo@di-mare.com) envió el correo, yo estaba chateando con…

                                                               - …<adolfo@di-mare.com> Mail delivery failure, mailbox full or message is larger than…

 

Eficiencia:

 

Éste programa es muy eficiente en cuanto no interactúa con el usuario, por lo que no hay errores posibles a la hora de recibir la información. También reconoce todos los caracteres aceptados en direcciones de correo electrónico(letras, números y los caracteres ‘-‘,’_’, ‘.’, ‘@’) por lo que no hay manera de que falte alguna dirección. Como usa las listas que proporciona la biblioteca STL de C++, éstas crecen sin parar hasta que la memoria se agota, así que ése es el límite de direcciones que soporta, y varía de una máquina a otra.

 

Arquitectura del Programa:

 

 

    Lista principal                   Lista propia de cada objeto email

 

+------------------+ +----------------------------------------------------------+

 cbadillam@yahoo.com =>  Te envié el mensaje al correo cbadillam@yahoo.com pero no me has contestado…

+------------------+ +----------------------------------------------------------+

                        +----------------------------------------------------------+

                     =>  …cuando me fijé no había escrito el .com de cbadillam@yahoo.com, ya yo…

                        +----------------------------------------------------------+

+------------------+    +----------------------------------------------------------+

 adolfo@di-mare.com  =>  cuando el profesor Adolfo (adolfo@di-mare.com) envió el correo, yo estaba chateando con…

+------------------+    +----------------------------------------------------------+

                        +----------------------------------------------------------+

                     =>  …<adolfo@di-mare.com> Mail delivery failure, mailbox full or message is larger than…

                        +----------------------------------------------------------+

 

                      . .  .                                                                                                     .   .   .

 

 

Implementación

 

 

Compilador usado:

 

El compilador utilizado fue Microsoft Visual C++ 7.0

 

 

- ¿Cómo compilar el programa?

 

La presentación del trabajo permite que el estudiante simplemente abra el proyecto que se encuentra en el archivo .ZIP y abra el proyecto para Visual C++, automáticamente se cargan los archivos necesarios para la compilación y ejecución del programa.

Luego se compila el programa y una vez hecho esto, estará listo para ser ejecutado.

 

 

Guía de uso del programa

 

En nuestro caso, simplemente se ejecuta el programa y él mismo carga el archivo que va a utilizar, extrae cada dirección y su respectivo renglón y finalmente imprime el resultado. Todo lo hace sin solicitar la asistencia del usuario, por lo que no hay mayores complicaciones.

 

 

 

Conclusiones

 

            Definitivamente, la etapa más difícil de un programa es su correcta especificación, su claro planeamiento y la modulación necesaria. Tuvimos algunos problemas a la hora de definir los métodos a utilizar, porque no sabíamos si estábamos contemplando todas las posibilidades y si estábamos usando la cantidad de métodos suficientes o al menos los indicados. Al principio éstas dudas nos llevaron a pensar que estábamos haciendo algo mal, pues el objetivo de hacer primero la especificación es dar una idea más clara a los programadores de lo que hay que hacer mientras que lo que habíamos generado como documentación sólo nos obligaba a usar los métodos que habíamos planteado y sentíamos que el programa se volvía rígido, entonces decidimos plantear de nuevo la especificación de los métodos y de la clase. Luego de analizar nuestra documentación anterior, descubrimos huecos en el programa que no habíamos contemplado, lo que nos ayudó a aclarar la estructura que el software debía tener. Redefinimos los métodos mediante una modulación mejor planeada: implementamos métodos para agregar los renglones y eso aclaró la idea que teníamos del programa. Luego de generar la documentación que nos pareció más indicada, procederemos a programar un software que a primera vista parecía imposible, mas luego de la especificación y modulación se ha vuelto un reto que no dudamos poder completar con éxito. Esperamos generar código eficiente y fácil de leer, con especificaciones mejor elaboradas y con un profundo sentido de la simplicidad.

 

 

 

Bibliografía

 

-         Deitel Harvey M., Deitel Paul J. Como programar en C++. Segunda Edición. Pearson Educación, México, 2003.