¿Qué es POO en Python?

La POO o programación orientada a objetos en Python es un paradigma de la programación que simplifica la estructura y la lógica del desarrollo de aplicaciones de gran tamaño.

Programación orientada a objetos

Para entender este paradigma de forma más sencilla vamos a ver antes de nada dos definiciones claves:

  • Objeto: un objeto puede ser todo lo que nos rodea, cliente, usuario, coche, mesa, casa. Un objeto tiene determinadas características (atributos) que los diferencia del resto de objetos y cumplen diferentes funciones (métodos).
  • Clase: podemos decir que la clase es un molde para crear objetos. Mediante una clase podemos crear objetos con diferentes características y asignarle funciones que determinen un comportamiento o una acción a realizar.

Vamos a ver una clase y desde «este molde» crearemos dos objetos.

Imagina que tenemos un molde para crear consolas → clase Consolas. Ahora creamos dos objetos a partir de ese molde (clase). Cada consola tiene diferentes características y funciones.

  • Clase → Consolas
  • Objetos →
    • consola1
      • marca: Sega
      • modelo: Megadrive
      • tipo: 16 bits
      • color: negro
      • lanzamiento: 1988
      • soporte: cartuchos
    • consola2
      • marca: NES
      • modelo: Nintendo
      • tipo: 8 bits
      • color: gris
      • lanzamiento: 1983
      • soporte: cartuchos

Hemos creado dos consolas (consola 1 y consola 2) a través de la clase o molde Consolas. Las características o atributos de cada objeto diferencian a un objeto del otro.

Ahora asignaremos para cada objeto algunas funciones (métodos).

  • consola1 →
    • Encender
    • Apagar
    • Leer juegos Sega
  • consola2 →
    • Encender
    • Apagar
    • Leer juegos NES

Si observamos estos dos objetos podemos ver claramente que cada uno de ellos tiene determinadas características y que pueden realizar funciones en común y diferentes funciones.

Vamos a ver un ejemplo en código Python de cómo representaríamos esta clase y estos dos objetos.

Crear clase con Python

El nombre de la clase debe comenzar siempre con una letra mayúscula (es una convención). Puedes ver la documentación oficial sobre clases de Python.

Creando esta clase Consolas, podríamos decir que estamos creando un molde para generar en el futuro objetos que sean consolas. Técnicamente podríamos decir que en realidad estamos creando un nuevo tipo de objeto que permite crear instancias de ese tipo.

class Consolas:
    marca = ''
    modelo = ''
    tipo = ''
    color = ''
    lanzamiento = 0
    soporte = 0

Creamos un objeto instanciando la clase

Ahora vamos a crear nuestra primera consola a partir del molde, es decir, crearemos nuestro primer objeto llamado consola1 a partir de la clase Consolas.

Lo primero que haremos será instanciar la clase, que vendría a ser crear un objeto con nuestro molde.

consola1 = Consolas()

A continuación vamos a dar valor a las propiedades de nuestro objeto.

consola1.marca = 'Sega'
consola1.modelo = 'Megadrive'
consola1.tipo = '16 bits'
consola1.color = 'negro'
consola1.lanzamiento = 1988
consola1.soporte = 'cartuchos'

Con nuestra primera consola creada ya podemos acceder a sus propiedades y modificarlas siempre que lo necesitemos.

print(consola1.soporte)

# cartuchos

Modificaremos el soporte para nuestra consola1 y, aunque no exista una Megadrive con unidad de vinilo, modificaremos su propiedad soporte y pondremos ese valor.

print(consola1.soporte)
# cartucho

consola1.soporte = 'vinilo'
print(consola1.soporte)
# vinilo

Siempre que creemos un objeto lo haremos fuera de la clase. Vamos a ver el código completo de este ejemplo para que no haya dudas de la indentación.

# Creamos la clase Consolas
class Consolas:
    marca = ''
    modelo = ''
    tipo = ''
    color = ''
    lanzamiento = 0
    soporte = 0

# Instanciamos la clase
consola1 = Consolas()

# Asignamos valor a las propiedades del objeto
consola1.marca = 'Sega'
consola1.modelo = 'Megadrive'
consola1.tipo = '16 bits'
consola1.color = 'negro'
consola1.lanzamiento = 1988
consola1.soporte = 'cartuchos'

print(consola1.soporte)

# Modificamos la propiedad soporte
consola1.soporte = 'vinilo'
print(consola1.soporte)

Creando un método para nuestra clase

Vamos a definir un método para que nuestras consolas puedan encenderse y otro para que puedan apagarse.

Los métodos los definiremos como funciones de Python dentro de nuestra clase. Cuando definimos métodos tenemos, que incluir como primer parámetro self, que hace referencia al objeto desde donde estamos llamando a nuestro método.

Nuestra clase quedaría de la siguiente forma:

class Consolas:
    marca = ''
    modelo = ''
    tipo = ''
    color = ''
    lanzamiento = 0
    soporte = 0

    def encender(self):
        print('La consola está encendida...')
    def apagar(self):
        print('La consola está apagada...')

Ahora con nuestro objeto consola1 podríamos llamar a los diferentes métodos que creemos.

consola1.encender()
# La consola está encendida...

consola1.apagar()
# La consola está apagada...

Vamos a completar el ejemplo creando los objetos consola1 y consola2.

En los métodos incluiremos el modelo para que se visualice con cada acción (recuerda que, dentro del método, self hace referencia al objeto desde donde lo estamos llamando).

class Consolas:
    marca = ''
    modelo = ''
    tipo = ''
    color = ''
    lanzamiento = 0
    soporte = 0

    def encender(self):
        print(f'La consola {self.modelo} está encendida...')
    def apagar(self):
        print(f'La consola {self.modelo} está apagada...')

# Creo el objeto consola1
consola1 = Consolas()
consola1.marca = 'Sega'
consola1.modelo = 'Megadrive'
consola1.tipo = '16 bits'
consola1.color = 'negro'
consola1.lanzamiento = 1988
consola1.soporte = 'cartuchos'

# Creo el objeto consola2
consola2 = Consolas()
consola2.marca = 'Nes'
consola2.modelo = 'Nintendo'
consola2.tipo = '8 bits'
consola2.color = 'gris'
consola2.lanzamiento = 1983
consola2.soporte = 'cartuchos'

consola1.encender()
consola2.apagar()

# La consola Megadrive está encendida...
# La consola Nintendo está apagada...

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *