You are on page 1of 17

Paradigmas de Programación

Héctor Zárate Rea

Universidad Nacional Autónoma de México


Facultad de Ingeniería

Ciudad de México, Noviembre de 2008.

Profesor: Pedro Israel Rodríguez Pérez


Resumen
Este trabajo detalla brevemente los cuatro paradigmas de programación más relevantes
junto con sus características: Imperativo, Funcional , Orientado a objetos y Lógico.
Además, ofrece una introducción en la que son definidos varios conceptos esenciales
dentro del tema y que intentan explorar más allá de las ciencias del cómputo.

No pretende ser una guía profunda y extensiva acerca de cada uno de estos paradigmas
pero sí tiene el propósito de que para sus lectores sea un primer acercamiento al tema
que pueda ser fehaciente, claro, divertido y fácil de entender.

Es publicado bajo la licencia de Creative Commons:

Creative Commons Attribution-Noncommercial-Share Alike 2.5 Mexico


Paradigmas de Programación

Tabla de Contenidos

1. Introducción
1.1 Lenguajes de Programación 2

1.2 Definición de Paradigma 3

2. Paradigmas de Programación
Programación Imperativa 5

Programación Funcional 6

Programación Lógica 8

Programación Orientado a Objetos 10

3. Conclusión

4. Recomendaciones

5. Bibliografía

6. Ilustraciones

Héctor Zárate | www.mieldemaple.com 1


Paradigmas de Programación

1. Introducción
Me parece imposible hablar de paradigmas de programación sin antes saber qué signifi-
ca el término paradigma, qué es un lenguaje de programación, y entender exactamente
qué es el lenguaje. Así que me parece prudente empezar desde aquí.

Edward Sapir, definió el lenguaje como un método humano y no instintivo de


comunicar ideas, emociones y deseos mediante un sistema de símbolos producidos vo-
luntariamente1. Esta definición en principio se refiere a un lenguaje natural, que es
aquel lenguaje hablado o escrito que usamos para la comunicación más cotidiana y ge-
neral. No obstante, en este trabajo nos es de interés otro tipo de lenguajes llamados
“lenguajes formales”.

Un lenguaje formal es un lenguaje donde existe una gramática que implementa


el conjunto de concatenaciones (cadenas) posibles de un alfabeto finito particular. Esta
gramática provee al lenguaje de 3 elementos importantes:

1. Un vocabulario de símbolos;

2. Reglas sintácticas para combinar estos símbolos en cadenas y fórmulas gramatical-


mente correctas, y

3. Reglas semánticas para darle significado e interpretación a esas fórmulas.

Con esto, se obtiene un lenguaje en el que a diferencia de un lenguaje natural, sus sen-
tencias no significan nada en particular2 , ya que su significado aparece cuando les es
dado un significado a sus símbolos, que no da cabida a ambigüedades y que carece del
poder de crecer y evolucionar autónomamente.

1.1 Lenguajes de Programación

Los lenguajes de programación forman un subconjunto de los lenguajes formales. Me-


diante ellos el ser humano puede comunicarse con una computadora y decirle qué es lo
que tiene que hacer y, al mismo tiempo, sirven para comunicarse con otros seres huma-
nos y expresarles qué es lo que se quiere que haga una computadora. Para terminar, vale
la pena citar otra definición del lenguaje, esta vez por Bryan Higman, quien lo describió
como: “(...) un conjunto de objetos llamados vocabulario que pueden ser combinados
en cadenas lineales de acuerdo a ciertas reglas llamadas gramática. Esto, con el propósi-
to de comunicarse con un receptor e inducir en él la realización de ciertas

1 Sapir, Edward, Language. Estados Unidos: BiblioBazaar, 2008. Página 17.

2 Shand, John. Fundamentals of Philosophy. Estados Unidos: Routledge, 2003.


Héctor Zárate | www.mieldemaple.com 2
Paradigmas de Programación

actividades.”3. Ahora, entiéndase ‘receptor’ por cualquier tipo de computadora y nues-


tra definición de lenguaje de programación esta lista.

1.2 Definición de Paradigma


