01Cambiamos la forma de pensar
BLOQUE 1
1 / 52
Clase 1 · Programación

Programación
Orientada a Objetos

Hoy no vamos a aprender comandos nuevos.
Vamos a aprender otra forma de pensar nuestros programas.

🧠 pensar✏️ dibujar💬 explicar💻 programar
Lo que ya saben

Hasta hoy, programábamos así

nombre = "Pedro"
edad = 28
altura = 1.75

¿Qué estamos haciendo acá?

Son

DATOS. Información guardada en variables. Nada más y nada menos.

Lo que ya saben

Y también hacíamos esto

def saludar(nombre):
    print("Hola", nombre)

¿Y esto qué es?

Son

FUNCIONES. Acciones. Cosas que el programa puede hacer.

Entonces, hasta hoy, todo nuestro programa era esto: datos por un lado y funciones por el otro.

El problema

Ahora imaginemos un juego de carreras

# auto 1
marca_1 = "Toyota"
color_1 = "blanco"
velocidad_1 = 0

# auto 2
marca_2 = "Fiat"
color_2 = "rojo"
velocidad_2 = 0

# ... y así 20 autos más

¿Qué problema le ven a esto?

😵 Un desastre de variables sueltas.

🤔 ¿De quién es cada dato?

😱 ¿Y si mañana quiero 100 autos?

¿Y si pudiéramos guardar juntos los datos y las funciones que pertenecen a la misma cosa?

Datos

marca, color,
velocidad

+

Funciones

encender(),
frenar()

=

Una sola cosa

UN AUTO

La respuesta

Eso es Programación Orientada a Objetos.

Una forma de organizar el programa pensando en objetos, como los del mundo real.

Si te olvidás de todo lo demás, acordate de esto

Los objetos tienen información y pueden hacer cosas.

¿Qué TIENE?

¿Qué PUEDE HACER?

Bloque 2 · Pensar en objetos

¿Qué es un objeto?

Datos

Información que describe al objeto.

colorcapacidad
OBJETO

Comportamientos

Acciones que el objeto puede realizar.

llenar()vaciar()

Una taza, un auto, un perro, un jugador. Todo lo que tiene datos y hace cosas puede ser un objeto.

🚗

Tenemos un auto.

¿Qué cosas sabemos de este auto?

marcamodelocolor velocidadpatentecantidad de puertas

Todo eso que dijeron tiene un nombre

ATRIBUTOS

Son las características que describen al objeto.

Los atributos pueden cambiar: el auto puede pasar de blanco a negro, o de 0 a 120 km/h.

🚗

El mismo auto.

Ahora: ¿qué puede hacer este auto?

encender()acelerar()frenar() doblar()tocar_bocina()

Y eso también tiene nombre

MÉTODOS

Son las acciones que el objeto puede realizar.

Un método es una función… pero que vive adentro del objeto y le pertenece.

La herramienta que vamos a usar todo el año

¿Qué TIENE?

↓

ATRIBUTOS

Sustantivos. marca, color, vida

¿Qué PUEDE HACER?

↓

MÉTODOS

Verbos. frenar(), atacar()

Actividad 1 · Todos juntos

Miren este perro 🐶

PERRO
  • nombre
  • edad
  • color
  • ladrar()
  • comer()
  • dormir()

¿Cuáles son datos?

¿Cuáles son acciones?

Respuesta

nombreedadcolor
ladrar()comer()dormir()
El concepto más importante de hoy

Pero… ¿de dónde salen los objetos?

Clase

Auto
  • marca
  • color
  • modelo
  • encender()
  • frenar()

Es el molde. Dice qué van a tener y qué van a poder hacer los autos.

Objeto

mi_auto
  • marca = "Toyota"
  • color = "blanco"
  • modelo = 2021
  • encender()
  • frenar()

Es un auto de verdad, con valores concretos.

“La clase describe.
El objeto existe.”

📄 el plano ≠ 🏠 la casa

🍪 el molde ≠ 🥠 la galletita

📝 la receta ≠ 🍕 la pizza

Una sola clase, muchos objetos

Auto
  • marca
  • color
  • encender()

🚗

Toyota blanco

