P. 1
Paradigmas de Programación

Paradigmas de Programación

4.58

|Views: 60.478|Likes:
Publicado porHector Zarate
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.
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.

More info:

Published by: Hector Zarate on Dec 19, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/23/2015

pdf

text

original

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 1.2 Definición de Paradigma 2 3

2. Paradigmas de Programación
Programación Imperativa Programación Funcional Programación Lógica Programación Orientado a Objetos 5 6 8 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é significa 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 voluntariamente1. 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 general. 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. 2. 3. Un vocabulario de símbolos; Reglas sintácticas para combinar estos símbolos en cadenas y fórmulas gramaticalmente correctas, y 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 sentencias 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. 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 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ósito 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. Shand, John. Fundamentals of Philosophy. Estados Unidos: Routledge, 2003. 2

2

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

Paradigmas de Programación

actividades.”3. Ahora, entiéndase ‘receptor’ por cualquier tipo de computadora y nuestra 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 diccionario de María Moliner (véase el recuadro amarillo) es cierta y suficiente, para esta discusión necesitaremos de una más amplia. Una búsqueda fugaz por Google, apunta a una relación entre el término paradigma y 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ácticas 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 Robert 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. paradigma (del lat. "paradigma", del gr. "parádeigma") 1 m. *Modelo o *ejemplo.

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

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

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

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 formato .mov la última producción estelarizada por Jenna Jameson. Todas estas distintas aplicaciones 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 jerarquizados 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 Eventos, 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 oració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 programación imperativa consiste en una serie de comandos que una computadora ejecutará. Estos comandos detallan de forma clara y específica el cómo hacer las cosas y llevarán al programa a través de distintos estados. En nuestro ejemplo, con el Sr. Gutierrez, 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 varios lenguajes son: integer, que define parcialmente el conjunto de los números enteros, float, que representa números reales y boolean, que generalmente especifica al pequeñ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 muchos 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 asignació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. 2.

Seleccionar una opción entre algunos flujos de control alternativos, e 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 selecciona entre dos opciones y puede extenderse a una selección prácticamente infinita mediante 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, ejecutan 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 iteración. Estas se dividen en dos categorías principales dependiendo de cómo se controla la iteración. Pueden ser: controlados con contadores (tradicionalmente for) o controlados 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 caracterí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-dominio o rango de f.

5

La anidación 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. Página 277.
6

Dijkstra, 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>
7 8

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

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

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 consecuentemente 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.

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

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 manipulado 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 declarativos. 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 algunos 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 atributos12:

Título

Estelar

Género

Estreno

Nosotros los Pobres El Padrecito 12 Pepe el Toro ¡Espérame en Siberia, vida mía! Santo y Blue Demon contra los monstruos

Pedro Infante Cantinflas Pedro Infante Mauricio Garcés

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 devolvería el conjunto ordenado de forma descendente por su fecha de estreno:

SELECT * FROM peliculas ORDER BY estreno DESC

11 Véase:

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 Cantinflas. 8

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

Paradigmas de Programación

Título

Estelar

Género

Estreno

¡Espérame en Siberia, vida mía! Santo y Blue Demon contra los monstruos El Padrecito Pepe el Toro Nosotros los Pobres

Mauricio Garcés

Comedia

1969

El Santo

Sci-Fi Mexicano Comedia Drama Drama

1969

Cantinflas Pedro Infante Pedro Infante

1964 1952 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, vida mía! Santo y Blue Demon contra los monstruos El Padrecito

Mauricio Garcés

Comedia

1969

El Santo

Sci-Fi Mexicano Comedia

1969

Cantinflas

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 veces 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 introductorio: Un objeto está compuesto por estados y métodos. Los estados son propiedades del objeto y están representados por variables con valores únicos 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 comportamientos 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 definició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étodos. Me gusta pensar en la taxonomía para ejemplificar esta propiedad. Pensemos en un zorro común (Vulpes Vulpes, aquí a la derecha). 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. Todos 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 objeto. 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 color 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 especí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, hasta 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 orientada 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 forma, cualquier tipo de programación involucra los elementos mencionados en este trabajo. Finalmente, pienso que la comprensión de todos estos conceptos es significativamente más sencilla al ponerlos en práctica. Así que si hay algo que aún te parece misterioso 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 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.

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: 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.

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-Share Alike 2.0 Generic.

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

15

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->