Está en la página 1de 17

Paradigmas de Programacin Hctor Zrate Rea

Universidad Nacional Autnoma de Mxico Facultad de Ingeniera


Ciudad de Mxico, Noviembre de 2008.

Profesor: Pedro Israel Rodrguez Prez

Resumen
Este trabajo detalla brevemente los cuatro paradigmas de programacin ms relevantes junto con sus caractersticas: Imperativo, Funcional , Orientado a objetos y Lgico. Adems, ofrece una introduccin en la que son denidos varios conceptos esenciales dentro del tema y que intentan explorar ms all de las ciencias del cmputo. No pretende ser una gua profunda y extensiva acerca de cada uno de estos paradigmas pero s tiene el propsito de que para sus lectores sea un primer acercamiento al tema que pueda ser fehaciente, claro, divertido y fcil de entender.

Es publicado bajo la licencia de Creative Commons: Creative Commons Attribution-Noncommercial-Share Alike 2.5 Mexico

Paradigmas de Programacin

Tabla de Contenidos
1. Introduccin
1.1 Lenguajes de Programacin 1.2 Denicin de Paradigma 2 3

2. Paradigmas de Programacin
Programacin Imperativa Programacin Funcional Programacin Lgica Programacin Orientado a Objetos 5 6 8 10

3. Conclusin 4. Recomendaciones 5. Bibliografa 6. Ilustraciones

Hctor Zrate |www.mieldemaple.com

Paradigmas de Programacin

1. Introduccin
Me parece imposible hablar de paradigmas de programacin sin antes saber qu signica el trmino paradigma, qu es un lenguaje de programacin, y entender exactamente qu es el lenguaje. As que me parece prudente empezar desde aqu. Edward Sapir, deni el lenguaje como un mtodo humano y no instintivo de comunicar ideas, emociones y deseos mediante un sistema de smbolos producidos voluntariamente1. Esta denicin en principio se reere a un lenguaje natural, que es aquel lenguaje hablado o escrito que usamos para la comunicacin ms cotidiana y general. No obstante, en este trabajo nos es de inters otro tipo de lenguajes llamados lenguajes formales. Un lenguaje formal es un lenguaje donde existe una gramtica que implementa el conjunto de concatenaciones (cadenas) posibles de un alfabeto nito particular. Esta gramtica provee al lenguaje de 3 elementos importantes: 1. 2. 3. Un vocabulario de smbolos; Reglas sintcticas para combinar estos smbolos en cadenas y frmulas gramaticalmente correctas, y Reglas semnticas para darle signicado e interpretacin a esas frmulas.

Con esto, se obtiene un lenguaje en el que a diferencia de un lenguaje natural, sus sentencias no signican nada en particular2 , ya que su signicado aparece cuando les es dado un signicado a sus smbolos, que no da cabida a ambigedades y que carece del poder de crecer y evolucionar autnomamente.

1.1 Lenguajes de Programacin


Los lenguajes de programacin forman un subconjunto de los lenguajes formales. Mediante 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 humanos y expresarles qu es lo que se quiere que haga una computadora. Para terminar, vale la pena citar otra denicin 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 gramtica. Esto, con el propsito de comunicarse con un receptor e inducir en l la realizacin de ciertas

Sapir, Edward, Language. Estados Unidos: BiblioBazaar, 2008. Pgina 17. Shand, John. Fundamentals of Philosophy. Estados Unidos: Routledge, 2003. 2

Hctor Zrate |www.mieldemaple.com

Paradigmas de Programacin

actividades.3. Ahora, entindase receptor por cualquier tipo de computadora y nuestra denicin de lenguaje de programacin esta lista.

1.2 Definicin de Paradigma


