Inicio Atrás Adelante

Paradigmas de programación

Se entiende por paradigma de programación un modelo que sirve como una guía al programador para diseñar aplicaciones. Se pueden referir tanto a métodos de programación como a maneras de estructurar la información y los diferentes elementos que componen una aplicación.

Su potencia reside en que se han utilizado muchas veces en aplicaciones distintas, lo cual ha permitido descartar a los que no son adecuados y mejorar los que ofrecían buenas soluciones. Para un programador, seguir estos modelos representa una garantía de la calidad del producto final y una mayor eficiencia, ya que trabajará con un método sobradamente comprobado.

Modelo Von Neumann

El modelo Von Neumann, propuesto por el matemático del mismo nombre, define las bases de la computación y de los ordenadores actuales. Propone que los programas y datos se representen en código binario, que haya un centro de control que ejecute el programa secuencialmente o con saltos según indiquen las instrucciones y que acceda y trabaje con los datos almacenados en dispositivo de memoria.

Muchos lenguajes siguen este esquema con más o menos nivel de abstracción, notablemente los lenguajes más conocidos. Algunos de los que se apartan del modelo Von Neumann son los lenguajes funcionales (Lisp) y lógicos (Prolog).

Arriba

Programación estructurada o modular

Esta técnica propone una estructura lógica para escribir un programa. Los datos se agrupan en estructuras de manera que las relaciones entre ellos queden reforzadas por la propia forma en que se agrupan. Los procedimientos grandes se rompen en rutinas o funciones más pequeñas y modulares.

Se desaconsejan las instrucciones de saltos incondicionales, los famosos GOTO, porque oscurecen el flujo de control del programa, al no quedar constancia de cómo se ha llegado hasta aquel punto. En cambio, cuando desde un programa se llama a una función, el sistema de control registra el punto del programa desde donde se hace el llamamiento para poder volver al mismo cuando la función acaba. Finalmente, las rutinas que tratan con datos relacionados pueden agruparse en módulos. Así, el objetivo final es descomponer un programa en módulos, lo cual facilita su verificación y depuración, ya que cada uno puede probarse por separado.

Esta organización es imprescindible para poder desarrollar aplicaciones de cierta complejidad y tamaño. Los lenguajes más antiguos (por ejemplo FORTRAN, COBOL o BASIC) requieren una disciplina por parte del programador para utilizar un esquema modular. En cambio, todos los lenguajes posteriores imponen, por su estructura sintáctica, la organización del código en funciones y, por lo tanto, modular.

Arriba

Programación orientada a objetos

La evolución del modelo de programación modular es la programación orientada a objetos. Sin duda, es una de las técnicas más complejas. De hecho, más que una técnica representa una manera nueva de encarar la programación.

Antes de la orientación a objetos, un programa era, como ya se ha explicado, una secuencia lógica de instrucciones que seguía el ordenador. Por lo tanto, el énfasis se ponía en las instrucciones, en la manera en que tenían que tratarse los datos. En cambio, la programación orientada a objetos se concentra en los datos, estructurándolos en objetos claramente definidos y en cómo tienen que manipularse. Los programas se construyen en términos de los objetos que define el problema, y utilizan funciones o métodos que operan con estos objetos.

En resumidas cuentas, un objeto representa un concepto del problema con un conjunto de datos y de métodos. Los datos del objeto sólo se pueden manipular con los métodos definidos. De esta manera, un objeto pasa a ser una estructura compacta con unos puntos de acceso muy definidos y permite, por lo tanto, ser utilizado en diferentes aplicaciones con gran facilidad. Esta capacidad de reutilizar un código representa un gran ahorro de tiempo de programación.

Otro beneficio de este esquema es que se puede definir un objeto en términos de otros, de manera que el nuevo objeto puede aprovechar los datos y métodos de los ya existentes, con lo cual se consigue, de nuevo, reutilizar código. Este mecanismo se llama herencia.

La gran mayoría de los lenguajes modernos siguen el modelo de orientación a objetos. Tal es el caso de los ya mencionados C++ y Java, y también otros lenguajes como Javascript o Perl.

Arriba

Modelo cliente-servidor

La idea principal del modelo cliente-servidor es que existe un repositorio central, como por ejemplo una base de datos, cuya información se distribuye bajo pedido al conjunto de nodos que acceden al mismo. La clave del funcionamiento de este modelo es que el repositorio de información está centralizado de manera que los cambios que se hacen se propagan automáticamente a los clientes que piden la información en cuestión.

El ordenador donde reside la información y el software que la distribuye recibe el nombre de servidor, mientras que la máquina que se comunica con el servidor, obtiene la información y la visualiza para el usuario final recibe el nombre de cliente.

La construcción de aplicaciones basadas en el modelo cliente-servidor es relativamente sencilla. A pesar de esto, hay que tener en cuenta algunos problemas que aparecen cuando un solo servidor tiene que atender las peticiones de muchos clientes de manera simultánea. Se refieren tanto a problemas de acceso concurrente a los datos como a problemas de velocidad.

Cuando un servidor tiene que atender peticiones de consulta de información de diferentes clientes al mismo tiempo, tiene que asegurar que se atiende a todos por igual y que ninguno debe esperar mucho más tiempo que los demás.

Los clientes, por otro lado, también pueden hacer peticiones para modificar los datos del servidor o para añadir otros nuevos. En este caso, el servidor tiene que asegurar que los datos de un cliente no se sobreescriban a los de otro, o que mientras se hace una modificación no se pierda ningún dato, es decir, el servidor tiene que asegurarse de la coherencia de sus propios datos. Por esto, los clientes modifican los datos en operaciones denominadas transacciones, en las que se asegura que todas las modificaciones se hacen completamente o que si hay una cancelación, no se realiza ninguna y los datos quedan intactos.

El problema de la velocidad aparece cuando centenares de clientes quieren acceder al mismo servidor y éste, literalmente, no da abasto. Para solucionar este problema hay diversas opciones:

  • La más inmediata es utilizar máquinas de más potencia, pero a la larga esto siempre acaba resultando insuficiente.
  • Una mejor solución es optimizar el software del servidor para reducir al máximo los posibles retrasos, o para pasar al lado del cliente procesamientos de los datos que no sean estrictamente para su acceso o modificación. éste es un buen método porque cada vez más los ordenadores clientes suelen disponer de más capacidad de cálculo.

Las aplicaciones basadas en el modelo cliente-servidor pueden llegar a tener gran complejidad, por lo cual se estructuran en varias capas, de manera que cada una resuelve una pequeña parte del problema y el conjunto ofrece la solución global. Actualmente, este modelo se emplea en un gran número de aplicaciones, desde sistemas bancarios, de crédito y financieros hasta la distribución de cualquier tipo de datos. La red Internet sería el ejemplo más claro.

Arriba