Hagámos un videojuego: Parte 3, Objetos

Hola a todos y bienvenidos a una nueva parte de la guía básica de programación, antes de empezar a crear nuestros videojuegos. Primero, antes que nada, quería pedir disculpas por no haber subido ningún post en un largo tiempo. Hace ya bastante que terminé los exámenes pero, aún así, me tomé unas pequeñas vacaciones. Esta semana, pensé en un pequeño juego en el que trabajar así que me puse a hacerlo y para colmo, al borrar el historial de mi navegador se me borró la contraseña de Taringa y no podía acceder, hoy por fin la recuperé, aunque aún no sé como lo hice.

Sé que en la anterior parte de la guía dije algo de que haríamos un pequeño 'juego' con lo que ya sabíamos pero he estado pensando mejor y creo que la mejor idea es aprender todas las cosas de programación lo antes posible para ponernos manos a la obra y poder crear juegos un poco más complejos. Porque sí, con los conocimientos adquiridos con las 2 partes anteriores ya es posible crear un pequeño juego pero muy simple y pienso que no merece la pena pararse ahí.

En esta parte de la guía, trataremos el tema de los objetos, pienso que si entendieron las partes anteriores, esta no tendrán ningún problema en entenderla porque es bastante intuitiva. Bastante tiempo me he demorado ya como para seguir con la palabrería así que comencemos.

Definición: Un objeto en programación es súper parecido a un objeto en la vida real. Un objeto en la vida real tiene distintas característica además depende del objeto que sea puede realizar unas funciones u otras. Bien pues en programación un objeto es exactamente igual, está compuesto de característica y de funciones.
¿Qué usaremos como características? Pues las ya bien conocidas variables, y como funciones pues usaremos funciones.
Esta semana en la universidad, me enseñaron algo que conocía, pero que no lo tenía demasiado en cuenta y se trata de las principios de los objetos, desgraciadamente Python no ofrece una posibilidad relativamente fácil de seguir esos principios exactamente. Así que nosotros no los veremos, si están trabajando en C++, tienen que seguir esos principios a raja tabla. Para crear un objeto en Python seguiremos la siguiente estructura:
class {Nombre del objeto} ({Objeto del que hereda}):
--- def __init__(self, [parámetros]) #Constructor
------ self.caracteristica_1 = {Valor}
------ self.caracteristica_2 = {Valor}
--- def funcion_1(self)
--- def funcion_2(self)

Las palabras marcadas en negrita son palabras reservadas por el sistema y tienen que ir en esa posición por obligación. A estas alturas ya deberían saber casi perfectamente como crear variables y funciones, lo único nuevo que añaden los objetos a las funciones y variables es la palabra reservada self, que indica la pertenencia de esa variable y función al objeto. La primera función que se declara es el constructor de la clase es, __init__(self). El constructor es simplemente una función como otra cualquiera aunque el constructor, a diferencia de otras funciones es llamado automáticamente cuando la instancia del objeto es creada. La cabecera de la clase es bastante simple, simplemente deben usar la palabra reservada class y dar un nombre a su clase, lo de 'objeto del que hereda' quiere decir del objeto del cual hereda todas sus cualidades, en Python funciona, a grandes rasgos, más o menos como en la vida real pues se hereda TODO de la súper clase. Para crear una instancia de un objeto cualquiera en su código tan solo tienen que crear una variable del tipo objeto así:

variable = {Nombre del objeto}([Parámetros del constructor del objeto])

Desde esa variable, después podrán acceder a todos los métodos y atributos del objeto. Por ejemplo imagínense que hubiésemos creado un objeto del tipo televisión que tuviese un atributo llamado volumen y un método llamado encender. Para acceder a ese atributo y función sería así:

teleivision = Television() #El constructor de este objeto no recibe parámetros
television.encender() #Llama a la función
print television.volumen #Muestra el valor del atributo

No sé si quedó lo suficientemente claro que es un objeto, a continuación crearemos el objeto televisión con algunos métodos y atributo pues nos servirá como ejemplo y probablemente ayudará a muchos de ustedes a entenderlo mejor:

class Television():
--- def __init__(self, marca, pulgadas):
------ self.encendida = False
------ self.marca = marca
------ self.pulgadas = pulgadas
--- def encender(self):
------ self.encendida = True
------ print “Encendiendo”
--- def apagar(self):
------ self.encendida = False
------ print “Apagando”

#Crear una instancia del tipo televisión
television = Television(“Sony”, 32)
television.encender()
print self.marca
print self.pulgadas
television.apagar()

Si siguiésemos los principios de los cuales hice una pequeña mención anteriormente, el objeto tendría que tener otra estructura puesto que no se podría acceder a los atributos directamente sino que habría que usar módulos, por suerte Python cuenta con la ventaja y al mismo tiempo desventaja de que no necesita seguir esos principios. Realmente sí necesitaría seguirlos también pero como te ofrece la posibilidad de no hacerlo nosotros no lo haremos puesto que sino la cosa se complicaría un poquito más.

Bien, aquí acaba la guía, espero que lo hayan entendido todo perfectamente y sino, tan solo tienen que escribir un comentario con sus dudas o simplemente enviarme un mensaje por Taringa, intentaré responder lo más rápido posible aunque no suelo meterme demasiado... En este post no pondré mi email porque me envían spam, de 'estafas' como por ejemplo la típica de que un príncipe africano necesita mi cuenta bancaria o algo de eso. EN FIN. Me alegró muchísimo recibir algunos correos de muchos de ustedes preguntándome dudas y espero que también me envíen también algunos mensajes por aquí, la verdad es que es más cómodo para ustedes escribir un mensaje por aquí que no tener que enviarme un correo electrónico aunque para mi es al revés. De todos modos me tendré que aguantar puesto que no quiero que me roben mi cuenta bancaria... Aunque pensándolo bien si me la roban tampoco pasaría nada puesto que tan solo tengo 1€.