Download Del estudiante - Edumin-PDP

Document related concepts
Transcript
Guía
Del estudiante
Modalidad a distancia
Modulo: PARADIGMAS DE
PROGRAMACION
DATOS DE IDENTIFICACION
TUTOR
HECTOR MAURICIO LEAL PARGA
Teléfono
000-000-0000
E-mail
[email protected]
Lugar
CERES – SABANA DE OCCIDENTE –
Corporación Universitaria Minuto de Dios
1
BIENVENIDA
La Corporación Universitaria Minuto de Dios. UNIMINUTO –Educación a Distancia le da
la bienvenida al Modulo Paradigmas de Programación. Esperamos que una vez terminado
éste adquiera los conocimientos fundamentales de gestión de contenidos de
programación para que pueda continuar con el desarrollo del pregrado de forma exitosa,
con la profundización que como profesional deberá alcanzar.
Recuerde que la metodología a distancia implica un manejo
las exigencias propias del nivel de formación y de las
profesional, por ello su rol como estudiante cobrará mayor
Aspectos fundamentales para la concepción formal de
dedicación y compromiso.
de sus tiempos acorde con
estrategias propias de un
relevancia y protagonismo.
una disciplina basada en
Le auspiciamos los mejores deseos por alcanzar los objetivos planteados y el éxito en su
formación profesional.
2
INTRODUCCION
En el desarrollo del modulo a través de guías se podrá encontrar conceptos básicos de
los Paradigmas de la Programación, así como una introducción a lenguajes de
programación como Lenguaje C, Lenguaje Scheme, Lenguaje Java y Prolog.
Las definiciones son tomadas principalmente de documentos y lecturas extraídas de de
Internet,
También debemos indicar que los libros donde se basa esta este modulo son: Lenguajes
de programación, y Fundamentos de programación. Estos libros han sido recomendados
por IDEA, por lo tanto hay conceptos es extraída de estos libros.
El impacto local, nacional e internacional que se pretende desarrollar en los estudiantes
con el modulo Paradigmas de la programación (PDP), es que identifique las característica
fundamentales de los lenguajes de programación y los paradigmas y que además
comprenda, comenten y diferencien segmentos de código escrito en uno u otro lenguaje.
3
UNIDAD DE TRABAJO No.1
Introducción a la los Paradigmas de Programación (PDP)
Preguntas Generadoras






¿Cuál es la diferencia entre un compilador y un intérprete?
¿Por qué la capacidad de los computadores influye en la evolución de los
lenguajes de programación?
¿Un programa escrito en lenguaje de alto nivel se ejecuta más rápido que
un programa escrito en lenguaje de bajo nivel?
¿En qué consiste la arquitectura de Von Neumann?
¿Qué constituye un entorno de programación?
¿Por qué es importante la portabilidad de un lenguaje de programación?
INDICADORES

Dominar los conceptos fundamentales de programación.
TEMAS A DESARROLLAR EN LA UNIDAD






Conceptos fundamentales de programación
Reseña histórica de los Lenguajes de Programación
Influencias en la evolución de los LP
Atributos de un buen Lenguaje de Programación
Modelos básicos de Paradigmas de los LP
Nuevos Paradigmas de Programación
4
MARCO TEORICO DE FORMACION