🚙

Ford negro

🚕

Fiat rojo

Actividad 2 · Levantá la mano

¿Clase u objeto?

1. El concepto general de “celular”

2. El celular que tenés en el bolsillo

3. La ficha vacía de un personaje

4. Tu personaje, nivel 7, llamado Zeta

Respuesta

1. Clase 📄  ·  2. Objeto ✅

3. Clase 📄  ·  4. Objeto ✅

Truco: si le podés poner valores concretos, es un objeto.

Bloque 3 · Python

Ya lo pensamos.
Ya lo dibujamos.
Ahora lo escribimos.

Ojo: la sintaxis es lo menos importante de hoy. Si algo no se entiende del todo, no pasa nada.

Nuestra primera clase

class Auto:

    def __init__(self, marca, color):
        self.marca = marca
        self.color = color

    def encender(self):
        print("El auto está encendido")

Línea 1

Acá arranca el molde. Se llama Auto, con mayúscula.

El bloque del medio

Los atributos: qué va a tener cada auto.

El bloque de abajo

Un método: qué va a poder hacer.

Antes de seguir, saquémonos esto de encima

¿Y esas dos palabras raras?

def __init__(self, marca, color):

__init__ · viene de “iniciar”

El momento en que nace el objeto

Se ejecuta sola, una sola vez: cuando escribís Auto("Toyota", "blanco"). Ahí el auto recibe sus datos.

self · quiere decir “yo”

El objeto hablando de sí mismo

self.marca es “mi marca”. Es el auto refiriéndose a sus propios datos.

Y no, no hace falta que entiendan por qué lleva guiones bajos. Python es así: se escribe y se sigue. ✌️

Crear un objeto

mi_auto = Auto("Toyota", "blanco")

¿Qué acabamos de hacer?

Respuesta

Usamos el molde y fabricamos un auto de verdad. Ahora mi_auto existe, con marca Toyota y color blanco.

Dos objetos del mismo molde

auto_1 = Auto("Toyota", "blanco")
auto_2 = Auto("Fiat", "rojo")

¿Son el mismo auto?

Respuesta

No. Salieron del mismo molde, pero son dos autos distintos e independientes. Una clase, infinitos objetos.

El problema del principio, resuelto

¿Se acuerdan de esto?

✗ Antes · 3 autos

marca_1 = "Toyota"
color_1 = "blanco"
velocidad_1 = 0
marca_2 = "Fiat"
color_2 = "rojo"
velocidad_2 = 0
marca_3 = "Ford"
color_3 = "negro"
velocidad_3 = 0

9 variables sueltas. Con 20 autos: 60 variables.

✓ Ahora · los mismos 3 autos

auto_1 = Auto("Toyota", "blanco")
auto_2 = Auto("Fiat", "rojo")
auto_3 = Auto("Ford", "negro")

3 líneas. Con 20 autos: 20 líneas.
El molde se escribe una sola vez.

Cada dato volvió a tener dueño.

Leer y cambiar sus datos

print(auto_1.marca)   # Toyota
print(auto_2.marca)   # Fiat

auto_1.color = "negro"   # lo pintamos

print(auto_1.color)   # negro
print(auto_2.color)   # rojo  ← no se tocó

El . significa “de”: auto_1.color es el color de auto_1.

Y hacerle hacer cosas

auto_1.encender()

# El auto está encendido

Sin paréntesis

auto_1.color

es un dato

Con paréntesis

auto_1.encender()

es una acción

Acá está la gracia de todo esto

Un método que cambia al objeto

class Auto:
    def __init__(self, marca):
        self.marca = marca
        self.velocidad = 0

    def acelerar(self):
        self.velocidad = self.velocidad + 20
print(auto_1.velocidad)  # 0

auto_1.acelerar()
auto_1.acelerar()

print(auto_1.velocidad)  # 40

¿Quién cambió la velocidad?

El auto se cambió a sí mismo. Nadie tocó el dato desde afuera.

Volvemos sobre self, ahora con dos autos

¿Quién es self cada vez?

def encender(self):
    print("Encendido", self.marca)


auto_1.encender()  # self = auto_1
auto_2.encender()  # self = auto_2

