Una inmersión profunda en el dominio más complejo y poco intuitivo de la programación.
En esta serie de artículos, hablaremos sobre la programación orientada a objetos, un enfoque avanzado y muy común para el desarrollo. Todos los que se tomen en serio la programación y quieran ganar dinero en esta área deberían conocerlo.
Si no has leído el artículo anterior, aquí tienes un resumen breve:
Resumen: lo que ya sabemos del artículo anterior
- La programación orientada a objetos (POO) es un enfoque de la programación. Es un conjunto de prácticas y principios que utilizan los buenos desarrolladores. Lo opuesto a este enfoque es la programación procedimental tradicional.
- En la programación procedimental, escribimos funciones que realizan ciertas tareas. Cuando es necesario, llamamos a unas funciones desde otras. En este programa, las funciones y los datos existen por separado.
- El principal problema de la programación procedimental es que es difícil escribir y mantener proyectos grandes. Cualquier producto medianamente complejo requerirá cientos de funciones que estarán interrelacionadas. El resultado será un “código espagueti”.
- En la POO, las funciones y los datos se agrupan en objetos. Los objetos son más o menos independientes y se comunican entre sí según reglas estrictamente definidas.
- En la POO, los datos se almacenan dentro de los objetos y se denominan propiedades de los objetos. Por ejemplo, el objeto user puede tener una propiedad name con el valor ‘Iván’.
- En la POO, las funciones también se almacenan dentro de los objetos y se denominan métodos de los objetos. Por ejemplo, el objeto user puede tener un método sendEmail() que le envía un correo electrónico a este usuario.
- Podemos imaginar que en la POO tomamos el “código espagueti” con albóndigas y lo repartimos en porciones en contenedores de un recipiente enorme. Ahora, cada contenedor tiene espagueti y albóndigas, y cada programador puede trabajar en su contenedor-objeto, en lugar de hurgar en el recipiente común con espagueti.
Una de las ventajas de la POO es que no es necesario escribir muchas veces el mismo código. Puedes inventar algo lindo una vez y luego reutilizarlo con solo una línea. Para esto se necesitan las clases.
¿Qué son las Clases?
Esta es una de las definiciones formales de clase:
“Una clase es un elemento de software que describe un tipo abstracto de datos y su implementación parcial o completa”.
Si lo decimos de una manera más sencilla, una clase es una plantilla de código que se utiliza para crear un objeto. Es como una receta para preparar un plato o unas instrucciones para ensamblar muebles: la clase en sí no hace nada, pero se puede utilizar para crear un nuevo objeto y utilizarlo en el trabajo.
Si todavía no lo entiendes, veamos un ejemplo:
El poder del ejemplo
Usemos el ejemplo de los teléfonos celulares.
Supongamos que fabricas teléfonos móviles y quieres lanzar un nuevo modelo al mercado. Para que las personas puedan usar tu dispositivo de inmediato y se acostumbren a él rápidamente, el teléfono debe tener una pantalla, botones de encendido y volumen, cámaras delantera y trasera, un conector de carga y una ranura para tarjeta SIM.
Pero el hardware no es suficiente: debes conectarlo para que todo funcione sin problemas. Además, debes prever qué sucede cuando se presionan los botones, qué se muestra en la pantalla y cómo el usuario controlará este teléfono.
El siguiente paso es describir cada detalle del teléfono, cada microchip y placa, y explicar cómo funcionan las piezas entre sí. El último paso es escribir un manual de usuario que explique completamente qué se puede hacer con el teléfono, cómo iniciar la aplicación de llamadas o enviar un mensaje de texto.
Acabamos de crear una nueva clase para el teléfono: un conjunto completo de conocimientos, descripciones, propiedades e instrucciones necesarios que describen nuestro modelo. Todas estas instrucciones y descripciones aún no son un teléfono, pero puedes utilizarlas para crear este teléfono.
En programación, una clase tiene conjuntos de datos; en nuestro caso, son los componentes del teléfono. También hay funciones para trabajar con clases, que se llaman métodos; así es como el usuario trabajará con nuestro teléfono, qué hará con él y de qué manera.
Clases en la Práctica
Haremos todos los ejemplos siguientes en Python porque es elegante, moderno y juvenil. Además, Python es un lenguaje muy orientado a objetos, casi todo en él son objetos. Vamos a probarlo.
Supongamos que estamos escribiendo una tienda en línea con un sistema de descuentos. Necesitamos trabajar con usuarios, compradores habituales. Nuestro usuario será un objeto: tendrá un nombre, edad y dirección de envío predeterminada. Crearemos una clase que nos ayudará a iniciar un nuevo comprador.
class User:
"""Clase para todos los compradores"""
user_count = 0
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
User.user_count += 1
Aquí se indica: “Esta es la clase para el comprador. Tiene tres propiedades: nombre, edad y dirección”. Ahora podemos crear nuevos compradores con una sola línea:
# Creamos el primer comprador
user1 = User ('Alex', 23, 'Barrios altos')
# Creamos el segundo comprador
user2 = User ('Maria', 19, 'Granada')
Qué Sigue
En el siguiente material, modelaremos una situación real: agregaremos un programa de lealtad, puntos de bonificación y te contaremos cómo lo hará Python. Para que sea más interesante, escribiremos el código en dos lenguajes a la vez: Python y JavaScript.
Serie de Guías Relacionadas a POO:
- Explicación Programación Orientada a Objetos
- ¿Qué son las Clases en Programación Orientada a Objetos?
- ¿Qué son los Objetos en Programación Orientada a Objetos?
- Clases y Funciones en Programación Orientada a Objetos
- Atributos y Métodos en Programación Orientada a Objetos
- Abstracciones e Interfaces: ¿Por qué son Necesarias?
- ¿Qué son los Getters y Setters en Programación?