IMPLEMENTACIÓN DEL MODELO INTEGRAL COLABORATIVO (MDSIC) COMO FUENTE DE INNOVACIÓN PARA EL DESARROLLO ÁGIL DE SOFTWARE EN LAS EMPRESAS DE LA ZONA CENTRO - OCCIDENTE EN MÉXICO

IMPLEMENTACIÓN DEL MODELO INTEGRAL COLABORATIVO (MDSIC) COMO FUENTE DE INNOVACIÓN PARA EL DESARROLLO ÁGIL DE SOFTWARE EN LAS EMPRESAS DE LA ZONA CENTRO - OCCIDENTE EN MÉXICO

José Luis Cendejas Valdéz (CV)

Volver al índice

2.13 Lenguajes de programación

A lo largo de las ultimas décadas han surgido infinidad de lenguajes de programación que han permitido el desarrollo de plataformas, las cuales han facilitado desarrollar el trabajo de los procesos esenciales de las organizaciones en todo el mundo, permitiendo así disminuir los costos y los tiempos que se tienen contemplados para su desarrollo. Hay gran cantidad de lenguajes de programación, algunos que han evolucionado a lo largo del tiempo y siguen vigentes, otros han sido operativos durante un periodo de tiempo y que en la actualidad ya no se usan. Dada esta gran variedad de ellos no se pretende analizarlos todos, sino mas bien dar un una visión de diversos tipos y comentar de algunos de ellos.

Los lenguajes de programación utilizan caracteres del “alfabeto” para comunicarse con las computadoras. Las primeras computadoras sólo utilizaban informaciones numéricas digitales y los primeros lenguajes de programación se escribieron en este tipo de código denominado maquina, el cual estaba conformado por 1´s y 0´s. Esto fue lo que hizo que los lenguajes de programación evolucionarán y utilizaran juegos de caracteres similares a los usados por el ser humano. Al igual que los lenguajes utilizados por el ser humano el inglés o el español poseen una estructura (gramática o sintaxis) y un significado (semántica). Así que definiremos que un lenguaje de programación lo definiremos como un conjunto de reglas, símbolos y palabras especiales que permiten construir un programa.

