Sei sulla pagina 1di 14

Universidad Nacional Experimental De Guayana

Vicerrectorado Académico

Coordinación General de Pregrado

Coordinación de Ingeniería en Informática

Unidad Curricular: Estructuras de Datos

Sección: 2

BITTIFY

Profesor: Integrantes:

Abaffy Carlos.
Carvajal Eleazar. C.I: 26.444.640

España Luis. C.I: 27.923.368

Ciudad Guayana, Mayo del 2019.


ANÁLISIS DEL PROBLEMA

El siguiente proyecto, se constituye en el desarrollo de un software, el cual tiene

por objetivo recrear un reproductor media player como VLC media player, Groove

player o el reproductor genérico de windows. El programa tiene como objetivo final

simular el funcionamiento de este tipo de aplicaciones en el sistema o ofreciendo entre

otras cosas, un gestor y buscador de música y un reproductor simulado cuya función es

reproducir un archivo durante 15 segundos

La tecnología de los objetos, es una tendencia en el área de diseño y

construcción de software que brinda portabilidad y seguridad, entre otros beneficios.

Algunas empresas reportan que el beneficio clave que les proporciona la programación

orientada a objetos no es la reutilización de software, sino que el software que producen

es más comprensible, está mejor organizado y es más fácil de mantener, modificar y

depurar. Esto puede ser importante, ya que tal vez hasta 80 por ciento de los costos de

software están asociados no con los esfuerzos originales por desarrollar el software,

sino con la evolución continua y el mantenimiento de ese software a lo largo de su vida.

Cualesquiera que sean los beneficios percibidos, está claro que la programación

orientada a objetos será la metodología de programación clave durante las siguientes

décadas. (Deitel H. y Deitel P., 2008, p.10)


Por los aspectos previamente descritos, se construye una aplicación para el

manejo de archivos multimedia, aplicando el paradigma de la programación orientada

a objetos (POO) por medio del lenguaje de programación C++. Se dispone del esquema

de empaquetamiento que este paradigma ofrece, por la facilidad de construir unidades

de software con significado. Estas unidades se enfocan en áreas de aplicación

específicas. Ejemplo: clase Playlist maneja las listas de reproducción como un

conjunto, clase Song maneja las canciones de forma individual y permite obtener la

información de las mismas y la clase MediaPlayer que permite manejar cada modulo

que ofrece el proyecto.


SOBRE LA APLICACIÓN

Un reproductor multimedia, reproductor de medios o simplemente reproductor


es un programa informático o un dispositivo capaz de mostrar un abanico de contenidos
audiovisuales. Por norma general, esto incluye la reproducción de sonido, vídeo e
imágenes. De esta manera, el reproductor de medios permite el disfrute personal de
música, videoclips, películas, fotografías, etc.

La aplicación a realiza pretende recrear un reproductor en una interfaz de


consola utilizando C++ como lenguaje de programación, el proyecto, funcionamiento
e interfaz está inspirado en Spotify aplicación que permite escuchar miles de canciones
considerado uno de los mejores reproductores por todo el contenido gratuito que ofrece.

Sobre el código.

La arquitectura del proyecto sigue un paradigma basado en objetos, cada


elemento que se considere fundamental para el funcionamiento del proyecto
representara una entidad en el mismo.

El código fuente se divide en varias clases siendo las principales la clase Media
Player en la cual convergen el resto de las clases y la clase.

Otras clases de vital importancia son la clase Song la cual permite manejar archivos
con extensión .mp3 y con la cual se obtiene toda la información contenida en el tag o
etiqueta que contiene este tipo de archivos, formalmente conocido como id3 tag y la
clase List que es la estructura que permite manejar listas genéricas y con la cual se
manejan las listas de reproducción. Adicionalmente se implemento una clase
complementaria para realizar una interfaz grafica amigable en consola dicha clase
consiste en la instanciación de un objeto global que se encarga de imprimir datos y
otros elementos de forma ordenada en la consola además de estilizar aspectos de la
pantalla como color de textos y fondos y permite una experiencia de usuario más fluida.

El lenguaje elegido para desarrollar la aplicación fue c++ utilizando las


