INTRODUCCION En el presente trabajo de investigación se darán a conocer alunas metodologías de programación utilizadas en la creación de softwares. Una metodología es un conjunto de principios generales que un programador ha de seguir para desarrollar un programa. Cada lenguaje de programación permite al programador seguir una metodología determinada, por tanto los lenguajes de programación se pueden también clasificar según la metodología que sigan. Las metodologías de programación definen cómo se organizan los diferentes elementos de un programa, como esos elementos interactúan entre ellos, etc. Actualmente, las metodologías de programación más comúnmente usadas son los siguientes: • PROGRAMACIÓN ESTRUCTURADA • PROGRAMACIÓN ORIENTADA A OBJETOS • MODULARIZACIÓN Pero existen otras mas tales como: • Método de Warnier • Método de Jackson • Método de Bertini • Método de Tabourier • Método de Chapin Etc. A continuación se detallan cada uno de estos puntos. PROGRAMACIÓN ESTRUCTURADA A finales de los años 1970 y principios de los 1980, se creó una nueva filosofía de diseño de programas llamada programación estructurada. Esta idea eliminó ese tipo de código largo, monolítico y lineal que saltaba de un lugar a otro con sentencias tipo GOTO. En su lugar, los programadores seccionaban el código en secciones claramente definidas mediante párrafos cortos los cuales eran llamados por un módulo principal. En lugar de la utilización del lenguaje Assembler los lenguajes de tercera generación, tales como COBOL, PASCAL y BASIC se hicieron muy populares. Además, un hardware de ordenador más sofisticado y más rápido hizo posible las bases de datos relacionales, permitiendo el almacenamiento de la información en diskettes y en discos duros. A finales de los 1970 y comienzos de los 1980 era muy caro hacer esto, pero los beneficios eran tremendos. Por no más tiempo del que necesitabas para cerrar un sobre podías almacenar 80 caracteres de información. Ahora podías almacenar y recuperar decenas de miles de registros y tenerlos disponibles en un terminal de ordenador. COMO RESUMEN DIREMOS QUE LA PROGRAMACIÓN ESTRUCTURADA: Postula el principio de división de un programa en unidades algorítmicas más pequeñas llamadas funciones o procedimientos. Una vez definidos, el programador puede invocar a un procedimiento desde otro. Típicamente un programa estructurado se realiza diseñando primeramente un conjunto de estructuras de datos, y posteriormente un conjunto de algoritmos (procedimientos) que actúan sobre esas estructuras de datos. Por ejemplo, si queremos desarrollar un programa para calcular la media de diversos conjuntos de variables, el programador desarrolla un procedimiento al que llama media donde implementa el algoritmo mediante el cual se calcula la media para cualquier conjunto de variables. Posteriormente invoca a ese procedimiento por cada conjunto de variables de los cuales quiera calcular la media. Algunos lenguajes que siguen metodología de la 1 programación estructurada son el C, Pascal, Basic, Fortran, Cobol, etc. Aunque la programación estructurada es una metodología que se ha usado durante mucho tiempo y aún se usa en la actualidad, existe un límite en la complejidad de los programas que se pueden realizar manteniendo los costes de mantenimiento y modificación de los programas razonablemente bajos. Es otras palabras, modificar un programa complejo en Pascal o COBOL puede ser una tarea altamente costosa en términos de tiempo. Para sobrepasar estos problemas se creó la metodología de la programación orientada a objetos, que postula la división de un programa en unidades autocontenidas llamadas objetos. A diferencia de los procedimientos que contienen sólo algoritmos y los datos sobre los que actúan están aparte, un objeto contiene un conjunto de algoritmos junto con los datos sobre los que actúan. De esta manera cuando un programador invoca algoritmos en un objeto, no necesita saber qué tipo de datos el objeto maneja de forma interna. Además los objetos pueden ser organizados en jerarquías, de forma unos objetos pueden heredar datos y algoritmos de otros objetos. Con esto lo que se consigue es que la organización de un programa orientado a objetos sea más modular y rica que la organización de un programa estructurado, con lo que la arquitectura de los programas complejos puede ser acomodada a cambios más fácilmente. Programación Orientada a Objeto (OOP) Con la introducción de sistemas operativos gráficos tales como Windows, ha surgido un nuevo concepto de programación. Los programadores ahora diseñan aplicaciones a base de unir diferentes piezas de código ya escrito y probado con anterioridad, cada una de estas piezas se llama "objeto". Los objetos pueden tener propiedades, tales como forma, tamaño, color, y tipo de datos. Un ejemplo podría ser un cuadro en la pantalla conteniendo una cuenta de dinero. Usted podría cambiar el tamaño de este cuadro, cambiar el color, cambiar la forma en la que se muestra la figura de la cuenta de dinero. Entonces usted podría realizar operaciones en esa cuenta, controlando los eventos que se hicieran sobre ella, tales como una pulsación del ratón que podría disparar una determinada operación, o mover la caja sobre la pantalla. Gracias al entorno del sistema operativo subyacente tras ello, usted puede hacer todo esto colocando propiedades en lugar de escribir todo un código. Y no sólo esto, usted puede crear una aplicación con una base de datos subyacente tras ella, utilizando todas las plantillas preprogramadas sobre la estructura de la base de datos. En los días del antiguo lenguaje assembler, tal sistema hubiera sido extraordinario, si no imposible, de llevarlo a la práctica, además el tamaño y la complejidad serían horrendos. Pero mucha de esa complejidad está ya realizada en el sistema operativo de los ordenadores que ejecutan estos programas "orientados a objeto". Lo bueno de esto es que muchas de las funciones que antes llevaban meses para programarlas, hoy se pueden hacer fácilmente en unos días, incluso en cuestión de horas. Además, el coste económico de los sistemas operativos de ordenador se ha revolucionado, debido a que los costes del hardware caen en picado. Hoy día es normal que un ordenador personal medio tenga 64 megas de memoria RAM y 8 gigas de disco en una máquina que cuesta 1/40 de lo que costaba nuestro pobre sistema Univac en 1978. Esta tendencia no muestra tendencias de ir a cambiar La Orientación a Objetos (OO) se configura como la metodología de desarrollo de software predominante para los próximos años. Según algunos estudios recientes, más del 50% de las corporaciones que desarrollan aplicaciones informáticas, a nivel mundial, ya han abordado de alguna manera estas técnicas, empezando por proyectos piloto con el fin de explorar las ventajas conseguidas con ellas. El soporte que todas las empresas informáticas están dando a la OO (desde fabricantes de ordenadores, bases de datos, hasta lenguajes tanto de tercera como de cuarta generación) hace que la dificultad de migrar a esta tecnología sea cada vez menor. La Orientación a Objetos (OO), que inicialmente fue un con−junto de técnicas de programación soportadas en el uso de lenguajes especiales (orientados a objetos), ha ido poco a poco más allá de la propia programación hasta convertirse en una metodología genérica y de gran potencia para construir modelos de sistemas, que puede ser aplicada en todas las fases del desarrollo de aplicaciones: análisis, diseño, programación y mantenimiento. Frente a otras metodologías tiene la ventaja de ser más natural (más próxima a la forma de pensar y hablar de las personas) e integrar los principios generales de la ingeniería del software en un paradigma coherente (el 2 concepto de "objeto"). Los conceptos fundamentales de Objetos están en la actualidad bien asentados. A continuación se citan los más importantes, desde nuestro punto de vista. Un Modelo de Objetos es un conjunto de entidades (denominadas objetos) que colaboran entre ellos para desempeñar una serie de servicios. Esos servicios se solicitan por medio del intercambio de mensajes. Todos los objetos del modelo pertenecen a algún tipo (Clase). En cuanto a los Objetos en sí, el principio fundamental es que un Objeto es la representación de un concepto. Como tal, tendrá unas características (atributos) y un comportamiento, plasmado en una serie de operaciones. Pero, si bien estos conceptos son aceptados generalmente, en cambio en las metodologías para construir modelos de objetos hay grandes diferencias entre las distintas escuelas, lo cual está perjudicando en cierta medida la implantación de las técnicas OO, ya que se les achaca aún una cierta inmadurez. Aunque la programación estructurada es una metodología que se ha usado durante mucho tiempo y aún se usa en la actualidad, existe un límite en la complejidad de los programas que se pueden realizar manteniendo los costes de mantenimiento y modificación de los programas razonablemente bajos. Es otras palabras, modificar un programa complejo en Pascal o COBOL puede ser una tarea altamente costosa en términos de tiempo. Para sobrepasar estos problemas se creó la metodología de la programación orientada a objetos, que postula la división de un programa en unidades autocontenidas llamadas objetos. A diferencia de los procedimientos que contienen sólo algoritmos y los datos sobre los que actúan están aparte, un objeto contiene un conjunto de algoritmos junto con los datos sobre los que actúan. De esta manera cuando un programador invoca algoritmos en un objeto, no necesita saber qué tipo de datos el objeto maneja de forma interna. Además los objetos pueden ser organizados en jerarquías, de forma unos objetos pueden heredar datos y algoritmos de otros objetos. Con esto lo que se consigue es que la organización de un programa orientado a objetos sea más modular y rica que la organización de un programa estructurado, con lo que la arquitectura de los programas complejos puede ser acomodada a cambios más fácilmente. Conceptos fundamentales de POO Definición de Booch La POO es el método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa un ejemplar de una clase y cuyas clases son miembros de una jerarquía de clases unidas mediante relaciones de herencia. Conclusiones La unidad lógica de programación es el objeto. Los objetos tienen relaciones. Existen clases que agrupan conceptualmente los objetos. Las clases pertenecen a una jerarquía (son las clases las que heredan y no los objetos). Objeto Entidad que contiene los atributos que describen el estado de un objeto del mundo real y las acciones 3 que se asocian con el objeto del mundo real. Un objeto es designado con un nombre o un identificador. OBJETO = DATOS + OPERACIONES Los datos deberían estar ocultos en el objeto, y las operaciones serían el interface del objeto con el exterior, pero estas operaciones están encapsuladas en "cajas negras". Lenguajes de POO SIMULA Se considera que SIMULA es el primer Lenguaje de Programación Orientado a Objetos (en adelante LPOO), fue diseñado por Kristen Nygaard y Ole Johan Dhal , del Norwegan Computer Center (NCC). Se concibió para el desarrollo de simulaciones de procesos industriales y científicos, pero llegó a considerarse apto para desarrollar grandes aplicaciones. La versión SIMULA_67 tenía características de ALGOL_60 , y ya era casi un LPOO, con estas características: Concepto de objeto (datos + operaciones) Comunicación entre objetos (proceso de simulación) Concepto de clase (estructura que agrupa el comportamiento y características de varios objetos) Concepto de herencia (heredar datos y métodos) Fuertemente tipificado (comprobación de tipos en tiempo de compilación) Concepto de ligadura dinámica " polimorfismo" (tener interfaces idénticos para activar diferentes propiedades. Smalltalk Más tarde surge el primer LPOO en sentido estricto: Smalltalk_80 , diseñado por Alan Kay y Adele Goldberg , de la XEROX PARC . Además de ser considerado como primer LPOO es el más puro (sólo tiene objetos, NO ES programación estructurada). ACTUALMENTE SE ENCUENTRAN: JAVA y C++ Características de un LPOO 1. Tipificación fuerte : comprobación de tipos en tiempo de compilación. Hay una excepción : Smalltalk . 2. Ocultación : de las características de los objetos. 3. Compilación Incremental : compilación separada. 4 4. Genericidad : reutilización de código. 5. Paso de mensajes . 6. Polimorfismo : basado en la ligadura dinámica. 7. Excepciones : sistema seguro. 8. Concurrencia : "el mundo real es concurrente". 9. Datos compartidos : entre varios objetos. Modularización Descomponer un programa en un número pequeño de abstracciones coherentes que pertenecen al dominio del problema y enmascaran la complejidad interna. * Existen muchas acepciones del concepto de modularidad. * Van desde una subrutina hasta la asignación de trabajo para un programador. Todas son correctas * La modularidad consiste en subdividir el software en partes denominadas módulos, cada uno con un propósito especifico,que se integran para satisfacer los requerimientos de un problema * La modularidad es el atributo mas sencillo del software,que permite a un programa ser manejable intelectualmente * Asimismo, la modularidad es un enfoque comunmente aceptado tanto para análisis como para diseño. * La modularidad proporciona: − Calidad de diseño − Facilidad de instrumentación − Facilidad de depuración − Facilidad de pruebas − Facilidad de documentación − Facilidad de mantenimiento 5 * Sea: E −−−> Esfuerzo en coste C −−−> Complejidad C(P1) > C(P2) ======> E(P1) > E(P2) C(P1 + P2) > C(P1) + C(P2) || \/ E(P1 + P2) > E(P1) + E(P2) * Nos lleva − Cuantos más módulos mejor ===> mayor sencillez − Contingencia: interfaces entre módulos − Problema: buscar M (nº de módulos) adecuado Según Liskov , modularizar es dividir un programa en módulos que pueden ser compilados separadamente pero existiendo conexiones entre los módulos. Parnas dice además que deben (las conexiones) seguir el criterio de ocultación. Booch piensa que la modularización deber ser propiedad de un sistema que ha sido descompuesto en un conjunto de módulos cohesivos y débilmente acoplados. Acoplamiento Es la interacción entre módulos, sus propiedades deberían ser: • Facilitar la sustitución de un módulo realizando pocos cambios en los otros. • Facilitar el seguimiento y aislamiento de un error (módulo defectuoso). Cohesión • Es la interacción interna de un módulo: todos los elementos de un módulo han de tener relación. METODO DE WARNIER La metodología Warnier fue creada por Jean D. Warnier en 1975, y se dio a conocer en el libro Entrainement a la Programmation. Construction des Programes. Es una metodología estructurada, formada por un conjunto de normas y herramientas que nos permiten 6 solucionar un problema de forma clara y sencilla. Se basa fundamentalmente en la jerarquía de los datos, tanto de entrada como de salida, siendo estos últimos los que de forma directa ejercen una influencia esencial en la definición y control del programa. Se trata de un método para la representación de programas cuyo resultado final se denomina diagrama de Warnier. En eI podemos utilizar toda la terminología estudiada hasta ahora en lo que respecta a identificadores, constantes, variables, expresiones y operadores. teniendo en cuenta que la característica fundamental en relación con todo lo anteriormente visto es la forma de diseñar el programa. que será descendentemente y la representación utilizada. Este método se basa en el empleo de Ilaves de distintos tamaños que relacionan entre si todas las tareas y operaciones. La representaci6n del algoritmo se basa en los siguientes puntos: • Un programa se representa por un solo diagrama en el cual se engloban todas las operaciones necesarias para la resolución del problema. Estas operaciones estan colocadas secuencialmente a la derecha de una llave. en cuya parte izquierda figura el nombre del programa. • En la parte superior de la llave anterior figurará el comentario INICIO. • En la parte inferior figurará FIN. • La forma de conectar con distintas paginas es a través de la palabra PROCESO seguida de un numero o un nombre que tenga relación con las operaciones que se realizan en la siguiente pagina. Estas palabras figuraran en el diagrama principal (diagrama que ocupa la primera pagina). En las siguientes figurará un diagrama sujeto a las mismas normas, salvo que el nombre del programa será la palabra anteriormente citada. Las sucesivas conexiones se hacen de forma similar. FASES DE LA METODOLOGÍA DE WARNIER Las fases que se siguen para desarrollar un programa son: • Estudio de los datos de salida. Trata de crear el archivo lógico de salida (ALS). • Estudio de los datos de entrada. Trata de crear el archivo lógico de entrada (ALE). • Hacer el cuadro de descomposición de secuencias. • Dibujar el organigrama de secuencias de Warnier. • Construir la lista de instrucciones y asignarlas en el organigrama de secuencias. • Desarrollar el juego de datos de ensayo y analizar los resultados. MÉTODO DE JACKSON En 1957 Michael A. Jackson. Describe el método de programación estructurada de Jackson (JSP), como método de diseño de programas con aplicación a la mayoria de los lenguajes de programación. La metodología de Jackson es un proceso sistemático para la realización de un programa, utilizando la técnica del diseño descendente (Top−Down), cuyo producto final es el programa escrito en el pseudocódigo propio del método, de tal forma que su codificaci6n posterior en cualquier lenguaje de programaci6n es relativamente sencilla, bien manualmente o de forma automatica. Para el diseñio de un programa, en general. se parte de unas especificaciones proporcionadas por el usuario en las cuales se definen y detallan: 7 • Las funciones a realizar y su naturaleza. • Los datos a manejar y su naturaleza. El resultado final será un programa o conjunto de programas capaces de resolver el problema solicitado. El siguiente grafico nos muestra. esquemáticamente. el proceso de creación' de un programa. ESPECIFICACIONES DE USUARIO FUNCIONES INFORMACIÓN A REALIZAR SOBRE LOS DATOS MÉTODO O ALGORITMO PROGRAMA OPERACIONES DATOS DE ENTRADA DATOS DE SALIDA DATOS Los objetivos pretendidos en la realizaci6n de programas, siguiendo esta metodología son los siguientes: Obtenci6n de programas fiables. Fiabilidad. Obtenci6n de programas sencillos. Simplicidad. Facilidad en la puesta a punto de los programas. · Facilidad en el mantenimiento de los programas. El punto de punto de partida en la metodología de Jackson es el de la definición de los datos que vamos a manejar tanto en la entrada como en la salida y como consecuencia del tratamiento en estos datos se obtiene el programa. Desarrollar la estructura de un programa sobre la estructura de los datos que va a manejar ofrece: • Una base consistente para la definición de los programas. • Las operaciones se ubicaran en el programa de forma lógica. • El programa será fiel reflejo del problema a resolver. Esta metodología permite la realización de los programas siguiendo las directrices de la programación estructurada puesto que la representación de los datos se basa en las estructuras básicas: secuencial, alternativa y repetitiva, admitiendo además un sencillo descendente y modular. FASES DE LA METODOLOGÍA DE JACKSON La metodología de Jackson desarrolla un programa en 5 fases que realizan consecutivamente. Estas fases son: • Definir las estructuras de datos. • Encontrar correspondencias entre las estructuras de datos. 8 • Formar la estructura del programa. • Listar y asignar las operaciones y condiciones a realizar. • Escribir la lógica esquematizada. MÉTODO DE BERTINI Al igual que el de Jackson la representación de programas es en forma de árbol denominada diagrama arborescente de Bertini. Un diagrama de Bertini consta de: • Definición detallada de los datos de entrada y salida, incluyendo los archivos lógicos utilizados. • Representación del proceso o algoritmo. La simbología utilizada se basa en el empleo de rectángulos horizontales y círculos. La lectura del diagrama se hace recorriendo el árbol en orden inverso (RDI), lo que supone realizar : • Situarse en la raíz (R) • Recorrer el subárbol derecho (D) • Recorrer el subárbol izquierdo (I) Cada subárbol se recorre igualmente en orden inverso hasta llegar a las hojas o nodos terminales del árbol. MÉTODO DE TABOURIER Se trata de una representación de programas en forma de árbol denominado Diagrama de Tabourier. Para ello se puede utilizar a si mismo la terminología común. Un diagrama de Tabourier consta de: • Definición detallada de los datos de entrada y salida. • Representación del proceso o algoritmo. La simbología utilizada se basa en el empleo de rectángulos y rombos horizontales. La lectura del diagrama se hace recorriendo el árbol en preorden (RID), lo que supone realizar : • Situarse en la raíz (R) • Recorrer el subárbol izquierdo (I) • Recorrer el subárbol derecho (D) Cada subárbol se recorre igualmente en preorden hasta llegar a las hojas o nodos terminales del árbol. MÉTODO DE CHAPIN (NASSI / SCHNEIDERMAN) Se trata de un método de representación de programas en forma de bloque compacto. Tambien en este caso se puede utilizar la terminología común. Un diagrama de Chapin consta de: • Definición detallada de los datos de entrada y salida. 9 • Representación del proceso o algoritmo. La simbología utilizada se basa en el empleo de rectángulos. La lectura del diagrama se hace de arriba abajo . BIBLIOGRAFÍA LIBRO: METODOLOGÍA DE LA PROGRAMACIÓN. AUTORES: EDUARDO ALCALDE Y MIGUEL GARCIA. EDICIÓN: SEGUNDA EDICIÓN. EDITORIAL: MC GRAW HILL / INTERAMERICANA DE ESPAÑA S.A. AÑO: 1993. 10