Conceptos fundamentales de programación
¿Por qué paradigmas?
A lo largo de la historia de las ciencias de la computación han ido surgiendo
herramientas, reglas, conceptos y otros elementos que permitieron la creación de
los más variados lenguajes de programación. Algunos nacieron y al poco tiempo
desaparecieron, mientras que otros hace años ya que se diseñaron y siguen
vigentes.
Muchos se fueron adaptando y renovándose para subsistir y se vuelven casi
irreconocibles de sus orígenes y en cambio otros permanecen fieles a sus
principios fundantes y casi inalterables, más allá de ciertos cambios cosméticos.
Los equipos, las metodologías y los campos de aplicación se transformaron
radicalmente. Si Von Neumman se levantara de su tumba y se sentara frente a las
computadoras de última generación se sentiría tan perdido como el inventor de la
rueda al volante de un fórmula 1. Sin embargo, es probable que así como el
conductor constataría que el vehículo sigue teniendo ruedas o preguntaría cómo
hacen ahora para hacerla girar, los desarrolladores de software de otras épocas
no dudarían de preguntar...
¿y cómo es la entrada de datos? ¿cómo los representan? ¿y el control de
secuencia?
¿sigue existiendo el efecto de lado? Y la respuesta de un ingeniero en sistemas de
esta
época sería “Y... según el paradigma”.
Si algo caracteriza al panorama actual del desarrollo de sistemas es su
complejidad y heterogeneidad. No existe una sola forma de pensar y encarar las
soluciones, no son uniformes los conceptos que fundamentan los lenguajes, no es
única la manera de programar. Los modelos de datos, estructuras de control,
mecanismos de evaluación, sentencias, enlaces, expresiones, declaraciones y
tantos otros elementos que conforman los lenguajes de programación actuales
son muy diferentes entre unos y otros, hasta opuestos, pero es posible detectar
cuáles son los conceptos que marcan diferencias mayores o menores, muestran
puntos de contacto o de inflexión, establecen criterios de clasificaciones, y así,
aportan elementos teóricos para sistematizar el análisis de la programación.
5
De esta manera, tiene sentido hablar de la existencia de diferentes “paradigmas”
de programación que aportan los fundamentos teóricos y conceptuales para
desarrollar sistemas de una manera en particular, incluso podríamos decir con una
“filosofía” especial, que los caracterizan, identifican y a la vez diferencian de los
otros paradigmas.
Lenguajes
Un lenguaje de programación es un lenguaje que permite establecer una
comunicación entre el hombre y la máquina. Los lenguajes contienen un conjunto
variado de comandos, instrucciones, reglas, formas de organizar los datos y otros
elementos, que permiten codificar programas con los que se indican las tareas que
la máquina debe realizar para procesar un conjunto de información determinado y
resolver un problema.
Para ello, en los lenguajes existe una sintaxis (las reglas que hacen a las
formas) y una semántica (los significados).
• La sintaxis de un lenguaje tiene que ver con la forma de los programas, es decir,
con cómo deben escribirse las expresiones, los comandos, las declaraciones, y
todo el código del programa para que sea entendible sin ambigüedades.
• La semántica de un lenguaje se relaciona con el significado de los programas,
con cómo deben comportarse cuando son ejecutados en una computadora.
Traductores e intérpretes
Un programa escrito mediante un lenguaje de programación, se llama fuente o
simbólico. Pero éste programa fuente no es ejecutable, pues a la máquina le es
ininteligible, requieren de un paso previo que implica la conversión del lenguaje
artificial al lenguaje absoluto (o de máquina), que sí sea ejecutable. Los
conversores de lenguaje fuente a ejecutable se pueden clasificar en traductores e
intérpretes.
Traductores
Los traductores convierten el programa fuente a una versión equivalente en
lenguaje de máquina y dejan “armada” esta versión (programa objeto) para que el
computador la ejecute cuantas veces sea necesario sin que el traductor vuelva a
intervenir.
Los traductores que producen un código ejecutable (un programa objeto) que
luego es ejecutado por el computador en forma directa cuantas veces se quiera.
Son de dos tipos: ensambladores, también llamados compaginadores, y
compiladores.
6
Un ensamblador es un programa que traduce un programa fuente escrito en un
tipo especial de lenguaje, “assembler”, al lenguaje de máquina. La estructura del
“assembler” es similar al lenguaje de máquina, código de operación y operando,
pero en lugar de la notación hexadecimal se utilizan códigos mnemotécnicos. El
programa ensamblador lee el programa fuente escrito con simbólicos, traduce los
códigos de operación a códigos de operación en lenguaje de máquina y asigna
direcciones de memoria para almacenar las instrucciones y los datos. Cada
instrucción simbólica se traduce en una instrucción en lenguaje de máquina y por
esta característica se lo llama lenguaje de bajo nivel.
Los otros tipos de traductores son los compiladores. Estos traductores generan
por cada sentencia del lenguaje fuente muchas instrucciones de lenguaje de
máquina. Se los llama lenguajes de alto nivel. Un programa escrito en un lenguaje
de bajo nivel es mucho más rápido que otro semejante, pero escrito en un
lenguaje de alto nivel y luego traducido con
un compilador, pues utiliza la menor cantidad de instrucciones de máquina
necesarias para lograr el objetivo. El absoluto producido por un compilador tiene
más instrucciones pues cada sentencia se expande en una cantidad de
instrucciones de máquina. Esto se produce en tiempo de compilación y el
programador no tiene control sobre la traducción, a lo sumo puede llegar a
conocer que código es más eficiente. Por otra parte, los lenguajes de bajo nivel
presentan mayor dificultad para depurar un programa, modificarlo y mantenerlo.
Intérpretes
Los intérpretes, a diferencia de los traductores, ejecutan las instrucciones del
programa fuente, interpretando cada vez las sentencias del programa. Va
traduciendo y ejecutando cada vez que el programa lo requiere, y no almacena
programa objeto alguno. Lo que se almacena es el interprete que reside en
memoria, el programa fuente, tablas de símbolos y datos necesarios para la
ejecución del programa.
La modalidad interpretativa tiene como ventaja sobre la traducción la posibilidad
de poner a punto los programas con más rapidez, ya que entre prueba y prueba
no hay que pasar por la etapa de una nueva compilación o traducción. Como
desventaja en cambio, la interpretación es más lenta ya que cada vez que se debe
ejecutar el programa debe traducir cada vez, cada una de las instrucciones que se
ejecutan. En realidad los casos de interpretación pura o traducción pura son
extremos.
En la práctica y con el devenir del tiempo y el incremento de la velocidad de los
procesadores, muchos lenguajes se implementan mediante una combinación de
ambas técnicas o una traducción a un código intermedio que luego es
interpretado.
7

Reseña histórica de los Lenguajes de Programación
Los primeros lenguajes de programación surgieron de la idea de Charles
Babagge, la cual se le ocurrió a este hombre a mediados del siglo XIX. Era un
profesor matemático de la universidad de Cambridge e inventor ingles, que la
principio del siglo XIX predijo muchas de las teorías en que se basan los actuales
ordenadores.
Consistía en lo que él denominaba la maquina analítica, pero que por motivos
técnicos no pudo construirse hasta mediados del siglo XX. Con él colaboro Ada
Lovedby, la cual es considerada como la primera programadora de la historia,
pues realizo programas para aquélla supuesta maquina de Babagge, en tarjetas
perforadas. Como la maquina no llego nunca a construirse, los programas de Ada,
lógicamente, tampoco llegaron a ejecutarse, pero si suponen un punto de partida
de la programación, sobre todo si observamos que en cuanto se empezó a
programar, los programadores utilizaron las técnicas diseñadas por Charles
Babagge, y Ada, que consistían entre otras, en la programación mediante tarjetas
perforadas. A pesar de ello, Ada ha permanecido como la primera programadora
de la historia. Se dice por tanto que estos dos genios de antaño, se adelantaron un
siglo a su época, lo cual describe la inteligencia de la que se hallaban dotados.
En 1823 el gobierno Británico lo apoyo para crear el proyecto de una máquina de
diferencias, un dispositivo mecánico para efectuar sumas repetidas. Pero Babagge
se dedico al proyecto de la máquina analítica, abandonando la máquina de
diferencias, que se pudiera programar con tarjetas perforadas, gracias a la
creación de Charles Jacquard (francés). Este hombre era un fabricante de tejidos
y había creado un telar que podía reproducir automáticamente patrones de tejidos,
leyendo la información codificada en patrones de agujeros perforados en tarjetas
de papel rígido. Entonces Babagge intento crear la máquina que se pudiera
programar con tarjetas perforadas para efectuar cualquier cálculo con una
precisión de 20 dígitos. Pero la tecnología de la época no bastaba para hacer
realidad sus ideas.
Si bien las ideas de Babagge no llegaron a materializarse de forma definitiva, su
contribución es decisiva, ya que los ordenadores actuales responden a un
esquema análogo al de la máquina analítica. En su diseño, la máquina constaba
de cinco unidades básicas:
1) Unidad de entrada, para introducir datos e instrucciones; 2) Memoria, donde se
almacenaban datos y resultados intermedios; 3) Unidad de control, para regular la
secuencia de ejecución de las operaciones; 4) Unidad Aritmético−Lógica, que
efectúa las operaciones; 5) Unidad de salida, encargada de comunicar al exterior
8
los resultados. Charles Babbage, conocido como el "padre de la informática" no
pudo completar en aquella época la construcción del computador que había
soñado, dado que faltaba algo fundamental: la
electrónica. El camino señalado de Babbage, no fue nunca abandonado y
siguiéndolo, se construyeron los primeros computadores.
Cuando surgió el primer ordenador, el famoso ENIAC (Electronic Numerical
Integrator And Calculator), su programación se basaba en componentes físicos, o
sea, que se programaba, cambiando directamente el Hardware de la maquina,
exactamente lo que sé hacia era cambiar cables de sitio para conseguir así la
Programación de la maquina. La entrada y salida de datos se realizaba mediante
tarjetas perforadas.
El estudio de los lenguajes de programación agrupa tres intereses diferentes; el
del programador profesional, el del diseñador del lenguaje y del Implementador del
lenguaje.
Además, estos tres trabajos han de realizarse dentro de las ligaduras y
capacidades de la organización de una computadora y de las limitaciones
fundamentales de la propia "calculabilidad". El termino "el programador" es un
tanto amorfo, en el sentido de que camufla importantes diferencias entre distintos
niveles y aplicaciones de la programación. Claramente el programador que ha
realizado un curso de doce semanas en COBOL y luego entra en el campo del
procesamiento de datos es diferente del programador que escribe un compilador
en Pascal, o del programador que diseña un experimento de inteligencia artificial
en LISP, o del programador que combina sus rutinas de FORTRAN para resolver
un problema de ingeniería complejo, o del programador que desarrolla un sistema
operativo multiprocesador en ADA.
En este trabajo, intentare clarificar estas distinciones tratando diferentes lenguajes
de programación en el contexto de cada área de aplicación diferente. El
"diseñador del lenguaje" es también un termino algo nebuloso. Algunos lenguajes
(como APL y LISP) fueron diseñados por una sola persona con un concepto
único, mientras que otros (FORTRAN y COBOL) son el producto de desarrollo de
varios años realizados por comités de diseño de lenguajes.
El "Implementador del lenguaje" es la persona o grupo que desarrolla un
compilador o interprete para un lenguaje sobre una maquina particular o tipos de
maquinas. Mas frecuentemente, el primer compilador para el lenguaje Y sobre la
maquina X es desarrollada por la corporación que manufactura la maquina X . Por
ejemplo, hay varios compiladores de Fortran en uso; uno desarrollado por IBM
para una maquina IBM, otro desarrollado por DEC para una maquina DEC, otro
por CDC, y así sucesivamente. Las compañías de software también desarrollan
compiladores y también lo hacen los grupos de investigación de las universidades.
Por ejemplo, la universidad de Waterloo desarrolla compiladores para FORTRAN
Y PASCAL, los cuales son se adelantaron un siglo a su época, lo cual describe la
inteligencia de la que se hallaban dotados.
9
En 1823 el gobierno Británico lo apoyo para crear el proyecto de una máquina de
diferencias, un dispositivo mecánico para efectuar sumas repetidas. Pero Babagge
se dedico al proyecto de la máquina analítica, abandonando la maquina de
diferencias, que se pudiera programar con tarjetas perforadas, gracias a la
creación de Charles Jacquard (francés). Este hombre era un fabricante de tejidos
y había creado un telar que podía reproducir automáticamente patrones de tejidos,
leyendo la información codificada en patrones de agujeros perforados en tarjetas
de papel rígido. Entonces Babagge intento crear la máquina que se pudiera
programar con tarjetas perforadas para efectuar cualquier cálculo con una
precisión de 20 dígitos. Pero la tecnología de la época no bastaba para hacer
realidad sus ideas. Si bien las ideas de Babagge no llegaron a materializarse de
forma definitiva, su contribución es decisiva, ya que los ordenadores actuales
responden a un esquema análogo al de la máquina analítica. En su diseño, la
máquina constaba de cinco unidades básicas:
1) Unidad de entrada, para introducir datos e instrucciones; 2) Memoria, donde
se almacenaban datos y resultados intermedios; 3) Unidad de control, para
regular la secuencia de ejecución de las operaciones; 4) Unidad
Aritmético−Lógica, que efectúa las operaciones; 5) Unidad de salida,
encargada de comunicar al exterior los resultados. Charles Babbage,
conocido como el "padre de la informática" no pudo completar en aquella
época la construcción del computador que había soñado, dado que faltaba
algo fundamental: la electrónica. El camino señalado de Babbage, no fue
nunca abandonado y siguiéndolo, se construyeron los primeros
computadores.
2) Cuando surgió el primer ordenador, el famoso ENIAC (Electronic Numerical
Integrator And Calculator), su programación se basaba en componentes
físicos, o sea, que se programaba, cambiando directamente el Hardware de
la maquina, exactamente lo que sé hacia era cambiar cables de sitio para
conseguir así la programación de la maquina. La entrada y salida de datos
se realizaba mediante tarjetas perforadas.
El estudio de los lenguajes de programación agrupa tres intereses diferentes; el
del programador profesional, el del diseñador del lenguaje y del Implementador del
lenguaje.
Además, estos tres trabajos han de realizarse dentro de las ligaduras y
capacidades de la organización de una computadora y de las limitaciones
fundamentales de la propia "calculabilidad". El término "el programador" es un
tanto amorfo, en el sentido de que camufla importantes diferencias entre distintos
niveles y aplicaciones de la programación. Claramente el programador que ha
realizado un curso de doce semanas en COBOL y luego entra en el campo del
procesamiento de datos es diferente del programador que escribe un compilador
10
en Pascal, o del programador que diseña un experimento de inteligencia artificial
en LISP, o del programador que combina sus rutinas de FORTRAN para resolver
un problema de ingeniería complejo, o del programador que desarrolla un sistema
operativo multiprocesador en ADA.
En este trabajo, intentare clarificar estas distinciones tratando diferentes lenguajes
de programación en el contexto de cada área de aplicación diferente. El
"diseñador del lenguaje" es también un termino algo nebuloso. Algunos lenguajes
(como APL y LISP) fueron diseñados por una sola persona con un concepto
único, mientras que otros (FORTRAN y COBOL) son el producto de desarrollo de
varios años realizados por comités de diseño de lenguajes.
El "Implementador del lenguaje" es la persona o grupo que desarrolla un
compilador o interprete para un lenguaje sobre una maquina particular o tipos de
maquinas. Mas frecuentemente, el primer compilador para el lenguaje Y sobre la
maquina X es desarrollada por la corporación que manufactura la maquina X . Por
ejemplo, hay varios compiladores de Fortran en uso; uno desarrollado por IBM
para una maquina IBM, otro desarrollado por DEC para una maquina DEC, otro
por CDC, y así sucesivamente. Las compañías de software también desarrollan
compiladores y también lo hacen los grupos de investigación de las universidades.
Por ejemplo, la universidad de Waterloo desarrolla compiladores para FORTRAN
PASCAL, los cuales son parte, el interprete ejecuta directamente las instrucciones
en un lenguaje Y de alto nivel, sin un paso de procesamiento previo.
La compilación es, en general, un proceso más eficiente que la interpretación para
la mayoría de los tipos de maquina. Esto se debe principalmente a que las
sentencias dentro de un "bucle" deben ser reinterpretadas cada vez que se
ejecutan por un interprete. Con un compilador. Cada sentencia es interpretada y
luego traducida a lenguaje maquina solo una vez.
Algunos lenguajes son lenguajes principalmente interpretados, como APL,
PROLOG y LISP. El resto de los lenguajes −− Pascal, FORTRAN, COBOL, PL/I,
SNOBOL, C, Ada y Modula−2 − son normalmente lenguajes compilados. En
algunos casos, un compilador estará utilizable alternativamente para un lenguaje
interpretado (tal como LISP) e inversamente (tal como el interprete SNOBOL4 de
los laboratorios Bell). Frecuentemente la interpretación es preferible a la
compilación en un entorno de programación experimental o de educación, donde
cada nueva ejecución de un programa implicado un cambio en el propio texto del
programa. La calidad de diagnosis y depuración que soportan los lenguajes
interpretados es generalmente mejor que la de los lenguajes compilados, puesto
que los mensajes de error se refieren directamente a sentencias del texto del
programa original. Además, la ventaja de la eficiencia que se adjudica
tradicionalmente a los lenguajes compilados frente a los interpretados puede
pronto ser eliminado, debido a la evolución de las maquinas cuyos lenguajes son
ellos mismos1lenguajes de alto nivel. Como ejemplo de estos están las nuevas
maquinas LISP, las cuales han sido diseñadas recientemente por Symbolics y
Xerox Corporations.
11
Los lenguajes de Programación son tomados de diferentes perspectivas. Es
importante para un programador decidir cuales conceptos emitir o cuales incluir en
la programación. Con frecuencia el programador es osado a usar combinaciones
de conceptos que hacen al lenguaje "DURO" de usar, de entender e implementar.
Cada programador tiene en mente un estilo particular de programación, la decisión
de incluir u omitir ciertos tipos de datos que pueden tener una significativa
influencia en la forma en que el Lenguaje es usado, la decisión de usar u omitir
conceptos de programación o modelos.

Influencias en la evolución de los LP
Aplicaciones científicas. Gran cantidad de cómputos sobre grandes números en
punto flotante. El principal exponente en esta categoría es Fortran.
Aplicaciones de negocios. Gran producción de reportes, manejos de números
decimales y caracteres. El lenguaje más destacado: COBOL.
Inteligencia Artificial , EFICIENCIA, PORTABILIDAD, COMPLEJIDAD.
Dominios de programación. Manipulación de símbolos en lugar de manipulación
numérica - Ejemplo: LISP
Programación de Sistemas – Base de datos Búsqueda de eficiencia (por uso
continuo).
Software para la web Colección ecléctica de lenguajes: Mark‐up languages:
XHTML, Scipting: PHP, Proposito general: JAVA

Atributos de un buen Lenguaje de Programación









Claridad, simplicidad y unidad de conceptos - Ortogonalidad.
Naturalidad para la aplicación.
Soporte de abstracciones.
Facilidad de verificación de programas.
Ambiente de programación.
Portabilidad de programas.
Costo de uso:
costo de ejecución
costo de traducción
12
 costo de creación, testeo y uso
 costo de mantenimiento
 Modelos básicos de Paradigmas de los LP
LENGUAJES DE PROGRAMACIÓN DECLARATIVOS
Se les conoce como lenguajes declarativos en ciencias computacionales a
aquellos lenguajes de programación en los cuales se le indica a la computadora
qué es lo que se desea obtener o qué es lo que se esta buscando, por ejemplo:
Obtener los nombres de todos los empleados que tengan más de 32 años. Eso se
puede lograr con un lenguaje declarativo como SQL.
La programación declarativa es una forma de programación que implica la
descripción de un problema dado en lugar de proveer una solución para dicho
problema, dejando la interpretación de los pasos específicos para llegar a dicha
solución a un intérprete no especificado. La programación declarativa adopta, por
lo tanto, un enfoque diferente al de la programación imperativa tradicional.
En otras palabras, la programación declarativa provee el “qué”, pero deja el
“cómo” liberado a la implementación particular del intérprete. Por lo tanto se puede
ver que la programación declarativa tiene dos fases bien diferenciadas, la
declaración y la interpretación.
Es importante señalar que a pesar de hacer referencia a intérprete, no hay
que limitarse a “lenguajes interpretados” en el sentido habitual del término, sino
que también se puede estar trabajando con “lenguajes compilados”.
CARACTERÍSTICAS DE LOS LENGUAJES DE PROGRAMACIÓN
DECLARATIVOS





