Está en la página 1de 17

Lenguajes de programacin

Desde 1954 hasta la actualidad se han documentado ms de 2.500 lenguajes de


programacin. Entre 1952 y 1972, la primera poca de los lenguajes de programacin, se
desarrollaron alrededor de 200 lenguajes, de los que una decena fueron realmente
significativos y tuvieron influencia en el desarrollo de lenguajes posteriores.

Una lista parcial de algunos de los lenguajes de programacin ms importantes, junto con
su ao de creacin:

1957 FORTRAN
1958 ALGOL
1960 Lisp
1960 COBOL
1962 APL
1962 SIMULA
1964 BASIC
1964 PL/I
1970 Prolog
1972 C
1975 Pascal
1975 Scheme
1975 Modula
1983 Smalltalk-80
1983 Objective-C
1983 Ada
1986 C++
1986 Eiffel
1987 Perl
1988 Tcl/Tk
1990 Haskell
1991 Python
1993 Ruby
1995 Java
1995 PHP
2000 C#

Al principio, los lenguajes se diseaban nicamente para poder ejecutar los programas
eficientemente. Los ordenadores, carsimos, eran el recurso crtico, y los programadores
eran bastante baratos. Un lenguaje de alto nivel tena que ser competitivo con la ejecucin
de un cdigo en ensamblador. A mediados de los aos 60, cuando se haban diseado
FORTRAN, COBOL, LISP y ALGOL, John Backus (creador de FORTRAN) se dio cuenta
que la programacin estaba cambiando. Las mquinas eran menos caras, el coste de la
programacin estaba aumentando, apareca la necesidad de mover o migrar los programas
de unas estaciones a otras, y surga la necesidad de llevar un buen mantenimiento de los
programas resultantes. El objetivo de un lenguaje de alto nivel se transform no slo en
ejecutar los programas eficientemente, sino tambin en facilitar el desarrollo de programas
para resolver problemas en determinadas reas de aplicacin.

La tecnologa de los ordenadores madur entre 1960 y 1970 y los lenguajes se centraron en
resolver problemas especficos de un dominio. Los programas cientficos generalmente se
implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las
aplicaciones militares en JOVIAL, las de inteligencia artificial en LISP y las militares
internas en Ada. Al igual que sucede con los lenguajes naturales, los lenguajes de
programacin a veces dejan de usarse. ALGOL no se utiliza desde los aos 60, se
reemplaz por Pascal, el cual se reemplaz a su vez por C++ y Java. COBOL, que se
utilizaba para las aplicaciones mercantiles, se sustituy tambin por C++.

Los primeros lenguajes que todava se usan tienen revisiones peridicas para reflejar
influencias de otras reas de computacin. Lenguajes como Java, C++ y ML reflejan una
gran experiencia obtenida en el diseo y uso de los cientos de lenguajes antiguos. Algunas
de esas influencias son:

Recursos del ordenador: la evolucin de los ordenadores desde los aos 50, junto
con los modernos sistemas operativos, han influenciado las caractersticas de los
lenguajes de alto nivel.
Aplicaciones: el uso de los ordenadores se ha extendido rpidamente desde las
aplicaciones militares, cientficas y de negocios a los juegos, los ordenadores
personales, internet y cualquier aplicacin cotidiana.
Mtodos de programacin: el diseo de los lenguajes tiene que reflejar los buenos
mtodos para implementar programas grandes y complejos.
Estudios tericos: Gracias a la investigacin durante ms de 50 aos en el diseo e
implementacin de lenguajes, se conocen los puntos fuertes y dbiles de las
caractersticas de los mismos, por lo que influye en el diseo de los nuevos
lenguajes.
Estandarizacin: cada vez ms existe la necesidad de que los programas sean
portables de unos sistemas a otros.