¿Qué es un paradigma? Aunque la definición de paradigma que se encuentra en el dic-
cionario de María Moliner (véase el recuadro amarillo) es cierta y suficiente, para esta
discusión necesitaremos de una más amplia.
paradigma (del lat. "paradigma", Una búsqueda fugaz por Google, apunta
del gr. "parádeigma") a una relación entre el término paradigma y
1 m. *Modelo o *ejemplo. algún oscuro individuo llamado Thomas
Kuhn, quien en su libro publicado en 1962,
The Structure of Scientific Revolutions, amplió la
concepción del término paradigma. Para Kuhn, el término 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ác-
ticas 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 Ro-


bert Floyd4 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.

3Higman, Bryan. A Comparative Study in Programming Languages. Reino Unido: MacDonald,


1967. (Traducción propia)

4 Sin asociación con la banda británica de rock psicodélico, Pink Floyd.


Héctor Zárate | www.mieldemaple.com 3
Paradigmas de Programación

2. Paradigmas de Programación

Hoy en día, el uso de la computación es extremadamente diverso e intensivo, el cual va


desde asistir el control de aeronaves o plantas nucleares, hasta aplicaciones tan críticas
como determinar el tiempo de centrifugado en nuestra lavadora o reproducir en forma-
to .mov la última producción estelarizada por Jenna Jameson. Todas estas distintas apli-
caciones del cómputo han requerido del desarrollo de un sinnúmero de lenguajes de
programación, cada uno con propósitos y formas distintas. No obstante, todos estos
lenguajes pueden ser clasificados en una jerarquía de familias a partir del modelo que
siguen para definir y operar información (Figura 1), es decir, que pueden ser jerarquiza-
dos según el paradigma que siguen.

En una primera clasificación, se encuentran dos grandes grupos en donde es


posible englobar casi todos los paradigmas de programación conocidos hasta ahora.
Aunque existe un gran número de paradigmas, voy a enfocarme solamente a los más
esenciales que son: programación imperativa; orientada a objetos; funcional, y lógica.

Paradigmas de Programación

Programación Declarativa Programación Imperativa

Funcional Orientada a Objetos

Lógica Visual, Orientada a Even-


tos, Orientada a Aspectos,
etc.

Figura 1: Clasificación general de los paradigmas de programación.

Héctor Zárate | www.mieldemaple.com 4


Paradigmas de Programación

Programación Imperativa

El término imperativo en este caso, no difiere esencialmente del modo


gramático imperativo del español, donde una ora-
ción como: “¡Gutiérrez, cierre el Youtube y
póngase a trabajar en lo que le pedí!” le esta
indicando a un sujeto, presumiblemente flojo,
que deje de perder el tiempo y, en lugar de
eso, realice el trabajo para el cual se le esta
pagando. Es decir, es una orden para realizar
una acción específica. De forma similar, la pro-
gramación imperativa consiste en una serie de co-
mandos que una computadora ejecutará. Estos co-
mandos detallan de forma clara y específica el cómo
hacer las cosas y llevarán al programa a través de dis-
tintos estados. En nuestro ejemplo, con el Sr. Gutie-
rrez, un comando resultó en un cambio de estado: de
“procastinador” a “productivo”.

Los elementos más importantes de este paradigma son:

• Variables: Son objetos cuyo valor depende de una localidad de memoria y que puede
cambiar a lo largo de la ejecución del programa. La definición de este paradigma sería
imposible sin estos elementos fundamentales, ya que los estados de un programa son
representados y diferenciados por su conjunto de variables y sus contenidos.

• Tipos de datos: Son abstracciones que representan un conjunto de valores junto con
las operaciones y relaciones que son aplicables a ellos. Algunos tipos comunes en va-
rios lenguajes son: integer, que define parcialmente el conjunto de los números ente-
ros, float, que representa números reales y boolean, que generalmente especifica al pe-
queño conjunto conformado por true y false. Es importante recalcar que estos no son
los únicos tipos de datos y que muchos lenguajes permiten la implementación de mu-
chos otros.

• Expresiones: Aunque son la forma fundamental de programar instrucciones, en la


