jueves, 26 de mayo de 2011

Paradigmas de programación


Para Thomas Kuhn, el término paradigma se refiere a la forma en que un científico percibe al mundo y a la estructura de teorías y suposiciones que modifican esta percepción. Otro punto importante para nuestro interés es el señalamiento que hace Kuhn acerca de cómo el éxito de un paradigma es consecuencia de su efectividad para resolver algún problema. En breve, un paradigma es el resultado de un proceso social en el cual un grupo de personas desarrolla nuevas ideas y crea principios y prácticas alrededor de estas ideas, y no solamente un conjunto de prácticas y conocimientos objetivamente validados.

Más específicamente para la ciencia de la computación, probablemente fue Robert Floyd quien habló por primera vez del término Paradigmas de Programación y quien los definió como un proceso de diseño que va más allá de una gramática, reglas semánticas y algoritmos, sino que es un conjunto de métodos sistemáticos aplicables en todos los niveles del diseño de programas.
 
Entre los paradigmas de programacion mas conocidos se ecuentran:
  • Programación imperativa
  • Programación lógica
  • Programación funcional
  • Programación declarativa
  • Programación estructurada
  • Programación dirigida por eventos
  • Programación modular
  • Programación orientada a aspectos
  • Programación orientada a objetos
  • Programación con restricciones
  • Programación orientada a componentes

Programación imperativa:

Es un paradigma de programación en el cual la base de desarrollo se realiza en términos que estan relacionados con el estado del programa y la forma en como cada una de las sentencias que lo constituyen cambian dicho estado. Los programas desarrollados con este paradigma imperativo se componen por un conjunto de instrucciones que le indican al computador cómo realizar una determinada tarea.

Si estudiamos la implementación del hardware en los computadores nos damos cuenta que estan desarrolladas bajo este paradigma de tipo imperativo; es mas, todo el hardware de los computadores está desarrollado para ejecutar código de máquina (que es nativo al computador) escrito en una forma imperativa. Desde esta perspectiva de desarrollo a bajo nivel, el estilo del programa está definido por los contenidos de la memoria y las sentencias que son instrucciones en el lenguaje de máquina nativo del computador.

Entre los lenguajes se encuentran: ASP, BASIC, C, Fortran, Pascal, Perl, PHP, Lua, Java...


Programación lógica:

Es un paradigma de programacion que al ser combinado con el paradigma funcional, forma un nuevo orden el cual se conoce como programación declarativa. En la mayoria de los lenguajes tradicionales, la programación basicamente consiste en indicar cómo resolver un problema mediante sentencias, sin embargo en la programación lógica, se trabaja de una forma descriptiva en la cual se establecen relaciones entre entidades, indicando de manera muy clara no cómo, sino qué accion debe hacer. Existe una ecuacion (ideada por Robert Kowalski) en la cual se expresa de una forma muy particular la idea esencial de la programación lógica: algoritmos = lógica + control.

En resumen se puede decir que un algoritmo desarrollado de manera lógica se construyen especificando el conocimiento en un lenguaje formal (lógica de primer orden), y el problema se resuelve mediante un mecanismo de inferencia (control) que actúa sobre aquél.

Entre los lenguajes se encuentran: Prolog, F-Prolog, Curry...


Programación funcional:

Es un paradigma de programacion que consta principalmente de un conjunto de operaciones primitivas cuyo significado está predeterminado en el sistema, además posee un conjunto de definiciones con funciones establecidas por el programador y que eventualmente emplearán las operaciones primitivas y un dato de entrada (entendido como la aplicación de una de las funciones definidas sobre otros datos). La ejecución del programa funcional consiste en el cálculo del valor asociado al dato de entrada de acuerdo con las definiciones dadas para las funciones en el programa. El proceso de cálculo de dicho valor se conoce como evaluación del dato de entrada.

Entre los lenguajes se encuentran: Haskell, Miranda, Perl, Python, Ruby... 


Programación declarativa:

Es un paradigma de programacion en la cual podemos señalar un rasgo crucial, y es el hecho de que está basado en el desarrollo de programas especificando o declarando un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que permiten en gran medida hacer una detallada descripcion del problema y lo más importante es que permiten generar una solucion practica y viable del mismo. Basicamente la solucion es evaluada y calculada mediante mecanismos conocidos como "mecanismos internos de control"; lo interesante es que se logra sin especificar exactamente cómo encontrarla, es decir, tan sólo se le indica a la computadora que es lo que se desea obtener o que es lo que se está buscando. Una caracteristica importante es que no existen asignaciones destructivas, y las variables facilmente pueden ser utilizadas con transparencia referencial

Entre los lenguajes se encuentran: Haskell, ML, Lisp, Prolog, F-Prolog, Curry...


Programación estructurada:

Es un paradigma de programación la cual consiste en construir programas de fácil comprensión. La programación estructurada se basa en una metodología de desarrollo de programas llamada refinamiento sucesivos en la cual se plantea una operación como un todo y progresivamente se va dividendo en segmentos más sencillos o de menor complejidad. Una vez terminado el proceso de refinamiento, se procede a unificar todos los segmentos del programa y si se ha utilizado adecuadamente la programación estructurada, esta integración debe ser sencilla. Una de las ventajas de trabajar de manera estructurada es que de presentarse algún problema, será rápidamente detectable para su corrección. 

Entre los lenguajes se encuentran: Borland, Delphi, C, C++, Phyton, Pascal... 


Programación dirigida por eventos:

Es un paradigma de programación en el cual la estructura de como será la ejecución de los programas van a estar determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen. En la programación dirigida por eventos existe la posibilidad de que el propio usuario sea el que dirija el flujo del programa, además una de las ventajas que proporciona este método de programación es que puede haber intervención de un agente externo al programa en cualquier momento. El creador de un programa dirigido por eventos debe definir los eventos que manejarán su programa y las acciones que se realizarán al producirse cada uno de ellos, lo que se conoce como el administrador de evento. Es importante resaltar que los eventos soportados estarán determinados por el lenguaje de programación utilizado, por el sistema operativo e incluso por eventos creados por el mismo programador. En la programación dirigida por eventos, al comenzar la ejecución del programa se llevarán a cabo las inicializaciones y demás código inicial y a continuación el programa quedará bloqueado hasta que se produzca algún evento. Cuando alguno de los eventos esperados por el programa tenga lugar, el programa pasará a ejecutar el código del correspondiente administrador de evento.

Entre los lenguajes se encuentran: Lexico, Visual Basic, Java, Visual C++, Visual.Net, Visual C#, Visual J#, ASP.Net... 


Programación modular:

Es un paradigma de programación que consiste fundamentalmente en dividir un programa en estructuras denominadas "módulos o subprogramas", y esto con el único propósito de hacerlo más legible y manejable ante el programador. Es importante resaltar que la programacion modular es sin duda uno de los métodos más conocidos y esto se debe a la increible facilidad en la cual se pueden resolver grandes problemas al realizar divisiones en problemas más pequeños, llamados subproblemas y de esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de ellas llegamos a la solución. Esta técnica de programacion en modulos se le suele llamar diseño descendente, metodología del divide y vencerás o programación top-down.

Entre los lenguajes se encuentran: PASCAL, C, C++, Java, Visual Basic, PHP...


Programación orientada a aspectos:

Es un paradigma de programación muy actual cuyo objetivo principal es la de permitir una adecuada modularización de las aplicaciones y posibilitar una mejor separación de incumbencias. Gracias a la POA se pueden encapsular los diferentes conceptos que componen una aplicación en entidades bien definidas, eliminando las dependencias entre cada uno de los módulos. De esta forma se consigue razonar mejor sobre los conceptos, se elimina la dispersión del código y las implementaciones resultan más comprensibles, adaptables y reusables. Varias tecnologías con nombres diferentes se encaminan a la consecución de los mismos objetivos y así, el término POA es usado para referirse a varias tecnologías relacionadas como los métodos adaptativos, los filtros de composición, la programación orientada a sujetos o la separación multidimensional de competencias.

Entre los lenguajes se encuentran: AspectJ, Aspect, AOP con SpringFramework 2.5, Aspyct AOP...


Programación orientada a objetos:

Es un paradigma de programación que sin duda alguna es uno de los más conocidos y utilizados ya que es el que más se acerca a como expresaríamos las cosas en la vida real que otros tipos de programación. La principal característica de este paradigma es que trabaja con algo conocido como "los objetos" que son entidades que combinan de estado (atributo), comportamiento (método) e identidad: el estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos); el comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él y la identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante). Entre los aspectos más importantes que debemos tomar en cuenta al momento de desarrollar programas orientados a objetos es que manejan: abstracción, encapsulamiento, modularidad, principio de ocultación, polimorfismo, herencia y recolección de basura.

Entre los lenguajes se encuentran: ABAP, ABL, ActionScript, ActionScript 3, Ada, C++, C#, Clarion, Java, JavaScript, Lexico, Perl, PHP, Python, Ruby, Smalltalk...


Programación con restricciones:

Es un paradigma de programación donde se busca que las relaciones entre las variables sean expresadas en términos de restricciones (ecuaciones). Este paradigma está basado en la especificación de un conjunto de restricciones, las cuales deben ser satisfechas por cualquier solución del problema planteado, en lugar de especificar los pasos para obtener dicha solución. La programación con restricciones se relaciona mucho con la programación lógica y con la investigación operativa. Algunos dominios de aplicación de este paradigma son: booleanos (donde solo existen restricciones del tipo verdadero/falso), variables enteras y racionales, lineales (donde sólo se describen y analizan funciones lineales), finitos (donde las restricciones son definidas en conjuntos finitos) y mixtos (los cuales involucran dos o más de los anteriores).

Entre los lenguajes se encuentran: B-Prolog, CHIP V5, Ciao Prolog, ECLiPSe, Mozart, SICStus, GNU Prolog, SWI-Prolog...


Programación orientada a componentes:

Es un paradigma de programación que se centra en el diseño e implementación de componentes, y en particular en los conceptos de encapsulación, polimorfismo, composición tardía y seguridad. Surge como una variante natural ante las limitaciones de la programación orientada a objetos en los sistemas de aplicación abiertos, ya que existían problemas como por ejemplo la falta de una unidad concreta de composición independiente en las aplicaciones además de una definición de interfaces a bajo nivel, lo cual hacia difícil la reutilización comercial de objetos.

Uno de los principales objetivos de la POC es construir una especie de mercado global de componentes software, en el cual los usuarios son los desarrolladores de las aplicaciones que necesitan reutilizar componentes ya hechos y testeados para construir sus aplicaciones de forma más rápida y robusta.

Las entidades básicas de la POC son los componentes, estos pueden interpretarse como cajas negras que encapsulan cierta funcionalidad y que son diseñadas sin saber quien los utilizará, ni como, ni cuando. Los servicios de los componentes son conocidos mediante sus interfaces y requisitos.

Entre los lenguajes se encuentran: Java, C#...


Para mayor informacion cunsulta los siguientes enlaces:

No hay comentarios.: