Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Paradigmas de Programacion
Paradigmas de Programacion
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
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.
Sapir, Edward, Language. Estados Unidos: BiblioBazaar, 2008. Pgina 17. Shand, John. Fundamentals of Philosophy. Estados Unidos: Routledge, 2003. 2
Paradigmas de Programacin
actividades.3. Ahora, entindase receptor por cualquier tipo de computadora y nuestra denicin de lenguaje de programacin esta lista.
Higman, Bryan. A Comparative Study in Programming Languages. Reino Unido: MacDonald, 1967. (Traduccin propia)
3 4
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
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.
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
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
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
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:
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
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
1969
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
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.
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.
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.
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.
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.
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/>
15