Investigación Python V03

21
Universidad Nacional Facultad de Ciencias Exactas y Naturales Escuela de Informática Ingeniería en Sistemas de Información Curso: Paradigmas de Programación Investigación: Python Alumno: Juan Pablo Muñoz Sánchez 252350-9 Adriana Segura Álvarez 264262-3 Profesor: George Alfaro

Transcript of Investigación Python V03

Page 1: Investigación Python V03

Universidad Nacional

Facultad de Ciencias Exactas y Naturales

Escuela de Informática

Ingeniería en Sistemas de Información

Curso:

Paradigmas de Programación

Investigación:

Python

Alumno:

Juan Pablo Muñoz Sánchez 252350-9

Adriana Segura Álvarez 264262-3

Profesor:

George Alfaro

Heredia, 11 de Noviembre de 2008

Page 2: Investigación Python V03
Page 3: Investigación Python V03

Índice de contenido

Introducción.....................................................................................................................................3

Historia breve del lenguaje .............................................................................................................4

Paradigmas de programación que soporta ......................................................................................6

Disponibilidad actual y ambiente operativo (sistema operativo, bibliotecas necesarias o software de

base) ................................................................................................................................................6

Resumen de la sintaxis ....................................................................................................................7

Mecanismos de abstracción ............................................................................................................9

Comparación con otros lenguajes que soportan el mismo paradigma de programación o que hayan

sido desarrollados con un propósito similar....................................................................................9

Un ejemplo completo que muestre la características más importantes del lenguaje, y un ejemplo

comparativo escrito en C o C++. ..................................................................................................12

Bibliografía....................................................................................................................................14

Page 4: Investigación Python V03

Introducción

Los lenguajes de programación son lenguajes artificiales que desde 1940 con el nacimiento de

lenguajes como el lenguaje máquina, ensamblador, entre otros, hasta el día de hoy como C#, Java,

Python, Perl han permitido darle instrucciones a la computadora para ejecute ciertas acciones en un

momento y tiempo determinado, y así agilizar los procesos dentro de una empresa, institución o uso

personal.

Un lenguaje de programación permite especificar de manera simbólica, un modelo para

resolver un problema determinado de acuerdo con un paradigma establecido. Los lenguajes de

programación pertenecen a uno paradigma o varios paradigmas.

Un paradigma está constituido por los supuestos teóricos generales, las leyes y las técnicas para

su aplicación que adoptan los miembros de una determinada comunidad científica. El paradigma de

programación provee y determina, la manera en que un programador concibe la ejecución de un

programa. Ente los paradigmas de programación que existen están la programación imperativa donde

se basa en el modelo de Turing. Ha este tipo de paradigma pertenece por ejemplo los lenguajes

orientado a objetos como C++,C#, Java.

Otro tipo de paradigma es el la programación funcional que es una secuencia que evaluá

funciones, no dependen de un estado determinado de los elementos del problema . Ha este tipo de

lenguajes pertenece Lisp y Scheme.

Por ultimo esta la programación declarativa, donde la solución al problema no es explicita, el

lenguaje que pertenece a este tipo de programación, se encuentra Prolog.

Un lenguaje de programación puede cumplir con muchas o varias características de un

paradigma, por lo cual se le cataloga como multiparadigma, como es el caso de el lenguaje de

programación Python, Perl, Ruby, Java, entre otros.

Page 5: Investigación Python V03

Historia breve del lenguaje

Pyton fue creado como sucesor de ABC, esto gracias a Guido van Rossum, cuando en 1990

trabajaba en el Stichting Mathematisch Centrum (CWI).

En 1995 Guido, continuó su trabajo en Python en el CNRI donde creó muchas versiones del

lenguaje. Luego en mayo del 2000, Guido y el equipo de desarrollo de Python se trasladan a

BeOpen.com y se forma el BeOpen PythonLabs. En octubre de este mismo año, PythonLabs se va a

Digital Creations (actualmente Zope Corporation). En 2001, se crea la Python Software Foundation

(PSF), una organización sin ánimo de lucro creada específicamente para proteger la libertad de Python

como lenguaje de código abierto.

El nombre del lenguaje proviene de la afición de su creador original, Guido van Rossum, por

los geniales humoristas británicos Monty Python.