programación imperativa su papel más importante está en las sentencias de asigna-
ción. Una sentencia de asignación sirve para modificar el valor de una variable y así
cambiar el estado de un programa. Esto puede ser algo muy sencillo como copiar el
valor de una variable a otra localidad de memoria o involucrar algo más complicado
como realizar operaciones sobre las variables antes de re-localizarlas en la memoria.
Los operadores empleados pueden ser matemáticos, lógicos o una combinación de
ambos.

• Estructuras de Control: Las estructuras de control son mecanismos que un lenguaje


requiere para realizar dos tareas indispensables:

Héctor Zárate | www.mieldemaple.com 5


Paradigmas de Programación

1. Seleccionar una opción entre algunos flujos de control alternativos, e

2. Iterar la ejecución de una serie de sentencias.

Una sentencia de selección provee al programa de medios para elegir entre dos o
más “caminos” de ejecución. Su forma más sencilla es el condicional if que seleccio-
na entre dos opciones y puede extenderse a una selección prácticamente infinita me-
diante constructores múltiples (como switch o case) o la anidación5 de condicionales
if.

Las sentencias de iteración representan el verdadero poder del cómputo, ejecu-


tan un bloque de sentencias desde cero hasta un número teóricamente infinito de
veces. Es interesante que todos los lenguajes de programación desde el primero6, que
data de la década de los cuarenta, Plankalkül, implementaron estructuras de itera-
ción. Estas se dividen en dos categorías principales dependiendo de cómo se contro-
la la iteración. Pueden ser: controlados con contadores (tradicionalmente for) o con-
trolados lógicamente (como while).

En esta categoría también estarían incluidas sentencias como goto, sin embargo,
estas han caído en desuso y que, como señalo Dijkstra 7, representan más desventajas
que ventajas.

Excepto por los paradigmas lógico y funcional, todos los demás heredan muchas carac-
terísticas de la programación imperativa.

Programación Funcional
El paradigma funcional esta basado en el concepto matemático de función8:

Una función f asigna a cada miembro de un conjunto


X, exactamente un miembro de un conjunto Y.

Donde: El conjunto X y Y pueden o no ser el mismo y


donde X es llamado dominio de f y Y es llamado co-do-
minio o rango de f.

5 La anidación consiste en integrar estructuras de control dentro de otras.

6Rojas Raul y Ulf Hashagen. The First Computers: History and Architectures. Estados Unidos:
MIT Press, 2002. Página 277.

7Dijkstra, Edsger W. Go To Statement Considered Harmful. Communications of the ACM. Vol. 11,
No. 3, Páginas 147 y 148.
Disponible en: <http://www.ifi.uzh.ch/req/courses/kvse/uebungen/Dijkstra_Goto.pdf>

8 Johnsonbaugh, Richard. Discrete Mathematics. Estados Unidos: Prentice Hall, 2008. Pagina 117.
Héctor Zárate | www.mieldemaple.com 6
Paradigmas de Programación

El paradigma funcional considera al programa como una función matemática,


donde el dominio representaría el conjunto de todas las entradas posibles (inputs) y el
rango sería el conjunto de todas las salidas posibles (outputs). La forma en que funciona
puede ser entendida como una caja negra:

Parámetros Resultado

Figura 2: Las entradas, llamadas parámetros, se operan mediante una definición y se obtiene una
salida llamada resultado.

Al observar la Figura 2, podríamos pensar que cualquier tipo de programación podría


ser clasificada como programación funcional y esto es relativamente cierto a excepción
de unos puntos claves:

• Primero, que en los lenguajes funcionales no existe el concepto de variables y conse-


cuentemente tampoco existen operaciones de asignación. Aunque podría parecer que
los parámetros de una función se comportan como una variable (puesto que pueden
llevar un nombre y su uso es de hecho parecido al de las variables), esto es incorrecto:
El valor de los parámetros es dado como fijo al inicio de la función.

• Segundo, la existencia de una propiedad llamada transparencia referencial (Referential


transparency), la cual indica que una función sólo depende de sus parámetros y que
tendrá efecto únicamente en su resultado, por lo que podríamos llamar a una función
arbitrariamente sin tener efectos colaterales en el resto de las computaciones.

