Está en la página 1de 26

UNIVERSIDAD NACIONAL DE INGENIERIA

FACULTAD DE INGENIERIA ECONOMICA Y CIENCIAS SOCIALES

COMPUTACION EC-110K SEMESTRE ACADEMICO 2012 - 2 ESPECIALIDAD: E1

Presentamos: Lenguajes de programacin Phyton y Ruby.

Presentado por: Aybar Fernndez, Omar 20121114A Mallma Huamancha, Summan Jus 20121436I Berrocal Duran, Pedro 20121311A

LIMA - PERU
2012

INDICE

RESUMEN.... 3
PYTHON Informacin general.. 4 Historia.. 6 Caractersticas y paradigmas........... 9 Modo interactivo...... 9 Elementos del lenguaje. 10 Comentarios. 10 Variables........... 11 Tipos de datos.. 11 Listas y tuplas........... 12 Diccionarios. 13 Conjuntos. 14 Listas por comprensin........... 15 Funciones. 15 Clases............ 15 Condicionales 17 Bucle for........... 18 Bucle White.. 18 Mdulos............ 19 Sistemas de objetos........... 19 Biblioteca estndar........... 19 RUBY Informacin general 20 Historia. 21 Objetivo 22 Semntica.. 23 Caractersticas.......... 24 Interaccin.... 25 Sintaxis.. 25 Licencia. 26 BIBLIOGRAFIA.. 27

RESUMEN
2

En este informe trataremos de lo que se tratan dos importantes lenguajes de programacin: Python y Ruby. Antes de todo responderemos a la pregunta: Qu es un lenguaje de programacin? Bueno, la respuesta es simple, aunque el proceso es algo complicado, y es que un lenguaje de programacin es un idioma artificial que nos ayuda a expresar procesos, crear programas, expresar logaritmos y realizar muchas otras funciones lgicas utilizando ciertas reglas y uno que otro elemento. Ahora bien. Procederemos a presentar una breve presentacin de lo que vienen a ser estos dos lenguajes de programacin.

Phyton: Python es un lenguaje de programacin de alto nivel cuya filosofa hace hincapi en
una sintaxis muy limpia y que favorezca un cdigo legible. Se trata de un lenguaje de programacin multiparadigma ya que soporta orientacin a objetos, programacin imperativa y, en menor medida, programacin funcional. Es un lenguaje interpretado, usa tipado dinmico, es fuertemente tipado y es multiplataforma. Python es un lenguaje muy expresivo: Los programas Python son muy compactos; un programa Python suele ser bastante ms corto que su equivalente en lenguajes como C. Python es muy legible: La sintaxis de Python es muy elegante y permite la escritura de programas cuya lectura resulta muy fcil. Python ofrece un entorno interactivo que facilita la realizacin de pruebas. El entorno de ejecucin de Python detecta muchos de los errores de programacin que escapan al control de los compiladores y proporciona informacin muy rica para detectarlos y corregirlos. Python puede usarse como lenguaje imperativo procedimental o como lenguaje orientado a objetos. Posee un rico juego de estructuras de datos que se pueden manipular de modo sencillo.

Ruby: Ruby, el lenguaje de programacin reflexivo orientado a objetos, se fundamenta en


una combinacin de sintaxis inspirada en Python, Pero con caractersticas de programacin orientada a objetos similares a Smalltalk. Adems, comparte funcionalidad con otros lenguajes de programacin como Lisp, Lua, Dylan y CLU. Ruby nos permite ahorrar tiempo y ser ms productivos que con otros lenguajes de programacin, porque pasamos ms tiempo haciendo que el ordenador haga lo que queremos y menos luchando con el lenguaje.

Python
3

Informacin general Desarrollador(es) : Python Software Foundation http:/ / www. python. org/ '' Extensiones comunes Paradigma : : .py, .pyc, .pyd, .pyo, .pyw multiparadigma: orientado a objetos, imperativo, funcional, reflexivo Apareci en Diseado por ltima versin estable : : : 1991 Guido van Rossum 3.3.0 / 2.7.3 (29 de septiembre de 2012 / 11 De abril de 2012) ltima versin en pruebas : 3.3.0rc3 (24 de septiembre de 2012)

Tipo de dato Implementaciones S60,

: :

fuertemente tipado, dinmico CPython, IronPython, Jython, Python for

PyPy, Unladen Swallow Dialectos Influido por Modula: : Stackless Python, RPython ABC, ALGOL 68, C, Haskell, Icon, Lisp,

3, Perl, Smalltalk, Java Ha influido a Ruby, : Boo, Cobra, D, Falcon, Genie, Groovy,

JavaScript, Cython Sistema operativo : Multiplataforma

Se trata de un lenguaje de programacin multiparadigma ya que soporta orientacin a objetos, programacin imperativa y, en menor medida, programacin funcional. Es un lenguaje interpretado, usa tipado dinmico, es fuertemente tipado y multiplataforma Es administrado por la Python software foundation. Posee una licencia de cdigo abierto, denominada Python software foundation lisence que es compatible con la Licencia publica general de GNU a partir de la versin 2.1.1, e incompatible en ciertas versiones anteriores. Python funciona en Windows, Linux / Unix, Mac OS X, y ha sido portado a Java y la mquina virtual. NET.

Historia

