• No se han encontrado resultados

Creacion de un sistema virtual de Transmision de Datos para el apoyo a la docencia en la asignatura de Teleinformatica I.

N/A
N/A
Protected

Academic year: 2023

Share "Creacion de un sistema virtual de Transmision de Datos para el apoyo a la docencia en la asignatura de Teleinformatica I."

Copied!
106
0
0

Texto completo

(1)

Universidad de las Ciencias Informáticas

Facultad 3

Título: Creación de un sistema virtual de Transmisión de Datos para el apoyo a la

docencia en la asignatura de Teleinformática I

Trabajo de Diploma para optar por el título de Ingeniero en Ciencias Informáticas

Autores:

Carlos Matos Carbonell Arnolis Rodríguez del Valle

Tutor: Ing. Abel Arias Hernández Co-tutor: Alberto Limia Navarro

Ciudad de la Habana, Junio del 2008

(2)

DECLARACIÓN DE AUTORÍA

Declaramos ser autores de la presente tesis y reconocemos a la Universidad de las Ciencias Informáticas los derechos patrimoniales de la misma, con carácter exclusivo.

Para que así conste firmo la presente a los ____ días del mes de ________ del año ________.

Carlos Matos Carbonell Arnolis Rodríguez del Valle

______________ ______________

Firma del Autor Firma del Autor

Ing. Abel Arias Hernández

______________

Firma del Tutor

(3)

Agradecimientos 2008

AGRADECIMIENTOS

A nuestro tutor Abel Arias Hernández y a nuestro Co tutor Alberto Limia Navarro por

ayudarnos incondicionalmente en todo momento y darnos todo el apoyo necesario cuando nos

hizo falta. A nuestros padres que son y serán siempre nuestra principal inspiración para

realizar cualquier labor, guiándonos por sus pensamientos y enseñanzas, principales armas

para lograr que hoy en día este trabajo haya cumplido con los objetivos trazados.

(4)

Dedicatoria 2008

DEDICATORIA

A nuestros por padres, por confiar en nosotros en todo momento, por ser partícipes de

educarnos e impulsarnos a llegar tan lejos, por apoyarnos incondicionalmente en nuestras

decisiones y siempre que lo necesitamos, brindándonos los ánimos y fuerzas necesarios para

seguir adelante y no claudicar nunca.

(5)

Resumen 2008

RESUMEN

Entre los temas impartidos en Teleinformática I están los procesos que intervienen en la transmisión de datos, estos no son asimilados correctamente por los estudiantes, provocando que presenten problemas a la hora de realizar los ejercicios orientados, influyendo negativamente en las evaluaciones y la promoción. Con la intención de mejorar los resultados de la asignatura se propone la idea de construir una herramienta que sirva de apoyo a los estudiantes y profesores para comprobar los resultados de los ejercicios. Para la realización de la aplicación se hace un estudio de algunas herramientas existentes que realizan procesos similares, metodologías de desarrollo, lenguajes de programación y sus IDEs. Se muestran los requisitos funcionales con que debe cumplir el software, dados por los profesores del Departamento de Sistemas Digitales. Se realizan las descripciones de los casos de uso. En el diseño se crearon los diagramas de clases pertinentes por caso de uso, además de sus respectivos diagramas de iteración, se seleccionó como patrón arquitectónico el de Filtros y Tuberías, siendo un estilo ideal para realizar transformaciones de datos, dividiéndolos en pasos sucesivos. Como parte de la implementación se explica el estándar de codificación creado; también se muestra el diagrama de componentes. Se les realizaron pruebas de unidad al código mediante el framework JUnit, el cual viene integrado junto al NetBeans 6.0, quedando demostrado el correcto funcionamiento del Simulador PSTD.

(6)

Tabla de Contenidos 2008

TABLA DE CONTENIDOS

AGRADECIMIENTOS ... I DEDICATORIA ... I RESUMEN ... I

INTRODUCCIÓN ... 1

CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA ... 4

Introducción ... 4

1.1 Sistema de Transmisión de Datos ... 4

1.1.1 Codificación ... 6

1.1.2 Cifrado ... 6

1.1.3 Compresión ... 7

1.1.4 Multiplexación... 8

1.1.5 Modulación ... 9

1.2 Herramientas para la simulación de la transmisión de datos ... 9

1.2.1 LVSIM-DCOM ... 10

1.2.2 QS Versión 1.0 ... 11

1.2.3 Matlab ... 11

1.3 Conceptos para el desarrollo de software ... 13

1.3.1 ¿Qué es la programación orientada a objetos? ... 13

1.3.2 ¿Qué es una metodología de desarrollo de software? ... 13

1.3.3 ¿Qué es un IDE de programación? ... 14

1.4 Metodologías de desarrollo de software ... 14

1.4.1 Rational Unified Process (RUP) ... 15

1.4.2 Extreme Programing (XP) ... 16

1.5 Herramientas de Modelado ... 18

1.6 El Diseño ... 19

1.6.1 ¿Qué es el diseño? ... 20

1.6.2 Importancia del Diseño ... 20

1.6.3 Patrones de diseño ... 20

1.6.3.1 Patrones generales de software para asignar responsabilidades (GRASP) ... 21

1.6.3.2 Patrones GOF ... 22

1.7 Lenguajes de Programación... 23

1.7.1 Java ... 24

1.7.2 C Sharp ... 25

1.8 IDEs para Java... 26

1.8.1 NetBeans ... 27

1.8.2 Eclipse ... 28

Conclusiones ... 28

CAPÍTULO 2: CARACTERÍSTICAS DEL SISTEMA ... 30

Introducción ... 30

2.1 Caso de estudio ... 30

2.2 Procesos de la teoría de la información que se automatizarán ... 30

2.3 Compresión del contexto del sistema mediante un modelo de dominio ... 31

(7)

Tabla de Contenidos 2008

2.3.1 Descripción de las clases del dominio ... 32

2.4 Especificación de los requisitos del sistema ... 33

2.4.1 Requisitos funcionales del sistema ... 34

2.4.2 Requisitos no funcionales ... 35

2.5 Modelo de Casos de Uso del Sistema ... 35

2.5.1 Definición de los Actores del Sistema ... 36

2.5.2 Listado de los Casos de Uso del Sistema ... 36

2.5.3 Diagrama de Casos de Uso del Sistema ... 39

2.5.4 Descripción de los casos de uso del sistema ... 39

2.5.5 Prototipo de Interfaz de Usuario ... 46

Conclusiones ... 46

CAPÍTULO 3: DISEÑO DEL SISTEMA ... 47

Introducción ... 47

3.1 El diseño y la arquitectura ... 47

3.1.1 ¿Qué es la arquitectura de software? ... 47

3.1.2 Importancia de la arquitectura ... 48

3.1.3 Diseño arquitectónico ... 48

3.1.4 Estilos arquitectónicos y Patrones de arquitectura ... 48

3.1.5 Patrón arquitectónico de Filtros y Tuberías (Piping and filtering) ... 49

3.1.5.1 ¿Por qué el uso del patrón Filtros y Tuberías? ... 49

3.1.5.2 ¿Cómo aplicar el patrón arquitectónico en el diseño de clases? ... 50

3.4 Patrones de diseño empleados ... 52

3.5 Modelo del diseño ... 53

3.5.1 Paquetes de diseño ... 54

3.5.2 Descripciones de las clases del diseño más significativas ... 57

3.5.3 Realización de los casos de uso del diseño ... 57

3.5.3.1 Diagrama de clases del diseño ... 57

3.5.3.2 Diagrama de iteración ... 58

Conclusiones ... 59