• Por último, que una función puede ser utilizada como parámetros y resultados de
cualquier otra función.

Los lenguajes más utilizados dentro de este paradigma son Standard ML,
Haskell y Scheme9 aunque al hoy por hoy LOGO10 figuraría junto con otros dialectos de
LISP.

9Goldberg, Benjamin. Functional Programming Languages. ACM Computing Surveys, Vol. 28, No.
1, Marzo 1996. Disponible en: <http://cs.nyu.edu/goldberg/pubs/gold96.pdf>.

10"TIOBE Programming Community Index for November 2008". TIOBE Software: The Coding
Standards Industry. 13 de Noviembre de 2008.
<http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html>.
Héctor Zárate | www.mieldemaple.com 7
Paradigmas de Programación

Programación Lógica
El paradigma lógico difiere de forma importante de otros paradigmas 11. No sólo en su
sintaxis o semántica, sino que en él la lógica representa conocimiento, el cual es mani-
pulado mediante inferencias. A diferencia de los demás paradigmas, trabajar en este
significa especificar qué hacer y no cómo hacerlo, por ello son llamados lenguajes de-
clarativos.

El proceso general de la programación lógica es que a partir de un conjunto de


reglas (axiomas) e inferencias podamos comprobar nuevas proposiciones que nos sean
relevantes. Este proceso está basado en reglas de lógica de primer orden.

Al ser un paradigma bastante abstracto vale la pena esclarecerlo a través de al-


gunos ejemplos. Aunque Prolog es el lenguaje más representativo en este paradigma,
haré los ejemplos en Structured Query Language (SQL), un lenguaje para operar bases
de datos y el cual representa otra de las aplicaciones de la programación lógica.

Definamos un conjunto de películas mexicanas inmortales con algunos de sus atribu-


tos12:

Título Estelar Género Estreno

Nosotros los Pobres Pedro Infante Drama 1948

El Padrecito 12 Cantinflas Comedia 1964

Pepe el Toro Pedro Infante Drama 1952

¡Espérame en Siberia, Mauricio Garcés Comedia 1969


vida mía!

Santo y Blue Demon El Santo Sci-Fi 1969


contra los monstruos Mexicano

Ahora, suponiendo este conjunto, vamos a realizar algunas operaciones sobre él. Prime-
ro, voy a realizar una consulta que devolvería el conjunto ordenado de forma descen-
dente por su fecha de estreno:

SELECT *
FROM peliculas
ORDER BY estreno DESC

11 Véase: Mitchell, John. Concepts in Programming Languages, Reino Unido: Cambridge Univer-
sity Press, 2003.

12 Desde el punto de vista de quien suscribe, la Magnum opus de Mario Moreno Cantinflas.
Héctor Zárate | www.mieldemaple.com 8
Paradigmas de Programación

Título Estelar Género Estreno

¡Espérame en Siberia, Mauricio Garcés Comedia 1969


vida mía!

Santo y Blue Demon El Santo Sci-Fi 1969


contra los monstruos Mexicano

El Padrecito Cantinflas Comedia 1964

Pepe el Toro Pedro Infante Drama 1952

Nosotros los Pobres Pedro Infante Drama 1948

Después tratemos de seleccionar un subconjunto de películas a través de predicados,


que son consultas que involucran el operador where. Dado que el invierno esta cerca y
la privación de luz solar podría desencadenarnos un trastorno afectivo estacional, vamos
a seleccionar todas las películas que no sean del género “Drama”.

SELECT *
FROM peliculas
WHERE genero <> ‘Drama’
ORDER BY estreno DESC

Lo que resultaría en este subconjunto de elementos que esta ordenado por fecha de
estreno y los cuales satisfacen una clausula específica: que su genero sea distinto a
“Drama”.

Título Estelar Género Estreno

¡Espérame en Siberia, Mauricio Garcés Comedia 1969


vida mía!

Santo y Blue Demon El Santo Sci-Fi 1969


contra los monstruos Mexicano