Un programa es una secuencia de instrucciones que indican al hardware de una computadora qué operaciones debe realizar con los datos. Los programas pueden estar incorporados al propio hardware, o bien pueden existir de manera independiente en forma de software. En algunas computadoras especializadas las instrucciones operativas están incorporadas en el sistema de circuitos; entre los ejemplos más comunes pueden citarse los microordenadores de las calculadoras, relojes de pulsera, motores de coches y hornos microondas. Por otro lado, una computadora de uso general, contiene algunos programas incorporados en la memoria ROM o instrucciones, pero depende de programas externos para ejecutar tareas útiles. Una vez programado, podrá hacer tanto o tan poco como le permita el software que lo controla en determinado momento.
El software de uso más generalizado incluye una amplia variedad de programas de aplicaciones, es decir, instrucciones a la computadora acerca de cómo realizar diversas tareas. Los programadores, que dedicaron tanto tiempo y esfuerzo al aprendizaje de la programación de un cierto tipo de computadora, se veían obligados a aprender un nuevo estilo de programación cada vez que trabajaban con otra máquina. Lo que se necesitaba era un método abreviado en el que un enunciado simbólico pudiera representar una secuencia de numerosas instrucciones en lenguaje máquina, y un método que permitiera que el mismo programa pudiera ejecutarse en varios tipos de máquinas. Estas necesidades llevaron al desarrollo de lenguajes de alto nivel.
Los lenguajes de alto nivel suelen utilizar términos del idioma ingles del tipo “list”, “print” u “open”, entre otros como comandos que representan una secuencia de decenas o de centenas de instrucciones en lenguaje máquina. Los comandos se introducen desde el teclado, desde un programa residente en la memoria o desde un dispositivo de almacenamiento, y son interceptados por un programa que traduce a las instrucciones en lenguaje máquina. Los programas traductores son de dos tipos: intérpretes y compiladores. Con un intérprete, los programas que repiten un ciclo para volver a ejecutar parte de sus instrucciones, reinterpretan la misma instrucción cada vez que aparece.
Por consiguiente, los programas interpretados se ejecutan con mucha mayor lentitud que los programas en lenguaje máquina. Por el contrario, los compiladores traducen un programa íntegro a lenguaje máquina antes de su ejecución, por lo cual se ejecutan con tanta rapidez como si hubiesen sido escritos directamente en lenguaje máquina. Los diseños de los  lenguajes y los métodos de implementación han evolucionado de manera continua desde que aparecieron los primeros lenguajes de alto nivel en la década de los 50. Los lenguajes más antiguos han experimentado revisiones periódicas para reflejar la influencia de otras áreas de la computación; los más nuevos reflejan una conjunto de experiencias adquiridas en el diseño y de usos de estos, así como otros lenguajes más antiguos. Algunas de las principales influencias en la evolución de lenguajes de programación se listan a continuación:
1) Capacidades de las computadoras. Las computadoras han evolucionado de las máquinas pequeñas lentas y costosas a las microcomputadoras y supercomputadoras de hoy.
2) Aplicaciones. El uso de la computadora se ha difundido rápidamente, de la concentración de aplicaciones militares, científicas e industriales de los años 50 a las aplicaciones en computadoras personales y en casi todas las áreas de la actividad humana.
3) Métodos de programación. Los diseños de lenguajes han evolucionado para reflejar la cambiante comprensión de los buenos métodos y para reflejar los cambios en el entorno en el cual se efectúa la programación.
4) Métodos de implementación. El desarrollo de mejores métodos a influir en la selección de las características que se habrán de incluir en los nuevos diseños.
5) Estudios teóricos. La investigación de las bases conceptuales del diseño e implementación de lenguajes han profundizado el entendimiento de las fortalezas y debilidades de los lenguajes, por tanto, ha influido en la inclusión de estas características en los no diseños de lenguajes de programación.
6) Estandarización. La necesidad de lenguajes estándares que se puedan implementar con facilidad en una variedad de computadoras y que permita que los programas se podrán transportar de una computadora a otra es una de las principales características de la evolución de los diseños de los lenguajes de programación.

Un lenguaje de programación es un lenguaje especial, no natural, diseñado con un vocabulario, morfología y sintaxis muy simple y rígida. Además de ser orientado a la programación en instrucciones elementales cuya ejecución se ha determinado por un sistema físico que da lugar a la realización de una tarea.

  • Sintaxis

La sintaxis es el conjunto de reglas que gobiernan la construcción o formación de sentencias válidas en un lenguaje. La sintaxis de un lenguaje es el aspecto que ofrece el programa, es decir, proporciona las reglas que indican cómo se escriben los enunciados, declaraciones y otras construcciones de lenguaje.

  • Semántica

La semántica es el conjunto de reglas que proporcionan el significado de una sentencia o instrucción de lenguaje. La semántica es el significado que se da a las diversas construcciones sintácticas. Existen diversos lenguajes y paradigmas de programación que se han diseñado para facilitar la tarea de la programación en diferentes ámbitos.

2.13.1 Tipos de programación

Existen varias clases de programación, dependiendo de los métodos utilizados y las técnicas empleadas. Entre las más destacadas en la actualidad se encuentran:

  • Programación estructurada (PE)

La programación estructurada esta compuesta por un conjunto de técnicas que han ido evolucionando aumentando considerablemente la productividad del programa reduciendo el tiempo de depuración y mantenimiento del mismo.
Esta programación estructurada utiliza un número limitado de estructuras de control, reduciendo así considerablemente los errores. Esta técnica incorpora:

  • Diseño descendente (top-down): el problema se descompone en etapas o estructuras jerárquicas.
  • Recursos abstractos (simplicidad): consiste en descompones las acciones complejas en otras más simples capaces de ser resueltas con mayor facilidad.
  • Estructuras básicas: existen tres tipos de estructuras básicas:
  • Estructuras secuénciales: cada acción sigue a otra acción secuencialmente. La salida de una acción es la entrada de otra.
  • Estructuras selectivas: en estas estructuras se evalúan las condiciones y en función del resultado de las mismas se realizan unas acciones u otras. Se utilizan expresiones lógicas.
  • Estructuras repetitivas: son secuencias de instrucciones que se repiten un número determinado de veces.