Los lenguajes declarativos están orientados a buscar la solución del
problema, sin preocuparse por la forma de llegar a ello; es decir, el
programador debe concentrarse en la lógica del algoritmo, más que en
el control de la secuencia.
Los programas están formados por un conjunto de definiciones o
ecuaciones, las cuales describen lo que debe ser calculado, no en sí la
forma de hacerlo.
Las variables sólo pueden tener asignado un solo valor a lo largo de la
ejecución del programa, lo cual implica que no puede existir asignación
destructiva. Debido a esto, cobra especial importancia el uso del
anidamiento y la recursividad.
Las listas representan la estructura fundamental de datos.
El orden de la ejecución no resulta importante debido a que no existen
efectos colaterales; es decir, que al calcular un valor, resulta imposible
13


afectar el cálculo de otros y con esto se puede afirmar que cualquier
secuencia de ejecución deberá conducir al mismo resultado.
Las expresiones o definiciones pueden ser usadas como valores y por lo
tanto se pueden tratar como argumentos de otras definiciones.
El control de la ejecución no es responsabilidad del programador.
DESVENTAJAS DE LA PROGRAMACIÓN DECLARATIVA
La principal desventaja de la programación declarativa es que no puede
resolver cualquier problema dado, sino que está restringida al subconjunto de
problemas para los que el intérprete o compilador fue diseñado.
Otra desventaja de la programación declarativa está relacionada con la
eficiencia. Dado que es necesaria una fase de interpretación extra, en la cual se
deben evaluar todas las consecuencias de todas las declaraciones realizadas, el
proceso es relativamente más lento que en la programación imperativa, en que los
cambios de estado del sistema están dados por instrucciones particulares y no por
un conjunto de condiciones arbitrariamente grande.
VENTAJAS DE LA PROGRAMACIÓN DECLARATIVA
A pesar de lo anterior existen algunas ventajas en el uso de la
programación declarativa. Entre las ventajas se destaca que la solución de un
problema se puede realizar con un nivel de abstracción considerablemente alto,
sin entrar en detalles de implementación irrelevantes, lo que hace a las soluciones
más fácil de entender por las personas. La resolución de problemas complejos es
resuelta por el intérprete a partir de la declaración de las condiciones dadas.
La programación declarativa es muy usada en la resolución de problemas
relacionados con inteligencia artificial, bases de datos, configuración, y
comunicación entre procesos; sin embargo, ningún leguaje declarativo se
aproxima en popularidad a los lenguajes imperativos.
EJEMPLOS DE LENGUAJES DECLARATIVOS
Algunos lenguajes declarativos que se pueden mencionar son:





PROLOG
SQL
HTML
WSDL (Web Services Description Language)
XML Stylesheet Language for Transformation
14
PROGRAMACIÓN LÓGICA
La idea fundamental de la programación lógica consiste en emplear la
lógica como lenguaje de programación.
La lógica no es imperativa porque no sirve para indicar cómo resolver un
problema (órdenes). La lógica es declarativa porque sirve para especificar qué
problema resolver (condiciones).
En la programación lógica, se especifican las condiciones que satisfacen
las soluciones, se deducen las soluciones a partir de las condiciones y el énfasis
de todo está en qué problema resolver. El problema se describe especificando
qué caracteriza a sus posibles soluciones.
La programación lógica, junto con la funcional, forma parte de lo que se
conoce como programación declarativa. En los lenguajes tradicionales, la
programación consiste en indicar cómo resolver un problema mediante sentencias;
en la programación lógica, se trabaja de forma descriptiva, estableciendo
relaciones entre entidades, indicando no cómo, sino qué hacer. Se establece
entonces que la idea esencial de la programación lógica es: algoritmos = lógica +
control. Es decir, un algoritmo se construye especificando 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.
Al hacer un recorrido por la programación lógica, aparece como uno de sus
lenguajes más representativos, Prolog, que es un clásico de la inteligencia artificial
y que se aplica de múltiples formas en el desarrollo de software comercial.
PROGRAMACIÓN FUNCIONAL
La programación funcional es un paradigma de programación declarativa
basado en la utilización de funciones matemáticas. El objetivo de la programación
funcional es conseguir lenguajes expresivos y matemáticamente elegantes, en los
que no sea necesario bajar al nivel de la máquina para describir el proceso llevado
a cabo por el programa.
Los programas escritos en un lenguaje funcional están constituidos
únicamente por definiciones de funciones, entendiendo éstas no como
subprogramas clásicos de un lenguaje imperativo (pues la programación funcional
es declarativa), sino como funciones puramente matemáticas, en las que se
verifican ciertas propiedades como la transparencia referencial (el significado de
una expresión depende únicamente del significado de sus subexpresiones), y por
tanto, la carencia total de efectos laterales.
15
Otras características propias de estos lenguajes son la no existencia de
asignaciones de variables y la falta de construcciones estructuradas como la
secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones
de instrucciones se lleven a cabo por medio de funciones recursivas).
Existen dos grandes categorías de lenguajes funcionales: los funcionales
puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes
funcionales híbridos son menos dogmáticos que los puros, al permitir conceptos
tomados de los lenguajes imperativos, como las secuencias de instrucciones o la
asignación de variables. En contraste, los lenguajes funcionales puros tienen una
mayor potencia expresiva, conservando a la vez su transparencia referencial, algo
que no se cumple siempre con un lenguaje híbrido.
 Nuevos Paradigmas de Programación