El Padrecito Cantinflas Comedia 1964

Dado que no este no es un tutorial de SQL no se agregará más al respecto, no obstante,


parece suficiente para demostrar cómo en el paradigma lógico se establece qué hacer
pero no cómo hacerlo. En estos dos ejemplos, hemos declarado únicamente que es lo

Héctor Zárate | www.mieldemaple.com 9


Paradigmas de Programación

que queríamos hacer con nuestro conjunto, pero no definimos cosas como, cuantas ve-
ces iterar alguna instrucción, especificaciones para hacer cada comparación, etc.

Programación Orientado a Objetos


A menos que los libros sobre computación que usted consulta hayan sido impresos
cuando el término “teléfono celular” fuera desconocido para la mayoría de la población,
sabrá que la programación orientada a objetos (POO) es el paradigma de programación
más popular en la actualidad.

Programar bajo este paradigma es como tratar de simular o modelar los objetos
del mundo real. Una mascota como un perro podría servir para un ejemplo introducto-
rio:

Un objeto está compuesto por estados y métodos. Los estados son pro-
piedades del objeto y están representados por variables con valores úni-
cos para cada objeto y que son llamadas variables de instancia. En este
ejemplo, podríamos pensar en cosas como: edad, color, tener hambre,
tener ganas de salir al parque, etc., propiedades todas
que son intrínsecas a cada perro pero cuyos valores son
únicos en cada uno.

Los métodos son representaciones de los com-


portamientos que el objeto es capaz de hacer. Por
ejemplo, mi perro en particular tendría los métodos:
sentarse, echarse, comer, saludar, dormir y bailar, entre
otros, y que son comportamientos que probablemente presentan otros perros.

Ahora que tenemos una noción de lo que es un objeto, quiero mencionar las
propiedades más generales y formales de este paradigma:

• Encapsulamiento: Significa que el código o datos de un objeto pueden estar ocultos


para cualquier entidad externa a él.

• Herencia: La herencia es la propiedad de crear nuevos objetos a partir de la defini-


ción de otros. Un objeto “nuevo” será idéntico al modelo que seguimos para crearlo,
excepto por algunos cambios incrementales o re-definiciones de sus estados o méto-
dos.

Me gusta pensar en la taxonomía para ejemplificar esta propiedad.


Pensemos en un zorro común (Vulpes Vulpes, aquí a la de-
recha). Como se ve, esta especie pertenece al género
Vulpes, el cual especifica características como: tamaño
pequeño, cráneo aplanado y el color de la punta de la
cola generalmente distinto al resto del cuerpo. A su vez,
este género esta contenido dentro de la familia Canidae,
que se caracteriza por tener garras no retráctiles y
caminar apoyándose únicamente en sus dedos. To-
dos los cánidos son al mismo tiempo miembros del
orden Carnivora, el cual es bastante diverso y que en particular
Héctor Zárate | www.mieldemaple.com 10
Paradigmas de Programación

tiene dientes y garras para cazar a otros animales, ojos que apuntan hacia el frente y,
claro, un menú donde la mayoría de los platillos son carne. Y así ad nauseam...

Ahora, supongamos que cada una de estas categorías es la definición de un ob-


jeto. Así, cualquier objeto del tipo Canidae presentaría todas las características de los
objetos de donde fue heredado, es decir, que sería vertebrado, tendría dientes, garras y
predilección por la carne. No obstante, esto no sucedería a la inversa: un objeto del
tipo Carnivora no necesariamente es pequeño o presenta la punta de la cola de un co-
lor diferente.

• Polimorfismo: Esencialmente, es la propiedad que le permite a un método aceptar o


devolver valores de más de un tipo. Formalmente se define así:

Siendo M un método y t1 y t2 son dos tipos de datos diferentes, M es polimórfico si M


puede ser ejecutado con el argumento t1: M( t1) y el argumento t2: M( t2)

De la misma manera una función puede ser definida como polimórfica si al llamarla
mediante dos parámetros distintos, arroja un retorno de tipos diferentes.

• Invocación Dinámica de Métodos (Dynamic Method Binding): Se traduce en que


