La programacin imperativa, en contraposicin a la programacin declarativa,
es un paradigma de programacin que describe la programacin en trminos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cmo realizar una tarea. La implementacin de hardware de la mayora de computadores es imperativa; prcticamente todo el hardware de los computadores est diseado para ejecutar cdigo de mquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Mquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa est definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de mquina nativo del computador (por ejemplo el lenguaje ensamblador). Los lenguajes imperativos de alto nivel usan variables y sentencias ms complejas, pero an siguen el mismo paradigma. Las recetas y las listas de revisin de procesos, a pesar de no ser programas de computadora, son tambin conceptos familiares similares en estilo a la programacin imperativa; donde cada paso es una instruccin. Son aquellos cuyos valores son atmicos y estn formados por elementos en un caso especial. Dentro de esta se encuentra - La programacin orientado a objetos: Est basada en el imperativo, pero encapsula elementos denominados objetos que incluyen tanto variables como funciones. Est representado por C++ o el Java, pero el ms representativo sera el Smalltalk que est completamente orientado a objetos - Programacin dinmica: Est definida como el proceso de romper problemas en partes pequeas para analizarlos y resolverlos de forma ms ptima, busca resolver problemas en O(n) sin usar por tanto mtodos recursivos. Este paradigma est ms basado en el modo de realizar los algoritmos, por lo que se puede usar con cualquier lenguaje imperativo. Programacin declarativa
La Programacin Declarativa, en contraposicin a la programacin imperativa es
un paradigma de programacin que est basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solucin. La solucin es obtenida mediante mecanismos internos de control, sin especificar exactamente cmo encontrarla (tan slo se le indica a la computadora qu es lo que se desea obtener o qu es lo que se est buscando). No existen asignaciones destructivas, y las variables son utilizadas con transparencia referencial Dentro de esta se encuentra: - Programacin funcional: Basada en la definicin los predicados y es de corte ms matemtico, est representado por Scheme (una variante de Lisp) o Haskell. - Programacin lgica: Basado en la definicin de relaciones lgicas, est representado por Prolog. - Programacin con restricciones: Similar a la lgica usando ecuaciones. Casi todos los lenguajes son variantes del Prolog. Programacin multiparadigma Un lenguaje de programacin multiparadigma es el que soporta ms de un paradigma de programacin. Segn lo describe Bjarne Stroustrup, permiten crear programas usando ms de un estilo de programacin. El objetivo en el diseo de estos lenguajes es permitir a los programadores utilizar el mejor paradigma para cada trabajo, admitiendo que ninguno resuelve todos los problemas de la forma ms fcil y eficiente posible. Por ejemplo, lenguajes de programacin como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo con la orientacin a objetos. Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como en el caso de Oz, que tiene subconjuntos (particularidad de los lenguajes lgicos), y otras caractersticas propias de lenguajes de programacin funcional y de orientacin a objetos. Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lgico), que cuentan con estructuras repetitivas, propias del paradigma imperativo. Lenguaje especifico de dominio En desarrollo de software e ingeniera de dominio, un lenguaje especfico del dominio (en ingls domain-specific language, DSL) es un lenguaje de programacin o especificacin dedicado a resolver un problema en particular, representar un problema especfico y proveer una tcnica para solucionar una situacin particular. El concepto no es nuevo pero se ha vuelto ms popular debido al aumento del uso de modelaje especfico del dominio.1 Ejemplos de lenguajes especficos del lenguaje incluyen, Logo para nios, Verilog y VHSIC, R y S para estadsticas, Mata para programacin matricial, Mathematica y Mxima para matemticas, frmulas de hojas de clculo y macros, SQL para consultas a bases de datos relacionales, Yacc para crear parseadores, expresiones regulares para crear anlisis lxico, Generic Eclipse Modeling System para crear lenguajes con el objetivo de diagramar, Csound un lenguaje para sntesis digital, y los lenguajes de entrada de GraphViz y GrGen, paquetes de software usados para graficar y reescribir grficas. Lo opuesto es: - un lenguaje de programacin de propsito general, como por ejemplo C o Java. - o un lenguaje de modelaje de propsito general como UML. Crear un lenguaje especfico del dominio (con software que lo soporte) vale la pena cuando permite que un tipo particular de problemas o soluciones puedan ser expresadas ms claramente que con otros lenguajes existentes, y el tipo de problema en cuestin reaparece lo suficiente. La programacin orientada a lenguajes considera la creacin de lenguajes especficos para expresar problemas una parte estndar para el proceso de solucionar el problema.