Programación Estructurada.
La programación estructurada es un paradigma de programación
orientado a mejorar la claridad, calidad y tiempo de desarrollo de un programa
de computadora, utilizando únicamente subrutinas y tres estructuras: secuencia,
selección (if y switch) e iteración (bucles for y while), considerando
innecesario y contraproducente el uso de la instrucción de transferencia incondicional
(GOTO), que podría conducir a "código espagueti", que es mucho más
difícil de seguir y de mantener, y era la causa de muchos errores de
programación.
Orígenes:
A finales de los años 1970 surgió una nueva forma de
programar que no solamente daba lugar a programas fiables y eficientes, sino
que además estaban escritos de manera que facilitaba su mejor comprensión, no
sólo proveyendo ventajas durante la fase de desarrollo, sino también
posibilitando una más sencilla modificación posterior.
El teorema del programa estructurado, propuesto por
Böhm-Jacopini, demuestra que todo programa puede escribirse utilizando
únicamente las tres instrucciones de control siguientes:
Secuencia
Instrucción condicional.
Iteración (bucle de instrucciones) con condición al principio.
Solamente con estas tres estructuras se pueden escribir
todos los programas y aplicaciones posibles. Si bien los lenguajes de
programación tienen un mayor repertorio de estructuras de control, éstas pueden
ser construidas mediante las tres básicas citadas.
Programación Orientada a Objetos.
La programación orientada a objetos o POO (OOP según sus
siglas en inglés) es un paradigma de programación que usa los objetos en sus
interacciones, para diseñar aplicaciones y programas informáticos. Está basado
en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo,
acoplamiento y encapsulamiento. Su uso se popularizó a principios de la década
de los años 1990. En la actualidad, existe una gran variedad de lenguajes de
programación que soportan la orientación a objetos.
Los conceptos de la programación orientada a objetos tienen
origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por
Ole-Johan Dahl y Kristen Nygaard, del Centro de Cómputo Noruego en Oslo.
En
este centro se trabajaba en simulaciones de naves, que fueron confundidas por
la explosión combinatoria de cómo las diversas cualidades de diferentes naves
podían afectar unas a las otras. La idea surgió al agrupar los diversos tipos
de naves en diversas clases de objetos, siendo responsable cada clase de
objetos de definir sus propios datos y comportamientos. Fueron refinados más
tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión
fue escrita sobreBasic) pero diseñado para ser un sistema completamente
dinámico en el cual los objetos se podrían crear y modificar "sobre la
marcha" (en tiempo de ejecución) en lugar de tener un sistema basado en
programas estáticos.
La programación orientada a objetos se fue convirtiendo en el
estilo de programación dominante a mediados de los años ochenta, en gran parte
debido a la influencia de C++, una extensión del lenguaje de programación C. Su
dominación fue consolidada gracias al auge de las Interfaces gráficas de
usuario, para las cuales la programación orientada a objetos está
particularmente bien adaptada. En este caso, se habla también de programación
dirigida por eventos.
Las características de orientación a objetos fueron agregadas
a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp
mas Pascal, entre otros. La adición de estas características a los lenguajes
que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de
compatibilidad y en la capacidad de mantenimiento del código. Los lenguajes
orientados a objetos "puros", por su parte, carecían de las
características de las cuales muchos programadores habían venido a depender.
Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos
lenguajes basados en métodos orientados a objetos, pero permitiendo algunas
características imperativas de maneras "seguras". El Eiffel de
Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos,
pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a
la aparición de Internet y a la implementación de la máquina virtual de Java en
la mayoría de navegadores. PHP en su versión 5 se ha modificado; soporta una
orientación completa a objetos, cumpliendo todas las características propias de
la orientación a objetos.
Programación Funcional.
En la práctica, la diferencia entre una función matemática y
la noción de una "función" utilizada en la programación imperativa es
que las funciones imperativas pueden tener efectos secundarios, al cambiar el
valor de cálculos realizados previamente.
Por esta razón carecen de
transparencia referencial, es decir, la misma expresión sintáctica puede
resultar en valores diferentes en diferentes momentos dependiendo del estado
del programa siendo ejecutado. Con código funcional, en contraste, el valor
generado por una función depende exclusivamente de los argumentos alimentados a
la función. Al eliminar los efectos secundarios se puede entender y predecir el
comportamiento de un programa mucho más fácilmente, y esta es una de las
principales motivaciones para utilizar la programación funcional.
Los lenguajes de programación funcional, especialmente los
que son puramente funcionales, han sido enfatizados en el ambiente académico
principalmente y no tanto en el desarrollo de software comercial. Sin embargo,
lenguajes de programación importantes tales como Scheme, Erlang, Rust,
Objective Caml y Haskell, han sido utilizados en aplicaciones comerciales e
industriales por muchas organizaciones. La programación funcional también es
utilizada en la industria a través de lenguajes de dominio específico como R
(estadística), Mathematica (matemáticas simbólicas), J y K (análisis
financiero), F# en Microsoft.NET y XSLT (XML). Lenguajes de uso específico
usados comúnmente como SQL y Lex/Yacc, utilizan algunos elementos de
programación funcional, especialmente al procesar valores mutables. Las hojas
de cálculo también pueden ser consideradas lenguajes de programación funcional.
La programación funcional también puede ser desarrollada en
lenguajes que no están diseñados específicamente para la programación
funcional. En el caso de Perl, por ejemplo, que es un lenguaje de programación
imperativo, existe un libro que describe como aplicar conceptos de programación
funcional. JavaScript, uno de los lenguajes más ampliamente utilizados en la
actualidad, también incorpora capacidades de programación funcional. Python
también incorpora particularidades de los lenguajes funcionales como listas de
comprensión y funciones de tratamiento de listas como matemática de conjuntos.
Java en su versión 8, esta incorporando la programación funcional, así como el
uso de las expresiones lambda.
Programación Lógica.
La mayoría de los lenguajes de programación lógica se basan
en la teoría lógica de primer orden, aunque también incorporan algunos
comportamientos de orden superior como la lógica difusa. En este sentido,
destacan los lenguajes funcionales, ya que se basan en el cálculo lambda, que
es la única teoría lógica de orden superior que es demostradamente computable
(hasta el momento).
No hay comentarios:
Publicar un comentario