Programación Orientada a Objetos (POO)

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

¿Cuál de los siguientes es un beneficio clave de la programación orientada a objetos (POO)?

  • Simplifica la sintaxis del lenguaje.
  • Reduce la necesidad de pruebas unitarias.
  • Permite la reutilización de código mediante la herencia. (correct)
  • Aumenta la velocidad de ejecución del código.

¿Qué representa una clase en la programación orientada a objetos?

  • Un modelo o plantilla para crear objetos. (correct)
  • Un conjunto de funciones y variables globales.
  • Una instancia específica de un objeto con valores únicos.
  • Un módulo independiente que contiene código reutilizable.

¿Cuál es el propósito del método __init__ en una clase de Python?

  • Inicializar los atributos de un objeto al ser creado. (correct)
  • Liberar la memoria utilizada por el objeto.
  • Establecer el nombre de la clase.
  • Definir los atributos de la clase.

En POO, ¿qué diferencia un atributo de un método?

<p>Un atributo es una variable que guarda datos, mientras que un método es una función que define un comportamiento. (A)</p> Signup and view all the answers

¿Qué significa el término 'encapsulamiento' en programación orientada a objetos?

<p>Ocultar la complejidad interna de un objeto y exponer solo una interfaz simple. (A)</p> Signup and view all the answers

Dentro de un método de instancia, ¿a qué hace referencia la palabra clave self?

<p>A la instancia actual del objeto. (A)</p> Signup and view all the answers

Si una clase hija redefine un método de su clase padre, ¿qué concepto de POO se aplica?

<p>Sobreescritura (overriding) (B)</p> Signup and view all the answers

¿Cuál es el propósito principal de las propiedades en Python?

<p>Ejecutar código adicional al acceder o modificar un atributo. (B)</p> Signup and view all the answers

Un método decorado con @classmethod tiene acceso a:

<p>Solo los atributos de clase y puede modificar el estado de la clase. (D)</p> Signup and view all the answers

¿Qué diferencia un método estático de un método de instancia o de clase?

<p>Un método estático no tiene acceso ni a la instancia del objeto (<code>self</code>) ni a la clase (<code>cls</code>). (B)</p> Signup and view all the answers

En Python, ¿qué son los 'métodos mágicos' (o 'dunder methods')?

<p>Métodos especiales con nombres predefinidos que Python invoca implícitamente en ciertas operaciones. (B)</p> Signup and view all the answers

¿Qué método mágico se utiliza para definir cómo se representa un objeto como cadena de texto (para el usuario)?

<p><code>__str__</code> (A)</p> Signup and view all the answers

¿Cuál es el propósito de los gestores de contexto implementados con los métodos __enter__ y __exit__?

<p>Definir un bloque de código con acciones automáticas al entrar y salir del mismo. (A)</p> Signup and view all the answers

En el contexto de la herencia, ¿qué función permite a una clase hija acceder a un método de su clase padre que ha sido sobreescrito?

<p><code>super()</code> (A)</p> Signup and view all the answers

¿Qué implica la herencia múltiple en Python?

<p>Una clase puede heredar de múltiples clases base, combinando sus atributos y métodos. (B)</p> Signup and view all the answers

¿Qué es un 'mixin' en programación orientada a objetos?

<p>Una clase que proporciona funcionalidades específicas para ser 'mezcladas' con otras clases, sin ser la base de una jerarquía principal. (A)</p> Signup and view all the answers

¿Qué diferencia la agregación de la composición en el diseño de clases?

<p>En la composición, los objetos componentes no tienen su propio ciclo de vida fuera del objeto contenedor, mientras que en la agregación sí. (B)</p> Signup and view all the answers

Para que un objeto en Python sea considerado una 'secuencia', ¿qué métodos mágicos como mínimo debe implementar?

<p><code>__getitem__</code> y <code>__len__</code> (A)</p> Signup and view all the answers

Para que una clase sea considerada un iterable, ¿qué método mágico debe implementar?

<p><code>__iter__</code> (B)</p> Signup and view all the answers

¿Qué ocurre cuando un iterador lanza la excepción StopIteration?

<p>Se indica que no hay más elementos disponibles en el iterable. (C)</p> Signup and view all the answers

Flashcards

¿Qué es el encapsulamiento?

Empaquetar código dentro de un objeto, determinando su ámbito de actuación.

¿Qué es la abstracción?

Generalizar tipos de objetos a través de clases, simplificando el programa.

¿Qué es la herencia?

Reutilizar código al heredar atributos y comportamientos de una clase a otra.

¿Qué es el polimorfismo?

Crear múltiples objetos a partir de una pieza flexible de código.

Signup and view all the flashcards

¿Qué es un objeto?

Estructura de datos personalizada que contiene datos (atributos) y código (métodos).

Signup and view all the flashcards

¿Qué son los atributos?

Variables dentro de un objeto que almacenan datos.

Signup and view all the flashcards

¿Qué son los métodos?

Funciones dentro de un objeto que definen su comportamiento.

Signup and view all the flashcards

¿Qué es una clase?

Plantilla o molde para crear objetos de un tipo específico.

Signup and view all the flashcards

¿Qué es un método?

Función que forma parte de una clase o un objeto.

Signup and view all the flashcards

¿Qué es un atributo?

Variable que pertenece a una clase o un objeto.

Signup and view all the flashcards

¿Qué es el método __init__?

Método especial que se ejecuta al crear una instancia de un objeto.

Signup and view all the flashcards

¿Qué hace el decorador @property?

Permite leer el valor de un atributo, controlando el acceso.

Signup and view all the flashcards

¿Qué hace el decorador @name.setter?

Permite escribir el valor de un atributo, controlando la modificación.

Signup and view all the flashcards

¿Qué es un atributo de clase?

Atributo que pertenece a la clase y es compartido por todos los objetos de esa clase.

Signup and view all the flashcards

¿Qué es un método de instancia?

Método que accede o modifica el estado del objeto; recibe self.

Signup and view all the flashcards

¿Qué es un método de clase?

Método que accede o modifica el estado de la clase; recibe cls.

Signup and view all the flashcards

¿Qué es un método estático?

Método que no modifica ni accede al estado del objeto ni de la clase.

Signup and view all the flashcards

¿Qué son los métodos mágicos?

Métodos que Python usa implícitamente para ciertas operaciones (ej. __eq__ para ==).

Signup and view all the flashcards

¿Qué es la herencia?

Construir una nueva clase (derivada) a partir de una existente (base), modificando o añadiendo aspectos.

Signup and view all the flashcards

¿Qué es super()?

Función para acceder a métodos o atributos de la clase base desde la clase derivada.

Signup and view all the flashcards

Study Notes

Programación Orientada a Objetos (POO/OOP)

  • Es un paradigma de programación que traslada al código mecanismos de entidades de la vida real.
  • Sus beneficios incluyen encapsulamiento, abstracción, herencia y polimorfismo.

Beneficios de la POO

  • Encapsulamiento: Permite empaquetar código dentro de un objeto, determinando su ámbito de actuación.
  • Abstracción: Generaliza tipos de objetos a través de clases, simplificando el programa.
  • Herencia: Reutiliza código al heredar atributos y comportamientos entre clases.
  • Polimorfismo: Permite crear múltiples objetos a partir de un mismo código flexible.

Objeto

  • Estructura de datos personalizada que contiene datos (atributos) y código (métodos).
  • Los atributos son variables identificadas mediante sustantivos.
  • Los métodos son funciones identificadas mediante verbos.
  • Representa una instancia única de una entidad, interactuando con otros objetos a través de sus métodos.

Clase

  • Es el "molde" para crear objetos de un tipo específico.
  • El diseño de una clase debe seguir el principio de responsabilidad única, enfocándose en un objetivo único y bien definido.

Creación de Objetos

  • Se usa la palabra reservada class seguida del nombre de la clase.
  • Los nombres de clases se deben escribir en formato CamelCase y en singular.
  • Se crean instancias u objetos concretos a partir de la clase genérica.

Métodos

  • Son funciones que forman parte de una clase u objeto.
  • Tienen acceso a otros métodos y atributos de la clase u objeto al que pertenecen.
  • La definición de un método de instancia incluye el parámetro self, que referencia la instancia actual del objeto.

Atributos

  • Son variables que viven dentro de una clase u objeto.
  • Se accede a métodos o atributos del objeto usando la palabra self.

Inicialización (__init__)

  • Es un método especial que se ejecuta al crear una instancia de un objeto.
  • Permite asignar atributos y realizar operaciones con el objeto en el momento de su creación (constructor).
  • Si no se usa self, se crea una variable local en vez de un atributo del objeto.

Atributos: Acceso Directo

  • Se pueden modificar atributos directamente desde "fuera" del objeto, incluso después de su creación.
  • Python permite añadir atributos dinámicamente a un objeto.

Atributos: Propiedades

  • Las propiedades son una forma "pitónica" de manejar la privacidad de los atributos.
  • Se implementan con decoradores: @property (getter) y @name.setter (setter).
  • Permiten ofuscar el acceso directo a los atributos.

Atributos: Valores Calculados

  • Una propiedad puede devolver un valor calculado o computado.
  • No pueden recibir parámetros, en cuyo caso se debe implementar un método.

Atributos: Cacheando Propiedades

  • Permite optimizar el rendimiento al almacenar el resultado de un cálculo costoso y reutilizarlo.
  • Invalida la caché cuando cambian los atributos de los que depende el cálculo.

Atributos: Ocultando Atributos

  • Por convención, los atributos "privados" comienzan con doble subguión __.
  • Python realiza "name mangling", modificando el nombre del atributo con un prefijo de la clase.
  • La filosofía de Python traslada la responsabilidad del manejo de objetos al desarrollador.

Atributos de Clase

  • Se asignan a una clase y son compartidos por todos los objetos instanciados.
  • Si se modifican desde un objeto, solo se cambia el valor en ese objeto específico.
  • Si se modifican desde la clase, cambian en todos los objetos pasados y futuros.
  • Para que un cambio solo afecte a objetos futuros, se deben usar atributos de instancia asignados en el constructor (__init__).

Métodos de Instancia

  • Modifican o acceden al estado del objeto.
  • Reciben self como primer parámetro.

Métodos de Clase

  • Modifican o acceden al estado de la clase.
  • Reciben cls como primer parámetro.
  • Se identifican con el decorador @classmethod.

Métodos Estáticos

  • No modifican el estado del objeto ni de la clase.
  • No reciben parámetros especiales.
  • Se identifican con el decorador @staticmethod.

Métodos Decorados

  • Se pueden decorar métodos con la misma estructura que los decoradores de funciones.
  • El decorador puede estar dentro o fuera de la clase (como método estático).
  • Se debe tener en cuenta la llamada al método de instancia dentro del decorador.

Métodos Mágicos

  • Son métodos especiales que empiezan y terminan con doble subguión __ (dunder-methods).
  • Se "disparan" transparentemente al usar ciertas estructuras y expresiones del lenguaje.
  • Permiten personalizar el comportamiento de operadores y otras funciones del lenguaje.

Métodos Mágicos: Comparación de Objetos

  • La comparación de objetos se realiza con el método __eq__().

Métodos Mágicos: Suma de Objetos

  • La "suma" de objetos se implementa con el método __add__(), que debe devolver un objeto de la misma clase.
  • El parámetro suele llamarse other por convención.

Sobrecarga de Operadores

  • Se puede simular la sobrecarga de funciones identificando el tipo del objeto que se pasa como argumento.
  • Esta estrategia se aplica también al operador de igualdad (__eq__()) al comparar objetos de distinta naturaleza.

