Los cuatro principios clave de POO

Clase 35 de 49Curso Práctico de Python: Creación de un CRUD

Resumen

La programación orientada a objetos en Python permite modelar objetos del mundo real con claridad y escalabilidad. A partir de ejemplos cotidianos —desde naves espaciales hasta bacterias— se establecen cuatro principios clave que guían el diseño: encapsulamiento, abstracción, inheritance y poliformismo. También se aclara qué es una clase, qué es una instancia y por qué los tipos básicos no alcanzan para este enfoque.

¿Qué es la programación orientada a objetos en Python y qué modela?

La idea central es modelar objetos del mundo real con datos y comportamiento integrados. A diferencia del paradigma por procedimientos, donde los datos viven en estructuras (mapas, listas) y el comportamiento en funciones separadas, aquí se integran en una misma entidad.

  • Representa objetos diversos del mundo real con propiedades y métodos.
  • Unifica datos y comportamiento en una estructura coherente.
  • Facilita el cambio y la evolución del software de forma ordenada.

¿Cuáles son los cuatro principios clave: encapsulamiento, abstracción, inheritance y poliformismo?

Estos principios explican cómo organizar, simplificar y extender el comportamiento de los objetos para evitar complejidad innecesaria y duplicación de código.

¿Cómo evita el encapsulamiento exponer propiedades internas?

El encapsulamiento une datos y comportamiento en una sola estructura y esconde lo que no debe ser público. Así, las propiedades internas que solo sirven dentro del objeto no se exponen al usuario. Se agrupa lo esencial y se oculta lo que no se necesita.

  • Integra datos y funciones en un mismo lugar.
  • Protege variables internas de accesos externos innecesarios.
  • Reduce dependencias y errores por uso indebido.

¿Por qué la abstracción reduce la complejidad para el usuario?

La abstracción elimina detalles que el usuario no necesita para interactuar con el objeto. Como al manejar un coche: no hace falta saber termodinámica del motor para acelerar o frenar, basta con conocer los controles.

  • Oculta complejidad técnica detrás de una interfaz simple.
  • Permite usar métodos claros como acelerar o frenar.
  • Mejora la experiencia de uso y el aprendizaje.

¿Qué aporta la jerarquía con inheritance y no te repitas?

Con inheritance se modela una jerarquía de objetos. Por ejemplo, la clase de mamíferos define características comunes, como el método amamantar, y las subclases (humanos, perros, vacas) lo heredan. Esto evita romper el principio “no te repitas a ti mismo, don't repeat yourself”.

  • Centraliza comportamiento común en la superclase.
  • Las subclases heredan métodos y propiedades compartidas.
  • Modificar en un solo lugar evita cambios repetidos por todo el código.

El poliformismo permite que, aunque todas las subclases compartan un método (amamantar), cada una lo adapte a sus necesidades. Humanos, perros y vacas lo realizan de forma distinta, pero a través del mismo nombre de método.

  • Un mismo método con comportamientos específicos por subclase.
  • Flexibilidad para especializar sin romper la jerarquía.
  • Consistencia en la interfaz con variación en la implementación.

¿Qué son clases e instancias y por qué los tipos básicos no alcanzan?

Una clase es un molde; una instancia es el objeto concreto creado a partir de ese molde. Si “coche” es la clase con métodos como acelerar y propiedades como color, entonces “el coche rojo con cuatro asientos y cuatro cilindros” es una instancia concreta, igual que el coche del vecino: diferentes objetos, misma clase.

  • La clase define la estructura y el comportamiento general.
  • La instancia concreta fija valores específicos (color, asientos, placas).
  • Todas las instancias comparten la definición de su clase.

Los tipos básicos de Python —como int, strings y listas— son útiles para precios, nombres o calificaciones, pero no bastan para encapsular, abstraer, crear jerarquías y modificar métodos con la flexibilidad que requiere la programación orientada a objetos. Por eso, Python ofrece mecanismos para trabajar con clases, objetos y estos principios de diseño.

¿Con qué objeto del mundo real te gustaría practicar estos principios? Comparte tu idea y comentemos cómo modelarlo en Python.