12 de mayo de 2016

19. Introducción a las clases y objetos. POO

Explicación sencilla de las clases y objetos

Explicación sencilla de Objetos y Clases

  • ¡Mamá, mamá! ¡Voy a jugar a la "pelota"!
  • Sí, pero... ¿Qué pelota?
Está claro que la palabra "pelota", en este contexto, es un poco ambigua. Con toda probabilidad nos referimos a una pelota de fútbol, pero la verdad es que existen muchas clases de pelotas. Tenemos las de fútbol, baloncesto, tenis, voleibol, ping-pong, golf.. Todas tienen unas características comunes: son esféricas y sirven para jugar, pero también otras diferentes: color, tamaño, dureza...
Me imagino mi programa como el almacén de los profesores de Ed. Física, donde guardan el material, y si en una gran caja meten todas las pelotas, en mi programa esa caja es una clase (class). Una pelota en concreto que saque de esa caja es un objeto (object).
Veamos un ejemplo
# *-* coding:utf-8 *-*

# Definir una clase pelotas


class pelotas:
    radio = 20.0
    color = "Azul"

    def botar(self):
        print ("¡Estoy jugando con la pelota!")

    def pinchar(self):
        self.radio = 0.0
        print ("¡Buah! ¡Buah! Estoy llorando")

    def inflar(self):
        self.radio += 2.0


def verCaracteristicas():
    # ver características
    print ("La pelota 1 tiene de radio %.3f y es de color %s") % (pelota1.radio, pelota1.color)
    print ("La pelota 2 tiene de radio %.3f y es de color %s") % (pelota2.radio, pelota2.color)


# programa principal

pelota1 = pelotas()
pelota2 = pelotas()

verCaracteristicas()

print ("\nPincho la pelota 1")
pelota1.pinchar()

verCaracteristicas()

print ("\nInflo la pelota 2")
pelota2.inflar()

verCaracteristicas()

print ("\nCambio de color la pelota 1 y la inflo 20 veces")
pelota1.color = "Rojo"
for i in range(0, 10):
    pelota1.inflar()

verCaracteristicas()
En este ejemplo, tenemos dos partes diferenciadas:
  1. Declaración de la clase pelotas, con dos variables o atributos, color y radio. En principio, el primero se declara a "Azul" y el radio es un float, igualado a 20. Además se declaran varios métodos (funciones dentro de una clase), que son "cosas" que les suceden a esos objetos. En el ejemplo, la pelota se "bota", se "infla" o se "pincha". Si la pelota "bota", el programa dirá que está jugando con ella; si la pelota se "pincha", el ordenador se entristece y evidentemente el radio de la pelota se vuelve cero y si se "infla", cada vez que lo haga, aumenta el radio en 2 unidades.
  2. Excepto una función que imprime el estado de las pelotas (color y radio), el resto del programa es la rutina principal. En ella, interactúo sobre dos pelotas
    • Primero, creo dos objetos de la clase pelota:  pelota1 y pelota2. Si veo sus características, sus variables, están inicializadas con los valores 20 de radio y color Azul.
    • Segundo, pincho la pelota 1. El ordenador se entristece y la pelota 1 tiene radio cero.
    • Tercero, inflo la pelota 2. De tener radio 20 pasa a tener 22
    • Cuarto, cambio el color de la pelota 1 a Rojo y la inflo 10 veces, pasando a tener radio 20.
Más apuntes: Las funciones dentro de la clase, métodos, definen la palabra reservada self. Podríamos interpretarlo como "objeto llamado en ese momento". Así, en el método inflar el radio del objeto llamado en ese momento aumenta en 2.
Otra forma de inicializar las variables....
Cambia el principio del programa anterior, el principio de la clase, por éste:
class pelotas:

    def __init__(self):
        self.color = "Azul"
        self.radio = 20.0

    def botar(self):
        print ("Estoy jugando")
Observa como el método __init__ , ejecutado al inicializar un objeto, también permite la declaración e inicialización de variables.

No hay comentarios:

Publicar un comentario