Objeto
En la programación orientada a objetos (POO), un objeto es una instancia de una clase, que es una plantilla o un modelo que define un conjunto de atributos (propiedades) y métodos (comportamientos). Los objetos combinan datos y funcionalidad en una sola entidad, facilitando la organización y manipulación del código.
Conceptos fundamentales
Clase: Una clase es una definición de un tipo de objeto. Actúa como un molde para crear objetos, especificando qué datos y comportamientos tendrán. Por ejemplo, una clase Coche podría tener atributos como color, marca y modelo, y métodos como arrancar(), frenar(), y acelerar().
Instancia: Una instancia es una ocurrencia concreta de una clase. Cuando creas un objeto, estás creando una instancia de una clase. Por ejemplo, miCoche = Coche() crea un objeto miCoche que es una instancia de la clase Coche.
Atributos: Son las propiedades o datos que se almacenan en un objeto. En el caso del objeto miCoche, los atributos podrían ser color: rojo, marca: Toyota, modelo: Corolla.
Métodos: Son funciones o procedimientos asociados a un objeto que pueden realizar acciones utilizando los atributos del objeto o modificar sus valores. Por ejemplo, miCoche.arrancar() podría cambiar el estado del coche a “encendido”.
Características de los objetos
Encapsulamiento: Los objetos encapsulan datos y métodos, protegiendo los datos de acceso directo desde fuera del objeto y permitiendo su manipulación solo a través de métodos definidos. Esto ayuda a mantener la integridad de los datos y facilita el mantenimiento del código.
Herencia: Permite que una clase derive de otra, heredando sus atributos y métodos, y pudiendo añadir nuevos o modificar los existentes. Por ejemplo, CocheElectrico podría heredar de Coche y añadir un atributo batería y un método cargar().
Polimorfismo: Habilidad de utilizar métodos de la misma manera en diferentes objetos, incluso si esos métodos pertenecen a diferentes clases. Esto permite que objetos de diferentes clases se traten de forma unificada. Por ejemplo, si Coche y Moto ambos tienen un método mover(), puedes llamar vehiculo.mover() sin preocuparte si vehiculo es un Coche o una Moto.
Abstracción: Permite trabajar con conceptos de alto nivel, ocultando los detalles complejos de implementación. Esto se logra mediante la definición de clases y objetos que representan entidades del mundo real o conceptos abstractos.
Ejemplo de objeto con Python
Considera un sistema para gestionar una biblioteca. Podrías tener una clase Libro con los siguientes atributos y métodos:
Código Python:
class Libro:
def __init__(self, titulo, autor, isbn):
self.titulo = titulo
self.autor = autor
self.isbn = isbn
self.prestado = False
def prestar(self):
if not self.prestado:
self.prestado = True
print(f'El libro {self.titulo} ha sido prestado.')
else:
print(f'El libro {self.titulo} ya está prestado.')
def devolver(self):
if self.prestado:
self.prestado = False
print(f'El libro {self.titulo} ha sido devuelto.')
else:
print(f'El libro {self.titulo} no estaba prestado.')
Aquí, Libro es una clase que define cómo se representan los libros en el sistema. Los atributos son título, autor, isbn y prestado, mientras que los métodos prestar() y devolver() gestionan el estado de préstamo del libro.
Para usar esta clase, crearías instancias (objetos) de Libro:
Código Python:
libro1 = Libro('1984', 'George Orwell', '1234567890')
libro2 = Libro('Brave New World', 'Aldous Huxley', '0987654321')
libro1.prestar() # Salida: El libro 1984 ha sido prestado.
libro1.prestar() # Salida: El libro 1984 ya está prestado.
libro1.devolver() # Salida: El libro 1984 ha sido devuelto.