Qu es un paradigma? Aunque la denicin de paradigma que se encuentra en el diccionario de Mara Moliner (vase el recuadro amarillo) es cierta y suciente, para esta discusin necesitaremos de una ms amplia. Una bsqueda fugaz por Google, apunta a una relacin entre el trmino paradigma y algn oscuro individuo llamado Thomas Kuhn, quien en su libro publicado en 1962, The Structure of Scientic Revolutions, ampli la concepcin del trmino paradigma. Para Kuhn, el trmino se reere a la forma en que un cientco percibe al mundo y a la estructura de teoras y suposiciones que modican esta percepcin. Otro punto importante para nuestro inters es el sealamiento que hace Kuhn acerca de cmo el xito de un paradigma es consecuencia de su efectividad para resolver algn 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 prcticas alrededor de estas ideas, y no solamente un conjunto de prcticas y conocimientos objetivamente validados. Ms especcamente para la ciencia de la computacin, probablemente fue Robert Floyd4 quien habl por primera vez del trmino Paradigmas de Programacin y quien los deni como un proceso de diseo que va ms all de una gramtica, reglas semnticas y algoritmos, sino que es un conjunto de mtodos sistemticos aplicables en todos los niveles del diseo de programas. paradigma (del lat. "paradigma", del gr. "pardeigma") 1 m. *Modelo o *ejemplo.

Higman, Bryan. A Comparative Study in Programming Languages. Reino Unido: MacDonald, 1967. (Traduccin propia)
3 4

Sin asociacin con la banda britnica de rock psicodlico, Pink Floyd. 3

Hctor Zrate |www.mieldemaple.com

Paradigmas de Programacin

2. Paradigmas de Programacin
Hoy en da, el uso de la computacin es extremadamente diverso e intensivo, el cual va desde asistir el control de aeronaves o plantas nucleares, hasta aplicaciones tan crticas como determinar el tiempo de centrifugado en nuestra lavadora o reproducir en formato .mov la ltima produccin estelarizada por Jenna Jameson. Todas estas distintas aplicaciones del cmputo han requerido del desarrollo de un sinnmero de lenguajes de programacin, cada uno con propsitos y formas distintas. No obstante, todos estos lenguajes pueden ser clasicados en una jerarqua de familias a partir del modelo que siguen para denir y operar informacin (Figura 1), es decir, que pueden ser jerarquizados segn el paradigma que siguen. En una primera clasicacin, se encuentran dos grandes grupos en donde es posible englobar casi todos los paradigmas de programacin conocidos hasta ahora. Aunque existe un gran nmero de paradigmas, voy a enfocarme solamente a los ms esenciales que son: programacin imperativa; orientada a objetos; funcional, y lgica.

Paradigmas de Programacin

Programacin Declarativa

Programacin Imperativa

Funcional

Orientada a Objetos

Lgica

Visual, Orientada a Eventos, Orientada a Aspectos, etc.

Figura 1: Clasicacin general de los paradigmas de programacin.

Hctor Zrate |www.mieldemaple.com

Paradigmas de Programacin

Programacin Imperativa
El trmino imperativo en este caso, no diere esencialmente del modo gramtico imperativo del espaol, donde una oracin como: Gutirrez, cierre el Youtube y pngase a trabajar en lo que le ped! le esta indicando a un sujeto, presumiblemente ojo, 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 accin especca. De forma similar, la programacin imperativa consiste en una serie de comandos que una computadora ejecutar. Estos comandos detallan de forma clara y especca el cmo hacer las cosas y llevarn al programa a travs de distintos estados. En nuestro ejemplo, con el Sr. Gutierrez, un comando result en un cambio de estado: de procastinador a productivo. Los elementos ms 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 ejecucin del programa. La denicin de este paradigma sera 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 varios lenguajes son: integer, que dene parcialmente el conjunto de los nmeros enteros, oat, que representa nmeros reales y boolean, que generalmente especica al pequeo conjunto conformado por true y false. Es importante recalcar que estos no son los nicos tipos de datos y que muchos lenguajes permiten la implementacin de muchos otros. Expresiones: Aunque son la forma fundamental de programar instrucciones, en la programacin imperativa su papel ms importante est en las sentencias de asignacin. Una sentencia de asignacin sirve para modicar 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 ms complicado como realizar operaciones sobre las variables antes de re-localizarlas en la memoria. Los operadores empleados pueden ser matemticos, lgicos o una combinacin de ambos. Estructuras de Control: Las estructuras de control son mecanismos que un lenguaje requiere para realizar dos tareas indispensables:
Hctor Zrate |www.mieldemaple.com 5

Paradigmas de Programacin

1. 2.

Seleccionar una opcin entre algunos ujos de control alternativos, e Iterar la ejecucin de una serie de sentencias.

Una sentencia de seleccin provee al programa de medios para elegir entre dos o ms caminos de ejecucin. Su forma ms sencilla es el condicional if que selecciona entre dos opciones y puede extenderse a una seleccin prcticamente innita mediante constructores mltiples (como switch o case) o la anidacin5 de condicionales if. Las sentencias de iteracin representan el verdadero poder del cmputo, ejecutan un bloque de sentencias desde cero hasta un nmero tericamente innito de veces. Es interesante que todos los lenguajes de programacin desde el primero6, que data de la dcada de los cuarenta, Plankalkl, implementaron estructuras de iteracin. Estas se dividen en dos categoras principales dependiendo de cmo se controla la iteracin. Pueden ser: controlados con contadores (tradicionalmente for) o controlados lgicamente (como while). En esta categora tambin estaran incluidas sentencias como goto, sin embargo, estas han cado en desuso y que, como sealo Dijkstra 7, representan ms desventajas que ventajas. Excepto por los paradigmas lgico y funcional, todos los dems heredan muchas caractersticas de la programacin imperativa.

Programacin Funcional
El paradigma funcional esta basado en el concepto matemtico de funcin8:

Una funcin 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-dominio o rango de f.

La anidacin consiste en integrar estructuras de control dentro de otras.

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

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

Johnsonbaugh, Richard. Discrete Mathematics. Estados Unidos: Prentice Hall, 2008. Pagina 117. 6

Hctor Zrate |www.mieldemaple.com

Paradigmas de Programacin

El paradigma funcional considera al programa como una funcin matemtica, donde el dominio representara el conjunto de todas las entradas posibles (inputs) y el rango sera el conjunto de todas las salidas posibles (outputs). La forma en que funciona puede ser entendida como una caja negra:

Parmetros

Resultado

Figura 2: Las entradas, llamadas parmetros, se operan mediante una denicin y se obtiene una salida llamada resultado.

Al observar la Figura 2, podramos pensar que cualquier tipo de programacin podra ser clasicada como programacin funcional y esto es relativamente cierto a excepcin de unos puntos claves: Primero, que en los lenguajes funcionales no existe el concepto de variables y consecuentemente tampoco existen operaciones de asignacin. Aunque podra parecer que los parmetros de una funcin 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 parmetros es dado como jo al inicio de la funcin. Segundo, la existencia de una propiedad llamada transparencia referencial (Referential transparency), la cual indica que una funcin slo depende de sus parmetros y que tendr efecto nicamente en su resultado, por lo que podramos llamar a una funcin arbitrariamente sin tener efectos colaterales en el resto de las computaciones. Por ltimo, que una funcin puede ser utilizada como parmetros y resultados de cualquier otra funcin. Los lenguajes ms utilizados dentro de este paradigma son Standard ML, Haskell y Scheme9 aunque al hoy por hoy LOGO10 gurara junto con otros dialectos de LISP.

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

"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>.
10

Hctor Zrate |www.mieldemaple.com

Paradigmas de Programacin

Programacin Lgica
El paradigma lgico diere de forma importante de otros paradigmas 11. No slo en su sintaxis o semntica, sino que en l la lgica representa conocimiento, el cual es manipulado mediante inferencias. A diferencia de los dems paradigmas, trabajar en este signica especicar qu hacer y no cmo hacerlo, por ello son llamados lenguajes declarativos. El proceso general de la programacin lgica 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 lgica de primer orden. Al ser un paradigma bastante abstracto vale la pena esclarecerlo a travs de algunos ejemplos. Aunque Prolog es el lenguaje ms 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 programacin lgica. Denamos un conjunto de pelculas mexicanas inmortales con algunos de sus atributos12:

Ttulo

Estelar

Gnero

Estreno

Nosotros los Pobres El Padrecito 12 Pepe el Toro Esprame en Siberia, vida ma! Santo y Blue Demon contra los monstruos

Pedro Infante Cantinas Pedro Infante Mauricio Garcs

Drama Comedia Drama Comedia

1948 1964 1952 1969

El Santo

Sci-Fi Mexicano

1969

Ahora, suponiendo este conjunto, vamos a realizar algunas operaciones sobre l. Primero, voy a realizar una consulta que devolvera el conjunto ordenado de forma descendente por su fecha de estreno:

SELECT * FROM peliculas ORDER BY estreno DESC

11 Vase:

Mitchell, John. Concepts in Programming Languages, Reino Unido: Cambridge University Press, 2003.
12

Desde el punto de vista de quien suscribe, la Magnum opus de Mario Moreno Cantinas. 8

Hctor Zrate |www.mieldemaple.com

Paradigmas de Programacin

Ttulo

Estelar

Gnero

Estreno

Esprame en Siberia, vida ma! Santo y Blue Demon contra los monstruos El Padrecito Pepe el Toro Nosotros los Pobres

Mauricio Garcs

Comedia

1969

El Santo

Sci-Fi Mexicano Comedia Drama Drama

1969

Cantinas Pedro Infante Pedro Infante

1964 1952 1948

Despus tratemos de seleccionar un subconjunto de pelculas a travs de predicados, que son consultas que involucran el operador where. Dado que el invierno esta cerca y la privacin de luz solar podra desencadenarnos un trastorno afectivo estacional, vamos a seleccionar todas las pelculas que no sean del gnero Drama.

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

Lo que resultara en este subconjunto de elementos que esta ordenado por fecha de estreno y los cuales satisfacen una clausula especca: que su genero sea distinto a Drama.

Ttulo

Estelar

Gnero

Estreno

Esprame en Siberia, vida ma! Santo y Blue Demon contra los monstruos El Padrecito

Mauricio Garcs

Comedia

1969

El Santo

Sci-Fi Mexicano Comedia

1969

Cantinas

1964

Dado que no este no es un tutorial de SQL no se agregar ms al respecto, no obstante, parece suciente para demostrar cmo en el paradigma lgico se establece qu hacer pero no cmo hacerlo. En estos dos ejemplos, hemos declarado nicamente que es lo
Hctor Zrate |www.mieldemaple.com 9

Paradigmas de Programacin

que queramos hacer con nuestro conjunto, pero no denimos cosas como, cuantas veces iterar alguna instruccin, especicaciones para hacer cada comparacin, etc.

Programacin Orientado a Objetos


A menos que los libros sobre computacin que usted consulta hayan sido impresos cuando el trmino telfono celular fuera desconocido para la mayora de la poblacin, sabr que la programacin orientada a objetos (POO) es el paradigma de programacin ms 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 podra servir para un ejemplo introductorio: Un objeto est compuesto por estados y mtodos. Los estados son propiedades del objeto y estn representados por variables con valores nicos para cada objeto y que son llamadas variables de instancia. En este ejemplo, podramos pensar en cosas como: edad, color, tener hambre, tener ganas de salir al parque, etc., propiedades todas que son intrnsecas a cada perro pero cuyos valores son nicos en cada uno. Los mtodos son representaciones de los comportamientos que el objeto es capaz de hacer. Por ejemplo, mi perro en particular tendra los mtodos: sentarse, echarse, comer, saludar, dormir y bailar, entre otros, y que son comportamientos que probablemente presentan otros perros. Ahora que tenemos una nocin de lo que es un objeto, quiero mencionar las propiedades ms generales y formales de este paradigma: Encapsulamiento: Signica que el cdigo 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 denicin de otros. Un objeto nuevo ser idntico al modelo que seguimos para crearlo, excepto por algunos cambios incrementales o re-deniciones de sus estados o mtodos. Me gusta pensar en la taxonoma para ejemplicar esta propiedad. Pensemos en un zorro comn (Vulpes Vulpes, aqu a la derecha). Como se ve, esta especie pertenece al gnero Vulpes, el cual especica caractersticas como: tamao pequeo, crneo aplanado y el color de la punta de la cola generalmente distinto al resto del cuerpo. A su vez, este gnero esta contenido dentro de la familia Canidae, que se caracteriza por tener garras no retrctiles y caminar apoyndose nicamente en sus dedos. Todos los cnidos son al mismo tiempo miembros del orden Carnivora, el cual es bastante diverso y que en particular
Hctor Zrate |www.mieldemaple.com 10