Paradigma Heurístico
Definición
El Paradigma Heurístico se basa en una forma de modelar el problema, en lo que
respecta a la representación de su estructura, estrategias de búsqueda y métodos
de resolución, mediante reglas de “buena lógica” o reglas de “sentido común”,
denominadas heurísticas16, las cuales proporcionan entre varios cursos de acción
uno que presenta visos de ser el más “prometedor”, pero no garantiza
necesariamente el curso de acción más efectivo.
El entorno de programación heurístico es un entorno basado en el conocimiento
humano (la experiencia), adaptativo, incremental y simbólico, y aplicable a ominios
específicos en los que una buena heurística guía un proceso algorítmico o
roporciona resultados superiores a éste.
Principales características
Las especificaciones más relevantes del tratamiento heurístico deben tener en
cuenta las características de la heurística, de la información y de las
especificaciones del problema:
Simpleza y velocidad
16
Una buena heurística debe ser simple, con velocidad de búsqueda que no
se incremente exponencialmente, precisa y robusta.
Inexactitud
La información a tratar es fundamentalmente inexacta, simbólica o limitada,
como también los resultados obtenidos, en los que no se puede garantizar un
100% de exactitud.
Incorporación del conocimiento
La información utilizada como criterio para decidir entre los distintos cursos de
acción está basada en el conocimiento previo sobre el dominio del problema,
y tiene un crecimiento "incremental" a medida que se avanza en la ejecución,
incorporando el conocimiento obtenido durante la búsqueda.
Optimización o satisfacción
Las especificaciones del problema deben ser claras y pueden ser de optimización
de soluciones previas o de satisfacción de nuevos problemas, y por otro lado,
pueden producir una o múltiples soluciones.
Campo de aplicación
Dado que el ser humano opera la mayor parte de las veces utilizando heurística,
este tipo de programación se aplica con mayor intensidad en el campo de la
Inteligencia Artificial y en especial, en el de la Ingeniería del Conocimiento.
En aquellos problemas cuya solución implica potencialmente una búsqueda
exhaustiva de todas las posibles combinaciones de algún conjunto finito, que
puede producir un incremento exponencial del espacio de búsqueda, que lo
hace muy difícil de tratar e incluso imposible, las técnicas heurísticas guían la
búsqueda de soluciones por las direcciones que parecen ser las más adecuadas,
en base al conocimiento específico sobre el problema en particular, y así evitan
recorrer todas las posibilidades.
Se suele utilizar un modelo heurístico cuando proporciona resultados superiores a
los de otros modelos, en general en los siguientes casos:
• Los datos del modelo son limitados o pueden contener errores inherentes. Se
construye un modelo simplificado e impreciso de un problema real, por lo que la
solución "óptima" es puramente académica.
• No se dispone de un método exacto que sea fiable para ser aplicado en el
modelo del problema, o si existe, es intratable computacionalmente.
17
• Se desea mejorar la eficacia de un algoritmo realizado con técnicas no
Heurísticas.
Lenguajes
El Paradigma Heurística no ha producido un lenguaje específico de
programación que soporte todas sus características, pero las técnicas heurísticas,
se pueden implementar con lenguajes de otros paradigmas de Programación.
Paradigma Concurrente
Definición
El concepto fundamental de la programación concurrente que da sentido a la
existencia del paradigma concurrente, diferenciándolo de otros paradigmas, es
la noción de proceso.
Un proceso corresponde a un cálculo secuencial con su propio seguimiento
de control. Su seguimiento es la secuencia de puntos en el programa que son
alcanzados mientras el control fluye a través del código del programa.
La ejecución simultánea de más de un proceso permite que cooperen para
resolver un mismo problema y, a la vez, requiere necesariamente que compartan
los recursos del sistema y compitan por acceder a ellos. Para lograrlo, se
implementan distintas estrategias de interacción entre los procesos.
Principales características:
Comunicación y sincronización de procesos
La interacción entre procesos se basa en mecanismos de comunicación y
sincronización.
La comunicación implica el intercambio de datos entre procesos, ya sea por
medio de un mensaje implícito o a través de valores de variables compartidas.
Una variable es compartida entre procesos si es visible al código de esos
procesos.
La sincronización relaciona el seguimiento de un proceso con el seguimiento de
otro. Si p es un punto en el seguimiento de un proceso P, y q es un punto en el
seguimiento de un proceso Q, entonces la sincronización puede usarse para
18
restringir el orden en el cual P alcanza p y Q alcanza q. En otras palabras, la
sincronización implica el intercambio de información de control
entre procesos.
Competencia y cooperación
La necesidad de contar con comunicación y sincronización puede verse en
términos de competencia y cooperación entre procesos.
La competencia ocurre cuando el proceso requiere el uso exclusivo de un
recurso, como cuando dos procesos compiten por usar a la vez un mismo
dispositivo de hardware, o para realizar una transacción sobre una misma
estructura de datos. Aquí la sincronización es necesaria para garantizar a un
proceso el uso exclusivo de un recurso.
La cooperación ocurre cuando dos procesos trabajan sobre distintos
aspectos del mismo problema, y por lo general incluye a la comunicación y la
sincronización. ejecución. Por ejemplo, un programa solicita dos recursos iguales,
y uno de ellos sólo es tomado si ya tomó el otro en primer lugar. Dos de estos
procesos entrarían en interbloqueo porque cuando cada uno tome un recurso, no
podrá tomar el otro, y no podrán avanzar.
Otra situación es el estancamiento (o inanición), en el cual el sistema no está
en interbloqueo, pero ningún proceso avanza. Supongamos que el proceso
anterior cambia su lógica para pedir dos recursos, y libera el primero si no puede
tomar el segundo. Por lo tanto, dos de estos procesos ejecutando
concurrentemente entrarían en un ciclo infinito: tomar el primero, liberar el primero,
tomar el primero, etc.
Mecanismos concurrentes
Para concretar la sincronización y comunicación entre procesos y garantizar
que se complete la ejecución de todos ellos, existen numerosas estrategias y
mecanismos.
Algunos de ellos son:
• Rendezvouz
• Monitores
• Semáforos
Campo de aplicación
La programación concurrente tiene aplicación en los más variados campos y
19
se ha potenciado su uso con el crecimiento de las redes de todo tipo.
Tradicionalmente, uno de sus utilidades básicas es en el diseño de sistemas
operativos.
Lenguajes
No hay en la actualidad lenguajes de programación exclusivos del paradigma
concurrente, sino que existen lenguajes propios de otros paradigmas que incluyen
en su definición conceptos y servicios aptos para que soporten la
concurrencia.
Taller No 1
20
CALENDARIO DEL MODULO
(Se define por semanas y Núcleos temáticos según Matriz de Acuerdos
pedagógicos)
UNIDAD DE
APRENDIZAJE
ACTIVIDADES DE APRENDIZAJE
SEMANA
Inducción y
Acuerdos
Se entrega Matriz temática al estudiante fotocopiada
para realizar acuerdos pedagógico del Modulo PDP
NT1. Introducción a
los paradigmas de
programación
Documentos – Wiki -