Este lenguaje está escrito en C, sin embargo existen variantes del lenguaje como Jython para

trabajar con codigo nativo de java. Iron Python es una versión para C# tanto para la plataforma .net

como para el proyecto Mono.

Propósito para el que fue desarrollado

Fue desarrollado como derivado de otro lenguaje llamado ABC, sin embargo tenía el objetivo

de cubrir la necesidad de un lenguaje orientado a objetos que fuera sencillo y que a su vez fuera

funcional para diversas tareas dentro todo lo que era posible programar en el lenguaje C utilizando

UNIX.

El principal objetivo que persigue este lenguaje es la facilidad, tanto de lectura, como de diseño.

Otro objetivo del diseño del lenguaje era la facilidad de extensión. Nuevos módulos se pueden escribir

fácilmente en C o C++. Python puede utilizarse como un lenguaje de extensión para módulos y

aplicaciones que necesitan de una interfaz programable. Aunque el diseño de Python es de alguna

manera hostil a la programación funcional tradicional del Lisp, existen bastantes analogías entre Python

y los lenguajes minimalistas de la familia del Lisp como puede ser Scheme.

Page 6: Investigación Python V03

Entre las caracteristicas que este lenguaje posee estan:

A) Lenguaje orientado a objetos dinámicos

– Los programas elaborados con Python parecen pseudocódigo, ya que es sencillo.

– Expandible en C, C++, Fortran, entre otros.

– Escrito en portable ANSI C (la mayor parte...)

B) Lenguaje natural y legible

– Simple y poderoso

• Minimalista: todo aquello innecesario no hay que escribirlo (;, {, }, '\n')

• Muy denso: poco código hace mucho.

• Soporta objetos y estructuras de datos de alto nivel: strings, listas, diccionarios, etc.

• Múltiples niveles de organizar código: funciones, clases, módulos, y paquetes.

• Si hay áreas que son lentas se pueden reemplazar por plugins en C o C++, siguiendo la API para

extender o montar Python en una aplicación.

• Código interoperable.

C)Python no es el lenguaje perfecto, no es bueno para:

Programación de bajo nivel (systemprogramming), como programación de drivers y

kernels.

Python es de muy alto nivel, no hay control directo sobre memoria y otras tareas de bajo

nivel.

Aplicaciones que requieren alta capacidad de computo.

D)Python es ideal:

• Como lenguaje para combinar varios componentes juntos.

• Para llevar a cabo prototipos de sistema.

• Para la elaboración de aplicaciones cliente.

Page 7: Investigación Python V03

• Para desarrollo Web y de sistemas distribuidos (cliente servidor).

• Para el desarrollo de tareas científicas, en los que hay que simular y prototipar rápidamente.

Paradigmas de programación que soporta

El pseudo-código natural de Python es una de sus grandes fortalezas ya que permite

concentrarse en la solución del problema en lugar de la sintaxis, es decir el propio lenguaje.

Python tiene la capacidad para ser un lenguaje multiparadigma, lo que significa que permite

varios estilos de programación, entre los cuales se destacan: Orientación a Objetos y Programación

Estructurada, funcional, entre otros.

Normalmente los otros paradigmas pueden ser utilizados mediante el uso de extensiones al

propio Python.

Disponibilidad actual y ambiente operativo (sistema operativo, bibliotecas necesarias o software de base)

Debido a su naturaleza de ser Open Source, Python ha sido portado,es decir, cambiado para

hacerlo funcionar a diversas plataformas.

Todos los programas desarrollados en este lenguaje, trabajaran en alguna de esas plataformas

sin requerir cambio alguno.

Sin embargo, se debe tener cuidado de evitar las características con dependencia de sistema , es

decir librerías o módulos que funcionan sólo en un Sistema en Particular.

El lenguaje de programación Python puede ser utilizado en gran cantidad de Sistemas

Operativos, entre los cuales se encuentran: GNU/Linux, Unix, Mac OS, OS/2, Amiga y Windows.

Python también ha sido portado a las máquinas virtuales de Java y de .NET.

Cuando se usa un lenguaje interpretado como Python, no existen compilaciones separadas y

pasos de ejecución. Solamente se debe ejecutar el programa desde el código fuente.