funciones básicas de entrada y salida de datos de la consola, el código fue escrito en el
IDE code blocks utilizando el administrador de proyectos que proporciona dicho
software, también se utilizó un gestor para crear documentación de forma fácil,
Doxygen, el cual funciona a través del comentado de los archivos de cabecera del
proyecto con el cual se genera un archivo Index.html con toda la información (Clases
, funciones , métodos , atributos) el cual puede ser revisado por cualquier usuario.

Alguno de los estilos para la escritura del código son:

1- Las clases inician con mayúscula


2- El estilo de escritura adoptado es el camel case a excepción de las constantes
las cuales se escriben completamente en letra mayúscula.
3- El identado para las llaves será sin salto de línea colocando la llave de apertura
al lado del corchete o nombre de clase.
4- El identado para el código será el estándar utilizando la tecla TAB
5- El código se escribirá en ingles
6- Las clases serán comentadas a través de doxygen

Sobre las clases y objetos.

Para el funcionamiento del proyecto se crearon las siguientes clases:

MediaPlayer:

Esta clase maneja toda la aplicación en general, para empezar a funcionar se


utiliza el método init el cual inicialmente carga todos los elementos y luego los muestra
permitiendo al usuario elegir entre varias opciones. Mas detalles sobre esta clase en la
explicación del algoritmo general.

Song:

Esta clase permite extraer la información contenida en un id3tag que es un


estándar utilizado para incluir metadatos de una canción como nombre álbum artistas
etc. Esta clase extrae dicha información y la transforma en strings las cuales son
gestionadas por el resto del programa, esta clase se utiliza principalmente para mostrar
la información adicional de una canción mientras se reproduce.
Clase Directory:

Clase usada en el manejo de directorios y carpetas, esta clase permite obtener

todos los archivos contenidos en un directorio y filtrarlos por su extensión. El

reproductor la utiliza para obtener todos los archivos mp3 contenidos en una ruta (path).

Sobre las estructuras de datos.

Para el desarrollo de las clases principales se utilizaron varias estructuras de

datos para facilitar el desarrollo del proyecto:

List:

Esta es la estructura principal del programa, fue creada siguiendo los


estándares de la programación genérica, por lo cual puede almacenar la mayoría de
tipos de datos y objetos de c++, dicha clase aprovecha las virtudes de c++ como la
sobrecarga de operadores y constructores y los iteradores para convertirse en una
estructura aún más robusta y fácil de usar.

Clase rVector.

Estructura que representa un vector o punto visto desde el ámbito de la

matemática y física se usa para almacenar posiciones y procesar posiciones de algunos

objetos visuales en la pantalla.

Clase Node.

Clase que representa un nodo genérico es decir posee un valor y una referencia

a otro nodo o nodo siguiente.


Clase Iterator.

Esta estructura es una implementación de los iteradores, idea original

implementada en la STL que consiste en un objeto que almacena un nodo y al aplicar

los operadores de incremento igualdad o desigualdad permite moverse a través de una

lista enlazada.

Sobre la interfaz gráfica.

Buscando realizar una interfaz amigable para el usuario usando la consola de

comandos se creó una librería que explota el potencial de la función Gotoxy y otros

elementos de la consola como colores hexadecimales y caracteres especiales. Dichos

métodos se encuentran en la clase Gui,h para poder utilizar dichos métodos en

cualquier archivo del proyecto se creó un objeto super global el cual se utiliza en la

mayoría de clases del software para crear una experiencia de usuario agradable a pesar

de los componentes elegidos para implementar el proyecto.

Clases relacionadas a la interfaz

Esta aplicación tiene una estrecha relación con la interfaz gráfica, el programa

fluye a través de los eventos generados por el teclado, generalmente cuando se presiona

una tecla o un numero el programa sabe como reaccionar y que elementos debe borrar

y reescribir (renderizar) todas estas acciones fueron logradas a través del uso de las

clases gráficas, en esta sección se describe mas a detalles el funcionamiento de dichas

clases.
Gruf:

Gruf, abreviación de la palabra graphic utility functions en un archivo en el cual se

definen las funciones y objetos mas importantes de la interfaz, estos son Goto y el

espacio de nombre gruf.

Clase Goto:

Esta clase se definió con el fin de explotar las funcionalidades que ofrece la

función gotoxy y tener una versión mejorada del cout que ofrece el estándar de c++,

Para ello se definió inmediatamente después de definir dicha clase, una función que

retorna un objeto de tipo Goto llamado oGoto (output go to) el cual funciona de forma