self quiere decir “este objeto”: el que está usando el método justo ahora.

Es cómo el auto se refiere a sí mismo. Nada más que eso.

✋ Con esto alcanza por hoy. Seguimos.

Mini desafío · 5 minutos

Escribí la clase Perro

✅ Dos atributos: nombre y edad

✅ Un método: ladrar()

✅ Creá dos perros distintos

class Perro:

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

    def ladrar(self):
        print("¡Guau!")


firulais = Perro("Firulais", 3)
laika = Perro("Laika", 7)
Bloque 4 · Los 4 pilares

Cuatro preguntas, no cuatro palabras

Nadie inventó los pilares para tomar examen. Salieron de cuatro problemas reales.

🔐

¿Cómo protejo lo importante?

🧬

¿Cómo no repito lo mismo mil veces?

🎭

¿Cómo doy una orden a cosas distintas?

🎨

¿Cómo escondo lo complicado?

🔐

¿Le darías las llaves del motor de tu auto a cualquier persona?

Y en el programa, lo mismo

Hay información que no queremos que cualquiera modifique directamente.

🔐 Pilar 1 · Encapsulación

Proteger lo importante

✗ Todo abierto

auto.velocidad = 500

El auto está apagado y ya va a 500. El dato miente.

✓ Con control

auto.acelerar()

El auto se fija si está encendido y sube de a poco, hasta su máximo.

🔐 “No todo se toca directamente.”

Actividad 3

¿Dejarías que esto pase?

jugador.vida = -999999

¿Debería cualquier parte del juego poder hacer esto?

Lo que queremos

Que la vida se cambie solo a través de jugador.recibir_daño(20), que se fija que nunca baje de 0.

🔐 Encapsulación · así se ve en código
class Jugador:
    def __init__(self, nombre):
        self.nombre = nombre
        self.vida = 100

    def recibir_daño(self, cantidad):
        self.vida = self.vida - cantidad
        if self.vida < 0:
            self.vida = 0   # nunca menos de 0
jugador.recibir_daño(30)
print(jugador.vida)   # 70

jugador.recibir_daño(500)
print(jugador.vida)   # 0, no -430

Ahí está el candado

El if es la única razón por la que la vida no queda en negativo. Ese control vive adentro del objeto.

🧬 Pilar 2 · Herencia

¿Un perro es un animal?

¿Un gato es un animal?

Entonces… ¿por qué escribiríamos nombre, edad, comer() y dormir() dos veces?

Animal
  • nombre
  • edad
  • comer()
  • dormir()
Perro 🐶
  • ladrar()
Gato 🐱
  • maullar()

La regla mental para saber si conviene heredar

“ES UN”

🐶 un perro es un animal 🚗 un auto es un vehículo 🧙 un mago es un personaje

Si no podés decir “es un”, probablemente no sea herencia.
un motor es un auto → el motor está en el auto, es distinto.

Actividad 4

Armemos el árbol

¿Cuál va arriba: Instrumento o Guitarra?

¿Qué pondrías en la clase de arriba?

¿Y qué no pondrías ahí?

Una respuesta posible

Arriba: Instrumento → nombre, material, afinar(), sonar()

Abajo: Guitarra → cuerdas, rasguear() · Piano → teclas

En la de arriba va solo lo que comparten todos. cuerdas no va: el piano no tiene.

🧬 Herencia · así se ve en código
class Animal:
    def __init__(self, nombre):
        self.nombre = nombre

    def comer(self):
        print(self.nombre, "está comiendo")


class Perro(Animal):   # Perro ES UN Animal
    def ladrar(self):
        print("¡Guau!")
firulais = Perro("Firulais")

firulais.ladrar()
# ¡Guau!

firulais.comer()
# Firulais está comiendo

La pregunta del millón

¿Dónde está escrito comer() adentro de Perro?
En ningún lado. Lo heredó.

🎭 Pilar 3 · Polimorfismo
hacer_sonido()
🐶Perro

¡Guau!

🐱Gato

¡Miau!

🦆Pato

¡Cuac!

Mismo mensaje.
Distinto comportamiento.