Internamente, Python convierte el código fuente en una forma intermedia llamada bytecodes,

después los traduce en el lenguaje nativo de la computadora y ejecuta.

Todo esto hace el uso de Python mucho más sencillo y le brinda una portabilidad envidiable al

Page 8: Investigación Python V03

compararlo con otros lenguajes de programación.

Existen varias herramientas web que han sido desarrolladas con este lenguaje de programación,

entre ellas podemos destacar a Yahoo Maps y Yahoo Group, quienes poseen componentes

desarrollados en Python e incluso puede ser comprobado en su sus respectivas URLs. Así también se

puede señalar algunos componentes del Google Spider y el Google Bot que están escritos en Pyhon.

El juego Battlefield 2 ha utilizado Python para implementar el núcleo de elementos utilizados

en el juego así como otros juegos tales como: The Crystal Space 3D, Star Trek Bridge Commander,

Civilization 4.

En el caso de la industria gráfica, empresas como Industrial Light & Magic o Walt Disney

Feature Animation para el desarrollo de herramientas de animación digital.

La investigación científica tampoco ha escapado al uso de este lenguaje como herramienta

cotidiana, tal como es el caso de : The National Weather Service, Biosoft, AlphaGene. Inc., e incluso la

NASA, quien usa Python en su sistema Integrated Planning System en el centro espacial Johnson y

otros sistemas complementarios.

También se debe destacar ejemplos como el de Red Hat, quien en su software de instalación

Anaconda y en sus herramientas de configuración han sido desarrolladas bajo este peculiar lenguaje.

El campo de las telecomunicaciones tampoco se queda atrás, y la empresa Nokia ha elegido

Python como herramienta para el desarrollo de sus plataformas S60 (Symbian) and Maemo (Linux).

Resumen de la sintaxis

Python se puede decir que es como pseudo-código. Las variables no tienen tipo, así que no hay

que declararlas. Aparecen cuando se les asigna algo y desaparecen al dejar de usarlas. La asignación se

realiza mediante el operador =. Para comprobar la igualdad se utiliza el operador == . Se puede asignar

varias variables a la vez.

Python tiene 28 palabras reservadas:

And Continue Else For Import Not Raise

Page 9: Investigación Python V03

Assert Def Except From In Or Return

Break Del Exec Global Is Pass Try

Class Elif Finally If Lambda Print While

Los símbolos +, -, /, y el uso de los paréntesis para el agrupamiento, se usan en todos de la

misma forma que en matemáticas. El asterisco (*) es el signo de multiplicación y ** es el símbolo para

exponenciación. El signo más + se utiliza también para concatenar listas.

Una expresión booleana es una expresión que es cierta o falsa, En Python, una expresión que es cierta

tiene valor 1 y una falsa de 0

Para comentar se utiliza el "# " , el intérprete le hace caso omiso.

Las comillas invertidas convierten un objeto en su representación como cadena (así que si elemento

contiene el número 1, `elemento` es lo mismo que "1" mientras que 'elemento' es una cadena literal).

Las listas se escriben entre corchetes, y se pueden (por supuesto) anidar:

nombre = ["Cleese", "John"] x = [[1,2,3],[y,z],[[[]]]]

Para la orientación a objetos:

1. Python utiliza class para nombrar la clase.

2.Todos los métodos (funciones de un objeto) reciben un argumento adicional al principio de la

lista de argumentos, que contiene el propio objeto. Este argumento, por convención, se suele

llamar self (que significa 'uno mismo').

3.A los métodos se los llama de este modo: objeto.metodo(arg1,arg2).

4.Alguno nombres de método, como __init__ están predefinidos, En el caso de __init__ es el

nombre del constructor de la clase, es decir, es la función a la que se llama cuando creas una

instancia.

5. Ningún método o variable miembro es protegido

La sintaxis de la definición de una función es:

def NOMBRE ( LISTA DE PARAMETROS ):

Page 10: Investigación Python V03

SENTENCIAS

Las funciones de Python no tienen begin o end explícitos, ni llaves que marquen dónde empieza

o termina su código.

El único delimitador son dos puntos (:) y el sangrado del propio código. Los bloques de código

van definidos por su sangrado.

El sangrado comienza un bloque y su ausencia lo termina. No hay llaves, corchetes ni palabras