1
2


NT2. Programación
Imperactiva o
procedural
Documentos – Wiki -





NT3. Programación
Funcional
Documentos – Wiki -
NT4. Programación
orientada a objetos
Documentos – Wiki -

TALLERES – Preguntas Generadoras (Situaciones –
Problemas) Aprendizaje – Significativo – Portafolio.
PRODUCTOS – FINALES - Practicas pedagógicas
productiva - (Temáticas y Portafolio).
Seguimiento de: Temáticas y Portafolio – Según –
Criterios.
TALLERES – Preguntas Generadoras (Situaciones –
Problemas) Aprendizaje – Significativo – Portafolio.
TALLERES Ejercicios- Portafolio
PRUEBA – DIRECTA - (Evaluación Escrita)- Portafolio
PRODUCTOS – FINALES - Practicas pedagógicas
productiva - (Temáticas y Portafolio).
Seguimiento de: Temáticas y Portafolio – Según –
Criterios.
TALLERES – Preguntas Generadoras (Situaciones –
Problemas) Aprendizaje – Significativo – Portafolio.

TALLERES Ejercicios- Portafolio

PRODUCTOS – FINALES - Practicas pedagógicas
productiva - (Temáticas y Portafolio).

Seguimiento de: Temáticas y Portafolio – Según –
Criterios.

TALLERES – Preguntas Generadoras (Situaciones –
Problemas) Aprendizaje – Significativo – Portafolio.

TALLERES Ejercicios- Portafolio

PRUEBA – DIRECTA - (Evaluación Escrita)- Portafolio

PRODUCTOS – FINALES - Practicas pedagógicas
productiva - (Temáticas y Portafolio).

Seguimiento de: Temáticas y Portafolio – Según –
Criterios.
3
4
5
21

TALLERES – Preguntas Generadoras (Situaciones –
Problemas) Aprendizaje – Significativo – Portafolio.

TALLERES Ejercicios- Portafolio

PRUEBA – DIRECTA - (Evaluación Escrita)- Portafolio

PRODUCTOS – FINALES - Practicas pedagógicas
productiva - (Temáticas y Portafolio).

Seguimiento de: Temáticas y Portafolio – Según –
Criterios.
Convocatoria No 1.
Sustentación –
Productos Finales.

Presentación y Sustentación de Portafolio
Convocatoria No 2.
Entrega de Notas
Entrega de carpetas


Retroalimentación y entrega de Nota Final
Entrega de carpeta a Coordinación.
NT5. Programación
Lógica.
Documentos – Wiki -
6
7
8
22
METODOLOGIA
En la educación a distancia en CERES – Sabana de Occidente del Modulo Paradigmas de la
Programación, es importante que el estudiante de Ingeniería de Sistemas asuma una
estricta responsabilidad con sus procesos, condición que lo lleva a adquirir autoesigencia
con su aprendizaje. El estudiante debe considerar la capacidad para organizar el tiempo de
su estudio por sí mismo (autodisciplina), para poder cumplir con TALLERES – Preguntas
Generadoras (Situaciones – Problemas) Aprendizaje – Significativo – y Portafolio.
TALLERES Ejercicios- y Portafolio, PRUEBA – DIRECTA - (Evaluación Escrita)-, Portafolio y
PRODUCTOS – FINALES - Practicas pedagógicas productiva - (Temáticas y Portafolio), y
Seguimiento de: Temáticas y Portafolio – Según – Criterios.
Usted ingeniero cuenta con varios recursos a su disposición los cuales le ayudaran a
alcanzar la competencia al final de este modulo. Ellos son:
 Texto de Estudio.
 Guía de Estudio.
 El espacio tutorial.
 Material Interactivo (Wiki implementada por el tutor – Mauricio Leal Parga para el
trabajo colaborativo con los estudiantes de PDP).
Bibliografía



ALONSO AMO, F y SEGOVIA PEREZ, F. Entornos y Metodologías de
Programación. Paraninfo.
GHEZZI, Carlo y JAZAYERI, Mehdi. Conceptos de Lenguajes de
Programación. Díaz de los Santos.
RAVI y SETHI. Lenguajes de programación - Conceptos y constructores.
Addison Wesley.
23

ing. Lucas Spigariol - Buenos Aires – Abril 2005. Fundamentos teóricos
de los Paradigmas de Programación: Cátedra de Paradigmas de
programación, Facultad Regional Buenos Aires - Universidad Tecnológica
Nacional, Coordinación.

Análisis Comparativo de Lenguajes Teoría 1: Estudio de los Lenguajes de
Programación Aspectos del Diseño de los Lenguajes de Programación
Departamento de Informática - Facultad de Cs. Fco. Matemáticas y Naturales
Universidad Nacional de San Luis San Luis – Argentina.
Documentos de internet
 Tipos de Lenguajes de Programación. Jaime Oswaldo Montoya
Guzmán - [email protected] - www.monografias.com


WWW.LAWEBDELPROGRAMADOR.ES
WWW.PROGRAMANDO.COM
Lecturas complementarias.
 PARADIGMAS DE LA PROGRAMACION - Instituto Tecnológico de
Celaya.
 Revisión de conceptos fundamentales de programación - Prof. Ing.
M.C.Sambuelli
 HISTORIA Y EVOLUCIÓN DE LOS LENGUAJES DE