A pesar de la enorme lista de lenguajes de programacin que han ido apareciendo, la mayor
parte de los programadores slo utilizan unos pocos lenguajes. Adems, los programadores
a menudo trabajan en empresas o instalaciones donde se trabaja con un nico lenguaje en
particular, como Java, C o Ada. Entonces, por qu es importante el estudio de diferentes
lenguajes o paradigmas cuando al final slo se trabajar con unos pocos. Hay muchas
razones que justifican su estudio, entre las cuales las ms importantes son:

Mejora el uso del lenguaje de programacin: si se conoce cmo estn


implementadas las caractersticas en un lenguaje de programacin, se mejorar la
habilidad para escribir programas eficientes. Por ejemplo, si se conoce cmo crear y
manipular listas o cadenas en un lenguaje, por ejemplo Scheme, utilizando recursin
se conseguir construir programas ms eficientes.
Incrementa el vocabulario de los elementos de programacin.
Permite una mejor eleccin del lenguaje de programacin: El conocimiento de
diversos lenguajes de programacin facilitan la eleccin del lenguaje ms adecuado
para un proyecto determinado.
Mejora la habilidad para desarrollar programas efectivos y eficientes: Muchos
lenguajes proporcionan caractersticas que, cuando se utilizan correctamente,
aportan muchos beneficios a la programacin pero, cuando se hace un uso
incorrecto, pueden ocasionar un gran coste computacional. El ejemplo tpico es la
recursin, que permite una implementacin elegante y eficiente de funciones. Pero
cuando no se sabe utilizar, puede ocasionar un aumento exponencial del tiempo de
ejecucin.
Facilita el aprendizaje de un nuevo lenguaje de programacin: Cuando se conocen
las estructuras, tcnicas de implementacin y construcciones de un lenguaje, es
mucho ms sencillo aprender un nuevo lenguaje de programacin que tenga
estructuras similares.
Facilita el diseo de nuevos lenguajes de programacin: Es posible que en un
futuro tengan que disear ustedes un lenguaje que se adapte a vuestras necesidades.
Cuantos ms lenguajes y paradigmas se conozcan, ms sencillo resultar el diseo y
la implementacin.

La historia de los lenguajes de programacin es dinmica y se encuentra en continua


expansin. El gran nmero de lenguajes de programacin que han aparecido desde los aos
60 hasta la actualidad no son ni mucho menos los nicos que aparecern en un futuro.

A continuacin tenemos una lista extraida de freshmeat donde se puede ver el nmero de
proyectos activos basados en cada lenguaje de programacin en la actualidad.
Ada (67 projects)
APL (3 projects)
ASP (47 projects)
Assembly (272 projects)
Awk (68 projects)
Basic (39 projects)
C (9296 projects)
C# (344 projects)
C++ (5207 projects)
Clipper (1 project)
Cold Fusion (25 projects)
Common Lisp (67 projects)
D (15 projects)
Delphi (80 projects)
Dylan (2 projects)
Eiffel (35 projects)
Emacs-Lisp (66 projects)
Erlang (39 projects)
Euler (1 project)
Euphoria (10 projects)
Forth (29 projects)
Fortran (94 projects)
Gambas (11 projects)
Groovy (42 projects)
Haskell (76 projects)
Java (6337 projects)
JavaScript (1260 projects)
Lisp (88 projects)
Logo (6 projects)
Lua (60 projects)
ML (33 projects)
Modula (8 projects)
Object Pascal (35 projects)
Objective C (390 projects)
OCaml (98 projects)
Other (310 projects)
Other Scripting Engines (173 projects)
Pascal (63 projects)
Perl (3816 projects)
PHP (4521 projects)
Pike (13 projects)
PL/SQL (95 projects)
Pliant (1 project)
PROGRESS (4 projects)
Prolog (24 projects)
Python (3323 projects)
REALbasic (14 projects)
Rebol (3 projects)
Rexx (11 projects)
Ruby (512 projects)
Scheme (151 projects)
Simula (1 project)
Smalltalk (24 projects)
SQL (565 projects)
Tcl (523 projects)
Unix Shell (1119 projects)
Visual Basic (49 projects)
XBasic (1 project)
YACC (32 projects)
Zope (48 projects)

Cuando los lenguajes de programacin empezaron a aparecer, los creadores normalmente


eran entidades o empresas. Hoy en da es diferente, cualquier informtico puede crear
un lenguaje nuevo en un momento dado que precise ciertas caractersticas en
concreto. Por ejemplo, tenemos el caso de Ruby, un lenguaje de programacin ideado en
1993 por un joven japons llamado Yukihiro Matsumoto. Quiso crear un lenguaje donde la
programacin funcional y la imperativa estuviesen balanceada. Necesitaba adems que
fuese un lenguaje de script ms potente que Perl y ms orientado a objetos que Phyton.

El nombre de Ruby se decidi entre Yukihiro y Keiju Ishitsuka en 1993 en una sesin
online de chat, antes de que se hubiese implementado el cdigo. Se propusieron dos
nombres, Ruby y Coral, y al final decidieron Ruby porque era la piedra del zodiaco de uno
de sus colegas.

La primera versin pblica Ruby 0.95 se anunci en un grupo de noticias domsticas en


Japn en diciembre de 1995. A continuacin se lanzaron tres versiones ms y se cre el
grupo de noticias ruby-list. La versin Ruby 1.0 apareci en diciembre de 1996, la versin
1.3 en 1999 y la 1.8.7 en junio de 2008. La versin Ruby 1.9.1 se ha lanzado el 25 de Enero
de 2009.

Ruby es un lenguaje orientado a objetos pero multiparadigma: esto quiere decir que en ruby
cada tipo de dato es un objeto y cada funcin es un mtodo, pero permite programacin
imperativa y funcional (multiparadigma).

Un ejemplo de programacin en Ruby:

puts "Hello World!"

Otro ejemplo:

puts "What's your favorite number?"


number = gets.chomp
output_number = number.to_i + 1
puts output_number.to_s + ' is a bigger and better favorite number.'

No son lenguajes de programacin:

Existen elementos muy usados por los informticos que tienen algunas de las caractersticas
de los lenguajes de programacin, pero que no lo son. Veamos algn ejemplo.
Los lenguajes XML, uno de los estndares ms usados por las aplicaciones informticas
para compartir datos, son lenguajes escritos con una sintaxis perfectamente definida. Por
ejemplo, el siguiente texto en un lenguaje XML para definir una lista de personas:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
<person>
<name>Fred Bloggs</name>
<birthdate>27/11/2008</birthdate>
<gender>Male</gender>
</person>
<person>
<name>Mary Baggins</name>
<birthdate>12/07/1942</birthdate>
<gender>Female</gender>
</person>
</people_list>

Sin embargo le falta una caracterstica fundamental para poder ser considerado un lenguaje
de programacin: no define un comportamiento, no tiene una semntica asociada. El trozo
de cdigo anterior no puede ser ejecutado tal cual en un computador, sino que nicamente
define un conjunto de datos.

Un entorno de programacin visual para definir comportamientos y animaciones es otro


ejemplo de algo que no es estrictamente un lenguaje de programacin. Por ejemplo Scratch
es un lenguaje visual desarrollado por el MIT para promover el inters por la programacin
entre los jvenes.

El ejemplo anterior define una animacin de un sprite en la pantalla. Otros entornos o


herramienta similar es el Adobe Director, que permite disear animaciones multimedia.
Los podemos considerar lenguajes de programacin? Si lo consideramos de una forma
estricta, no. No son lenguajes textuales, los programas no se pueden escribir en un fichero
de texto. Tampoco tienen elementos fundamentales de los lenguajes de programacin como
son las funciones y los tipos de datos. Aunque, por otro lado, si consideramos de una forma
ms amplia el concepto de funcin, s que existen elementos en esos lenguajes que
posibilitan la creacin de abstracciones reutilizables en distintos programas.

Podramos decir que son herramientas de programacin de animaciones que utilizan ciertas
caractersticas de los lenguajes de programacin.

Caractersticas de los lenguajes de programacin

Cules son estas caractersticas?

Segn la definicin de la Encyclopedia of Computer Science (Encyclopedia of Computer


Science, 4th Edition, Anthony Ralston (Editor), Edwin D. Reilly (Editor), David
Hemmendinger (Editor), Wiley, 2000. Disponible en la biblioteca politcnica con
identificador: POE R0/E/I/ENC/RAL):
"A programming language is a set of characters, rules for combining them, and rules
specifying their effects when executed by a computer, which have the following four
characteristics:

1. It requires no knowledge of machine code on the part of the user


2. It has machine independence
3. Is translated into machine language
4. Employs a notation that is closer to that of the specific problem being solved that
the machine code"

Segn Abelson y Sussman:

"We are about to study the idea of a computational process. Computational


processes are abstract beings that inhabit computers. As they evolve, processes
manipulate other abstract things called data. The evolution of a process is directed
by a pattern of rules called a program. [...] The programs we use to conjure
processes are like a sorcerer's spells. They are carefully composed from symbolic
expressions in arcane and esoteric programming languages that prescribe the tasks
we want our processes to perform."

Y despus, aade otra idea fundamental:

"A powerful programming language is more than just a means for instructing a
computer to perform tasks. The language also serves as a framework within which
we organize our ideas about processes. Thus, when we describe a language, we
should pay particular attention to the means that the language provides for
combining simple ideas to form more complex ideas."

As, entre las caractersticas de un lenguaje de programacin podemos remarcar las


siguientes:

Define un proceso que se ejecuta en un computador


Es de alto nivel, cercano a los problemas que se quieren resolver (abstraccin)
Permite construir nuevas abstracciones que se adapten al dominio que se
programa

Para Abelson y Sussman, todos los lenguajes de programacin permiten combinar


ideas simples en ideas ms complejas mediante los siguientes tres mecanismos:

expresiones primitivas, que representan las entidades ms simples del


lenguaje
mecanismos de combinacin con los que se construyen elementos
compuestos a partir de elementos ms simples
mecanismos de abstraccin con los que dar nombre a los elementos
compuestos y manipularlos como unidades
Cuando se habla de elementos en el prrafo anterior nos estamos refiriendo tanto a
datos como a programas.

Una breve lista de caractersticas comunes a todos los lenguajes de programacin:

Tienen una sintaxis: un conjunto de reglas que definen qu expresiones de texto


son correctas. Por ejemplo, en C todas las sentencias deben terminar en ';'.
Los lenguajes de programacin se ejecutan en un computador y tienen una
determinada semntica que define cul ser el resultado de la ejecucin de un
programa.
Definen un conjunto de tipos de datos primitivos que representan los posibles
valores que pueden devolver las expresiones del lenguaje.
Tienen mecanismos de abstraccin para definir nuevos tipos de datos a partir
de los primitivos o nuevas funciones y procedimientos.

Abstraccin

El concepto de abstraccin es fundamental en informtica. Para modelar un dominio


(sistema de informacin de una universidad, sistema de sensores de una planta
qumica, etc.) es necesario definir distintas abstracciones que nos permitan tratar sus
elementos.

Una abstraccin agrupa un conjunto de elementos (datos y procedimientos) y le da un


nombre. Por ejemplo, cuando hablamos del sistema de informacin de una universidad
identificamos elementos como:

Estudiantes
Asignaturas
Matrcula
Expediente acadmico
...

Existen abstracciones propias de la computacin, que se utilizan en mltiples


dominios. Por ejemplo, abstracciones de datos como:

Listas
rboles
Grafos
Tablas hash

Tambin existen abstracciones que nos permiten tratar con dispositivos y ordenadores
externos:

Fichero
Raster grfico
Protocolo TCP/IP

Uno de los trabajos principales de un informtico es la construccin de abstracciones


que permitan ahorrar tiempo y esfuerzo a la hora de tratar con la complejidad del
mundo real.

Una misin fundamental de los lenguajes de programacin es proporcionar


herramientas que sirvan para construir estas abstracciones.

Paradigmas de programacin
Existe una enorme variedad de lenguajes de programacin, no slo en cuanto a su
sintaxis, sino tambin en cuanto a su comportamiento o semntica.

Hemos visto que cada ao el nmero de lenguajes se incrementa, de forma que para los
informticos es prcticamente imposible conocer cada nuevo lenguaje que aparece.
Pero eso no es un problema, ya que todos esos lenguajes tienen caractersticas
comunes y se pueden agrupar en cuatro grandes grupos o modelos computacionales
llamados paradigmas.

Todos los lenguajes pertenecen a uno de esos cuatro paradigmas. De forma que, si se
conocen las caractersticas de los paradigmas de programacin, es muy sencillo
aprender a programar en un nuevo lenguaje, porque tendr las caractersticas del
paradigma de programacin al que pertenezca.

El origen de la palabra paradigma entendida como un marco general en el que se


desarrollan teoras cientficas se encuentra en el trabajo de 1962 del filsofo e
historiador de la ciencia Thomas S. Kuhn, La estructura de las revoluciones
cientficas. Esa palabra ha sido despus adoptada por el mundo de la computacin
para definir un conjunto de ideas y principios comunes de grandes grupos de lenguajes
de programacin.

La definicin de la palabra paradigma ms cercana a lo que se quiere decir en la


expresin paradigma de programacin es la siguiente:

"Un marco filosfico y terico de una escuela o disciplina cientfica en el que se


formulan teoras, leyes y generalizaciones y los experimentos realizados en soporte
de ellas."

Un paradigma define un conjunto de reglas, patrones y estilos de programacin que


son usados por los lenguajes de programacin que usan ese paradigma.

Podemos distinguir cuatro grandes paradigmas de programacin:

Paradigma funcional
Paradigma lgico
Paradigma imperativo o procedural
Paradigma orientado a objetos

Algunas caractersticas importantes de cada uno de estos paradigmas.

Paradigma funcional

En el paradigma funcional la computacin se realiza mediante la evaluacin de


expresiones.

Programacin declarativa
Definicin y evaluacin de funciones
Uso de la recursin
Funciones como datos primitivos

Valores sin efectos laterales


Programacin declarativa, es que no existe la asignacin ni el cambio de
estado de variable en un programa. Las variables son identificadores de valores que
no cambian en toda la evaluacin (como constantes definidas con un DEFINE de C).
Slo existen valores y expresiones matemticas que devuelven nuevos valores a
partir de los declarados.

En los lenguajes imperativos, sin embargo, se realizan asignaciones que cambian el


valor de una variable ya existente.

Consideremos el siguiente ejemplo:

1. { int x = 1;
2. x = x+1;
3. int y = x+1;
4. { int x = y;
5. y = x+2; }
6. y = x;}
En este fragmento de programa se mezclan instrucciones imperativas con
instrucciones declarativas. Por ejemplo, las instrucciones 1, 3 y 4 son declarativas,
ya que estn definiendo una variable con un valor asociado (estn dando un nombre
a un valor). Sin embargo, las sentencias 2, 5 y 6 son imperativas, ya que estn
modificando el valor de una variable mediante asignaciones de nuevos valores.

Una funcin llamada con los mismos argumentos siempre devuelve el mismo
resultado.
Hemos dicho que en los lenguajes declarativos las variables denotan nombres
asociados a valores. En los lenguajes imperativos, sin embargo, las variables
denotan referencias a valores que existen en algn lugar del ordenador (estado) y
que pueden ser cambiados con sucesivas instrucciones. Este es otro elemento que
distingue los lenguajes imperativos de los declarativos. En los lenguajes declarativos
no existe ese concepto de valor que reside en algn lugar del ordenador al que
nos referimos mediante una variable.
Por ejemplo, veamos el siguiente programa imperativo:

{ int a[3] = {1, 5, 7}


int *b = a;
b[0] = 3;
int c = a[0]+a[2];}
En este programa, las variables a y b hacen referencia al mismo array (a la misma
posicin de memoria). De hecho, cuando en la tercera instruccin cambiamos el
valor de la primera componente de b, tambin estamos modificando los valores a
los que se refiere a, de forma que en la ltima instruccin c tomar el valor de 10.
Al modificar b hemos modificado a ya que ambos se refieren (apuntan, si
utilizamos una terminologa de C) al mismo valor. Esto se denomina un efecto
lateral.

Un lenguaje declarativo no contiene referencias en el sentido del ejemplo anterior.


Las referencias son exclusivas de los lenguajes imperativos. El uso de referencias
permite que un mismo objeto (dato, valor) sea referenciado por ms de un
identificador y permite efectos laterales como el que hemos visto. Un lenguaje
declarativo est libre de efectos laterales.

Lisp es el lenguaje ms importante del paradigma funcional. De l nacen una


enorme variedad de dialectos, de los que Scheme es uno de los ms extendidos en
mbitos acadmicos en la actualidad; Pero no son lenguajes funcionales puros (a
diferencia de otros lenguajes como Haskell)

Ejemplo usando lenguaje Scheme:

(define (factorial x)
(if (= x 0)
1
(* x (factorial (- x 1)))))

>(factorial 8)
40320
>(factorial 30)
265252859812191058636308480000000

;; factorial proceso recursivo

(define (factorial n)

(if (= n 1)

(* n (factorial (- n 1)))))

;; factorial otro proceso

(define (factorial n)
(fact-iter 1 1 n))

(define (fact-iter product counter max-count)

(if (> counter max-count)

product

(fact-iter (* counter product)

(+ counter 1)

max-count)))

Paradigma lgico

Definicin de reglas
Unificacin como elemento de computacin
Programacin declarativa
Se basa en la teora lgica de primer orden, aunque tambin incorporan algunos
comportamientos de orden superior como la lgica difusa.

En qu consiste (ejemplo)
La programacin lgica permite formalizar hechos del mundo real, por ejemplo:

las aves vuelan


los pinginos no vuelan
"periquito" es un ave
"sandokan" es un perro
"alegra" es un ave

y tambin reglas o restricciones:

una mascota vuela si es un ave y no es un pingino


Ante dicho "programa" es posible establecer hiptesis que no son ms que preguntas o
incgnitas, por ejemplo:

"periquito" vuela ?
qu mascotas vuelan ?....

Gracias a que la lgica de primer orden es computable, el ordenador ser capaz de verificar la
hiptesis, es decir, responder a las incgnitas:

Es cierto que "periquito" vuela.


"periquito" y "alegra" vuelan.

Obsrvese que el programa lgico no solamente es capaz de responder si una determinada


hiptesis es verdadera o falsa. Tambin es capaz de determinar que valores de la incgnita
hacen cierta la hiptesis.

Este ejemplo es claramente acadmico. Sin embargo, consideremos el siguiente ejemplo: el


sistema de control de semforos de una ciudad.

El estado de cada uno de los semforos (verde, rojo o mbar) constituye los hechos del
mundo real. El programa en s consiste en unas pocas reglas de sentido comn: determinados
semforos no pueden permanecer simultneamente en verde, un semforo solamente puede
transitar de verde a mbar y de mbar a rojo, etc. La hiptesis es el estado en el que deberan
estar cada uno de los semforos en el siguiente instante de tiempo.

ste es un ejemplo imposible de resolver mediante programacin tradicional, ya que la lgica


subyacente al comportamiento de los semforos en su conjunto queda enmascarada por
simples rdenes imperativas del tipo "cambiar color de tal o cual semforo".

Otro ejemplo:

padrede('juan', 'maria'). % juan es padre de maria


padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela').
padrede('carlos', 'debora').