Python fue creado a finales de los ochenta por Guido van Rossum en el Centro para las Matemticas y la Informtica (CWI, Centrum Wiskunde & Informtica), en los Pases bajos, como un sucesor del lenguaje de programacin ABC, capaz de manejar excepciones e interactuar con el sistema operativo Amoeba. El nombre del lenguaje proviene de la aficin de su creador original, Guido van Rossum, por los humoristas britnicos Monte python. Van Rossum es el principal autor de Python, y su continuo rol central en decidir la direccin de Python es reconocido, refirindose a l como Benevolente dictador vitalicio (en ingls: Benevolent Dictator for Life, BDFL). En 1991, van Rossum public el cdigo de la versin 0.9.0 en alt.sources. En esta etapa del desarrollo ya estaban presentes clases con herencia, manejo de excepciones, funciones y los tipos modulares, como: str, list, dict, entre otros. Adems en este lanzamiento inicial apareca un sistema de mdulos adoptado de Modula-3; van Rossum describe el mdulo como una de las mayores unidades de programacin de Python. El modelo de excepciones en Python es parecido al de Modula-3, con la adicin de una clusula else. En el ao 1994 se formo Comp.lang.python, el foro de discusin principal de Python, marcando un hito en el crecimiento del grupo de usuarios de este lenguaje. Python alcanz la versin 1.0 en enero de 1994. Una caracterstica de este lanzamiento fueron las herramientas de la programacin funcional: lambda, reduce, filter y map. Van Rossum explic que hace 12 aos, Python adquiri lambda, reduce (), filter () y map (), cortesa de un hacker de Lisp que las extraaba y que envi parches. El donante fue Amrit Prem; no se hace ninguna mencin especfica de cualquier herencia de Lisp en las notas de lanzamiento. La ltima versin liberada proveniente de CWI fue Python 1.2. En 1995, van Rossum continu su trabajo en Python en la Corporation for national research initiatives (CNRI) en Reston, Virginia, donde lanz varias versiones del software.

Durante su estancia en CNRI, van Rossum lanz la iniciativa Computer Programming for Everybody (CP4E), con el fin de hacer la programacin ms accesible a ms gente, con un nivel de 'alfabetizacin' bsico en lenguajes de programacin, similar a la alfabetizacin bsica en ingls y habilidades matemticas necesarias por muchos trabajadores. Python tuvo un papel crucial en este proceso: debido a su orientacin hacia una sintaxis limpia, ya era idneo, y las metas de CP4E presentaban similitudes con su predecesor, ABC. El proyecto fue patrocinado por Darpa. En el ao 2007, el proyecto CP4E est inactivo, y mientras Python intenta ser fcil de aprender y no muy arcano en su sintaxis y semntica, alcanzando a los no-programadores, no es una preocupacin activa. En el ao 2000, el equipo principal de desarrolladores de Python se cambi a BeOpen.com para formar el equipo BeOpen Phyponlabs. CNRI pidi que la versin 1.6 fuera pblica, continuando su desarrollo hasta que el equipo de desarrollo abandon CNRI; su programa de lanzamiento y el de la versin 2.0 tenan una significativa cantidad de traslapo. Python 2.0 fue el primer y nico lanzamiento de BeOpen.com. Despus que Python 2.0 fuera publicado por BeOpen.com, Guido van Rossum y los otros desarrolladores de PythonLabs se unieron en Digital creations. Python 2.0 tom una caracterstica mayor del lenguaje de Programacin funcional Haskel: listas por comprensin. La sintaxis de Python para esta construccin es muy similar a la de Haskell, salvo por la preferencia de los caracteres de puntuacin en Haskell, y la preferencia de Python por palabras claves alfabticas. Python 2.0 introdujo adems un sistema de recoleccin de basura capaz de recolectar referencias cclicas. Posterior a este doble lanzamiento, y despus que van Rossum dej CNRI para trabajar con desarrolladores de software comercial, qued claro que la opcin de usar Python con software disponible bajo GNU GLP era muy deseable. La licencia usada entonces, la Phyton license, inclua una clusula estipulando que la licencia estaba gobernada por el estado de Virginia, por lo que, bajo la ptica de los abogados de free software foundation (FSF), se haca incompatible con GPL. CNRI y FSF se relacionaron para cambiar la licencia de software libre de Python para hacerla compatible con GPL. En el ao 2001, van Rossum fue premiado con FSF Award for the advancement of free software.

Python 1.6.1 es esencialmente el mismo que Python 1.6, con unos pocos arreglos de bugs, y con una nueva licencia compatible con GPL.

Cdigo Python con coloreado de sintaxis. Python 2.1 fue un trabajo derivado de Python 1.6.1, as como tambin de Python 2.0. Su licencia fue renombrada a: Phyton software foundation license. Todo el cdigo, documentacin y especificaciones aadidas, desde la fecha del lanzamiento de la versin alfa de Python 2.1, tiene como dueo a Phyton software foundation (PSF), una organizacin sin nimo de lucro fundada en el ao 2001, tomando como modelo la Apache software foundation .1 Incluido en este lanzamiento fue una implementacin del scoping ms parecida a las reglas de static scoping (del cual scheme es el originador). Una innovacin mayor en Python 2.2 fue la unificacin de los tipos en Python (tipos escritos en C), y clases (tipos escritos en Python) dentro de una jerarqua. Esa unificacin logr un modelo de objetos de Python puro y consistente. Tambin fueron agregados los generadores que fueron inspirados por el lenguaje Icon. Las adiciones a la biblioteca estndar de Python y las decisiones sintcticas fueron influenciadas fuertemente por java en algunos casos: el package logging, introducido en la versin 2.3, est basado en log4j; el parser sax, introducido en 2.0; el package threading, cuya clase Thread expone un subconjunto de la interfaz de la clase homnima en Java.