PROGRAMACIÓN - WWW.LAWEBDELPROGRAMADOR.ES
 LENGUAJES DE PROGRAMACIÓN - Javier Martín Centro Asociado
de Móstoles UNED
 Fundamentos teóricos de los Paradigmas de Programación - Cátedra
de Paradigmas de Programación - Facultad Regional Buenos Aires Universidad Tecnológica Nacional - Ing. Lucas Spigariol - Buenos
Aires – Abril 2005
Wiki
Espacio creado por el Tutor Mauricio Leal Parga – donde se publican periódicamente –
documentos y lecturas, Talleres, Preguntas Generadoras, Guías. Del Modulo Teoría
24
general de sistemas. Es de anotar que la información aquí publicada se puede
descargar.
EVALUACION









TALLERES – Preguntas Generadoras (Situaciones – Problemas)
Aprendizaje – Significativo – Portafolio.
TALLERES Ejercicios- Portafolio
PRUEBA – DIRECTA - (Evaluación Escrita)- Portafolio
PRODUCTOS – FINALES - Practicas pedagógicas productiva - (Temáticas y
Portafolio).
Seguimiento de: Temáticas y Portafolio – Según – Criterios.
Presentación y sustentación de talleres de PDP.
Presentación y Sustentación de Preguntas Generadoras
Presentación y Sustentación de Portafolio
LABORATORIOS - (Trabajo – Práctico) - Portafolio
25
POLITICAS
A continuación se presentan los siguientes enunciados que se deben cumplir para dar
orden al proceso de aprendizaje, que orientan a cada estudiante para que cada
participante presente sus actividades para poder alcanzar las competencias necesarias
para la aprobación del modulo. Estas políticas dan una estructura al trabajo de todos.
Tutor y estudiante.











Documentos – E-Mail o la Wiki (El estudiante debe consultar periódicamente su
correo electrónico o la Wiki donde se le envían documentos y lecturas, talleres,
preguntas generadoras, guías de cada Núcleo Temático – NT).
El estudiante debe resolver las Preguntas Generadoras de cada Núcleo, como
política de cumplimiento de la metodología de la educación a distancia del
proyecto CERES.
Los talleres serán enviados al E-Mail de cada estudiante semanalmente, para
resolverlos por dada Núcleo Temático.
Se realizara LABORATORIO - (Trabajo – Práctico) – y es de obligatoriedad su
asistencia.
Se realizaran Pruebas escritas, finalizando cada sesión de tutorías según Núcleos
Temáticos.
El estudiante debe exponer libremente sus ideas, mediante momentos de
discusión, reflexión donde se promueva el desarrollo autónomo, con un aporte de
índole social en la ampliación de su profesión.
El estudiante debe presentar Memorias de temática expuesta.
El estudiante debe presentar temáticas y portafolios según acuerdo.
El estudiante debe presentar y sustentar talleres realizados en PDP.
El estudiante debe presentar y sustentar el desarrollo de preguntas generadoras.
El estudiante debe presentar y sustentar el Portafolio del modulo –PDP-
Rol del Tutor:
El propósito fundamental como tutor es el de dar un servicio a los estudiantes, facilitando
su proceso de aprendizaje y el logro de sus competencias. La supervisión que hago se
enfocará tanto a los procesos, como a los productos de aprendizaje que evidencien
26
desarrollo de habilidades que conlleven a alcanzar la competencia, para ello asumo entre
otros los compromisos de:








Atender directamente a los estudiantes a él asignados utilizando diversos medios:
encuentro tutorial, e-mail, Wiki, sistemas de mensajería y laboratorios prácticos.
Asistir al lugar de tutoría asignado, en la hora y el día indicados previamente para tal
fin.
Respetar el calendario académico y cada una de las actividades propuestas en el.
Guiar, facilitar, asesorar y orientar al estudiante en su proceso de aprendizaje.
Suscitar la reflexión e indagar a los estudiantes sobre su proceso de aprendizaje.
Evaluar las actividades teniendo en cuenta los criterios de evaluación socializados al
estudiante al plantearse la actividad.
Retroalimentar las actividades y sus evidencias de competencia en las fechas
acordadas.
Las dudas académicas serán atendidas directamente por el Tutor, o por E-mail y
medios como foros en aulas virtuales y Wiki.
Rol del estudiante
Los estudiantes son participantes, honestos y comprometidos que como tales, son los
principales responsables de iniciar, dirigir y sostener sus propios procesos de aprendizaje.
Cada estudiante se compromete a propiciar las condiciones que estén a su alcance para
maximizar las oportunidades de aprendizaje de acuerdo a su contexto y posibilidades. De
igual forma se asume que nuestros estudiantes no incurrirán en actos deshonestos y de
plagio intelectual de ideas en las diversas formas de interacción, actividades terminales e
intermedias. Se espera que los estudiantes participen activamente en cada una de las
actividades descritas en la guía de estudio, para ello es necesario tener en cuenta que:


El estudiante es el protagonista del proceso de aprendizaje, que lo lleva a ser más
activo y propositivo, por consiguiente a desarrollar el auto – estudio.
Debe estar preparado para participar activamente de las actividades de aprendizaje,
habiendo leído los contenidos de su texto de estudio y materiales adicionales
relacionados en la guía de estudio, documentos y lecturas complementarias.
27


Debe realizar las actividades planteadas en la guía de estudio, entregando las
evidencias de manera acorde a lo planteado en los criterios de evaluación, dentro de
los tiempos establecidos en el calendario y bajo las instrucciones descritas en cada
actividad.
En las evidencias escritas, deberá saber citar las fuentes, es decir usar debidamente la
bibliografía a fin de evitar el plagio.
Guía Elaborada por el Tutor
HECTOR MAURICIO LEAL PARGA
Uso exclusivo de estudiantes - II Semestre de Ingeniería de Sistemas
Universidad Minuto de Dios
CERES SABANA DE OCCIDENTE
MODULO: PARADIGMAS DE PROGRAMACIÓN
Se prohíbe la publicación o reproducción total o parcial de esta Guía.
28