clave explícitas. Esto quiere decir que el espacio en blanco es significativo y debe ser consistente.

Mecanismos de abstracción

En Python, los métodos de un objeto son siempre métodos virtuales, por lo que pueden ser

sobrecargados por una clase hijo.

Sin embargo, no es fácil distinguir entre métodos que han sido sobrecargados y los que no.

Además, es imposible crear un objeto que tenga carácter privado y de esta manera, denegar el acceso a

los atributos y métodos para que no sean accesados desde afuera.

Esto significa que los atributos de un objeto Python pueden ser escritos y leídos por otro objeto

desde afuera.

En Java o C# esta encriptación de métodos y atributos se logra mediante el uso de

modificadores de acceso (public, private, protected).

El lenguaje Python, no cuenta con estos modificadores de acceso debido a que el acceso a una

variable o método viene dado por su nombre.

Para lograr que un método sea privado, es necesario anteponerle dos guiones bajos “__” antes

del nombre.

Comparación con otros lenguajes que soportan el mismo paradigma de programación o que hayan sido desarrollados con un propósito similar

Page 11: Investigación Python V03

Python permite escribir programas muy compactos y legibles. Los programas escritos en Python

son típicamente mucho más cortos que sus equivalentes en C y C++, por varios motivos:

Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia.

El agrupamiento de sentencias se realiza mediante sangrado (indentación) en lugar de llaves.

No es necesario declarar los argumentos ni las variables.

Algunos lenguajes de programación presentan operadores de comparación (< > =) que sean

asociativos, lo que hace que en algunos casos expresiones como: 2 <1 < 4 produzcan resultados

ilógicos.

Por ejemplo, C, C++ evalúan primero el resultado de 2 < 1, lo que es Falso y se expresa como 0,

luego de esto analiza la expresión restante, evaluando 0 < 4, lo que lógicamente es verdadero, sin

embargo no toma en cuenta que el valor 0 de dicha expresión es el resultado negativo de la primera

evaluación por lo que nos retorna como verdadero la evaluación de toda la expresión.

Otros lenguajes de programación como Pascal, simplemente no permiten este tipo de

evaluaciones, sin embargo Python si las acepta y las evaluá de manera correcta.

Comparación con otros lenguajes:

Python Ruby Perl Java

Cuenta con gran cantidad de documentación.

Cuenta con mucho soporte, con lo cual tenemos bastantes IDEs muy buenos, como Komodo de ActiveState.

Sintaxis muy clara, ya que la organización del código se hace mediante espacios.

Para aplicaciones matematicas, o lo que sea que necesite

Es un lenguaje elegante, con un impecable diseño y que además tiene algunas cosas heredadas de Perl.

No tiene todavía demasiado soporte, en los últimos días esta experimentando un boom debido al fantástico framework Ruby on Rails, asi que es posible que, en un futuro tenga bastante soporte por parte de la empresa

Perl se caracteriza por su capacidad de hacer lo mismo de varias formas diferentes.

Los programas en Python suelen ser entre 2 y 4 veces más cortos que sus equivalentes en Java, no sólo por la simplicidad de su sintaxis, sino también por lo avanzado de ciertos tipos (listas, tuplas, diccionarios) que implementa.

Python es casi 3 veces

mas compacto que Java,

6 veces mas que C. O

sea, en C tenemos 6

Page 12: Investigación Python V03

procesamiento intensivo, siempre existen en Python extenciones en C/C++ para acelerar las cosas, teniendo lo mejor de los dos mundos: velocidad de C/C++ y flexibilidad de Python

Trae integrado la parte de Testing Unitario lo cual quiere decir que facilitara utilizarlo y, creo, que se incita a ello, lo cual es una buena práctica.

lineas cuando en python

1 sola.

Python carga 6 veces

mas rápido que Java

cuando inicia.

Python consume 4 veces

menos memoria que

java

En la sintaxis Operadores igualdad y desigualdad

{ .. } C, C#, C++, Java, Perl, PHP, JavaScript

foo .. end where foo in { if, do, ..} Ruby, Eiffel

sangrías Phyton

if-thenif (c) b C, C#, C++, Java, JavaScript, PHP

if c then b end Ada, Eiffel, Ruby

