sábado, 27 de diciembre de 2008

Programación orientada a objetos con Python

Este artículo no se trata de un análisis profundo de la programación orientada a objetos, sino simplemente de una simple y breve introducción, intentando dar un panorama inicial a aquellos que no han tenido contacto con (o nunca han entendido) la POO.

Supongamos que usamos un lenguaje procedural como Pascal para el siguiente ejemplo:


program personas;

type persona = record
nombre: string;
apellido: string;
edad: integer
end;

procedure inicializar(n, a: string; e: integer; var p: persona);
begin
p.nombre := n;
p.apellido := a;
p.edad := e
end;

function es_mayor(p: persona): boolean;
begin
return p.edad >= 18
end;

function nombre_completo(p: persona): string;
begin
return p.nombre + ” ” + p.apellido;
end;

var
p: persona;

begin
inicializar(”Juan”, “Perez”, 25, p);
write(nombre_completo(p));
if (es_mayor(p)) then
writeln (” es mayor de edad.”)
else
writeln (” es menor de edad.”)
end.

El programa es bastante sencillo. Primero declaramos un tipo persona que es un registro que contiene los campos nombre, apellido y edad. Luego definimos el procedimiento inicializar que toma el nombre, el apellido, la edad y la persona y asigna los primeros a los campos correspondientes de la última. Luego, un par de funciones (es_mayor y nombre_completo) toman una persona y realizan cálculos sobre los valores de sus campos.

En los programas procedurales hacemos esto todo el tiempo: definimos estructuras y tipos de datos y luego creamos procedimientos y funciones que toman como parámetros variables de estos tipos y realizan distintas operaciones sobre ellos. Dicho de otra manera: podemos ver a los programas procedurales como un conjunto de procedimientos y funciones que manipulan estructuras de datos pasadas como parámetros.

A continuación, un ejemplo de la versión orientada a objetos utilizando el lenguaje Python:


class Persona:

def __init__(self, nombre, apellido, edad):
self.nombre = nombre
self.apellido = apellido
self.edad = edad

def nombre_completo(self):
return self.nombre + ‘ ‘ + self.apellido

def es_mayor(self):
return self.edad >= 18

p = Persona(’Juan’, ‘Perez’, 25)

print p.nombre_completo(),

if p.es_mayor:
print “es mayor de edad.”
else:
print “es menor de edad.”

Como podemos apreciar, el constructor de la clase se declara como __init__, en tanto que la referencia al objeto actual se llama self (y debe aparecer como primer parámetro de todos los métodos de la clase, aunque no se utiliza en la invocación de los mismos).


REFERENCIAS ADICIONALES:

Programacion orientada a objetos en Python. http://blog.rvburke.com/2006/11/22/programacion-orientada-a-objetos-en-python/

Programacion orientada a objetos. http://blog.smaldone.com.ar/2006/10/27/programacion-orientada-a-objetos/

1 comentarios:

Unknown dijo...

Hola es el mejor blog que he visto sobre informatica especialmente mil gracias por toda la info de python, diste en el clavo con todo lo que estaba buscando.