Caractersticas y paradigmas
Python es un lenguaje de programacin multiparadigma. Esto significa que ms que forzar a los programadores a adoptar un estilo particular de programacin, permite varios estilos: programacin orientada a objetos, programacin imperativa y programacin funcional. Otros paradigmas estn soportados mediante el uso de extensiones.
8

Python usa tipado dinmico y conteo de referencias para la administracin de memoria. Una caracterstica importante de Python es la resolucin dinmica de nombres; es decir, lo que enlaza un mtodo y un nombre de variable durante la ejecucin del programa (tambin llamado ligadura dinmica de mtodos). Otro objetivo del diseo del lenguaje es la facilidad de extensin. Se pueden escribir nuevos mdulos fcilmente en C o C++. Python puede incluirse en aplicaciones que necesitan una interfaz programable. Aunque la programacin en Python podra considerarse en algunas situaciones hostiles a la programacin funcional tradicional del Lisp, existen bastantes analogas entre Python y los lenguajes minimalistas de la familia Lisp como puede ser scheme.

Modo interactivo
El intrprete de Python estndar incluye un modo interactivo en el cual se escriben las instrucciones en una especie de intrprete de comandos: las expresiones pueden ser introducidas una a una, pudiendo verse el resultado de su evaluacin inmediatamente, lo que da la posibilidad de probar porciones de cdigo en el modo interactivo antes de integrarlo como parte de un programa. Esto resulta til tanto para las personas que se estn familiarizando con el lenguaje como para los programadores ms avanzados. Existen otros programas, tales como Idle, b python o I python que aaden funcionalidades extra al modo interactivo, como el autocompletado de cdigo y el coloreado de la sintaxis del lenguaje. Ejemplo del modo interactivo: >>> 1 + 1 2 >>> a = range(10) >>> print a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Elementos del lenguaje


Python fue diseado para ser ledo con facilidad. Una de sus caractersticas es el uso de palabras donde otros lenguajes utilizaran smbolos. Por ejemplo, los operadores lgicos ! , || y && en Python se escriben not, or y and, respectivamente. El contenido de los bloques de cdigo (bucles, funciones, clases, etc.) es delimitado mediante espacios o tabuladores, conocidos como indentasion, antes de cada lnea de rdenes pertenecientes al bloque. Python se diferencia as de otros lenguajes de programacin que mantienen como costumbre declarar
9