Método Mágico: __str__

  • Permite establecer la forma en que un objeto es representado como cadena de texto.

Método Mágico: __repr__

  • En ausencia de __str__(), se usa por defecto.
  • Más orientado al desarrollador, mientras que __str__() lo está al usuario.
  • Se invoca automáticamente cuando no existe __str__() o al pedir el "valor" del objeto en el intérprete interactivo.
  • No es obligatorio incluir la dirección de memoria del objeto.

Gestores de Contexto

  • Permiten aplicar acciones al entrar y salir de un bloque de código.
  • Se implementan con los métodos __enter__() (acciones al entrar) y __exit__() (acciones al salir).
  • La función __exit__() puede recibir información sobre una posible excepción ocurrida dentro del contexto.
  • Se "activa" con la sentencia with.

Herencia

  • Consiste en construir una nueva clase (derivada) partiendo de una clase existente (base), añadiendo o modificando aspectos.
  • Reutiliza código y facilita la generalización.
  • La clase derivada hereda el código de la clase base sin necesidad de copiarlo explícitamente.

Herencia: Heredar Desde una Clase Base

  • Se indica la clase base entre paréntesis en la definición de la clase derivada.
  • La clase derivada hereda todos los métodos de la clase base.

Herencia: Sobreescribir un Método

  • Permite modificar el comportamiento de un método heredado en la clase derivada.

Herencia: Añadir un Método

  • La clase derivada puede añadir métodos que no existen en la clase base.

Herencia: Accediendo a la Clase Base

  • Se usa super() para acceder a métodos o atributos de la clase base, especialmente en el constructor.

Herencia Múltiple

  • Python permite heredar de múltiples clases base.
  • El orden en que se especifican las clases base es importante.
  • Python resuelve conflictos de nombres a través del "orden de resolución de métodos" (MRO).
  • Todas las clases en Python heredan de object.

Mixins

  • Clases base "independientes" usadas para tareas auxiliares o transversales.
  • Ayudan a evitar colisiones en métodos o atributos, reduciendo la ambigüedad de la herencia múltiple.

Agregación y Composición

  • Relaciones "has-a" (tiene un) donde una clase se compone de otras clases.
  • Agregación: El objeto utilizado puede funcionar por sí mismo.
  • Composición: El objeto utilizado no puede funcionar sin su propietario.

Estructuras Mágicas: Secuencias

  • Objetos en los que se puede acceder a elementos por índice y calcular su longitud.
  • Deben implementar los métodos mágicos __setitem__(), __getitem__() y __len__().

Estructuras Mágicas: Diccionarios

  • Implementan __getitem__() y __setitem()__ para obtener o fijar valores usando una clave en lugar de un índice.

Estructuras Mágicas: Iterables

  • Implementan el protocolo de iteración, "entregando" un valor cada vez que se solicita.
  • Deben implementar el método mágico __iter__(), que retorna una referencia al objeto iterador.
  • El objeto iterador debe implementar __next__(), que devuelve el siguiente valor en la iteración.
  • Un objeto iterable puede ser su propio iterador.

Iterables: Métodos Mágicos

  • __iter()__ se invoca al usar la función iter().
  • __next()__ se invoca al usar la función next().
  • Los iterables se "agotan" (lanzan StopIteration al llegar al final).

Iterables: Iterador Externo

  • Se puede implementar un iterador en una clase separada del iterable.

Iterables: Generadores

  • Los generadores (funciones o expresiones) implementan el protocolo de iteración.
  • La función next() sobre el generador devuelve el siguiente valor.

Estructura de una Clase (Guía de Estilo)

  • Descripción de la clase.
  • Constructor.
  • Decoradores.
  • Métodos de instancia.
  • Propiedades.
  • Métodos mágicos.
  • Métodos de clase.
  • Métodos estáticos.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

More Like This

Use Quizgecko on...
Browser
Browser