hijode(A,B) :- padrede(B,A).
abuelode(A,B) :- padrede(A,C), padrede(C,B).
hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \== B.

familiarde(A,B) :- padrede(A,B).
familiarde(A,B) :- hijode(A,B).
familiarde(A,B) :- hermanode(A,B).

?- hermanode('juan', 'marcela').
yes
?- hermanode('carlos', 'juan').
no
?- abuelode('pablo', 'maria').
yes
?- abuelode('maria', 'pablo').
no

La programacin lgica se usa en aplicaciones de inteligencia artificial o relacionadas:

Sistemas expertos, donde un sistema de informacin imita las recomendaciones de un


experto sobre algn dominio de conocimiento.
Demostracin automtica de teoremas, donde un programa genera nuevos teoremas
sobre una teora existente.

Reconocimiento de lenguaje natural, donde un programa es capaz de comprender


(con limitaciones) la informacin contenida en una expresin lingstica humana.

La programacin lgica tambin se utiliza en aplicaciones ms "mundanas" pero de manera


muy limitada, ya que la programacin tradicional es ms adecuada a tareas de propsito
general.

El lenguaje de programacin lgica por excelencia es Prolog,

Paradigma imperativo
Los lenguajes de programacin que cumplen el paradigma imperativo se caracterizan
por tener un estado implcito que es modificado mediante instrucciones o comandos
del lenguaje. Como resultado, estos lenguajes tienen una nocin de secuenciacin de
los comandos para permitir un control preciso y determinista del estado.

Definicin de procedimientos
Definicin de tipos de datos
Chequeo de tipos en tiempo de compilacin
Cambio de estado de variables
Pasos de ejecucin de un proceso

EJEMPLO EN LENGUAJE IMPERATIVO:

Funcin del factorial usando ciclos o iterativa.


A continuacin se muestra la funcin:

long int factorial(int n)


{
int prod=1;
for (int contador=n; contador>0; contador--)
prod*=contador;
return (prod);
}

Funcin del factorial usando recursividad.


A continuacin se muestra la funcin:

long int Factorial(int n)


{
if (n == 0)
return 1;
else
return (n * Factorial (n - 1)); //aqui se llama a si misma
}

Algunos lenguajes imperativos: BASIC, C, D 1 ,Fortran, Pascal, Pauscal en espaol,


Perl, PHP,

Y los bucles?

En programacin funcional pura no existe el concepto de bucle tan


extendido en los lenguajes de programacin imperativos. Ya veremos que
no es necesario si tenemos la recursin. Cualquier funcin en donde se
necesite repetir una sentencia un nmero de veces (o hasta que se cumpla
una determinada condicin) se puede expresar de forma recursiva.

Aunque en Scheme existe la forma especial (do ...) que permite


implementar un bucle nosotros no vamos a usarla. El uso de esta forma
especial nos aparta del paradigma funcional,

Por ejemplo, las siguientes funciones son equivalentes. En C, usando un bucle while

suma-hasta (k) {
suma=0;j=0;
while (j<=k) {
suma = suma+j;
j++;
}
}

En Scheme, usando la recursin:

(define (suma-hasta k)
(if (= k 0)
0
(+ k (suma-hasta (- k 1)))))
Paradigma orientado a objetos
Definicin de clases y herencia
Objetos como abstraccin de datos y procedimientos
Polimorfismo y chequeo de tipos en tiempo de ejecucin

Una reflexin importante es que la separacin entre los paradigmas y los


lenguajes no es estricta. Existen ideas comunes a distintos paradigmas, as
como lenguajes de programacin que soportan ms de un paradigma. Por
ejemplo, el paradigma funcional y lgico comparten caractersticas
declarativas, mientras que el paradigma orientado a objetos y procedural
tienen caractersticas imperativas.

Otros paradigmas de programacin menos comunes:

Paradigmas de programacin paralela y concurrente


Paradigmas basados en restricciones
Paradigmas visuales

También podría gustarte