los bloques mediante un conjunto de caracteres, normalmente entre llaves {}. Se pueden utilizar tanto espacios como tabuladores para identar el cdigo, pero se recomienda no mezclarlos. Funcin factorial opcional) en C (indentacin Funcin factorial en Python (indentacin obligatoria) def factorial(x): if x == 0: return 1 else: return x * factorial(x - 1)

int factorial(int x) { if (x == 0) return 1; else return x * factorial(x - 1); }

Debido al significado sintctico de la indentacin, una instruccin debe estar contenida en lnea. No obstante, si por legibilidad se quiere dividir la instruccin en varias lneas, aadiendo una barra invertida \ al final de una lnea, se indica que la instruccin contina en la siguiente .Estas instrucciones son equivalentes: lista=['valor 1','valor 2','valor 3'] lista=['valor 1','valor 2' \ cadena='Esto es una cadena bastante ,'valor 3'] larga' cadena='Esto es una cadena ' \ 'bastante larga'

Comentarios
Los comentarios se inician con el smbolo #, y se extienden hasta el final de la lnea. El intrprete no tiene en cuenta los comentarios, lo cual es til si deseamos poner informacin adicional en nuestro cdigo como, por ejemplo, una explicacin sobre el comportamiento de una seccin del programa. # Comentario en una lnea en Python print "Hola mundo" # Tambin es posible aadir un comentario al final de una lnea de cdigo

Variables
Las variables se definen de forma dinmica, lo que significa que no se tiene que especificar cul es su tipo de antemano y puede tomar distintos valores en otro momento. Se usa el smbolo = para asignar valores. x=1 x = "texto" # Esto es posible porque los tipos son asignados dinmicamente

Tipos de datos
Los tipos de datos se pueden resumir en esta tabla:

Tipo

Clase

Notas

Ejemplo
10

str

Cadena

Inmutable Versin Unicode de str

'Cadena' u'Cadena'

unicode Cadena list Secuencia

Mutable, puede contener objetos de [4.0, 'Cadena', True] diversos tipos Inmutable, puede contener objetos de (4.0, 'Cadena', True) diversos tipos Mutable, sin orden, no contiene set([4.0, 'Cadena', True]) duplicados Inmutable, sin orden, no contiene frozenset([4.0, duplicados True]) Grupo de pares clave:valor 'Cadena',

tuple

Secuencia

set

Conjunto

frozenset Conjunto dict int Mapping Nmero entero Nmero entero Nmero decimal Booleano

{'key1': 1.0, 'key2': False}

Precisin fija, convertido en long en 42 caso de overflow. Precisin arbitraria 42L 456966786151987643L 3.1415927 True o False

long

float bool

Coma flotante de doble precisin Valor booleano verdadero o falso

Mutable: si su contenido (o dicho valor) puede cambiarse en tiempo de ejecucin. Inmutable: si su contenido (o dicho valor) no puede cambiarse en tiempo de ejecucin.

Listas y Tuplas

Para declarar una lista se usan los corchetes [], en cambio, para declarar una tupla se usan los parntesis (). En ambas los elementos se separan por comas, y en el caso de las tuplas es necesario que tengan como mnimo una coma. Tanto las listas como las tuplas pueden contener elementos de diferentes tipos. No obstante las listas suelen usarse para elementos del mismo tipo en cantidad variable mientras que las tuplas se reservan para elementos distintos en cantidad fija. Para acceder a los elementos de una lista o tupla se utiliza un ndice entero (empezando por "0", no por "1"). Se pueden utilizar ndices negativos para acceder elementos a partir del final.

Las listas se caracterizan por ser mutables, es decir, se puede cambiar su contenido en tiempo de ejecucin, mientras que las tuplas son inmutables ya que no es posible modificar el contenido una vez creada.
11

Listas >>> lista = ["abc", 42, 3.1415] >>> lista[0] # Acceder a un elemento por su ndice 'abc' >>> lista[-1] # Acceder a un elemento usando un ndice negativo 3.1415 >>> lista.append(True) # Aadir un elemento al final de la lista >>> lista ['abc', 42, 3.1415, True] >>> del lista[3] # Borra un elemento de la lista usando un ndice (en este caso: True) >>> lista[0] = "xyz" # Re-asignar el valor del primer elemento de la lista >>> lista[0:2] # Mostrar los elementos de la lista del ndice "0" al "2" (sin incluir este ltimo) ['xyz', 42] >>> lista_anidada = [lista, [True, 42L]] # Es posible anidar listas >>> lista_anidada [['xyz', 42, 3.1415], [True, 42L]] >>> lista_anidada[1][0] # Acceder a un elemento de una lista dentro de otra lista (del segundo elemento, mostrar el primer elemento) True Tuplas >>> tupla = ("abc", 42, 3.1415) >>> tupla[0] # Acceder a un elemento por su ndice 'abc' >>> del tupla[0] # No es posible borrar (ni aadir) un elemento en una tupla, lo que provocar una excepcin ( Excepcin ) >>> tupla[0] = "xyz" # Tampoco es posible re-asignar el valor de un elemento en una tupla, lo que tambin provocar una excepcin ( Excepcin ) >>> tupla[0:2] # Mostrar los elementos de la tupla del ndice "0" al "2" (sin incluir este ltimo) ('abc', 42) >>> tupla_anidada = (tupla, (True, 3.1415)) # Tambin es posible anidar tuplas >>> 1, 2, 3, "abc" # Esto tambin es una tupla, aunque es recomendable ponerla entre parntesis (recuerda que requiere, al menos, una coma) (1, 2, 3, 'abc') >>> (1) # Aunque entre parntesis, esto no es una tupla, ya que no posee al menos una coma, por lo que nicamente aparecer el valor 1 >>> (1,) # En cambio, en este otro caso, s es una tupla (1,) >>> (1, 2) # Con ms de un elemento no es necesaria la coma final (1, 2) >>> (1, 2,) # Aunque agregarla no modifica el resultado (1, 2)

12

Diccionarios

Para declarar un diccionario se usan las llaves {}. Contienen elementos separados por comas, donde cada elemento est formado por un par clave:valor (el smbolo : separa la clave de su valor correspondiente). Los diccionarios son mutables, es decir, se puede cambiar el contenido de un valor en tiempo de ejecucin. En cambio, las claves de un diccionario deben ser inmutables. Esto quiere decir, por ejemplo, que no podremos usar ni listas ni diccionarios como claves. El valor asociado a una clave puede ser de cualquier tipo de dato, incluso un diccionario.

>>> diccionario = {"cadena": "abc", "numero": 42, "lista": [True, 42L]} # Diccionario que tiene diferentes valores por cada clave, incluso una lista >>> diccionario["cadena"] # Usando una clave, se accede a su valor 'abc' >>> diccionario["lista"][0] # Acceder a un elemento de una lista dentro de un valor (del valor de la clave "lista", mostrar el primer elemento) True >>> diccionario["cadena"] = "xyz" # Re-asignar el valor de una clave >>> diccionario["cadena"] 'xyz' >>> diccionario["decimal"] = 3.1415927 # Insertar un nuevo elemento clave:valor >>> diccionario["decimal"] 3.1415927 >>> diccionario_mixto = {"tupla": (True, 3.1415), "diccionario": diccionario} # Tambin es posible que un valor sea un diccionario >>> diccionario_mixto["diccionario"]["lista"][1] # Acceder a un elemento dentro de una lista, que se encuentra dentro de un diccionario 42L >>> diccionario = {("abc",): 42} # S es posible que una clave sea una tupla, pues es inmutable >>> diccionario = {["abc"]: 42} # No es posible que una clave sea una lista, pues es mutable, lo que provocar una excepcin ( Excepcin )

Conjuntos

Los conjuntos se construyen mediante set(items) donde items es cualquier objeto iterable, como listas o tuplas. Los conjuntos no mantienen el orden ni contienen elementos duplicados.

13

Se suelen utilizar para eliminar duplicados de una secuencia, o para operaciones matemticas como interseccin, unin, diferencia y diferencia simtrica.

>>> conjunto_inmutable = frozenset(["a", "b", "a"]) # Se utiliza una lista como objeto iterable >>> conjunto_inmutable frozenset(['a', 'b']) >>> conjunto1 = set(["a", "b", "a"]) # Primer conjunto mutable >>> conjunto1 set(['a', 'b']) >>> conjunto2 = set(["a", "b", "c", "d"]) # Segundo conjunto mutable >>> conjunto2 set(['a', 'c', 'b', 'd']) # Recuerda, no mantienen el orden, como los diccionarios >>> conjunto1 & conjunto2 # Interseccin set(['a', 'b']) >>> conjunto1 | conjunto2 # Unin set(['a', 'c', 'b', 'd']) >>> conjunto1 - conjunto2 # Diferencia (1) set([]) >>> conjunto2 - conjunto1 # Diferencia (2) set(['c', 'd']) >>> conjunto1 ^ conjunto2 # Diferencia simtrica set(['c', 'd'])

Listas por comprensin


Una lista por comprensin (en ingls: list comprehension) es una expresin compacta para definir listas. Al igual que lambda, aparece en lenguajes funcionales. Ejemplos: >>> range(5) # La funcin "range" devuelve una lista, empezando en 0 y terminando con el nmero indicado menos uno [0, 1, 2, 3, 4] >>> [i*i for i in range(5)] # Por cada elemento del rango, lo multiplica por s mismo y lo agrega al resultado [0, 1, 4, 9, 16] >>> lista = [(i, i + 2) for i in range(5)] >>> lista [(0, 2), (1, 3), (2, 4), (3, 5), (4, 6)]

Funciones

Las funciones se definen con la palabra clave def, seguida del nombre de la funcin y sus parmetros. Otra forma de escribir funciones, aunque menos utilizada, es con la palabra clave lambda (que aparece en lenguajes funcionales como Lisp). El valor devuelto en las funciones con def ser el dado con la instruccin return.

def:
14

>>> def suma(x, y = 2): ... return x + y # Retornar la suma del valor de la variable "x" y el valor de "y" ... >>> suma(4) # La variable "y" no se modifica, siendo su valor: 2 6 >>> suma(4, 10) # La variable "y" s se modifica, siendo su nuevo valor: 10 14 lambda: >>> suma = lambda x, y = 2: x + y >>> suma(4) # La variable "y" no se modifica, siendo su valor: 2 6 >>> suma(4, 10) # La variable "y" s se modifica, siendo su nuevo valor: 10 14

Clases

Las clases se definen con la palabra clave class, seguida del nombre de la clase y, si hereda de otra clase, el nombre de esta. En Python 2.x es recomendable que una clase herede de "object", en Python 3.x esto ya no har falta. En una clase un "mtodo" equivale a una "funcin", y una "propiedad" equivale a una "variable".22 "__init__" es un mtodo especial que se ejecuta al instanciar la clase, se usa generalmente para inicializar propiedades y ejecutar mtodos necesarios. Al igual que todos los mtodos en Python, debe tener al menos un parmetro, generalmente se utiliza self. El resto de parmetros sern los que se indiquen al instanciar la clase. Las propiedades que se desee que sean accesibles desde fuera de la clase se deben declarar usando self. delante del nombre. De forma parecida a otros lenguajes donde existen restricciones de acceso a una propiedad o mtodo, public y private, en Python, para que una propiedad o mtodo sea privado se utiliza una23 barra baja _ antes del nombre de la variable, y despus de self..

>>> class Persona(object): ... def __init__(self, nombre, edad): ... self.nombre = nombre # Esta variable ser accesible desde fuera del objeto y desde los mtodos del propio objeto ... self.__edad = edad # Esta variable es privada, por lo que nicamente ser accesible por los mtodos del propio objeto ... def mostrar_edad(self): # Es necesario que, al menos, tenga un parmetro, generalmente: "self" ... print self.__edad # Como vemos, la variable privada s es accesible desde el propio objeto ... def modificar_edad(self, edad): # Ya que "self.__edad" no es accesible desde fuera del objeto, hagamos que se pueda modificar de forma controlada ... if edad < 0 or edad > 150: # Se comprueba que la edad no sea menor de 0 (algo imposible), ni mayor de 150 (algo realmente difcil)
15

... return False ... else: # Si est en el rango 0-150, entonces se modifica la variable, pero sigue sin ser accesible desde fuera del objeto ... self.__edad = edad # Como vemos, la variable privada s es accesible desde el propio objeto, al igual que en el mtodo "mostrar_edad" ... >>> p = Persona("Alicia", 20) # Instanciamos la clase, como se puede ver, no se especifica el valor de "self" >>> p.nombre # La variable "nombre" del objeto s es accesible desde fuera 'Alicia' >>> p.nombre = "Andrea" # Y por tanto, se puede cambiar su contenido >>> p.nombre 'Andrea' >>> print p.__edad # Pero la variable "__edad" no, al ser privada, lo que provocar una excepcin ( Excepcin ) >>> p.mostrar_edad() # Podemos llamar a un mtodo de la clase 20 >>> p.modificar_edad(21) # Y podemos cambiar la edad usando el mtodo especfico que hemos hecho para hacerlo de forma controlada >>> p.mostrar_edad() 21

Condicionales
Una sentencia condicional (if) ejecuta su bloque de cdigo interno slo si se cumple cierta condicin. Se define usando la palabra clave if seguida de la condicin, y el bloque de cdigo. Condiciones adicionales, si las hay, se introducen usando elif seguida de la condicin y su bloque de cdigo. Todas las condiciones se evalan secuencialmente hasta encontrar la primera que sea verdadera, y su bloque de cdigo asociado es el nico que se ejecuta. Opcionalmente, puede haber un bloque final (la palabra clave else seguida de un bloque de cdigo) que se ejecuta slo cuando todas las condiciones fueron falsas. >>> verdadero = True >>> if verdadero: # No es necesario poner "verdadero == True" ... print "Verdadero" ... else: ... print "Falso" ... Verdadero >>> lenguaje = "Python" >>> if lenguaje == "C": # lenguaje no es "C", por lo que este bloque se obviar y evaluar la siguiente condicin ... print "Lenguaje de programacin: C" ... elif lenguaje == "Python": # Se pueden aadir tantos bloques "elif" como se quiera ... print "Lenguaje de programacin: Python"
16

... else: # En caso de que ninguna de las anteriores condiciones fuera cierta, se ejecutara este bloque ... print "Lenguaje de programacin: indefinido" ... Lenguaje de programacin: Python >>> if verdadero and lenguaje == "Python": # Uso de "and" para comprobar que ambas condiciones son verdaderas ... print "Verdadero y Lenguaje de programacin: Python" ... Verdadero y Lenguaje de programacin: Python

Bucle for
El bucle for es similar a foreach en otros lenguajes. Recorre un objeto iterable, como una lista, una tupla o un generador, y por cada elemento del iterable ejecuta el bloque de cdigo interno. Se define con la palabra clave for seguida de un nombre de variable, seguido de in, seguido del iterable, y finalmente el bloque de cdigo interno. En cada iteracin, el elemento siguiente del iterable se asigna al nombre de variable especificado: >>> lista = ["a", "b", "c"] >>> for i in lista: # Iteramos sobre una lista, que es iterable ... print...abc >>> cadena = "abcdef" >>> for i in cadena: # Iteramos sobre una cadena, que tambin es iterable ... print i, # Aadiendo una coma al final hacemos que no introduzca un salto de lnea, sino un espacio ... abcdef

Bucle while
El bucle while evala una condicin y, si es verdadera, ejecuta el bloque de cdigo interno. Contina evaluando y ejecutando mientras la condicin sea verdadera. Se define con la palabra clave while seguida de la condicin, y a continuacin el bloque de cdigo interno: >>> numero = 0 >>> while numero < 10: ... numero += 1 ... print numero, ...1 2 3 4 5 6 7 8 9 10r

17

Mdulos
Existen muchas propiedades que se pueden agregar al lenguaje importando mdulos, que son "minicdigos" (la mayora escritos tambin en Python) que proveen de ciertas funciones y clases para realizar determinadas tareas. Un ejemplo es el mdulo Tkinter, que permite crear interfaces grficas basadas en la biblioteca Tk. Otro ejemplo es el mdulo os, que provee acceso a muchas funciones del sistema operativo. Los mdulos se agregan a los cdigos escribiendo import seguida del nombre del mdulo que queramos usar. >>> import os # Mdulo que provee funciones del sistema operativo >>> os.name # Devuelve el nombre del sistema operativo 'posix' >>> os.mkdir("/tmp/ejemplo") # Crea un directorio en la ruta especificada >>> import time # Mdulo para trabajar con fechas y horas >>> time.strftime("%Y-%m-%d %H:%M:%S") # Dndole un cierto formato, devuelve la fecha y/o hora actual '2010-08-10 18:01:17'

Sistema de objetos
En Python todo es un objeto (incluso las clases). Las clases, al ser objetos, son instancias de una metaclase. Python adems soporta herencia mltiple y polimorfismo. >>> cadena = "abc" # Una cadena es un objeto de "str" >>> cadena.upper() # Al ser un objeto, posee sus propios mtodos 'ABC' >>> lista = [True, 3.1415] # Una lista es un objeto de "list" >>> lista.append(42L) # Una lista tambin (al igual que todo) es un objeto, y tambin posee sus propios mtodos >>> lista [True, 3.1415, 42L]

Biblioteca estndar
Python tiene una gran biblioteca estndar, usada para una diversidad de tareas. Esto viene de la filosofa "pilas incluidas" ("batteries included") en referencia a los mdulos de Python. Los mdulos de la biblioteca estndar pueden mejorarse por mdulos personalizados escritos tanto en C como en Python. Debido a la gran variedad de herramientas incluidas en la biblioteca estndar, combinada con la habilidad de usar lenguajes de bajo nivel como C y
18

C++, los cuales son capaces de interactuar con otras bibliotecas, Python es un lenguaje que combina su clara sintaxis con el inmenso poder de lenguajes menos elegantes

Ruby

Informacin general

Desarrollador(es) Extensiones comunes Paradigma Apareci Diseado ltima versin estable Tipo de dato Implementaciones

Comunidad de desarrolladores http://www.ruby-lang.org/ .rb, .rbw

de

Ruby

: : : : : :

Multiparadigma: orientado a objetos, reflexivo En 1995 Por Yukihiro Matsumoto 1.9.3 [1] (31 de octubre de 2011) Fuertemente tipado, dinmico

: Ruby MRI [2], YARV [3], JRuby, Rubinius, IronRuby [4], MacRuby[5], HotRuby [6]

Influido por

Perl, Smalltalk, Python, Lisp, Eiffel, Scheme, Ada, Dylan, CLU

Ha influido a Sistema operativo

: :

Groovy, Falcon Multiplataforma


19

Historia
El lenguaje fue creado por Yukihiro "Matz" Matsumoto, quien empez a trabajar en Ruby el 24 de febrero de 1993, y lo present al pblico en el ao 1995. En el crculo de amigos de Matsumoto se le puso el nombre de "Ruby" (en espaol rub) como broma aludiendo al lenguaje de programacin "Perl" (perla). Yukihiro matz Matsumoto, mezcl partes de sus lenguajes favoritos (Perl, Smalltalk, Eiffel, Ada, y Lisp) para formar un nuevo lenguaje que incorporara tanto la programacin funcional como la programacin imperativa. A menudo ha manifestado que est tratando de hacer que Ruby sea natural, no simple, de una forma que se asemeje a la vida real. Continuando sobre esto, agrega: Ruby es simple en apariencia, pero complejo por dentro, como el cuerpo humano.

La ltima versin estable de la rama 1.8 es la 1.8.7_p248, de la rama 1.9 es la 1.9.2_p180. La versin en 1.9 que incorpora mejoras sustanciales en el rendimiento del lenguaje, que se espera queden reflejadas en la prxima versin estable de produccin del lenguaje, Ruby 1.9.0.1 Diferencias en rendimiento entre la actual implementacin de Ruby (1.8.6) y otros lenguajes de programacin ms arraigados han llevado al desarrollo de varias mquinas virtuales para Ruby. Entre sas se encuentra JRuby, un intento de llevar Ruby a la plataforma Java, y Rubinius, un intrprete modelado basado en las mquinas virtuales de Smalltalk. Los principales desarrolladores han apoyado la mquina virtual proporcionada por el proyecto YARV, que se fusion en el rbol de cdigo fuente de Ruby el 31 de diciembre de 2006, y se di a conocer como Ruby 1.9

20

Objetivo
El creador del lenguaje, Yukihiro "Matz" Matsumoto, ha dicho que Ruby est diseado para la productividad y la diversin del desarrollador, siguiendo los principios de una buena interfaz de usuario. Sostiene que el diseo de sistemas necesita enfatizar las necesidades humanas ms que las de la mquina: A menudo la gente, especialmente los ingenieros en computacin, se centran en las mquinas. Ellos piensan, "Haciendo esto, la mquina funcionar ms rpido. Haciendo esto, la mquina funcionar de manera ms eficiente. Haciendo esto..." Estn centrados en las mquinas, pero en realidad necesitamos centrarnos en las personas, en cmo hacen programas o cmo manejan las aplicaciones en los ordenadores. Nosotros somos los jefes. Ellos son los esclavos. Ruby sigue el "principio de la menor sorpresa", lo que significa que el lenguaje debe comportarse de tal manera que minimice la confusin de los usuarios experimentados. Matz ha dicho que su principal objetivo era hacer un lenguaje que le divirtiera a l mismo, minimizando el trabajo de programacin y la posible confusin. l ha dicho que no ha aplicado el principio de menor sorpresa al diseo de Ruby, pero sin embargo la frase se ha asociado al lenguaje de programacin Ruby. La frase en s misma ha sido fuente de controversia, ya que los no iniciados pueden tomarla como que las caractersticas de Ruby intentan ser similares a las caractersticas de otros lenguajes conocidos. En mayo de 2005 en una discusin en el grupo de noticias comp.lang.ruby, Matz trat de distanciar Ruby de la mencionada filosofa, explicando que cualquier eleccin de diseo ser sorprendente para alguien, y que l usa un estndar personal de evaluacin de la sorpresa. Si ese estndar personal se mantiene consistente habr pocas sorpresas para aquellos familiarizados con el estndar. Matz lo defini de esta manera en una entrevista: Todo el mundo tiene un pasado personal. Alguien puede venir de Python, otro de Perl, y pueden verse sorprendidos por distintos aspectos del lenguaje. Entonces podran decir 'Estoy sorprendido por esta caracterstica del lenguaje, as que Ruby viola el principio de la menor sorpresa.' Espera, espera. El principio de la menor sorpresa no es slo para ti. El principio de la menor sorpresa significa el principio de 'mi' menor sorpresa. Y significa el principio de la menor sorpresa despus de que aprendes bien Ruby. Por ejemplo, fui programador de C++ antes de empezar a disear Ruby. Program exclusivamente en C++ durante dos o tres aos. Y despus de dos aos de programar en C++, todava me sorprenda.

21

Semntica
Ruby es orientado a objetos: todos los tipos de datos son un objeto, incluidas las clases y tipos que otros lenguajes definen como primitivas, (como enteros, booleanos, y "nil"). Toda funcin es un mtodo. Las variables siempre son referencias a objetos, no los objetos mismos. Ruby soporta herencia con enlace dinmico, mixins y mtodos singleton (pertenecientes y definidos por una sola instancia ms que definidos por la clase). A pesar de que Ruby no soporta herencia mltiple, las clases pueden importar mdulos como mixins. La sintaxis procedural est soportada, pero todos los mtodos definidos fuera del mbito de un objeto son realmente mtodos de la clase Object. Como esta clase es padre de todas las dems, los cambios son visibles para todas las clases y objetos. Ruby ha sido descrito como un lenguaje de programacin multiparadigma: permite programacin procedural (definiendo funciones y variables fuera de las clases hacindolas parte del objeto raz Object), con orientacin a objetos, (todo es un objeto) o funcionalmente (tiene funciones annimas, clausuras o closures, y continuations; todaslas sentencias tiene valores, y las funciones devuelven la ltima evaluacin). Soporta introspeccin, reflexin y metaprogramacin, adems de soporte para hilos de ejecucin gestionados por el intrprete. Ruby tiene tipado dinmico, y soporta polimorfismo de tipos (permite tratar a subclases utilizando la interfaz de la clase padre). Ruby no requiere de polimorfismo de funciones al no ser fuertemente tipado (los parmetros pasados a un mtodo pueden ser de distinta clase en cada llamada a dicho mtodo). De acuerdo con las preguntas frecuentes de Ruby, "Si te gusta Perl, te gustar Ruby y su sintaxis. Si te gusta Smalltalk, te gustar Ruby y su semntica. Si te gusta Python, la enorme diferencia de diseo entre Python y Ruby/Perl puede que te convenza o puede que no."

22

Caractersticas

Orientado a objetos Cuatro niveles de mbito de variable: global, clase, instancia y local. Iteradores y clausuras o closures (pasando bloques de cdigo) Expresiones regulares nativas similares a las de Perl a nivel del lenguaje Posibilidad de redefinir los operadores (sobrecarga de operadores) Recoleccin de basura automtica. Carga dinmica de DLL/bibliotecas compartidas en la mayora de las plataformas Introspeccin, reflexin y metaprogramacin Amplia librera estndar Soporta inyeccin de dependencias Soporta alteracin de objetos en tiempo de ejecucin Continuaciones y generadores Manejo de excepciones, como Java y Python, para facilitar el manejo de errores. Escribir extensiones en C para Ruby es ms fcil que hacer lo mismo para Perl o Python, con una API muy elegante para utilizar Ruby desde C. Esto incluye llamadas para embeber Ruby en otros programas, y as usarlo como lenguaje de scripting. Tambin est disponible una interfaz SWIG. Tiene manejo de hilos (threading) independiente del sistema operativo. De esta forma, tienes soporte multi-hilo en todas las plataformas en las que corre Ruby, sin importar si el sistema operativo lo soporta o no, incluso en MS-DOS! Ruby es fcilmente portable: se desarrolla mayoritariamente en GNU/Linux, pero corre en varios tipos de UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc.

Ruby actualmente no tiene soporte completo de Unicode, a pesar de tener soporte parcial para UTF-8.

23

Interaccin
La distribucin oficial de Ruby incluye "irb" (Interactive Ruby Shell), un intrprete interactivo de lnea de comandos que puede ser usado para probar cdigo de manera rpida. El siguiente fragmento de cdigo representa una muestra de una sesin usando irb:

Sintaxis
La sintaxis de Ruby es similar a la de Perl o Python. La definicin de clases y mtodos est definida por palabras clave. Sin embargo, en Perl, las variables no llevan prefijos. Cuando se usa, un prefijo indica el mbito de las variables. La mayor diferencia con C y Perl es que las palabras clave son usadas para definir bloques de cdigo sin llaves. Los saltos de lnea son significativos y son interpretados como el final de una sentencia; el punto y coma tiene el mismo uso. De forma diferente que Python, la indentacin no es significativa. Una de las diferencias entre Ruby y Python y Perl es que Ruby mantiene todas sus variables de instancia privadas dentro de las clases y solo la expone a travs de mtodos de acceso (attr_writer, attr_reader, etc.). A diferencia de los mtodos "getter" y "setter" de otros lenguajes como C++ o Java, los mtodos de acceso en Ruby pueden ser escritos con una sola lnea de cdigo. Como la invocacin de estos mtodos no requiere el uso de parntesis, es trivial cambiar una variable de instancia en una funcin sin tocar una sola lnea de cdigo o refactorizar dicho cdigo. Los descriptores de propiedades de Python son similares pero tienen una desventaja en el proceso de desarrollo. Si uno comienza en Python usando una instancia de variable expuesta pblicamente y despus cambia la implementacin para usar una instancia de variable privada expuesta a travs de un descriptor de propiedades, el cdigo interno de la clase necesitar ser ajustado para usar la variable privada en vez de la propiedad pblica. Ruby elimina est decisin de diseo obligando a todas las variables de instancia a ser privadas, pero tambin proporciona una manera sencilla de declarar mtodos set y get. Esto mantiene el principio de que en Ruby no se puede acceder a los miembros internos de una clase desde fuera de esta; en lugar de esto se pasa un mensaje (se invoca un mtodo) a la clase y recibe una respuesta.

24

Licencia
El intrprete y las bibliotecas estn licenciados de forma dual (inseparable) bajo las licencias libres y de cdigo abierto GPL y Licencia pblica Ruby. A partir de la versin 1.9.3 se opta por una licencia dual bajo las licencias BSD de dos clusulas y Licencia pblica Ruby.

Acerca del crecimiento de Ruby


Desde su liberacin pblica en 1995, Ruby ha atrado devotos desarrolladores de todo el mundo. En el 2006, Ruby alcanz reconocimiento masivo, formndose grupos de usuarios activos en las ciudades ms importantes del mundo y llenando las capacidades de las conferencias relacionadas a Ruby.

Ruby-Talk, la lista de correo ms importante sobre el lenguaje Ruby ha crecido hasta lograr un promedio de 200 mensajes por da. El ndice TIOBE, que mide el crecimiento de los lenguajes de programacin, ubica a Ruby en la posicin nmero 13 del ranking mundial. Refirindose a su crecimiento, predicen, Todo indica que Ruby llegar a estar entre los 10 primeros en menos de 6 meses. Gran parte de su crecimiento se atribuye a la popularidad alcanzada por aplicaciones desarrolladas con Ruby, en particular el framework de desarrollo web Ruby on Rails. Ruby es totalmente libre. No slo gratis, sino tambin libre para usarlo, copiarlo, modificarlo y distribuirlo.

25

BIBLIOGRAFIA

Knowlton, Jim (2009). Python. tr: Fernndez Vlez, Mara Jess (1 edicin). Anaya Multimedia-Anaya Interactiva. Martelli, Alex (2007). Python. Gua de referencia. tr: Gorjn Salvador, Bruno (1 edicin). Anaya Multimedia-Anaya Interactiva. El lenguaje de programacin Ruby por Yukihiro Matsumoto (informit.com) La filosofa de Ruby, una conversacin con Yukihiro Matsumoto, Parte I por Bill Venners 29-09-2003 (Artima Developer) Ruby FAQ Cmo se compara Ruby con Python? (FAQ) Feature #2034 Consider the ICU Library for Improving and Expanding Unicode Support Novedades de Ruby 1.9.3 http://es.wikipedia.org/wiki/Python http://es.wikipedia.org/wiki/Ruby

26

También podría gustarte