Ventajas de la programación estructurada son:

  • Los programas son mas fáciles de entender.
  • Se reduce la complejidad de las pruebas.
  • Aumenta la productividad del programador.
  • Los programas queden mejor documentados internamente.

Un programa esta estructurado si posee un único punto de entrada y sólo uno de salida, existen de "1 a n" caminos desde el principio hasta el fin del programa y por último, que todas las instrucciones son ejecutables sin que aparezcan bucles infinitos.

  • Programación modular

La programación modular consta de varias secciones dividas de forma que interactúan a través de llamadas a procedimientos, que integran el programa en su totalidad. En la programación modular, el programa principal coordina las llamadas a los módulos secundarios y pasa los datos necesarios en forma de parámetros. A su vez cada modulo puede contener sus propios datos y llamar a otros módulos o funciones.

  • Programación orientada a objetos (POO)

Se trata de una técnica que aumenta considerablemente la velocidad de desarrollo de los programas gracias a la reutilización de los objetos. El elemento principal de la programación orientada a objetos es el objeto. El objeto es un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización. Un objeto contiene varios datos bien estructurados y pueden ser visibles o no dependiendo del programador y las acciones del programa en ese momento. El análisis orientado a objetos se basa en conceptos sencillos, que se aplican continuamente: objetos de atributos, el todo y las partes, clases y miembros. La idea principal de la programación orientada a objetos es construir programas que utilizan objetos de software. Un objeto puede considerarse como una entidad independientemente de cómputo con sus propios datos y programación.

En la programación orientada a objetos, los objetos tienen una correspondencia estrecha con los objetos reales, esta correspondencia, facilita la comprensión y el manejo del programa de la computadora. El paradigma orientado a objetos ha sufrido una evolución similar al paradigma de programación estructurada, es decir, primero se empezaron a utilizar los lenguajes de programación estructurados que permiten la descomposición modular de los programas; esto condujo a la adopción de nuevas técnicas de diseño estructuradas y de ahí al análisis estructurado. Las principales características del paradigma de la orientación a objetos son:
1) Encapsulación.
2) Herencia.
3) Polimorfismo.

El software orientado a objetos permite que los objetos independientes se puedan ejecutar en forma simultánea, en procesadores independientes. El análisis orientado a objetos ofrece un enfoque nuevo para el análisis de requisitos es decir, en lugar de considerar al soporte desde una perspectiva clásica de entrada/proceso/salida, como los métodos estructurados clásicos se basa principalmente en modelar al sistema mediante los objetos que forman parte de él y las relaciones estáticas o dinámicas entre estos objetos. El concepto renovador de la programación orientada a objetos es la conjunción de procedimientos de programas a elementos de datos. A esta nueva unión se le llama encapsulamiento y el resultado es un objeto de software.

La programación orientada a objetos ha mejorado de manera esencial la creación del software, pero por sí misma no implica el mejoramiento masivo para la industria de la computación. Las técnicas orientadas a objetos deben combinarse con todos los aspectos disponibles de la automatización del software.

Ventajas de la programación orientada a objetos:

  • Simplicidad: como los objetos de software son modelos de objetos reales en la aplicación, la complejidad del programa se reduce y su estructura se vuelve clara y simple.
  • Modularidad: cada objeto forma una entidad separada cuyo funcionamiento interno está vez acoplado de otras partes del sistema.
  • Facilidad para hacer modificaciones: es sencillo hacer cambios menores en la representación de los datos o los procedimientos utilizados en un programa orientado a objetos. Las modificaciones hechas en el interior de un objeto no afecta en ninguna otra parte del programa, siempre y cuando se preserve su comportamiento externo.
  • Flexibilidad: un programa orientado a objetos puede ser manejable al adaptarse diferentes situaciones, porque es posible cambiar los patrones de interacción entre los objetos sin alterarlos.
  • Facilidad para darle mantenimiento: los objetos pueden más mantenerse por separado, lo que facilita la localización y el arreglo de problemas así como la adición de otros elementos.
  • Reusabilidad: los objetos pueden emplearse en diferentes programas. Es posible construir programas a partir de componentes prefabricados en una fracción del tiempo requerido para así elaborar nuevos programas desde el principio.