for animal in [perro, gato, pato]:
    animal.hacer_sonido()   # cada uno sabe qué hacer

Yo no necesito saber cuál es cuál. Cada objeto sabe cómo responder.

Actividad 5

¿Dónde ven “muchas formas”?

Caso A

El botón “abrir” en un mail, en una foto y en un juego.

Caso B

La tecla espacio en YouTube, en un shooter y en un formulario.

Caso C

El método imprimir() en una factura, una foto y un ticket.

Lo que tienen en común

En los tres: una sola orden, y cada cosa la interpreta a su manera. Eso es polimorfismo.

🎭 Polimorfismo · así se ve en código
class Perro(Animal):
    def hacer_sonido(self):
        print("¡Guau!")

class Gato(Animal):
    def hacer_sonido(self):
        print("¡Miau!")

class Pato(Animal):
    def hacer_sonido(self):
        print("¡Cuac!")
for a in [perro, gato, pato]:
    a.hacer_sonido()

# ¡Guau!
# ¡Miau!
# ¡Cuac!

Contá los if

Cero. El for no sabe ni le importa quién es cada uno. Cada objeto sabe responder.

🎨

Cuando apretás el freno, ¿sabés exactamente qué pasa adentro del auto?

pastillas de frenolíquido hidráulicopistóndiscoABS

Y sin embargo, frenás igual. 🦶

🎨 Pilar 4 · Abstracción

Me quedo con lo importante

Lo que vos escribís

auto.frenar()

Lo que pasa adentro

def frenar(self):
    self.calcular_presion()
    self.activar_pistones()
    if self.derrapando:
        self.activar_abs()
    self.encender_luces()
    self.velocidad = 0

🎨 “Me quedo con lo importante y escondo lo complicado.”

Actividad 6

Diseñá el control remoto

Tenés que hacer la clase Televisor. Por dentro es un monstruo: señal, pixeles, sonido, wifi…

¿Qué métodos le ofrecerías a quien la usa?

Lo que casi siempre alcanza

encender()apagar()subir_volumen()cambiar_canal()

Cuatro botones para algo que por dentro tiene miles de piezas. Eso es abstraer.

Bloque 5 · Gran actividad

🎮

Diseñemos un videojuego.

Sin escribir una línea de código. Solo pensando como programadores.

Primero: ¿qué objetos existen en el juego?

Ustedes dicen, yo anoto.

🧍 Jugador👾 Enemigo⚔️ Arma 🪙 Moneda🧪 Poción🗺️ Nivel 🚪 Puerta🎒 Inventario
🧍

Elegimos el Jugador

¿Qué información tiene?

nombrevidanivel velocidadmonedasposicion

¿Qué puede hacer?

caminar()saltar()atacar() curarse()morir()

Datos → atributos  ·  Acciones → métodos. Las mismas dos preguntas de siempre.

🧬 Herencia en nuestro juego

El Jugador y el Enemigo… ¿qué tienen en común?

Personaje
  • nombre
  • vida
  • posicion
  • moverse()
  • recibir_daño()
  • morir()
Jugador 🧍
  • monedas
  • saltar()
Enemigo 👾
  • dificultad
  • perseguir()
🎭 Polimorfismo en nuestro juego
atacar()
🧍Jugador

⚔️ espadazo

🐉Dragón

🔥 bola de fuego

🏹Arquero

🎯 flecha

🔐 Encapsulación en nuestro juego

De todo lo que tiene el Jugador, ¿qué hay que proteger?

🔒 Proteger

vidamonedasnivel

Solo se cambian con métodos: recibir_daño(), cobrar(), subir_nivel().

🔓 Se pueden tocar

nombrecolor_de_ropa

Si te cambiás el nombre, no se rompe nada.

🎨 Abstracción en nuestro juego
jugador.atacar()

¿Necesitás saber todo lo que pasa adentro para usarlo?

Lo que pasa realmente

buscar_enemigo_cercano() → calcular_daño(arma, nivel) → reproducir_animacion() → reproducir_sonido() → aplicar_daño() → actualizar_pantalla()

Seis pasos, una sola línea. El que usa el objeto solo necesita atacar().

Bloque 6 · Cierre