CAPÍTULO 4: IMPLEMENTACIÓN Y PRUEBA ... 60

Introducción ... 60

4.1 Estándar de codificación ... 60

4.1.1 Ventajas de un estándar de codificación ... 60

4.2 Implementación ... 63

4.3 Diagrama de componentes ... 64

4.4 Paquetes de implementación ... 64

4.4.1 Paquete de implementación Procesamiento ... 65

4.4.2 Paquete de implementación Información ... 65

4.4.3 Paquete de implementación Filtros ... 65

4.4.4 Paquete de implementación Visual ... 65

4.4.5 Paquete de implementación Codificador_desc ... 65

4.4.6 Paquete de implementación Cifrador_desc ... 66

4.4.7 Paquete de implementación Compresor_desc ... 66

4.5 Pruebas del Sistema ... 66

4.5.1 Pruebas de Caja Blanca ... 66

4.5.2 Pruebas de Unidad ... 67

Conclusiones ... 68

CONCLUSIONES ... 69

(8)

Tabla de Contenidos 2008

RECOMENDACIONES ... 70

BIBLIOGRAFÍA ... 71

ANEXOS ... 72

GLOSARIO ... 95

(9)

Índice de Figuras 2008

INDICE DE FIGURAS

Figura 1: Sistema de Transmisión de Datos ... 5

Figura 2: Metodología RUP. ... 16

Figura 3: Metodología XP. ... 17

Figura 4: Modelo de Dominio ... 32

Figura 5: Diagrama de Casos de Uso ... 39

Figura 6: Patrón Tuberías y Filtros ... 49

Figura 7: Patrón Tuberías y Filtros aplicado al problema ... 50

Figura 8: Aplicando Patrón arquitectónico Filtros y Tuberías en el diseño de clases ... 51

Figura 9: Diagrama de iteración Comunicación Tubería Filtros ... 52

Figura 10: Diagrama de clases del Patrón Abstract Factory ... 53

Figura 11: Paquetes del diseño ... 56

Figura 12: Diagrama de Componentes ... 64

Figura 13: Netbeans 6.0 con JUNIT ... 68

(10)

Índice de Tablas 2008

INDICE DE TABLAS

Tabla 1: Algoritmos a implementar. ... 31

Tabla 2: Actores del Sistema ... 36

Tabla 3: CU Procesar Mensaje ... 36

Tabla 4: CU Mostrar Pasos ... 36

Tabla 5: CU Codificar ... 37

Tabla 6: CU Descodificar ... 37

Tabla 7: CU Cifrar ... 37

Tabla 8: CU Descifrar ... 37

Tabla 9: CU Comprimir ... 38

Tabla 10: CU Descomprimir ... 38

Tabla 11: Descripción CU Procesar Mensajes ... 39

Tabla 12: Descripción CU Codificar ... 40

Tabla 13: Descripción CU Descodificar ... 41

Tabla 14: Descripción CU Cifrar ... 42

Tabla 15: Descripción CU Descifrar ... 43

Tabla 16: Descripción CU Comprimir ... 43

Tabla 17: Descripción CU Descomprimir ... 44

Tabla 18: Descripción CU Mostrar Pasos ... 45

Tabla 19: Paquete de diseño Procesamiento ... 54

Tabla 20: Paquete de diseño Información ... 54

Tabla 21: Paquete de diseño Filtros ... 55

Tabla 22: Paquete de diseño Visual ... 55

Tabla 23: Paquete de diseño Codificador_desc ... 55

Tabla 24: Paquete de diseño Cifrador_desc ... 56

Tabla 25: Paquete de diseño Compresor_desc ... 56

(11)

Introducción 2008

INTRODUCCIÓN

Antecedentes

La especie humana es de carácter social, es decir, necesita de la comunicación, pues de otra manera cada ser humano sería un ente aislado. Así, desde los inicios de la especie, la comunicación fue evolucionando hasta llegar a la más sofisticada tecnología, para lograr acercar espacios y tener mayor velocidad en el proceso.