Según Rumbaugh (1991), la técnica de modelado de objetos es un procedimiento que se base en aplicar dicho enfoque a todo el proceso de desarrollo de un sistema, desde el análisis hasta la implementación. Los métodos de análisis y diseño que propone son independientes del lenguaje de programación que se emplee para la implementación. Incluso no tiene que basarse necesariamente en un lenguaje orientado a objetos. La técnica de modelado de objetos de software se basa en una notación gráfica para representar conceptos, dicha metodología consiste en construir un modelo del dominio e ir añadiendo detalles durante la fase de diseño. La técnica de modelado de objetos consta de las siguientes fases:
1) Conceptualización. Es la primera aproximación al problema que se debe resolver.
2) Análisis. El analista construyó un modelo del dominio del problema, mostrando sus propiedades más importantes. Los elementos del modelo deben ser conceptos del dominio de aplicación y no conceptos informáticos como estructuras de datos.
3) Diseño del sistema. El diseñador del sistema toma decisiones de alto nivel sobre la arquitectura del mismo, durante esta fase el sistema se organiza en subsistemas basándose tanto en la estructura del análisis como la arquitectura propuesta.
4) Diseño de objetos. El diseñador de objetos construye un modelo de diseño que se basa en el modelo del análisis, pero incorporando detalles de implementación. El diseño de objetos se centra en las estructuras de datos de algoritmos que son necesarios para implementar cada clase.
5) Implementación. Las clases de objetos y relaciones desarrolladas durante el análisis de objetos se traducen finalmente en una implementación concreta. Durante esta fase se debe tener en cuenta los principios de la ingeniería del software de forma que la correspondencia con el diseño sea directa, el sistema implementado debe ser flexible y extensible.

  • Programación concurrente

Este tipo de programación se utiliza cuando tenemos que realizar varias acciones a la vez. Se suele utilizar para controlar los accesos de usuarios y programas a un recurso de forma simultanea. Se trata de una programación más lenta y laboriosa, obteniendo unos resultados lentos en las acciones.

  • Programación funcional

Se caracteriza principalmente por permitir declarar y llamar a funciones dentro de otras funciones.

  • Programación lógica

Se suele utilizar en la inteligencia artificial y pequeños programas infantiles. Se trata de una programación basada en el cálculo de predicados (una teoría matemática que permite lograr que un ordenador basándose en hecho y reglas lógicas, pueda dar soluciones inteligentes). La programación funcional o estructural, es un paradigma orientado a la expresión de los problemas  en términos lógicos para su posterior solución a través de métodos de inferencia y otras técnicas lógicas. La programación orientada a objetos, es un paradigma dirigido al mejoramiento de la calidad del software, por medio de la observación de aspectos tales como la corrección, robustez, extensibilidad, compatibilidad y sobre todo la reusabilidad del software.

Existe en internet una organización que mes a mes determina cuales son los lenguajes más populares y usados por los desarrolladores. Midiendo así su posición, ratings y status. TIOBE se especializa en la evaluación y el seguimiento de la calidad del software. Mide la calidad de los lenguajes de programación y su usabilidad mediante la aplicación de las normas, que generalmente son aceptadas para su codificación. TIOBE, fue fundada el primero de octubre del 2000 con la ayuda de una gran inversión de SYNSPACE empresa suiza y algunos inversores privados. En la tabla 2.12, podemos observar el ranking de los lenguajes de programación más populares y usados hasta el mes de Junio del 2013, los cuales nos representan las tendencias en los desarrollos de software a la medida.