Paradigmas de Programacin

tiene dientes y garras para cazar a otros animales, ojos que apuntan hacia el frente y, claro, un men donde la mayora de los platillos son carne. Y as ad nauseam... Ahora, supongamos que cada una de estas categoras es la denicin de un objeto. As, cualquier objeto del tipo Canidae presentara todas las caractersticas de los objetos de donde fue heredado, es decir, que sera vertebrado, tendra dientes, garras y predileccin por la carne. No obstante, esto no sucedera a la inversa: un objeto del tipo Carnivora no necesariamente es pequeo o presenta la punta de la cola de un color diferente. Polimorsmo: Esencialmente, es la propiedad que le permite a un mtodo aceptar o devolver valores de ms de un tipo. Formalmente se dene as: Siendo M un mtodo y t1 y t2 son dos tipos de datos diferentes, M es polimrco si M puede ser ejecutado con el argumento t1: M( t1) y el argumento t2: M( t2) De la misma manera una funcin puede ser denida como polimrca si al llamarla mediante dos parmetros distintos, arroja un retorno de tipos diferentes. Invocacin Dinmica de Mtodos (Dynamic Method Binding): Se traduce en que cuando llamamos algn mtodo de un objeto estaremos ejecutando la operacin especca de ese objeto y no alguna implementacin de alguno de sus padres. Este paradigma hace posible el desarrollo modular de un software, porque, hasta cierto grado, cada componente es independiente de los dems, 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 programacin orientada a objetos en la posicin dominante en la que se encuentra ahora, dado que le ha permitido a la industria encontrar nuevas formas de trabajo y patrones de diseo ms productivos. Gran parte de los lenguajes ms utilizados hoy en da estn orientados a objetos, entre ellos se encuentran: Java, C++, PHP, Python, C#, Delphi, Ruby, D y Actionscript, entre otros.

Hctor Zrate |www.mieldemaple.com

11

Paradigmas de Programacin

3. Conclusin
Como conclusin, slo quiero recalcar que en la actualidad no existe una frontera bien denida para cada paradigma. Los lenguajes actuales, como Ruby, Actionscript o C#pueden ser mejor denidos como multi-paradigmas. Involucran caractersticas de ms de uno solo. Tambin quiero mencionar que estos cuatro paradigmas no son los nicos que existen y hay muchos otros que parecen relevantes, como la programacin a aspectos, o que han sido ampliamente usados, como la programacin a eventos. De cualquier forma, cualquier tipo de programacin involucra los elementos mencionados en este trabajo. Finalmente, pienso que la comprensin de todos estos conceptos es signicativamente ms sencilla al ponerlos en prctica. As que si hay algo que an te parece misterioso e inexplicable una buena forma de resolverlo es programando.

Hctor Zrate |www.mieldemaple.com

12

Paradigmas de Programacin

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 Engineering). 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 Models. Estados Unidos: PWS Publishing Company, 1995.

Hctor Zrate |www.mieldemaple.com

13

Paradigmas de Programacin

5. Bibliografa
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: Jones and Bartlett Publishers, 2001. Craig, Iain. Object-Oriented Programming Languages: Interpretation. Estados Unidos: Springer, 2007. Bruce, Kim. Foundations of Object-oriented Languages: Types and Semantics. Estados Unidos: MIT Press, 2002.

Hctor Zrate |www.mieldemaple.com

14

Paradigmas de Programacin

6. Ilustraciones
Bwrah bwrah. Shouting in the city... 21 de Mayo de 2008. <http://ickr.com/photos/rrrr030/2512299748/> Zi, Prashant. Empty Product Box. 19 de Mayo de 2008. <http://ickr.com/photos/prashant_zi/2505010429/> Brown, Vicki. Beggy Dog. 11 de Abril de 2007. <http://ickr.com/photos/vickispics/455309498/> McCartney, Simon. The Inquisitive Fox. 5 de Septiembre de 2008. <http://ickr.com/photos/vickispics/455309498/>

Utilizadas de acuerdo a la licencia Creative Commons Attribution-Noncommercial-Share Alike 2.0 Generic.

Hctor Zrate |www.mieldemaple.com

15

También podría gustarte