En los años 3500 AC solo había comunicación a partir de signos abstractos dibujados en papel hecho de hojas de árboles; hacia 1184 AC ya se podían transmitir mensajes a distancia con señales de fuego, el antiguo imperio Romano y Griego poseían muy buenos sistemas de este tipo, hacia los años 500 AC dos ingenieros de Alejandría (Kleoxenos y Demokleitos) usaban un sistema de recepción y transmisión de información solo en la noche, el sistema constaba de dos caminos separados por una colina, dependiendo de cuantas antorchas y como fueran acomodadas en la colina el mensaje podía ser leído (para el mensaje “One hundred Cretans have deserted" fueron utilizadas 173 antorchas y la transmisión duró alrededor de 1 hora y media). Pero quizás uno de los primeros intentos de telecomunicaciones o transmisión de información a largas distancias fue la maratón que consistía en que una persona llevaba un mensaje de un sitio a otro corriendo a través de kilómetros de distancia.

Luego nacieron otras formas de comunicación donde las personas se situaban en sitios altos y transmitían la información a otros a través de gestos hechos por el movimiento de sus brazos.

En áreas selváticas donde se dificultaba obtener línea de vista para transmisión de información, desde sitios altos, fueron desarrollados los telégrafos de tambor, la idea era transmitir la información a través de sonidos que emanaban de un tambor hecho con madera de los árboles para los nativos de África, Nueva Guinea y América, mientras que en China usaban el conocido Tamtam que era un gran plato metálico creado para transmitir información audible con algunos toque de un martillo sobre él.

Posteriormente el ser humano fue desarrollándose, inventado e investigando dando origen a nuevas técnicas y tecnologías para una mejor comunicación, reflejándose fuertemente desde las primeras máquinas programables manualmente (máquina diferencial de Babbage) o con procedimientos electrónicos (ENIAC, con tubos al vacío, en 1947), actualmente con las potentes computadoras digitales que se han introducido en prácticamente todas las áreas de la sociedad (industria, comercio, educación, comunicación, transporte y otros sectores).

Así, progresivamente el hombre fue realizando nuevos y novedosos descubrimientos que marcaban pautas para un mejor desarrollo en las comunicaciones, ejemplo de esto es como a lo largo de los últimos años se ha podido experimentar una serie de cambios tecnológicos a favor de las tareas

(12)

Introducción 2008

diarias. Los cambios van desde las aplicaciones más sencillas y cotidianas como sería la telefonía móvil, boletos del metro, tarjetas de crédito, hasta grandes redes de información, desarrollo aeroespacial, comunicación inalámbrica. Todo esto ha proporcionado una mejor comunicación del hombre, no importa la distancia física que exista para realizar diversas actividades como son: compras online, participación en foros, envío de correos electrónicos, entre otras a través de diferentes medios como la red inalámbrica o por cable, celulares que utilizan los satélites y otros dispositivos que cada año mejoran su velocidad de transmisión y procesamiento de información.

En la actualidad la información juega un papel importante en la sociedad, la gran cantidad de información almacenada por la humanidad, junto a la incapacidad de almacenarla en un único lugar físico hace necesaria la transmisión de la información de un lugar a otro constantemente. En la Universidad de las Ciencias Informáticas (Uci) se imparte la asignatura de Teleinformática I en tercer año de la carrera, la cual trata la transmisión de datos, explicando los procesos que intervienen de manera teórica.

Situación problemática:

Esta asignatura tiene un carácter teórico, se imparten muchos contenidos que los estudiantes no lo asimilan correctamente, influyendo esto de forma negativa en los conocimientos adquiridos, la calidad de las notas y la promoción al finalizar el semestre. Reciben una serie de algoritmos y métodos que intervienen en la transmisión de datos que presentan complejidad a la hora de desarrollarlo, y no cuentan con una herramienta que sea capaz de ayudarles a comprobar y verificar los ejercicios que realizan en las clases prácticas y sus estudios independientes.

Problema:

¿Cómo representar los procesos que intervienen en la transmisión de datos mediante un software educativo?

Hipótesis:

Si se desarrolla una aplicación capaz de mostrar los procesos de transmisión de datos de forma visual y metodológica, el departamento contará con un software educativo que servirá de apoyo a la docencia.

Objeto de Estudio:

Teoría de la información y los softwares educativos.

Campo de Acción:

Software simulador de procesos de transmisión de datos.

Objetivo:

(13)

Introducción 2008

Construir un software capaz de realizar y mostrar los procesos de transmisión de datos impartidos en la asignatura de Teleinformática I.

Tareas de Investigación:

1. Investigar herramientas que simulan la transmisión de datos.

2. Investigar acerca de las diferentes metodologías de desarrollo.

3. Investigar acerca del lenguaje de programación.

4. Investigar el uso de IDE de desarrollo.

5. Crear el diseño del software.

6. Implementar algoritmos de cifrado, codificación y compresión.

El trabajo está formado por cuatro capítulos donde se abarcan los siguientes temas:

En el capítulo 1: Se tratan los temas que fue necesario investigar para mostrar la importancia de la transmisión de la información a modo general y en específico en la Uci, además de explicar los diferentes conceptos importantes en el tema. Se hace un estudio de las principales herramientas para la implementación de la aplicación, así como los posibles lenguajes de programación a utilizar, IDE para el lenguaje seleccionado y algunas de las metodologías de desarrollo de software.

En el capítulo 2: Se presentan las características del sistema propuesto, describiendo como este debe funcionar, o sea sus potencialidades y características esenciales. Se exponen los requisitos del sistema, tanto funcionales como no funcionales, los casos de uso, los actores y sus respectivas descripciones. También se muestran los prototipos de interfaz de usuario.

En el capítulo 3: Se obtienen los artefactos del flujo de trabajo de diseño, etapa fundamental en el desarrollo de un software. Se aborda el patrón arquitectónico utilizado, tuberías y filtros, muy útil en la construcción de una aplicación que contiene las características de la que se desea elaborar. Se explican los patrones de diseño utilizados y las ventajas que brindan.

En el capítulo 4: Los artefactos generados en el capítulo anterior sirven de entrada a la implementación. Es aquí donde se generan los diagramas de componentes y paquetes de implementación. Se propone el estándar de codificación utilizado. También se tratan las pruebas realizadas para comprobar las funcionalidades del sistema, quedando construido completamente el software al terminar el capítulo.

(14)

Capítulo 1: Fundamentación Teórica 2008

CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

Introducción

El desarrollo de las telecomunicaciones comenzó desde el año 1844 cuando Samuel Morse puso en marcha el primer sistema telegráfico confiable donde los símbolos utilizados eran puntos y rayas .Tres décadas después Alejandro Gram Bell comenzó la era de la transmisión analógica, en esta época los datos originales solo eran codificados y transmitidos, una vez llegados al receptor se decodificaban y se obtenían los datos originales nuevamente, así durante casi un siglo se fue desarrollando la tecnología de las computadoras acelerando las técnicas de transmisión de señales digitales.

A lo largo del desarrollo de la computación el hombre vio la necesidad de comunicarse a través de los ordenadores creando así diferentes tecnologías para la transmisión de la información como son los cables de comunicación (par trenzado, coaxial, fibra óptica), los módems, las interfaces de red, entre otros dispositivos que ayudan en el proceso de comunicación. Todo este desarrollo ha permitido que hoy en día las comunicaciones sean aún más rápidas y efectivas permitiendo la transmisión de grandes cantidades de información, entre ellas: imágenes, sonido, películas, programas, informes, documentos; eliminando técnicas viejas utilizadas en las telecomunicaciones. En la actualidad esta ha tenido un gran desarrollo debido a todos los logros en la rama de la computación. El avance logrado en las técnicas del envío y recepción de la información trajo consigo el aumento de los procesos que intervienen en un sistema de transmisión de datos, ya no bastaba con codificar la información y mandarla, ahora es necesario tener en cuenta criterios de seguridad, distancias y estándares, así como la necesidad de poder enviar varias señales por un mismo canal de transmisión.

Durante el desarrollo del presente capítulo se abordarán diferentes temas como los sistemas de transmisión de datos y los procesos que intervienen en este, se realizará un análisis de herramientas que existen en el mundo para simular a estos, además se tendrán en cuenta metodologías para el desarrollo de software, IDE de desarrollo, lenguajes de programación, así como el concepto de diseño, su importancia, y los patrones de diseño, seleccionando los más convenientes para desarrollar el sistema que se requiere.

1.1 Sistema de Transmisión de Datos

La transmisión de la información es la operación de enviar y recibir datos, mediante el empleo de determinados procesos para eliminar problemas de información innecesaria(ruido), erradicar riesgos de intercepción o modificación de un mensaje ya sea por un agente externo o el medio ambiente, recarga del medio al transmitir gran cantidad de información, corregir algunos errores que posea la

(15)

Capítulo 1: Fundamentación Teórica 2008

información entre otros eventos que podrían provocar que el proceso no se ejecute de forma efectiva y eficiente.

En la Figura 1 se puede apreciar un sistema de transmisión de datos, el cual está compuesto por un transmisor y un receptor por los que el mensaje enviado sufre transformaciones como resultado a diferentes procesos como la codificación, el cifrado, la multiplexación y la modulación, realizando luego el procedimiento inverso a estos, ayudando de una forma u otra a evitar problemas en la comunicación entre la fuente y el destino.

Figura 1: Sistema de Transmisión de Datos

Hoy en día un mensaje desde que se envía hasta que se recibe sufre cambios producto a la utilización de determinados procesos, que permiten que los sistemas actuales sean más seguros, eficientes y rápidos a la hora de establecer una comunicación entre un emisor y un receptor. De ellos solo se realizará un estudio de los que se imparten en clases de Teleinformática I.

Un mensaje cuando es enviado se codifica, cifra, comprime, multiplexa, y finalmente se modula para luego realizar los procesos inversos como decodificar, descifrar, descomprimir, demultiplexar y desmodular para que llegue a su destino sin que halla sufrido ningún cambio o alteración. A continuación se dará una explicación más detallada de estos procedimientos.

(16)

Capítulo 1: Fundamentación Teórica 2008

1.1.1 Codificación

El objetivo de la codificación es obtener una representación eficiente de los símbolos del alfabeto fuente, en la cual, para que sea eficiente es necesario tener un conocimiento de las probabilidades de cada uno de los símbolos del alfabeto. El dispositivo que realiza esta tarea es el codificador, este debe cumplir el requisito de que cada palabra de código debe decodificarse de forma única, tal que la secuencia original sea reconstruida perfectamente a partir de la secuencia codificada.

La codificación consiste en establecer una correspondencia entre cada uno de los símbolos de un alfabeto fuente y una secuencia de símbolos de un alfabeto destino. Al alfabeto destino se le denomina alfabeto código y a cada una de las secuencias de símbolos de este alfabeto que se corresponda con un símbolo del alfabeto fuente se denomina palabra de código. El alfabeto fuente contiene los símbolos originales que se quieren codificar. El alfabeto código contiene las palabras de código equivalentes en que se codificarán los símbolos originales. [1]

Entre los tipos de codificaciones están las eficientes y las redundantes, dentro de las primeras se encuentran la de Shanno Fano y la de Huffman, teniendo esta última el inconveniente de que si la fuente posee un conjunto enorme de símbolos el proceso se haría lento y consumiría mucha memoria su implementación. Dentro de las redundantes se tiene el código de Hamming y el Algebraico.

Luego de codificar la fuente se pasa al cifrado de esta para lograr la seguridad, el cual permite la confidencialidad y la integridad de la información; no es más que transformar un texto plano en uno totalmente distinto llamado criptograma, el cual es realizado mediante algoritmos matemáticos.

1.1.2 Cifrado

El cifrado es un método que permite aumentar la seguridad de un mensaje o de un archivo mediante la codificación del contenido, este consiste en transformar un texto plano o entendible a un texto sin ningún significado.[2]

Los algoritmos de encriptación pueden ser:

Sustitución: Esta técnica establece correspondencia con los símbolos del alfabeto del mensaje original con otros, que pueden ser del mismo o de uno distinto. Dentro de esta se encuentran el cifrado de César, el de Vigenére que es una generalización del anterior, el de Beaufort, y el de Vernam, los cuales son nombrados algoritmos clásicos de encriptación.[3]

Transposición: Consiste en intercambiar los símbolos del mensaje original colocándolos de una manera diferente. Dentro de esta técnica se encuentran las transposiciones por grupos, por series y por columnas, que pueden ser por clave o sin clave, estos también son considerados algoritmos clásicos.[3]

(17)

Capítulo 1: Fundamentación Teórica 2008

Cifrado simétrico: Cuando se emplea la misma clave en las operaciones de cifrado y descifrado, se dice que el criptosistema es simétrico o de clave secreta. Para ello se emplean algoritmos como IDEA, RC5, DES, TRIPLE DES, etcétera.[2]

Cifrado asimétrico: Cuando cada usuario crea un par de claves, una privada y otra pública, inversas dentro de un cuerpo finito. Lo que se cifra en emisión con una clave, se descifra en recepción con la clave inversa. La seguridad del sistema reside en la dificultad computacional de descubrir la clave privada a partir de la pública. Para ello, usan funciones matemáticas de un solo sentido o con trampa, ejemplos el RSA, Diffie-Hellman, entre otros.[2]

En la universidad se tienen en cuenta los algoritmos clásicos antes mencionados, pues son fáciles de aprender de manera práctica, además permiten explotar algunas de sus propiedades para entender mejor los algoritmos modernos de manera teórica, producto a su complejidad. Estos son los simétricos, y se emplearon con éxito hasta principio del siglo XX. Algunos se remontan incluso, como el algoritmo de César, a la Roma Imperial.

Luego del cifrado se pasa a la compresión que se encarga de reducir el tamaño de la información y transmitirla en menor tiempo, siendo menos la información que se envía.

1.1.3 Compresión

La compresión de datos es el proceso que trata de eliminar la redundancia dentro de un archivo (considerando cada byte como un mensaje elemental, y codificándolo con más o menos bits según su frecuencia de aparición).[3]

Según David Salomón la compresión de datos es el proceso de convertir un flujo de datos de entrada (datos originales) en un flujo de datos de salida (datos comprimidos) el cual es de menor tamaño que el de entrada.[4]

O sea la compresión de datos permite que la información se transmita a una velocidad superior a la velocidad de conexión real. Normalmente, los datos y, en particular, el texto y los gráficos, contienen secuencias repetidas de información idéntica. La compresión de datos funciona al sustituir muchos caracteres de información repetida por unos pocos caracteres y transmitir sólo una copia de las secuencias de datos repetidas, el mismo se clasifica en compresión con pérdida y sin pérdida.

Compresión sin pérdida: Es donde toda la información se guarda al comprimir sin perder el mínimo detalle, se usa cuando no se quiere perder dato de información. Dentro de estos se encuentran los compresores estadísticos y los basados en diccionarios.

(18)

Capítulo 1: Fundamentación Teórica 2008

Compresores estadísticos: Los que se basan en aprovechar una medida de información basada en probabilidades. Entre ellos se pueden citar a los compresores de tipo Huffman y Shanno Fano, los aritméticos, y los predictivos.

Compresores basados en diccionarios: Estos se basan en el uso de diccionarios estáticos o sea de conocer la estructura de los datos que se desean codificar. Entre ellos se puede citar al compresor RLE.

Compresión con pérdida: Esta compresión hace que se pierda cierta cantidad de información la cual no es importante desde cierto punto de vista porque no es permisible por los sentidos del ser humano. Por ejemplo al comprimir una imagen o una música o un video, esto es debido a que ni la vista ,ni el oído humano pueden percibir esta pequeña falta de información, en este tipo de compresión se tiene a la codificación por fuente, a la transformación Discreta por Coseno(DCT) y a la cuantización vectorial.

Para hacer un uso eficiente de las líneas de telecomunicaciones de alta velocidad se emplean técnicas de multiplexación, las cuales permiten que varias fuentes de transmisión compartan una capacidad de transmisión superior.

1.1.4 Multiplexación

Las facilidades y servicios de transmisión son caros. Es habitual que dos estaciones que se vayan a comunicar no utilicen toda la capacidad del enlace de datos. Por cuestiones de rendimiento, es conveniente compartir esa capacidad. El término genérico que alude a ese proceso de compartir es la multiplexación.[5]

En la práctica es necesario enviar simultáneamente una gran cantidad de mensajes diferentes por un medio de transmisión dado. El proceso de operación multicanal permite, mediante las técnicas llamadas de “multiplex” o “multiplexamiento”, combinar en el transmisor los mensajes de varias fuentes de información, transmitirlos como un solo bloque y luego separarlos en el receptor.[6]

Existen muchas formas de multiplexación según el sistema de comunicación, los más utilizados son por división de tiempo o TDM (Time division multiplexing ),de frecuencia o FDM (Frequency-division multiplexing) y en código o CDM (Code division multiplexing), donde la multiplexación por división en frecuencias se puede usar con señales analógicas, de modo que se transmiten varias señales a través del mismo medio gracias a la asignación de una banda de frecuencia diferente para cada señal y la multiplexación por división en el tiempo síncrona se puede utilizar con señales digitales o con señales analógicas que transportan datos digitales. En esta forma de multiplexación, los datos procedentes de varias fuentes se transmiten en tramas repetitivas. [6]

(19)

Capítulo 1: Fundamentación Teórica 2008

Terminado el procedimiento de multiplexación el sistema pasa a la modulación que nace de la necesidad de transportar una información a través de un canal de comunicación a la mayor distancia y menor costo posible.

1.1.5 Modulación

Proceso de colocar la información contenida en una señal, generalmente de baja frecuencia, sobre una señal de alta frecuencia, donde la de baja frecuencia es la señal moduladora y la de alta frecuencia es denominada portadora.

En la transmisión de señales portadoras se utiliza una gran variedad de métodos de modulación, pero es posible identificar dos tipos básicos de modulación de acuerdo con la clase de portadora: la

“Modulación de Señales Continuas”, en la cual la portadora es una señal sinusoidal, y la “Modulación de Impulsos”, aquí la portadora es un tren de impulsos.

La modulación de señales continuas es un proceso continuo y por lo tanto es la apropiada para señales que varían en forma continua en el tiempo.

La Modulación de Impulsos es un proceso discreto, en el sentido de que los impulsos están presentes en ciertos intervalos de tiempo, lo que hace que la Modulación de Impulsos sea la forma apropiada para la transmisión de mensajes o información de naturaleza discreta. [6]

Finalizando, los procesos que intervienen en la comunicación son de sumo interés para que la misma cumpla sus verdaderos objetivos: la información tiene que llegar rápidamente, no sufrir cambios y no ser interceptada por agentes externos a la comunicación.

1.2 Herramientas para la simulación de la transmisión de datos

En el Departamento de Sistemas Digitales de la Uci, en reiteradas ocasiones los resultados académicos en la asignatura de Teleinformática I, específicamente en el tema de la teoría de la información no han sido muy buenos. Los estudiantes no poseen una guía efectiva para entender con mayor facilidad estos conocimientos, por lo que se ha pensado en el empleo de herramientas que muestren cómo ocurren los procesos que intervienen en la comunicación.

Las aplicaciones han sido un medio muy eficaz para el aprendizaje hoy en día, permitiendo la realización de distintas operaciones de manera práctica, eficiente y rápida. Por las razones antes mencionadas se hará un pequeño análisis de algunas aplicaciones que existen para la simulación de estos procesos entre las que se pueden citar:

1. LVSIM-DCOM

(20)

Capítulo 1: Fundamentación Teórica 2008

2. QS Versión 1.0 3. Matlab

1.2.1 LVSIM-DCOM

Software de simulación basado en Windows, el cual reproduce un laboratorio de clase tridimensional en una pantalla de computadora. Utilizando el ratón los estudiantes pueden instalar un equipo virtual en telecomunicaciones digitales y obtener los mismos resultados con el equipo de Lab-Volt.

Los sofisticados modelos matemáticos incluidos simulan exactamente las características de los componentes reales en telecomunicaciones digitales. Esta herramienta permite que los estudiantes puedan realizar las tareas de una forma más fácil y efectiva.

Esta herramienta en si familiariza a los estudiantes con las actividades prácticas relacionadas con:

1. Modulación de amplitud de impulso 2. Modulación de anchura de impulso 3. Modulación de posición de impulso 4. Conversión analógico digital

5. Conversión digital analógico Características

1. Instalar, desplazar, rotar y remover módulos de telecomunicaciones digitales.

2. Conectar los componentes de telecomunicaciones digitales.

3. Modificar o remover las conexiones de los componentes de telecomunicaciones digitales.

4. Cambiar el color de los cable

5. Ampliar o reducir para ajustar la vista.

6. Aplicar potencia virtual al equipo.

7. Observar las formas de onda en un osciloscopio virtual.

8. Observar información espectral en un analizador de espectro virtual.

9. Realizar mediciones de frecuencia usando un frecuencímetro virtual.

10. Anotar las mediciones en una tabla de datos.

11. Dibujar las gráficas usando los datos anotados.

12. Imprimir pantallas de visualización.

13. Guardar y reabrir la configuración del equipo, los datos y las formas de onda.

14. Codificador MIC (PCM) 15. Decodificador MIC (PCM) 16. Codificador MICD (DPCM)

(21)

Capítulo 1: Fundamentación Teórica 2008

17. Decodificador MICD (DPCM) 18. Módem MDF (FSK)

19. Modulador MDFB (BPSK) 20. Demodulador MDFB (BPSK)

21. Codificador Delta/DPVC (Delta/CVSD)

22. C Decodificador Delta/DPVC (Delta/CVSD)[7]

1.2.2 QS Versión 1.0

Software simulador de las condiciones de tráfico en las redes de telecomunicaciones, la implementación del mismo sigue un modelo del tráfico que considera la distribución de arribo, de servicio, la disciplina de cola, el número de canales de entrada y de servicio, y combina los métodos analíticos y de simulación. Este analiza el tráfico, fallos y comportamiento durante la transmisión de la información.

Este software posee una sencillez tal, que logra un bajo costo computacional y puede ser utilizado para la simulación de nodos de una red considerando:

1. La distribución del tráfico de arribo.

2. La distribución del tráfico de servicio.

3. La disciplina de la cola.

4. El número de canales de entrada.

5. El número de canales de servicio.

6. La contabilidad de los estados intermedios.

7. Una combinación de los métodos analíticos y de simulación.

La herramienta se ha probado en la simulación de redes con servicios de http y ftp sobre Ethernet, con redes de IP sobre ATM y de voz IP y sobre modelos con características diferentes: M/M/1, M/D/1 y en sistemas con prioridad sin desalojo para varias clases de tráfico. En algunos casos las soluciones analíticas son conocidas y sirven como base para evaluar la calidad de los resultados del simulador.

Todas las simulaciones se garantizan en una computadora personal con arquitectura superior a la de prueba con procesador Pentium III a 1000 MHz y al menos 128 Mb de memoria RAM y Sistema Operativo XP.[8]

1.2.3 Matlab

Matlab es una herramienta que permite hacer resolver funciones matemáticas así como simular redes neuronales, hacer operaciones estadísticas y además permite la simulación del proceso de transmisión

(22)

Capítulo 1: Fundamentación Teórica 2008

de datos entre otras actividades. Para la simulación de la emisión y recepción de la información este software brinda las siguientes opciones:

Simulink.

Funciones .m utilizadas desde la línea de comandos.

Funciones .m utilizadas mediante Interfaces Gráficas de Usuario (GUI).

Las últimas versiones de Matlab incorporan la posibilidad de utilizar interfaces gráficas de usuario para trabajar con sus archivos .m. Esto permite tener un entorno amigable para pedir datos y mostrar resultados al usuario, además puesto que es posible implementar funciones .m propias, el sistema que se desea simular estará totalmente personalizado desde el punto de vista de funcionalidad y de interfaz de usuario. En cuanto al proceso de modulación permite simular a las:

1. Modulaciones ASK 2. Modulaciones PSK 3. Modulaciones QAM 4. Modulaciones FSK

Este programa brinda la posibilidad de variar los parámetros internos de la simulación como la frecuencia. Los resultados pueden ser observados mediante gráficas o en una ventada de valores.[9]

De las herramientas antes tratadas se ha podido comprobar que son útiles en algunos de los casos ,como el Matlab que muestra gráficamente el proceso de modulación, el QS Versión 1.0 que simula la condiciones del tráfico en una red y el LVSIM-DCOM que contienen algunas opciones para la codificación y la modulación, pero estas herramientas no se centran exactamente en los algoritmos que se tienen en cuenta en la universidad como los algoritmos clásicos de cifrado, las codificaciones de Huffman y de Shanno mostrando como proceder con los mismos, para poderlos entender, es por eso que se ha decidido hacer una aplicación que trate los procesos de transmisión, impartidos de manera práctica en la asignatura de teleinformática, para que los estudiantes puedan entender con mayor facilidad a los mismos y tener una manera de comprobar los resultados de los ejercicios orientados en las clases prácticas.

Para crear la aplicación se ha tenido en cuenta el estudio de diferentes metodologías, herramientas y lenguajes de programación para su desarrollo, esto permitirá que al elegir la apropiada en cada uno de los casos, se realice el diseño e implementación de la herramienta. Antes de comenzar se dará a conocer algunos conceptos necesarios como:

1. ¿Qué es la programación orientada a objetos?

2. ¿Qué es una metodología de desarrollo de software?

(23)

Capítulo 1: Fundamentación Teórica 2008

3. ¿Qué es un IDE de programación?

1.3 Conceptos para el desarrollo de software

1.3.1 ¿Qué es la programación orientada a objetos?

La Programación Orientada a Objetos es la forma de expresar un programa en términos de objetos que colaboran entre si para realizar determinadas tareas, siendo estos representaciones de elementos de la vida real y que a su vez contienen toda la información que permiten su definición e identificación frente a otros objetos, además de contener funciones llamadas métodos que sirven de comunicación entre ellos.

Tiene características fundamentales que la identifican y son la base de las potencialidades que brinda a la hora de usarla para implementar cualquier sistema informático; ellas son: Herencia, Polimorfismo, y Encapsulamiento.

Es totalmente distinta a la programación estructurada, el programador trata de acercarse más al mundo real donde todo se vería como un objeto. Todo se refleja en términos de objetos, propiedades, métodos y otros elementos que se verán rápidamente para aclarar conceptos y dar una pequeña base sobre este paradigma. A continuación se citarán algunos conceptos de programación orientada a objetos según algunos autores:

La programación orientada a objetos es mucho más que una frase comercial (aunque haya llegado a ser así por culpa de algunas personas), una nueva sintaxis o una nueva interfaz de programación de aplicación. La programación orientada a objetos es un conjunto completo de conceptos e ideas. Es una manera de pensar en el problema al que va dirigido un programa de ordenador y de afrontarlo de modo más intuitivo e incluso más productivo. [10]

Los principios de la programación al objeto es “modelar” y representar, a través de elementos de programación, objetos que existen en la realidad (tangible o intangibles).[11]

1.3.2 ¿Qué es una metodología de desarrollo de software?

Una metodología de desarrollo de software es un proceso, el cual define qué, cuándo, y como alcanzar un determinado objetivo. Este debería ser capaz de servir como guía para todos los participantes (clientes, usuarios, desarrolladores y directores ejecutivos), evolucionar durante muchos años permitiendo limitar su alcance en un momento del tiempo dado a las realidades de la tecnología, herramientas, personas y patrones de organización.[12]

(24)

Capítulo 1: Fundamentación Teórica 2008

Se puede decir que, una metodología de desarrollo de software es un proceso que guía a los desarrolladores a los que les brinda métodos y herramientas, proporcionándoles una ayuda muy importante e indispensable para que el producto final posea las funcionalidades requeridas por el cliente y que cumpla con las necesidades del mismo y del usuario final, es una secuencia de actividades organizadas y bien pensadas que transforman los requisitos del cliente en el producto final.

1.3.3 ¿Qué es un IDE de programación?

IDE: Herramienta de soporte al proceso de desarrollo de software que integra las funciones básicas de edición de código, compilación y ejecución de programas. [13]

Los IDEs (Integrated Development Environment), tal y como su nombre indica, son entornos de desarrollo integrados.[14]

Resumiendo un IDE de programación es simplemente un software, pero que a diferencia de otros es una herramienta para ayudar a los programadores a escribir programas informáticos, interpretando uno o varios lenguajes de programación, compilándolos y mostrándole al programador si hubo o no un error en el código. Estos programas contienen un compilador que interpreta uno o varios lenguajes de programación.

1.4 Metodologías de desarrollo de software

En el mundo existen varias metodologías que son usadas para realizar el análisis de un software, entre ellas se encuentran las metodologías tradicionales y las metodologías ágiles. Las metodologías tradicionales se centran en el control de los procesos estableciendo actividades involucradas como: los artefactos que se deban producir, las herramientas que se deben de usar, sin embargo las metodologías ágiles se centran en otras dimensiones como el factor humano o el producto de software dándose mayor valor al individuo, a la colaboración con el cliente y al desarrollo incremental del software con iteraciones cortas. [15]

Por estas razones la metodología ágil está cobrando gran importancia en el mundo actual de desarrollo del software producto de la necesidad de satisfacer al cliente y obtener como resultado lo que en verdad este desea, teniendo resultados positivos en una gran cantidad de proyectos con requisitos que están en constantes cambios, que es lo más común que sucede cuando se desarrolla un software en el que se tiene un cliente que complacer y además de que en el mundo actual se necesita de un desarrollo rápido. A continuación se citarán algunas de las metodologías existentes.

1. SCRUM

(25)

Capítulo 1: Fundamentación Teórica 2008

2. Crystal Methodologies

3. Dynamic Systems Development Method (DSDM) 4. Adaptive Software Development (ASD)

5. Feature Driven Development (FDD) 6. Lean Development (LD)

7. RUP 8. XP 9. MSF

De una forma u otra, todas han contribuido en el desarrollo de la industria del software, sirviéndoles de guía a los desarrolladores para un mejor desempeño y cumplimiento de los requisitos de un determinado producto. Pero como todo, ellas tienen su forma particular de ser útil, pues no plantean lo mismo y no se pueden utilizar en cualquier proyecto, debido a que no existe una metodología estándar para cualquier tipo de desarrollo en la industria del software, pues todo depende del cliente, o de la empresa, de las características de la misma, entre otros factores como la cantidad de personal, el tiempo en que se debe entregar el producto y otros agentes que influyen en el desarrollo de un software.

Se centrará el estudio en RUP y XP donde la primera es tradicional y la segunda ágil.

1.4.1 Rational Unified Process (RUP)

La metodología RUP, llamada así por sus siglas en inglés Rational Unified Process, divide en 4 fases el desarrollo del software:

1. Inicio: Determinar la visión del proyecto.

2. Elaboración: Determinar la arquitectura óptima.

3. Construcción: Llegar a obtener la capacidad operacional inicial.

4. Transmisión: Llegar a obtener el release del proyecto.

Cada una de estas etapas es desarrollada mediante el ciclo de iteraciones, la cual consiste en reproducir el ciclo de vida en cascada a menor escala. Los objetivos de una iteración se establecen en función de la evaluación de las iteraciones precedentes.

Vale mencionar que el ciclo de vida que se desarrolla por cada iteración, es llevada bajo dos disciplinas:

Disciplina de Desarrollo

1. Ingeniería de Negocios: Entendiendo las necesidades del negocio.

(26)

Capítulo 1: Fundamentación Teórica 2008

2. Requerimientos: Trasladando las necesidades del negocio a un sistema automatizado.

3. Análisis y Diseño: Trasladando los requerimientos dentro de la arquitectura de software.

4. Implementación: Creando software que se ajuste a la arquitectura y que tenga el comportamiento deseado.

5. Pruebas: Asegurándose que el comportamiento requerido es el correcto y que todo los solicitado está presente.

Disciplina de Soporte

1. Configuración y administración del cambio: Guardando todas las versiones del proyecto.

2. Administrando el proyecto: Administrando horarios y recursos.

3. Ambiente: Administrando el ambiente de desarrollo.

4. Distribución: Hacer todo lo necesario para la salida del proyecto.

Figura 2: Metodología RUP.

Los elementos del RUP son:

1. Actividades: Procesos que se llegan a determinar en cada iteración.

2. Trabajadores: Las personas o gentes involucrados en cada proceso.

3. Artefactos: Un artefacto puede ser un documento, un modelo, o un elemento de modelo.

Una particularidad de esta metodología es que, en cada ciclo de iteración, se hace exigente el uso de artefactos, siendo por este motivo, una de las metodologías más importantes para alcanzar un grado de certificación en el desarrollo del software.[16]

1.4.2 Extreme Programing (XP)

Es una de las metodologías de desarrollo de software más exitosas en la actualidad, utilizadas para proyectos de corto plazo, entrega y equipo de desarrolladores pequeños. La misma consiste en una

(27)

Capítulo 1: Fundamentación Teórica 2008

programación rápida o extrema, cuya particularidad es tener como parte del equipo, al usuario final, pues es uno de los requisitos para llegar al éxito del proyecto.

Figura 3: Metodología XP.

Características de XP, la metodología se basa en:

1. Pruebas Unitarias: se basa en las pruebas realizadas a los principales procesos, de tal manera que se adelanta en algo hacia el futuro, se pueda hacer pruebas de las fallas que pudieran ocurrir. Es como si se adelantara a obtener los posibles errores.

2. Refabricación: se basa en la reutilización de código, para lo cual se crean patrones o modelos estándares, siendo más flexible al cambio.

3. Programación en pares: una particularidad de esta metodología es que propone la programación en pares, la cual consiste en que dos desarrolladores participen en un proyecto en una misma estación de trabajo. Cada miembro lleva a cabo la acción que el otro no está haciendo en ese momento. Es como el chofer y el copiloto: mientras uno conduce, el otro consulta el mapa.

¿Qué es lo que propone XP?

Empieza en pequeño y añade funcionalidad con retroalimentación continua. El manejo del cambio se convierte en parte sustantiva del proceso. El costo del cambio no depende de la fase o etapa. No introduce funcionalidades antes que sean necesarias. El cliente o el usuario se convierten en miembro del equipo.

Lo fundamental en este tipo de metodología es:

1. La comunicación, entre los usuarios y los desarrolladores.

2. La simplicidad, al desarrollar y codificar los módulos del sistema.

3. La retroalimentación, concreta y frecuente del equipo de desarrollo, el cliente y los usuarios finales.[16]

(28)

Capítulo 1: Fundamentación Teórica 2008

Como se ha podido apreciar las metodologías de desarrollo de software antes tratadas tienen su forma de guiar a los desarrolladores de software, teniendo sus métodos particulares. Además el uso de estas depende del producto que se quiera desarrollar, del usuario final, de las características de la empresa, entre otras circunstancias que se presenten. Para el desarrollo del trabajo se tendrá en cuenta utilizar como metodología a RUP a pesar de que las metodologías ágiles como XP son aplicables a proyectos de corto plazo y de equipos de desarrollo pequeños, posee el inconveniente de que estos equipos deben estar compuesto por personal de experiencia en proyectos de software basándose en heurísticas provenientes de prácticas de antiguos proyectos, sin embargo RUP es basada en estándares seguidos por el entorno de desarrollo. Otro factor es en cuanto al cliente, en la que, en XP es parte del equipo de desarrollo o sea se considera un rol, mientras que en RUP el cliente interactúa mediante reuniones. Otro factor importante es en cuanto a los artefactos que se generan siendo RUP más abarcador en el tema, generando más artefactos que XP y centrándose más en la arquitectura, fundamental para cualquier desarrollo de un software. Ya determinada la metodología RUP para el desarrollo de la aplicación es necesario el apoyo en una herramienta para la modelación de los diferentes artefactos que la misma propone, teniendo en cuenta aquellos que pertenecen al lenguaje UML, como son los diferentes diagramas, es por eso que se dedicará el siguiente epígrafe al estudio de herramientas que permitan realizar los diferentes diagramas establecidos por UML.

1.5 Herramientas de Modelado

El modelado es el proceso que permite representar gráficamente el sistema de software, permitiendo resaltar los detalles más importantes. En el mundo de la ingeniería existen herramientas que ayudan a los desarrolladores a modelar los distintos diagramas especificados por UML, ejemplo de esto son el Rational Rose, el Umbrello, el Visual Paradigm entre otras. Para la realización de los diagramas pertinentes en el desarrollo de la aplicación se determinó emplear el Visual Paradigm, debido a sus características, entre las que se pueden mencionar:

1. Soporte para el ciclo de vida completo de desarrollo de software.

2. Soporte UML versión 2.1.

3. Permite realizar ingeniería inversa a lenguajes como Java, C++, C#, Esquemas XML.

4. Generación de código a través de los diagramas de diseño.

5. Permite la creación de diagramas de flujos de datos.

6. Disponibilidad en múltiples plataformas.

(29)

Capítulo 1: Fundamentación Teórica 2008

7. Diseño centrado en casos de usos y enfocado al negocio que genera un software de mayor calidad.

8. Modelado colaborativo con CVS y Subversion.

9. Generación de objetos Java desde la base de datos.

10. Generación de bases de datos, transformando diagramas de Entidad/Relación en tablas de base de datos.

11. Ingeniería inversa de bases de datos, desde Sistemas Gestores de Bases de Datos (DBMS) existentes a diagramas de Entidad/Relación.

12. Generador de informes para generación de documentación.

13. Importación y exportación de ficheros XML.

14. Integración con Visio.

15. Editor de figuras.

16. SDE para Eclipse.

17. SDE para NetBeans.

18. SDE para Sun ONE.

19. SDE para Oracle JDeveloper.

20. SDE para JBuilder.

21. SDE para WebLogic Workshop. [17]

A continuación se dedicará un espacio a explicar aspectos fundamentales en el diseño, pues es uno de los flujos más importantes de RUP, siendo el anterior al de implementación y el principal esfuerzo del presente trabajo esta incluido en el diseño.

1.6 El Diseño

Para desarrollar cualquier aplicación o sistema es necesario el diseño, pues es una de las etapas fundamentales que tiene el desarrollo del software. Un buen diseño es crucial para que la aplicación funcione correctamente y se termine el sistema en tiempo y forma, además que es el paso fundamental para la implementación. El mismo es importante para la creación de sistemas robustos y de fácil mantenimiento utilizando el paradigma orientado a objetos. Para desarrollar una aplicación, es necesario contar con descripciones detalladas y de alto nivel de la solución lógica y saber como satisface los requerimientos y restricciones, es este flujo de trabajo el encargado de realizar dichas operaciones.

(30)

Capítulo 1: Fundamentación Teórica 2008

1.6.1 ¿Qué es el diseño?

Según Pressman, el diseño es una representación significativa de ingeniería de algo que se va a construir. Se puede hacer el seguimiento basándose en los requisitos del cliente, y al mismo tiempo la calidad se puede evaluar y cotejar con el conjunto de criterios predefinidos para obtener un diseño

“bueno”. En el contexto de la ingeniería del software, el diseño se centra en cuatro áreas importantes de interés: datos, arquitectura, interfaces y componentes.

El diseño del software es un proceso iterativo mediante el cual los requisitos se traducen en un plano para construir el software y es tanto un proceso como un modelo, además es una secuencia de pasos que hacen posible que el diseñador describa todos los aspectos del software que se van a construir.

[18]

Diseño orientado a objetos

Es durante el diseño orientado a objetos, donde se definen los objetos lógicos del software que finalmente serán implementados en un lenguaje de programación orientado a objetos. [19]

1.6.2 Importancia del Diseño

La importancia del diseño del software se puede describir con una sola palabra "calidad". Es el lugar en donde se fomentará la calidad en la ingeniería del software; proporciona las representaciones del software que se pueden evaluar en cuanto a calidad; es la única forma de convertir exactamente los requisitos de un cliente en un producto o sistema de software finalizado y sirve como fundamento para todos los pasos siguientes del soporte del software y de la ingeniería del software.[18]

En este se construyen distintos artefactos como el modelo de diseño, se determinan las clases necesarias para la construcción del software así como los distintos diagramas, se diseña el modelo de datos, se construye el diagrama de colaboración y secuencia en la que se reflejan como colaboran los objetos entre otros artefactos y actividades que son de sumo interés para los desarrolladores, en el mismo se aplican patrones que es una manera de evitar futuros problemas que ya se han presentado en disímiles situaciones, por esta razón se le dedicará un estudio ha determinados patrones que se consideran importantes para el desarrollo.

1.6.3 Patrones de diseño

A lo largo de los años los desarrolladores se han encontrado con problemas que se repiten reiteradamente en el desarrollo de un software, es por estas razones que los mismos han creado los patrones para usarlos en determinadas situaciones que se presenten. Los patrones han servido de ayuda y hoy en día se aplican mucho en distintos proyectos. En el diseño existen patrones los cuales

(31)

Capítulo 1: Fundamentación Teórica 2008

se nombran patrones de diseño que son: “Soluciones ya probadas y eficaces de los problemas de diseño que pueden expresarse como un conjunto de principios”. [19]

Una de las principales razones de las ciencias de la computación en cuanto a los patrones de diseño, es la necesidad de obtener soluciones elegantes, simples y reutilizables. Algunas definiciones de patrones de diseños se citan a continuación:

1. “Los patrones de diseño son soluciones a problemas de diseño que se ven una y otra vez”.

(The Smalltalk Companion)[20]

2. “Los patrones de diseño constituyen un conjunto de reglas que describen como cumplir ciertas tareas en el desarrollo del software”. (Pree 1994) [20]

3. “Los patrones identifican y especifican abstracciones que están por encima de clases sencillas e instancias, o componentes” (Gamma et al., 1993)[20]

Existen una gran cantidad de patrones y cada uno hace un pequeño aporte para solucionar determinados problemas, pero cuidado no se pueden utilizar siempre los patrones donde no hacen falta, o sea no son efectivos en cualquier proyecto ni situación que se presente, simplemente se deben aplicar cuando realmente hacen falta, porque sino puede traer serios problemas más adelante. Para su mejor estudio se tiene en cuenta entre los de diseño a los patrones GRASP y los GOF.

1.6.3.1 Patrones generales de software para asignar responsabilidades (GRASP)

Los patrones Grasp describen principios fundamentales de diseño de objetos para la asignación de responsabilidades las que están relacionadas con las obligaciones de un objeto en cuanto a su comportamiento. Existen varios patrones Grasp, a continuación se citan algunos:

Experto:

¿Quién asumirá la responsabilidad en el caso general?

Asignar una responsabilidad al experto en información: la clase que posee la información necesaria para cumplir con la responsabilidad.

Creador:

¿Quién crea?

Asignar a la clase B la responsabilidad de crear una instancia de la clase A, si se cumple una de las siguientes condiciones:

1. B contiene A 2. B agrega A

3. B tiene los datos de inicialización de A

(32)

Capítulo 1: Fundamentación Teórica 2008

4. B registra A

5. B utiliza A muy de cerca Controlador:

¿Quién administra un evento del sistema?

Asignar la responsabilidad de administrar un mensaje de eventos del sistema a una clase que represente una de las siguientes opciones:

1. El negocio o la organización global (un controlador de fachada).

2. El "sistema" global (un controlador de fachada).

3. Un ser animado del dominio que realice el trabajo (un controlador de papeles).

4. Una clase artificial (Fabricación Pura) que represente el caso de uso (un controlador de casos de uso).[19]

1.6.3.2 Patrones GOF

Los patrones GOF se separan en patrones de creación, estructurales y de comportamiento. Los de creación son los que se encargan de crear los objetos, mientras que los estructurales se dedican al planteamiento de las relaciones entre las clases combinándolas para la formación de estructuras, finalmente los de comportamiento se dedican a la interacción y cooperación entre las clases, estudiando las relaciones entre los mensajes que ocurren entre los objetos. [20]

Entre los patrones de creación se pueden citar a:

1. Fábrica Abstracta: Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre sí y haciendo transparente el tipo de familia concreta que se esté usando.

2. Constructor: Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.

3. Método de fabricación: Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística para elegir el subtipo que se crea.

4. Prototipo: Crea nuevos objetos clonándolos de una instancia ya existente.

5. Singleton: Garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a esta instancia.

Entre los patrones estructurales se pueden citar a:

1. Adaptador: Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla

2. Puente: Desacopla una abstracción de su implementación

(33)

Capítulo 1: Fundamentación Teórica 2008

3. Objeto compuesto: Permite tratar objetos compuestos como si de uno simple se tratase.

4. Envoltorio: Añade funcionalidad a una clase dinámicamente.

5. Fachada: Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.

6. Peso ligero: Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.

7. Proxy: Mantiene un representante de un objeto.

Entre los patrones de comportamiento se pueden citar:

1. Iterador: Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.

2. Mediador: Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.

3. Observador: Define una dependencia de uno a muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.

4. Estado: Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.

1.7 Lenguajes de Programación

Los lenguajes de programación y los IDE de desarrollo tienen una suma importancia para cualquier proyecto de software. ¿Se imaginan qué sería de los desarrolladores sin la existencia de un lenguaje de programación y de un IDE que lo ayude en la tarea de corregir código? Bueno, sería fatal, pues con estos se han creado innumerables programas y herramientas que han ayudado al hombre a controlar de una manera más sencilla a los ordenadores, así como de realizar múltiples tareas y actividades.

Hoy en día existen muchos lenguajes a los que se puede acudir para la realización de cualquier software, pero como unos son más fáciles de utilizar que otros debido a la eliminación de código inseguro, el cumplimiento con el paradigma de la programación orientada a objetos, sentencia más amigable y sencilla, la facilidad que proporcionan para su aprendizaje, la propiedad de que sean multiplataforma, entre otras disímiles características que permiten a los programadores elegirlos, por esto seguidamente se analizarán algunos de ellos.

(34)

Capítulo 1: Fundamentación Teórica 2008

1.7.1 Java

Java es un lenguaje de programación creado por SUN Microsystems muy parecido al estilo de programación del lenguaje “C” y basado en lo que se llama programación orientada a objeto.[11]

Entre las principales características de Java se pueden citar:

1. Sintaxis similar a la de C++. Aunque se simplifican algunas características del lenguaje como:

2. La sobrecarga de operadores, la herencia múltiple, el paso por referencia de parámetros, la gestión de punteros, la liberación de memoria y las instrucciones de pre compilación.

3. Soporte homogéneo a la Programación Orientada a Objetos. A diferencia de C++, que puede considerarse un lenguaje multiparadigma, Java está diseñado específicamente para utilizar el paradigma de orientación a objetos.

4. Independencia de la plataforma. En Java se pretende que con una sola compilación se obtenga código ejecutable en diferentes Sistemas Operativos e incluso sobre diferente hardware.[21]

La compañía Sun describe el lenguaje Java como “simple, orientado a objetos, distribuido, interpretado, robusto, seguro, de arquitectura neutra, portable, de altas prestaciones, multitarea y dinámico”. [14]

Orientado a objetos: Desde un principio fue diseñado orientado a objetos que agrupan en estructuras encapsuladas tanto sus datos como los métodos que manipulan esos datos.

Distribuido: Proporciona una colección de clases para su uso en aplicaciones de red, que permiten abrir sockets y establecer y aceptar conexiones con servidores o clientes remotos, facilitando así la creación de aplicaciones distribuidas.

Interpretado y compilado a la vez: Java es compilado, en la medida en que su código fuente se transforma en una especie de código máquina, los bytecodes, semejantes a las instrucciones de ensamblador. Por otra parte, es interpretado, debido a que los bytecodes se pueden ejecutar directamente sobre cualquier máquina a la cual se hayan portado el intérprete y el sistema de ejecución en tiempo real.

Robusto: Fue diseñado para crear software altamente fiable. Para ello proporciona numerosas comprobaciones en compilación y en tiempo de ejecución. Sus características de memoria liberan a los programadores de una familia entera de errores como la aritmética de punteros, porque ya en este lenguaje se ha prescindido por completo de los punteros, y la recolección de basura elimina la necesidad de liberación explícita de memoria. Java está diseñado para soportar aplicaciones que serán ejecutadas en los más variados entornos de red, desde Unix a Windows NT, pasando por Mac y estaciones de trabajo, sobre arquitecturas distintas y con sistemas operativos diversos. La indiferencia

Referencias

Documento similar

"No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)