muy parecida al cout gracias a que la clase Goto sobrecarga el operador “<<”, Dicha

función recibe dos parámetros la posición x e y donde se imprimirá el texto que

prosigue al operador “<<”. La idea fue obtenida de la función qDebug ofrecida por la

librería de qt que funciona igual a la función oGoto. El resto de las clases graficas

utilizan dicha función para la impresión de cada uno de los textos y el manejo de

formularios y divisores, es aquí donde está el corazón de la librería gráfica, además

permite una mayor legibilidad del código.

Namespace Gruf:

Gruf es un espacio de nombre que se utiliza para complementar el

funcionamiento de la librería pues ofrece funciones que, aunque no son propias de un

objeto en especifico son acciones pequeñas pero necesarias para el correcto

funcionamiento de los programas que usen la liberaría gráfica, también ofrece otro
espacio de nombre que realiza operaciones matemáticas y de conversiones simples

llamado math;

Clase Divisor:

Como su nombre lo indica esta clase es un divisor o caja que permite separar la

interfaz en varias partes o mini consolas, con esta clase se puede llevar un control mas

optimo de las cosas que se imprimen sin tener que memorizar posiciones de otros

objetos, ya que dicha clase conoce su posición en la consola y el texto dentro de la

misma.

Clase Form:

Esta clase define un formulario o secuencia de opciones, cada opción tiene una

posición x e y un texto asociado, dichas variables están envueltas en el objeto Option,

el trabajo de esta clase en particular es poner a funcionar estos formularios por medio

del método switchOn y sus derivados, con los cuales el formulario empieza a escuchar

eventos de teclado generalmente flechas y con ello señala la opción en la cual el

“cursor” esta ubicado evitando que el usuario ingrese los tediosos inputs y menús poco

interactivos los cuales pueden llevar a errores en el programa.

ALGORITMO GENERAL Y CODIGO FUENTE

Como se explicó en secciones anteriores el algoritmo general donde inicia todo

el programa se encuentra en el método init de la clase MediaPlayer (Clase principal de

programa) en la función main del proyecto se encuentran pocas líneas de código:


En la función principal se define un string que contiene la dirección de una carpeta en

la cual se encuentran todas las canciones, dicha ruta se puede cambiar por el sistema

en cualquier momento que reproducirá el programa luego se crea un objeto media

player y seguidamente se utiliza el método init con lo cual se empieza el programa.

En el constructor de la clase MediaPlayer se crean y cargan la mayoría de los

archivos necesarios para iniciar la ejecución del sistema como lo son paneles

formularios canciones etc.


El algoritmo general inicia en el método init, donde se terminan de cargar los

archivos más que todo dinámicamente para luego renderizar la interfaz a través del

método show para finalmente empezar el bucle principal, el algoritmo utiliza una

estructura llamada option handler la cual se utiliza simplemente para indicar si el

formulación principal fue usado en otro modulo para no repetir el procese de petición

de opciones (SwitchOn) la primera vez que se ingrese al sistema el usuario deberá

ingresar una de las opciones para después acceder a alguno de los módulos del

programa, de los cuales puede salir presionando otra opción principal, el bucle
principal finaliza cuando el usuario presiona la opción salir (Tecla 6) con lo cual el

sistema deja de funcionar y termina la ejecución del mismo.

CLASES Y METODOS

Para una información más detallada acerca de las clases y métodos del proyecto por

favor visite: la documentación generada por DOXYGEN en la siguiente ruta PONER RUTA (Al

descargar la carpeta del proyecto se crea esta ruta)


BIBLIOGRAFIA

https://es.wikipedia.org/wiki/Reversi

https://es.wikipedia.org/wiki/Minimax

http://radagast.se/othello/zebra.html

https://es.wikipedia.org/wiki/Minimax

https://www.youtube.com/watch?v=l-hh51ncgDI

https://www.youtube.com/watch?v=y7AKtWGOPAE

https://es.wikipedia.org/wiki/B%C3%BAsqueda_en_anchura

https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/

https://www.geeksforgeeks.org/bfs-vs-dfs-binary-tree/

https://www.geeksforgeeks.org/generic-tree-level-order-traversal/

http://sites.google.com/site/elreversista/

http://home.nc.rr.com/othello/history/

Potrebbero piacerti anche