if c: b Python

b if c c and b Perl, Ruby

(if c b) Lisp, Scheme

Llamadas a funciones sin/con parámetros

f() f(a,b)C, C#, C++, Java, JavaScript,

Perl, PHP, Python

F f[] f.callf(a,b) f[a,b] f.call(a,b)

Ruby

(f) (f a b) Lisp Scheme

Un ejemplo completo que muestre la características más importantes del lenguaje, y un ejemplo comparativo escrito en C o C++.

Los siguientes ejemplos implementan el Fibonacci:

Page 13: Investigación Python V03

C PYTHON

#include long int llamadas=0; int fibonacci(int n) { llamadas++; if (n==0 | n==1) return 1; else return fibonacci(n-1) + fibonacci(n-2); }

main() { int i;

for (i=0; i<33;i++)> printf("%d \n", llamadas); }

#!/usr/bin/python llamadas=0 def fib(n): global llamadas llamadas+=1 if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2)

for i in range(34): print fib(i) print llamadas

En este ejemplo , además de calcular el número Fibonacci, calcula el numero de llamadas que se dio

durante el proceso, para el caso de C se dio 18454895 llamadas y en Python se dio 18454895 llamadas,

pero en otros lenguajes como Perl, el numero de llamadas fue mayor.

El siguiente ejemplo es Fiboracci, pero se ejecuta de manera iterativa en ambos lenguajes.

C PYTHON

#include int fib (int n) { if (n==0 | n==1) return 1; int a = 1, b = 1; int i; for (i = 3; i <= n; ++i) { int a_prev = a; a = b; b += a_prev; } return b; } main() { int i; for (i=0; i<34;i++) printf("%d \n", fib(i)); }

#!/usr/bin/python def fib(n): a, b = 1, 1 for i in range(n): a, b = b, a + b return a for i in range(33): print fib(i)

Page 14: Investigación Python V03
Page 15: Investigación Python V03

Conclusión

Cuando decimos que lenguaje de programación, usar para implementar una aplicación una de

las buenas practicas sería buscar las características de cada lenguaje y observar si este presenta

herramienta que se ajusten a las necesidades que debe cubrir la aplicación.

Existen muchos lenguajes de programación como C, C++, C#,Java, Ruby, Perl, Python, entre

otros. En el caso de Python este se puede ajustar muy bien a cualquier forma de programación, ya que

es un lenguaje sencillo, una de sus características es que es casi seudo-código, no se tiene que

preocupar el programador por el indicador que separa una sentencia de otra , solo utiliza espacios para

indicarlo, por lo que en cierta forma el código se va ordenando. En pocas líneas ejecuta una aplicación.

Además, en un lenguaje multiplataforma, ya que puede ejecutarse ya sea en GNU/Linux, Unix,

Mac OS, OS/2, Amiga y Windows, y es compatible con otros lenguajes.

Este lenguajes es utilizado por empresas reconocidas, como la NASA, Yahoo, Google, pero

también es utilizado en la creación de juegos.

Como se puede observar, este lenguaje tiene muchas ventajas, y es posible con el paso del

tiempo alcance a tener más y mejores características.

Page 16: Investigación Python V03

Bibliografía

Inmersión en Python.[En linea] http://es.wikibooks.org/wiki/Inmersi%C3%B3n_en_Python

(consultado el 30 de Octubre de 2008)

Desarrollo de Aplicaciones para Gnome con Python. [En linea]

http://www.linuxfocus.org/Castellano/November2002/article266.shtml (Consultado el 30 de Octubre de

2008).

Encapsulamiento en Python [En Linea] http://binsd.wordpress.com/tag/encapsulamiento-en-python/

(Consultado el 03 de Noviembre de 2008).

Python: Orientación a objetos [En Linea]

http://mundogeek.net/archivos/2008/03/05/python-orientacion-a-objetos/ (Consultado el 03 de

Noviembre de 2008).

Comparación Python [En Linea] http://www.dmh2000.com/cjpr/cmpframe.html (Consultado el 08 de

noviembre de 2008).

Performance Comparison - C++ / Java / Python / Ruby/ Jython / JRuby / Groovy [En Linea]

http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-

groovy/ ](Consultado el 08 de noviembre de 2008).