cuando llamamos algún método de un objeto estaremos ejecutando la operación es-
pecífica de ese objeto y no alguna implementación de alguno de sus padres.

Este paradigma hace posible el desarrollo modular de un software, porque, has-


ta cierto grado, cada componente es independiente de los demás, lo que permite que
estos componentes puedan ser reutilizados y reciclados, incluso, a lo largo de distintos
proyectos. Es posible que esta “modularidad” haya colocado a la programación orienta-
da a objetos en la posición dominante en la que se encuentra ahora, dado que le ha
permitido a la industria encontrar nuevas formas de trabajo y patrones de diseño más
productivos.

Gran parte de los lenguajes más utilizados hoy en día están orientados a objetos,
entre ellos se encuentran: Java, C++, PHP, Python, C#, Delphi, Ruby, D y Actionscript,
entre otros.

Héctor Zárate | www.mieldemaple.com 11


Paradigmas de Programación

3. Conclusión
Como conclusión, sólo quiero recalcar que en la actualidad no existe una frontera bien
definida para cada paradigma. Los lenguajes actuales, como Ruby, Actionscript o
C# pueden ser mejor definidos como multi-paradigmas. Involucran características de
más de uno solo.

También quiero mencionar que estos cuatro paradigmas no son los únicos que
existen y hay muchos otros que parecen relevantes, como la programación a aspectos, o
que han sido ampliamente usados, como la programación a eventos. De cualquier for-
ma, cualquier tipo de programación involucra los elementos mencionados en este traba-
jo.

Finalmente, pienso que la comprensión de todos estos conceptos es significati-


vamente más sencilla al ponerlos en práctica. Así que si hay algo que aún te parece mis-
terioso e inexplicable una buena forma de resolverlo es programando.

Héctor Zárate | www.mieldemaple.com 12


Paradigmas de Programación

4. Recomendaciones
• Floyd, Robert. The Paradigms of Programming. 1978 ACM Turing Award Lecture.
<https://eprints.kfupm.edu.sa/70764/1/70764.pdf>

• Introduction to Computer Science | Programming Paradigms. Stanford School of En-


gineering). 10 de Noviembre de 2008
<http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d4707
55ee>

• Lycan, William. Philosphy of Language. Reino Unido: Routledge, 2000.

• Dershem, Herbert, y Michael Jipping. Programming Languages: Structures and Mo-


dels. Estados Unidos: PWS Publishing Company, 1995.

Héctor Zárate | www.mieldemaple.com 13


Paradigmas de Programación

5. Bibliografía
• Scott, Michael Lee. Programming Languages Pragmatics. Estados Unidos: Morgan
Kauffmann Publishers, 2000.

• Sebesta, Robert W. Concepts of Programming Languages. Estados Unidos: Pearson


Education, 2004.

• Linz, Peter. An Introduction to Formal Languages and Automata. Estados Unidos: Jo-
nes and Bartlett Publishers, 2001.

• Craig, Iain. Object-Oriented Programming Languages: Interpretation. Estados Uni-


dos: Springer, 2007.

• Bruce, Kim. Foundations of Object-oriented Languages: Types and Semantics. Estados


Unidos: MIT Press, 2002.

Héctor Zárate | www.mieldemaple.com 14


Paradigmas de Programación

6. Ilustraciones
• Bwrah bwrah. Shouting in the city... 21 de Mayo de 2008.
<http://flickr.com/photos/rrrr030/2512299748/>

• Zi, Prashant. Empty Product Box. 19 de Mayo de 2008.


<http://flickr.com/photos/prashant_zi/2505010429/>

• Brown, Vicki. Beggy Dog. 11 de Abril de 2007.


<http://flickr.com/photos/vickispics/455309498/>

• McCartney, Simon. The Inquisitive Fox. 5 de Septiembre de 2008.


<http://flickr.com/photos/vickispics/455309498/>

Utilizadas de acuerdo a la licencia Creative Commons Attribution-Noncommercial-Sha-


re Alike 2.0 Generic.

Héctor Zárate | www.mieldemaple.com 15

You might also like