¿Qué aprendimos hoy?

1

Objeto

Tiene datos y hace cosas.

2

Clase

El molde que los fabrica.

3

Atributos

Lo que el objeto tiene.

4

Métodos

Lo que el objeto hace.

“La clase describe. El objeto existe.”

Los 4 pilares, en una frase cada uno

🔐

Encapsulación

No todo se toca directamente.

🧬

Herencia

Si es un, lo hereda y no lo repetimos.

🎭

Polimorfismo

Misma orden, distinta respuesta.

🎨

Abstracción

Me quedo con lo importante, escondo lo complicado.

Desafío final · Entre todos

📚 Tenemos que programar una biblioteca

¿Qué objetos existirían?

Libro
  • titulo
  • autor
  • prestado
  • prestar()
  • devolver()
Usuario
  • nombre
  • socio_nro
  • pedir_libro()
  • devolver_libro()
Bibliotecario
  • nombre
  • turno
  • registrar()
  • buscar()

Y ahora la difícil: ¿qué dato de Libro protegerías?

Frente a cualquier problema, preguntate:

🧠  ¿Qué objetos existen?

🔐  ¿Qué necesitamos proteger?

📦  ¿Qué información tienen?

🧬  ¿Qué podemos reutilizar?

⚙️  ¿Qué pueden hacer?

🎭  ¿Qué se comporta de distintas maneras?

🎨  ¿Qué complejidad podemos esconder?

Tarea · Parte 1 de 3

Mirá a tu alrededor 👀

Elegí 3 objetos: uno de tu casa, uno de la escuela y uno de un juego que juegues.

Para cada uno, escribí

¿Qué TIENE? → 3 atributos
¿Qué PUEDE HACER? → 3 métodos

Truco: los atributos son sustantivos, los métodos son verbos con ().

Ejemplo resuelto

MOCHILA 🎒

colorcapacidadmarca
abrir()guardar()pesar()
Tarea · Parte 2 de 3

Tres preguntas para pensar

EJERCICIO 1

En cada par, ¿cuál es la clase y cuál el objeto?

a. receta de pizza / la pizza de anoche
b. perro / tu perro
c. ficha de personaje / Kratos nivel 40

EJERCICIO 2

Armá el árbol con: Vehículo, Bicicleta, Auto, Camión.

¿Quién va arriba? ¿Qué atributos y métodos pondrías en la de arriba, para no repetirlos?

EJERCICIO 3 · la difícil

¿Cuál de estas NO es herencia?

🐱 un gato es un animal
🛞 una rueda es un auto
🧑‍🏫 un profesor es una persona

Explicá por qué.

Tarea · Parte 3 de 3

Buscá los 4 pilares en tu celular 📱

🔐 Encapsulación

Nombrá un dato de una app tuya que no podés cambiar a mano. ¿Por qué está bien que sea así?

🧬 Herencia

Un post, una historia y un reel: ¿qué comparten? ¿Cómo llamarías a la clase padre?

🎭 Polimorfismo

El botón ▶️ en Spotify, en YouTube y en un juego: misma orden. ¿Misma respuesta?

🎨 Abstracción

Cuando mandás un audio por WhatsApp, ¿qué cosas no necesitás saber para poder mandarlo?

Bonus · solo si te dan ganas

¿Y si lo escribimos?

class Mascota:

    def __init__(self, nombre):
        self.nombre = nombre
        self.energia = 100

    def jugar(self):
        # ← completá vos

1. Que jugar() baje la energía en 20.

2. Que la energía nunca baje de 0.

3. Creá 2 mascotas y hacé que una juegue 6 veces.

Si lo resolvés, usaste atributos, métodos, self, __init__ y encapsulación, todo junto.

POO no se trata de memorizar cuatro palabras.

“Hoy no aprendimos una sintaxis nueva.
Aprendimos una forma nueva de pensar nuestros programas.”

Nos vemos la próxima 👋

Bloque 1
00:00 ← → avanzar · N notas · O índice · L bloquear clic 1 / 52
Notas del profesor

Recorrido de la clase

Clic para saltar · Esc para cerrar◇ = opcional, se puede saltear si vas corto